aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/web/gui
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/web/gui')
-rw-r--r--framework/src/onos/web/gui/pom.xml123
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationResource.java44
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationViewMessageHandler.java125
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java101
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java262
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java164
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/GroupViewMessageHandler.java131
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/HostViewMessageHandler.java130
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/IntentViewMessageHandler.java276
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/LinkViewMessageHandler.java127
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/LogoutResource.java46
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainIndexResource.java102
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainModuleResource.java77
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainNavResource.java124
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainViewResource.java60
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/PortViewMessageHandler.java96
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ProcessorViewMessageHandler.java108
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/SettingsViewMessageHandler.java95
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/SpriteService.java50
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopoOverlayCache.java116
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java94
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java826
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java529
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TrafficMonitor.java675
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TrafficOverlay.java63
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TunnelViewMessageHandler.java95
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java183
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java240
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java95
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/package-info.java20
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/IntentSelection.java175
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/ServicesBundle.java132
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/TopoIntentFilter.java274
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/TrafficLink.java223
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/TrafficLinkMap.java33
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/package-info.java20
-rw-r--r--framework/src/onos/web/gui/src/main/resources/core/css.html1
-rw-r--r--framework/src/onos/web/gui/src/main/resources/core/js.html1
-rw-r--r--framework/src/onos/web/gui/src/main/resources/not-ready.html35
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/WEB-INF/web.xml185
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_bripc/practice-table.html58
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_bripc/practice-table.js273
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_bripc/show-icons-test.js107
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_bripc/show-icons.html91
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_bripc/svg-exercise.html89
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_bripc/svg-exercise.js170
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/checkmark-xmark-icon.html145
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/embedded-icon.html130
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/glyphs.html145
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch01-01-hello-world-app.html15
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-01-module-example.html16
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-02-creating-controller.html20
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-03-hello-controller.html21
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-04-controller-click-msg.html26
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-05-ng-repeat-example-1.html29
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-06-more-directives.html52
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-07-ng-repeat-object.html28
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-08-ng-helper-vars.html42
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-09-ng-repeat-track-id.html58
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-10-ng-repeat-across-elements.html38
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-01-simple-ng-model.html28
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-02-simple-ng-model2.html40
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-03-simple-form.html45
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-04-two-forms-databinding.html44
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-05-form-validation.html42
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-06-form-error-messages.html53
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-07-form-styling.html45
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-08-nested-forms.html63
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-09-checkbox-example.html47
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-10-radio-buttons.html63
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-11-select-example.html41
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-01-need-for-service-app.js34
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-01-need-for-service.html41
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-02-log-example.html22
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-03-simple-angular-service.html43
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-03-simple-angular-service.js115
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-01-filter-example.html48
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-02-filter-number-string.html83
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-03-filter-arrays.html86
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-04-custom-filters.html61
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch10-01-simple-routing.html36
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/js/ch03-controller.js17
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/js/ch09-01-time-ago.js27
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/oblique.html473
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/onos-logo.svg176
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/overlaywork/AppUiTopoOverlay.java74
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/overlaywork/README.txt4
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/overlaywork/topov.js157
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/topojson/countrycodes.html376
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/_sdh/topojson/samerica.html87
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/README.txt7
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/common.css31
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/directives.js72
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/README.txt44
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/layer/flash.css49
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/layer/flash.js165
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/layer/layer.js25
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/layer/panel.css54
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/layer/panel.js216
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/layer/quickhelp.css64
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/layer/quickhelp.js387
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/layer/veil.css50
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/layer/veil.js99
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/mast/mast.css102
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/mast/mast.html6
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/mast/mast.js56
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/nav/nav.css90
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/nav/nav.js103
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/remote/remote.js25
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/remote/rest.js72
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/remote/urlfn.js63
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/remote/websocket.js329
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/remote/wsevent.js49
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/remote/wsock.js42
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/svg/geodata.js186
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/svg/glyph.css34
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/svg/glyph.js678
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/svg/icon.css92
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/svg/icon.js274
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/svg/map.js129
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/svg/svg.js25
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/svg/svgUtil.js311
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/svg/zoom.js132
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/util/fn.js292
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/util/keys.js243
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/util/prefs.js128
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/util/random.js51
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/util/theme.js121
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/util/util.js25
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/widget/button.css120
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/widget/button.js265
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/widget/table.css215
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/widget/table.js272
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/widget/tableBuilder.js167
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/widget/toolbar.css77
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/widget/toolbar.js268
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/widget/tooltip.css44
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/widget/tooltip.js146
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/fw/widget/widget.js25
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/onos.css60
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/app/app.css32
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/app/app.html80
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/app/app.js148
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/cluster/cluster.css27
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/cluster/cluster.html68
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/cluster/cluster.js36
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/device/device.css166
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/device/device.html87
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/device/device.js403
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/flow/flow.css85
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/flow/flow.html89
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/flow/flow.js63
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/group/group.css76
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/group/group.html95
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/group/group.js71
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/host/host.css27
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/host/host.html54
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/host/host.js36
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/intent/intent.css70
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/intent/intent.html67
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/intent/intent.js59
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/link/link.css27
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/link/link.html70
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/link/link.js44
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/port/port.css48
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/port/port.html95
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/port/port.js63
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/processor/processor.css49
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/processor/processor.html63
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/processor/processor.js58
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/settings/settings.css27
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/settings/settings.html52
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/settings/settings.js36
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/README.txt3
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topo.css780
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topo.html7
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topo.js557
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoD3.js641
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoDialog.js190
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoEvent.js134
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoFilter.js149
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoForce.js1182
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoInst.js373
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoLink.js338
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoModel.js439
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoOblique.js257
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoOverlay.js412
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoPanel.js539
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoSelect.js314
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoSprite.js262
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoToolbar.js295
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoTraffic.js229
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoTrafficNew.js159
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/tunnel/tunnel.css27
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/tunnel/tunnel.html72
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/tunnel/tunnel.js44
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/data/img/apple-touch-icon.pngbin12833 -> 0 bytes
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/data/img/nav-menu.pngbin1595 -> 0 bytes
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/data/img/onos-logo-fliprotate.pngbin59667 -> 0 bytes
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/data/img/onos-logo.lg.pngbin41088 -> 0 bytes
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/data/img/onos-logo.pngbin5741 -> 0 bytes
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/data/map/README.txt61
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/data/map/continental_us.topojson25782
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/data/map/countries.topojson9
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/data/map/countries_formatted.topojson347863
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/data/sprites/clouds.json59
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/data/sprites/demo-clouds.json45
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/data/sprites/layout.json129
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/data/sprites/menlo.json76
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/data/sprites/packetOptical.json42
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/data/sprites/segmentRouting.json52
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/error.html79
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/index.html186
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/login.html69
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/nav.html4
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/not-ready.html40
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/onos.js162
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/README.txt31
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/flash-spec.js72
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/panel-spec.js189
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/quickhelp-spec.js214
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/veil-spec.js45
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/mast/mast-spec.js37
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/nav/nav-spec.js165
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/rest-spec.js97
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/urlfn-spec.js89
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/websocket-spec.js268
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/wsevent-spec.js78
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/geodata-spec.js159
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/glyph-spec.js425
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/icon-spec.js106
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/map-spec.js87
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/svgUtil-spec.js237
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/zoom-spec.js152
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/fn-spec.js446
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/keys-spec.js278
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/prefs-spec.js60
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/random-spec.js110
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/theme-spec.js162
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/button-spec.js300
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/table-spec.js340
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/tableBuilder-spec.js95
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/toolbar-spec.js180
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/tooltip-spec.js79
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/onos-spec.js35
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/view/device/device-spec.js38
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/view/device/fakeData.json88
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoEvent-spec.js45
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoFilter-spec.js70
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoForce-spec.js53
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoInst-spec.js45
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoModel-spec.js414
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoOblique-spec.js45
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoPanel-spec.js159
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoSelect-spec.js51
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoToolbar-spec.js52
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoTraffic-spec.js47
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/e2e/README.txt2
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tests/karma.conf.js90
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tp/AngularJS.LICENSE24
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tp/D3.LICENSE26
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tp/README.txt1
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tp/angular-cookies.js206
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tp/angular-cookies.min.js8
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tp/angular-mocks.js2380
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tp/angular-route.js996
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tp/angular-route.min.js15
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tp/angular.js25917
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tp/angular.min.js250
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tp/d3.js9243
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tp/d3.min.js5
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tp/jquery-2.1.1.js9176
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tp/jquery-2.1.1.min.js4
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/tp/topojson.v1.min.js1
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addDevice_ex1.json19
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addDevice_ex2_memo.json24
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addDevice_ex3.json24
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addHost_ex1.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addHost_ex2.json27
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addInstance_ex1.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addLink_ex1.json13
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeDevice_fab.json20
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeHost_fab.json22
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeInstance_ex1.json7
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeLink_ex1.json12
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showDetails_ex1_host.json22
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showDetails_ex2_device.json33
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showSummary_ex1.json30
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showTraffic_ex1.json48
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showTraffic_ex2_animated.json88
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showTraffic_ex3_none.json7
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateDevice_ex1.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateDevice_ex2.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateHost.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateInstance_ex1.json7
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateLink_ex1.json12
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/cancelSummary_ex1.json5
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestDetails_ex1.json9
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestDetails_ex2.json8
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestSummary_ex1.json5
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex1_devs.json12
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex2_hosts.json13
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex3_devs_hosts.json13
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex4_hover.json8
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/updateMeta_ex1.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_10_addHost_02.json21
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_11_addHost_03.json21
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_12_showHighlights_clear.json8
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_13_showHighlights_devices.json63
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_14_showHighlights_hosts.json32
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_15_showHighlights_clear.json8
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_1_addInstance.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_2_addDevice_s1.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_3_addDevice_s2.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_4_addDevice_s3.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_5_addDevice_s4.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_6_addDevice_s5.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_7_addDevice_s6.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_8_addLink_1_2.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_9_addHost_01.json21
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/badges/scenario.json12
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_10_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_11_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_12_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_13_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_14_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_15_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_16_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_17_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_18_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_19_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_1_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_20_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_21_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_22_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_23_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_24_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_25_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_26_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_27_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_28_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_29_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_2_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_30_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_31_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_32_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_33_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_34_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_35_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_36_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_37_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_38_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_3_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_4_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_5_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_6_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_7_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_8_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_9_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/colors/scenario.json13
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_10_addDevice_s9_ids.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_11_addDevice_s10_controller.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_12_addDevice_s11_virtual.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_13_addDevice_s12_fiber_switch.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_14_addDevice_s13_microwave.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_15_addDevice_s14_other.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_16_addDevice_s15_unmatched.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_1_addInstance.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_2_addDevice_s1_switch.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_3_addDevice_s2_router.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_4_addDevice_s3_roadm.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_5_addDevice_s4_otn.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_6_addDevice_s5_roadm_otn.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_7_addDevice_s6_firewall.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_8_addDevice_s7_balancer.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_9_addDevice_s8_ips.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/devices/scenario.json12
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_10_onos.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_11_onos.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_12_onos.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_13_onos.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_14_onos.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_15_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_16_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_17_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_18_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_19_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_1_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_2_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_3_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_4_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_5_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_6_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_7_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_8_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_9_onos.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/instances/scenario.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_1_ui.json8
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_2_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_3_ui.json8
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_4_onos.json20
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_5_onos.json20
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_6_onos.json20
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_7_ui.json6
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_8_onos.json7
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/scenario.json13
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_10_onos.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_11_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_12_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_13_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_14_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_15_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_16_onos.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_17_onos.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_18_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_19_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_1_onos.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_20_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_21_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_22_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_23_onos.json22
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_24_onos.json22
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_25_onos.json7
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_2_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_3_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_4_onos.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_5_onos.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_6_onos.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_7_onos.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_8_onos.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/ev_9_onos.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/links/scenario.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_10_addInstance_F.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_11_addInstance_G.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_1_showSummary.json28
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_2_addInstance.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_3_addInstance_B.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_4_addInstance_C.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_5_updateInstance_B.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_6_removeInstance_B.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_7_addInstance_D.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_8_addInstance_B.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_9_addInstance_E.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/migrate/scenario.json12
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_1_addInstanceA.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_2_addInstanceB.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_3_addDevice_08.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_4_addDevice_03.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_5_addLink_03_08.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_6_addHost_03.json20
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_7_addHost_08.json19
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/scenario.json21
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_10_addLink_2-2b.json13
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_11_addLink_3-3b.json13
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_12_addLink_4-4b.json13
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_1_addDevice_sw1b.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_2_addDevice_sw2b.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_3_addDevice_sw3b.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_4_addDevice_sw4b.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_5_addDevice_sw1.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_6_addDevice_sw2.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_7_addDevice_sw3.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_8_addDevice_sw4.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_9_addLink_1-1b.json13
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/oblique/scenario.json9
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_10_updateHost_03.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_11_updateHost_08.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_12_updateLink.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_13_updateLink.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_14_removeLink.json15
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_15_removeHost_08.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_16_removeDevice_03.json22
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_17_removeDevice_08.json23
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_1_addInstanceA.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_2_addInstanceB.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_3_addDevice_08.json23
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_4_addDevice_03.json23
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_5_updateDevice_08_online.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_6_updateDevice_03_online.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_7_addLink_03_08.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_8_addHost_03.json21
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_9_addHost_08.json21
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/simple/scenario.json30
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_10_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_11_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_12_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_13_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_14_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_15_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_16_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_17_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_18_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_19_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_1_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_20_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_21_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_22_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_23_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_24_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_25_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_26_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_27_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_28_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_29_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_2_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_30_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_31_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_32_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_33_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_34_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_35_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_36_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_37_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_38_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_39_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_3_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_40_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_41_onos.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_4_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_5_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_6_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_7_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_8_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_9_onos.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/startup/scenario.json19
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_10_addLink_s8-r8.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_11_addLink_s3-r3.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_12_addLink_r8-r3.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_13_addHost_h3.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_14_addHost_h7.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_15_addHost_h8.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_16_addDevice_r4.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_17_addLink_r8-r4.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_18_showTraffic_primary.json34
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_19_showTraffic_secondary.json34
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_1_addInstance.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_20_showTraffic_allMix.json39
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_21_showTraffic_none.json7
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_22_updateDevice_s7offline.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_23_updateDevice_s7online.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_24_removeDevice_s8.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_25_addDevice_s8.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_26_removeHost_h7.json17
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_2_addDevice_s8.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_3_addDevice_s3.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_4_addDevice_s7.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_5_addDevice_r8.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_6_addDevice_r3.json18
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_7_addLink_s3-s7.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_8_addLink_s8-s3.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_9_addLink_s8-s7.json16
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/ev/traffic/scenario.json14
-rw-r--r--framework/src/onos/web/gui/src/test/_karma/mockserver.js361
-rw-r--r--framework/src/onos/web/gui/src/test/java/org/onosproject/ui/impl/README.txt1
-rw-r--r--framework/src/onos/web/gui/src/test/webapp/_sdh/ng-examples/js/ch03-controllerSpec.js35
-rw-r--r--framework/src/onos/web/gui/src/test/webapp/_sdh/ng-examples/js/ch09-01-time-agoSpec.js40
556 files changed, 0 insertions, 460539 deletions
diff --git a/framework/src/onos/web/gui/pom.xml b/framework/src/onos/web/gui/pom.xml
deleted file mode 100644
index b73b762d..00000000
--- a/framework/src/onos/web/gui/pom.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Copyright 2014 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-web</artifactId>
- <version>1.4.0-rc1</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-gui</artifactId>
- <packaging>bundle</packaging>
-
- <description>ONOS Web GUI</description>
-
- <properties>
- <web.context>/onos/ui</web.context>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-websocket</artifactId>
- <version>8.1.17.v20150415</version>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>2.5</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-api</artifactId>
- <scope>test</scope>
- <classifier>tests</classifier>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-incubator-api</artifactId>
- </dependency>
- <dependency>
- <groupId>com.sun.jersey.contribs</groupId>
- <artifactId>jersey-multipart</artifactId>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <_wab>src/main/webapp/</_wab>
- <Include-Resource>
- WEB-INF/classes/index.html=src/main/webapp/index.html,
- WEB-INF/classes/login.html=src/main/webapp/login.html,
- WEB-INF/classes/error.html=src/main/webapp/error.html,
- WEB-INF/classes/not-ready.html=src/main/webapp/not-ready.html,
- WEB-INF/classes/onos.js=src/main/webapp/onos.js,
- WEB-INF/classes/nav.html=src/main/webapp/nav.html,
- WEB-INF/classes/app/view=src/main/webapp/app/view,
- {maven-resources}
- </Include-Resource>
- <Bundle-SymbolicName>
- ${project.groupId}.${project.artifactId}
- </Bundle-SymbolicName>
- <Import-Package>
- org.slf4j,
- org.osgi.framework,
- javax.ws.rs,javax.ws.rs.core,javax.ws.rs.ext,
- javax.servlet.*,
- com.sun.jersey.api,
- com.sun.jersey.spi.container.servlet,
- com.sun.jersey.server.impl.container.servlet,
- com.sun.jersey.multipart,
- com.sun.jersey.core.header,
- org.jvnet.mimepull,
- com.fasterxml.jackson.databind,
- com.fasterxml.jackson.databind.node,
- com.google.common.base.*,
- com.google.common.collect.*,
- com.google.common.io.*,
- org.eclipse.jetty.websocket.*,
- org.onlab.util.*,
- org.onlab.osgi.*,
- org.onlab.packet.*,
- org.onlab.rest.*,
- org.onosproject.*,
- org.joda.time.*,
- org.apache.commons.*
- </Import-Package>
- <Web-ContextPath>${web.context}</Web-ContextPath>
- </instructions>
- </configuration>
- </plugin>
-
- </plugins>
- </build>
- <!--
-
--->
-
-</project>
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationResource.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationResource.java
deleted file mode 100644
index 398bfee0..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationResource.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import com.sun.jersey.multipart.FormDataParam;
-import org.onlab.rest.BaseResource;
-import org.onosproject.app.ApplicationAdminService;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Application upload resource.
- */
-@Path("applications")
-public class ApplicationResource extends BaseResource {
-
- @Path("upload")
- @POST
- @Consumes(MediaType.MULTIPART_FORM_DATA)
- public Response upload(@FormDataParam("file") InputStream stream) throws IOException {
- get(ApplicationAdminService.class).install(stream);
- return Response.ok().build();
- }
-
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationViewMessageHandler.java
deleted file mode 100644
index 77a58972..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationViewMessageHandler.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableSet;
-import org.onosproject.app.ApplicationAdminService;
-import org.onosproject.app.ApplicationService;
-import org.onosproject.app.ApplicationState;
-import org.onosproject.core.Application;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.ui.RequestHandler;
-import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.table.TableModel;
-import org.onosproject.ui.table.TableRequestHandler;
-
-import java.util.Collection;
-
-import static org.onosproject.app.ApplicationState.ACTIVE;
-
-/**
- * Message handler for application view related messages.
- */
-public class ApplicationViewMessageHandler extends UiMessageHandler {
-
- private static final String APP_DATA_REQ = "appDataRequest";
- private static final String APP_DATA_RESP = "appDataResponse";
- private static final String APPS = "apps";
-
- private static final String APP_MGMT_REQ = "appManagementRequest";
-
- private static final String STATE = "state";
- private static final String STATE_IID = "_iconid_state";
- private static final String ID = "id";
- private static final String VERSION = "version";
- private static final String ORIGIN = "origin";
- private static final String DESC = "desc";
-
- private static final String ICON_ID_ACTIVE = "active";
- private static final String ICON_ID_INACTIVE = "appInactive";
-
- private static final String[] COL_IDS = {
- STATE, STATE_IID, ID, VERSION, ORIGIN, DESC
- };
-
- @Override
- protected Collection<RequestHandler> createRequestHandlers() {
- return ImmutableSet.of(
- new AppDataRequest(),
- new AppMgmtRequest()
- );
- }
-
- // handler for application table requests
- private final class AppDataRequest extends TableRequestHandler {
- private AppDataRequest() {
- super(APP_DATA_REQ, APP_DATA_RESP, APPS);
- }
-
- @Override
- protected String[] getColumnIds() {
- return COL_IDS;
- }
-
- @Override
- protected void populateTable(TableModel tm, ObjectNode payload) {
- ApplicationService as = get(ApplicationService.class);
- for (Application app : as.getApplications()) {
- populateRow(tm.addRow(), app, as);
- }
- }
-
- private void populateRow(TableModel.Row row, Application app,
- ApplicationService as) {
- ApplicationId id = app.id();
- ApplicationState state = as.getState(id);
- String iconId = state == ACTIVE ? ICON_ID_ACTIVE : ICON_ID_INACTIVE;
-
- row.cell(STATE, state)
- .cell(STATE_IID, iconId)
- .cell(ID, id.name())
- .cell(VERSION, app.version())
- .cell(ORIGIN, app.origin())
- .cell(DESC, app.description());
- }
- }
-
- // handler for application management control button actions
- private final class AppMgmtRequest extends RequestHandler {
- private AppMgmtRequest() {
- super(APP_MGMT_REQ);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- String action = string(payload, "action");
- String name = string(payload, "name");
- if (action != null && name != null) {
- ApplicationAdminService service = get(ApplicationAdminService.class);
- ApplicationId appId = service.getId(name);
- if (action.equals("activate")) {
- service.activate(appId);
- } else if (action.equals("deactivate")) {
- service.deactivate(appId);
- } else if (action.equals("uninstall")) {
- service.uninstall(appId);
- }
- chain(APP_DATA_REQ, sid, payload);
- }
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java
deleted file mode 100644
index da0eae07..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableSet;
-import org.joda.time.DateTime;
-import org.onosproject.cluster.ClusterService;
-import org.onosproject.cluster.ControllerNode;
-import org.onosproject.cluster.NodeId;
-import org.onosproject.ui.RequestHandler;
-import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.table.TableModel;
-import org.onosproject.ui.table.TableRequestHandler;
-import org.onosproject.ui.table.cell.TimeFormatter;
-
-import java.util.Collection;
-
-
-/**
- * Message handler for cluster view related messages.
- */
-public class ClusterViewMessageHandler extends UiMessageHandler {
-
- private static final String CLUSTER_DATA_REQ = "clusterDataRequest";
- private static final String CLUSTER_DATA_RESP = "clusterDataResponse";
- private static final String CLUSTERS = "clusters";
-
- private static final String ID = "id";
- private static final String IP = "ip";
- private static final String TCP_PORT = "tcp";
- private static final String STATE_IID = "_iconid_state";
- private static final String UPDATED = "updated";
-
- private static final String[] COL_IDS = {
- ID, IP, TCP_PORT, STATE_IID, UPDATED
- };
-
- private static final String ICON_ID_ONLINE = "active";
- private static final String ICON_ID_OFFLINE = "inactive";
-
- @Override
- protected Collection<RequestHandler> createRequestHandlers() {
- return ImmutableSet.of(new ClusterDataRequest());
- }
-
- // handler for cluster table requests
- private final class ClusterDataRequest extends TableRequestHandler {
- private ClusterDataRequest() {
- super(CLUSTER_DATA_REQ, CLUSTER_DATA_RESP, CLUSTERS);
- }
-
- @Override
- protected String[] getColumnIds() {
- return COL_IDS;
- }
-
- @Override
- protected TableModel createTableModel() {
- TableModel tm = super.createTableModel();
- tm.setFormatter(UPDATED, new TimeFormatter());
- return tm;
- }
-
- @Override
- protected void populateTable(TableModel tm, ObjectNode payload) {
- ClusterService cs = get(ClusterService.class);
- for (ControllerNode node : cs.getNodes()) {
- populateRow(tm.addRow(), node, cs);
- }
- }
-
- private void populateRow(TableModel.Row row, ControllerNode node,
- ClusterService cs) {
- NodeId id = node.id();
- DateTime lastUpdated = cs.getLastUpdated(id);
- String iconId = (cs.getState(id) == ControllerNode.State.ACTIVE) ?
- ICON_ID_ONLINE : ICON_ID_OFFLINE;
-
- row.cell(ID, id)
- .cell(IP, node.ip())
- .cell(TCP_PORT, node.tcpPort())
- .cell(STATE_IID, iconId)
- .cell(UPDATED, lastUpdated);
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
deleted file mode 100644
index 53b16a65..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableSet;
-import org.onosproject.mastership.MastershipService;
-import org.onosproject.net.AnnotationKeys;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Link;
-import org.onosproject.net.Port;
-import org.onosproject.net.config.NetworkConfigService;
-import org.onosproject.net.config.basics.BasicDeviceConfig;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.link.LinkService;
-import org.onosproject.ui.RequestHandler;
-import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.table.TableModel;
-import org.onosproject.ui.table.TableRequestHandler;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-
-import static com.google.common.base.Strings.emptyToNull;
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static org.apache.commons.lang.WordUtils.capitalizeFully;
-import static org.onosproject.net.DeviceId.deviceId;
-
-/**
- * Message handler for device view related messages.
- */
-public class DeviceViewMessageHandler extends UiMessageHandler {
-
- private static final String DEV_DATA_REQ = "deviceDataRequest";
- private static final String DEV_DATA_RESP = "deviceDataResponse";
- private static final String DEVICES = "devices";
-
- private static final String DEV_DETAILS_REQ = "deviceDetailsRequest";
- private static final String DEV_DETAILS_RESP = "deviceDetailsResponse";
- private static final String DETAILS = "details";
-
- private static final String DEV_NAME_CHANGE_REQ = "deviceNameChangeRequest";
- private static final String DEV_NAME_CHANGE_RESP = "deviceNameChangeResponse";
-
- private static final String ZERO_URI = "of:0000000000000000";
-
- private static final String ID = "id";
- private static final String TYPE = "type";
- private static final String AVAILABLE = "available";
- private static final String AVAILABLE_IID = "_iconid_available";
- private static final String TYPE_IID = "_iconid_type";
- private static final String DEV_ICON_PREFIX = "devIcon_";
- private static final String NUM_PORTS = "num_ports";
- private static final String LINK_DEST = "elinks_dest";
- private static final String MFR = "mfr";
- private static final String HW = "hw";
- private static final String SW = "sw";
- private static final String PROTOCOL = "protocol";
- private static final String MASTER_ID = "masterid";
- private static final String CHASSIS_ID = "chassisid";
- private static final String SERIAL = "serial";
- private static final String PORTS = "ports";
- private static final String ENABLED = "enabled";
- private static final String SPEED = "speed";
- private static final String NAME = "name";
- private static final String WARN = "warn";
-
-
- private static final String[] COL_IDS = {
- AVAILABLE, AVAILABLE_IID, TYPE_IID,
- NAME, ID, MASTER_ID, NUM_PORTS, MFR, HW, SW,
- PROTOCOL, CHASSIS_ID, SERIAL
- };
-
- private static final String ICON_ID_ONLINE = "active";
- private static final String ICON_ID_OFFLINE = "inactive";
-
- private final Logger log = LoggerFactory.getLogger(getClass());
-
-
- @Override
- protected Collection<RequestHandler> createRequestHandlers() {
- return ImmutableSet.of(
- new DataRequestHandler(),
- new NameChangeHandler(),
- new DetailRequestHandler()
- );
- }
-
- // Get friendly name of the device from the annotations
- private static String deviceName(Device device) {
- String name = device.annotations().value(AnnotationKeys.NAME);
- return isNullOrEmpty(name) ? device.id().toString() : name;
- }
-
- private static String deviceProtocol(Device device) {
- String protocol = device.annotations().value(PROTOCOL);
- return protocol != null ? protocol : "";
- }
-
- private static String getTypeIconId(Device d) {
- return DEV_ICON_PREFIX + d.type().toString();
- }
-
- // handler for device table requests
- private final class DataRequestHandler extends TableRequestHandler {
- private DataRequestHandler() {
- super(DEV_DATA_REQ, DEV_DATA_RESP, DEVICES);
- }
-
- @Override
- protected String[] getColumnIds() {
- return COL_IDS;
- }
-
- @Override
- protected void populateTable(TableModel tm, ObjectNode payload) {
- DeviceService ds = get(DeviceService.class);
- MastershipService ms = get(MastershipService.class);
- for (Device dev : ds.getDevices()) {
- populateRow(tm.addRow(), dev, ds, ms);
- }
- }
-
- private void populateRow(TableModel.Row row, Device dev,
- DeviceService ds, MastershipService ms) {
- DeviceId id = dev.id();
- boolean available = ds.isAvailable(id);
- String iconId = available ? ICON_ID_ONLINE : ICON_ID_OFFLINE;
-
- row.cell(ID, id)
- .cell(NAME, deviceName(dev))
- .cell(AVAILABLE, available)
- .cell(AVAILABLE_IID, iconId)
- .cell(TYPE_IID, getTypeIconId(dev))
- .cell(MFR, dev.manufacturer())
- .cell(HW, dev.hwVersion())
- .cell(SW, dev.swVersion())
- .cell(PROTOCOL, deviceProtocol(dev))
- .cell(NUM_PORTS, ds.getPorts(id).size())
- .cell(MASTER_ID, ms.getMasterFor(id));
- }
- }
-
- // handler for selected device detail requests
- private final class DetailRequestHandler extends RequestHandler {
- private DetailRequestHandler() {
- super(DEV_DETAILS_REQ);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- String id = string(payload, ID, ZERO_URI);
-
- DeviceId deviceId = deviceId(id);
- DeviceService service = get(DeviceService.class);
- MastershipService ms = get(MastershipService.class);
- Device device = service.getDevice(deviceId);
- ObjectNode data = objectNode();
-
- data.put(ID, deviceId.toString());
- data.put(NAME, deviceName(device));
- data.put(TYPE, capitalizeFully(device.type().toString()));
- data.put(TYPE_IID, getTypeIconId(device));
- data.put(MFR, device.manufacturer());
- data.put(HW, device.hwVersion());
- data.put(SW, device.swVersion());
- data.put(SERIAL, device.serialNumber());
- data.put(CHASSIS_ID, device.chassisId().toString());
- data.put(MASTER_ID, ms.getMasterFor(deviceId).toString());
- data.put(PROTOCOL, deviceProtocol(device));
-
- ArrayNode ports = arrayNode();
-
- List<Port> portList = new ArrayList<>(service.getPorts(deviceId));
- Collections.sort(portList, (p1, p2) -> {
- long delta = p1.number().toLong() - p2.number().toLong();
- return delta == 0 ? 0 : (delta < 0 ? -1 : +1);
- });
-
- for (Port p : portList) {
- ports.add(portData(p, deviceId));
- }
- data.set(PORTS, ports);
-
- ObjectNode rootNode = objectNode();
- rootNode.set(DETAILS, data);
- sendMessage(DEV_DETAILS_RESP, 0, rootNode);
- }
-
- private ObjectNode portData(Port p, DeviceId id) {
- ObjectNode port = objectNode();
- LinkService ls = get(LinkService.class);
- String name = p.annotations().value(AnnotationKeys.PORT_NAME);
-
- port.put(ID, capitalizeFully(p.number().toString()));
- port.put(TYPE, capitalizeFully(p.type().toString()));
- port.put(SPEED, p.portSpeed());
- port.put(ENABLED, p.isEnabled());
- port.put(NAME, name != null ? name : "");
-
- Set<Link> links = ls.getEgressLinks(new ConnectPoint(id, p.number()));
- if (!links.isEmpty()) {
- StringBuilder egressLinks = new StringBuilder();
- for (Link l : links) {
- ConnectPoint dest = l.dst();
- egressLinks.append(dest.elementId()).append("/")
- .append(dest.port()).append(" ");
- }
- port.put(LINK_DEST, egressLinks.toString());
- }
-
- return port;
- }
- }
-
-
- // handler for changing device friendly name
- private final class NameChangeHandler extends RequestHandler {
- private NameChangeHandler() {
- super(DEV_NAME_CHANGE_REQ);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- DeviceId deviceId = deviceId(string(payload, ID, ZERO_URI));
- String name = emptyToNull(string(payload, NAME, null));
- log.debug("Name change request: {} -- '{}'", deviceId, name);
-
- NetworkConfigService service = get(NetworkConfigService.class);
- BasicDeviceConfig cfg =
- service.addConfig(deviceId, BasicDeviceConfig.class);
-
- // Name attribute missing from the payload (or empty string)
- // means that the friendly name should be unset.
- cfg.name(name);
- cfg.apply();
- sendMessage(DEV_NAME_CHANGE_RESP, 0, payload);
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java
deleted file mode 100644
index 02179115..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableSet;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.flow.FlowEntry;
-import org.onosproject.net.flow.FlowRuleService;
-import org.onosproject.net.flow.criteria.Criterion;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.ui.RequestHandler;
-import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.table.CellFormatter;
-import org.onosproject.ui.table.TableModel;
-import org.onosproject.ui.table.TableRequestHandler;
-import org.onosproject.ui.table.cell.EnumFormatter;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Message handler for flow view related messages.
- */
-public class FlowViewMessageHandler extends UiMessageHandler {
-
- private static final String FLOW_DATA_REQ = "flowDataRequest";
- private static final String FLOW_DATA_RESP = "flowDataResponse";
- private static final String FLOWS = "flows";
-
- private static final String ID = "id";
- private static final String APP_ID = "appId";
- private static final String GROUP_ID = "groupId";
- private static final String TABLE_ID = "tableId";
- private static final String PRIORITY = "priority";
- private static final String SELECTOR = "selector";
- private static final String TREATMENT = "treatment";
- private static final String TIMEOUT = "timeout";
- private static final String PERMANENT = "permanent";
- private static final String STATE = "state";
- private static final String PACKETS = "packets";
- private static final String BYTES = "bytes";
-
- private static final String COMMA = ", ";
-
- private static final String[] COL_IDS = {
- ID, APP_ID, GROUP_ID, TABLE_ID, PRIORITY, SELECTOR,
- TREATMENT, TIMEOUT, PERMANENT, STATE, PACKETS, BYTES
- };
-
- @Override
- protected Collection<RequestHandler> createRequestHandlers() {
- return ImmutableSet.of(new FlowDataRequest());
- }
-
- // handler for flow table requests
- private final class FlowDataRequest extends TableRequestHandler {
-
- private FlowDataRequest() {
- super(FLOW_DATA_REQ, FLOW_DATA_RESP, FLOWS);
- }
-
- @Override
- protected String[] getColumnIds() {
- return COL_IDS;
- }
-
- @Override
- protected TableModel createTableModel() {
- TableModel tm = super.createTableModel();
- tm.setFormatter(SELECTOR, new SelectorFormatter());
- tm.setFormatter(TREATMENT, new TreatmentFormatter());
- tm.setFormatter(STATE, EnumFormatter.INSTANCE);
- return tm;
- }
-
- @Override
- protected void populateTable(TableModel tm, ObjectNode payload) {
- String uri = string(payload, "devId");
- if (!Strings.isNullOrEmpty(uri)) {
- DeviceId deviceId = DeviceId.deviceId(uri);
- FlowRuleService frs = get(FlowRuleService.class);
- for (FlowEntry flow : frs.getFlowEntries(deviceId)) {
- populateRow(tm.addRow(), flow);
- }
- }
- }
-
- private void populateRow(TableModel.Row row, FlowEntry flow) {
- row.cell(ID, flow.id().value())
- .cell(APP_ID, flow.appId())
- .cell(GROUP_ID, flow.groupId().id())
- .cell(TABLE_ID, flow.tableId())
- .cell(PRIORITY, flow.priority())
- .cell(SELECTOR, flow)
- .cell(TREATMENT, flow)
- .cell(TIMEOUT, flow.timeout())
- .cell(PERMANENT, flow.isPermanent())
- .cell(STATE, flow.state())
- .cell(PACKETS, flow.packets())
- .cell(BYTES, flow.bytes());
- }
-
- private final class SelectorFormatter implements CellFormatter {
- @Override
- public String format(Object value) {
- FlowEntry flow = (FlowEntry) value;
- Set<Criterion> criteria = flow.selector().criteria();
-
- if (criteria.isEmpty()) {
- return "(No traffic selector criteria for this flow)";
- }
- StringBuilder sb = new StringBuilder("Criteria: ");
- for (Criterion c : criteria) {
- sb.append(c).append(COMMA);
- }
- removeTrailingComma(sb);
-
- return sb.toString();
- }
- }
-
- private final class TreatmentFormatter implements CellFormatter {
- @Override
- public String format(Object value) {
- FlowEntry flow = (FlowEntry) value;
- List<Instruction> instructions = flow.treatment().allInstructions();
-
- if (instructions.isEmpty()) {
- return "(No traffic treatment instructions for this flow)";
- }
- StringBuilder sb = new StringBuilder("Treatment Instructions: ");
- for (Instruction i : instructions) {
- sb.append(i).append(COMMA);
- }
- removeTrailingComma(sb);
-
- return sb.toString();
- }
- }
-
- private StringBuilder removeTrailingComma(StringBuilder sb) {
- int pos = sb.lastIndexOf(COMMA);
- sb.delete(pos, sb.length());
- return sb;
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/GroupViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/GroupViewMessageHandler.java
deleted file mode 100644
index c7d539b1..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/GroupViewMessageHandler.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableSet;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.group.Group;
-import org.onosproject.net.group.GroupBucket;
-import org.onosproject.net.group.GroupService;
-import org.onosproject.ui.RequestHandler;
-import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.table.CellFormatter;
-import org.onosproject.ui.table.TableModel;
-import org.onosproject.ui.table.TableRequestHandler;
-import org.onosproject.ui.table.cell.EnumFormatter;
-
-import java.util.Collection;
-import java.util.List;
-
-
-/**
- * Message handler for group view related messages.
- */
-public class GroupViewMessageHandler extends UiMessageHandler {
-
- private static final String GROUP_DATA_REQ = "groupDataRequest";
- private static final String GROUP_DATA_RESP = "groupDataResponse";
- private static final String GROUPS = "groups";
-
- private static final String ID = "id";
- private static final String APP_ID = "app_id";
- private static final String STATE = "state";
- private static final String TYPE = "type";
- private static final String PACKETS = "packets";
- private static final String BYTES = "bytes";
- private static final String BUCKETS = "buckets";
-
- private static final String[] COL_IDS = {
- ID, APP_ID, STATE, TYPE, PACKETS, BYTES, BUCKETS
- };
-
- @Override
- protected Collection<RequestHandler> createRequestHandlers() {
- return ImmutableSet.of(new GroupDataRequest());
- }
-
- // handler for group table requests
- private final class GroupDataRequest extends TableRequestHandler {
-
- private GroupDataRequest() {
- super(GROUP_DATA_REQ, GROUP_DATA_RESP, GROUPS);
- }
-
- @Override
- protected String[] getColumnIds() {
- return COL_IDS;
- }
-
- @Override
- protected TableModel createTableModel() {
- TableModel tm = super.createTableModel();
- tm.setFormatter(TYPE, EnumFormatter.INSTANCE);
- tm.setFormatter(BUCKETS, new BucketFormatter());
- return tm;
- }
-
- @Override
- protected void populateTable(TableModel tm, ObjectNode payload) {
- String uri = string(payload, "devId");
- if (!Strings.isNullOrEmpty(uri)) {
- DeviceId deviceId = DeviceId.deviceId(uri);
- GroupService gs = get(GroupService.class);
- for (Group group : gs.getGroups(deviceId)) {
- populateRow(tm.addRow(), group);
- }
- }
- }
-
- private void populateRow(TableModel.Row row, Group g) {
- row.cell(ID, g.id().id())
- .cell(APP_ID, g.appId().name())
- .cell(STATE, g.state())
- .cell(TYPE, g.type())
- .cell(PACKETS, g.packets())
- .cell(BYTES, g.bytes())
- .cell(BUCKETS, g.buckets().buckets());
- }
-
- private final class BucketFormatter implements CellFormatter {
- private static final String BREAK = "<br>";
-
- @Override
- public String format(Object value) {
- StringBuilder sb = new StringBuilder();
- List<GroupBucket> buckets = (List<GroupBucket>) value;
-
- if (buckets.isEmpty()) {
- return "(No buckets for this group)";
- }
-
- for (GroupBucket b : buckets) {
- sb.append("Bytes: ")
- .append(b.bytes())
- .append(" Packets: ")
- .append(b.packets())
- .append(" Actions: ")
- .append(b.treatment().allInstructions())
- .append(BREAK);
- }
-
- return sb.toString();
- }
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/HostViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/HostViewMessageHandler.java
deleted file mode 100644
index 12a2b664..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/HostViewMessageHandler.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableSet;
-import org.onlab.packet.IpAddress;
-import org.onosproject.net.AnnotationKeys;
-import org.onosproject.net.Host;
-import org.onosproject.net.host.HostService;
-import org.onosproject.ui.RequestHandler;
-import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.table.CellFormatter;
-import org.onosproject.ui.table.TableModel;
-import org.onosproject.ui.table.TableRequestHandler;
-import org.onosproject.ui.table.cell.HostLocationFormatter;
-
-import java.util.Collection;
-import java.util.Set;
-
-import static com.google.common.base.Strings.isNullOrEmpty;
-
-/**
- * Message handler for host view related messages.
- */
-public class HostViewMessageHandler extends UiMessageHandler {
-
- private static final String HOST_DATA_REQ = "hostDataRequest";
- private static final String HOST_DATA_RESP = "hostDataResponse";
- private static final String HOSTS = "hosts";
-
- private static final String TYPE_IID = "_iconid_type";
- private static final String ID = "id";
- private static final String MAC = "mac";
- private static final String VLAN = "vlan";
- private static final String IPS = "ips";
- private static final String LOCATION = "location";
-
- private static final String HOST_ICON_PREFIX = "hostIcon_";
-
- private static final String[] COL_IDS = {
- TYPE_IID, ID, MAC, VLAN, IPS, LOCATION
- };
-
- @Override
- protected Collection<RequestHandler> createRequestHandlers() {
- return ImmutableSet.of(new HostDataRequest());
- }
-
- // handler for host table requests
- private final class HostDataRequest extends TableRequestHandler {
- private HostDataRequest() {
- super(HOST_DATA_REQ, HOST_DATA_RESP, HOSTS);
- }
-
- @Override
- protected String[] getColumnIds() {
- return COL_IDS;
- }
-
- @Override
- protected TableModel createTableModel() {
- TableModel tm = super.createTableModel();
- tm.setFormatter(LOCATION, HostLocationFormatter.INSTANCE);
- tm.setFormatter(IPS, new IpSetFormatter());
- return tm;
- }
-
- @Override
- protected void populateTable(TableModel tm, ObjectNode payload) {
- HostService hs = get(HostService.class);
- for (Host host : hs.getHosts()) {
- populateRow(tm.addRow(), host);
- }
- }
-
- private void populateRow(TableModel.Row row, Host host) {
- row.cell(TYPE_IID, getTypeIconId(host))
- .cell(ID, host.id())
- .cell(MAC, host.mac())
- .cell(VLAN, host.vlan())
- .cell(IPS, host.ipAddresses())
- .cell(LOCATION, host.location());
- }
-
- private String getTypeIconId(Host host) {
- String hostType = host.annotations().value(AnnotationKeys.TYPE);
- return HOST_ICON_PREFIX +
- (isNullOrEmpty(hostType) ? "endstation" : hostType);
- }
-
- private final class IpSetFormatter implements CellFormatter {
- private static final String COMMA = ", ";
-
- @Override
- public String format(Object value) {
- Set<IpAddress> ips = (Set<IpAddress>) value;
- if (ips.isEmpty()) {
- return "(No IP Addresses for this host)";
- }
- StringBuilder sb = new StringBuilder();
- for (IpAddress ip : ips) {
- sb.append(ip.toString())
- .append(COMMA);
- }
- removeTrailingComma(sb);
- return sb.toString();
- }
-
- private StringBuilder removeTrailingComma(StringBuilder sb) {
- int pos = sb.lastIndexOf(COMMA);
- sb.delete(pos, sb.length());
- return sb;
- }
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/IntentViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/IntentViewMessageHandler.java
deleted file mode 100644
index bacb76d2..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/IntentViewMessageHandler.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableSet;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.NetworkResource;
-import org.onosproject.net.flow.criteria.Criterion;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.intent.ConnectivityIntent;
-import org.onosproject.net.intent.Constraint;
-import org.onosproject.net.intent.HostToHostIntent;
-import org.onosproject.net.intent.Intent;
-import org.onosproject.net.intent.IntentService;
-import org.onosproject.net.intent.LinkCollectionIntent;
-import org.onosproject.net.intent.MultiPointToSinglePointIntent;
-import org.onosproject.net.intent.PathIntent;
-import org.onosproject.net.intent.PointToPointIntent;
-import org.onosproject.net.intent.SinglePointToMultiPointIntent;
-import org.onosproject.ui.RequestHandler;
-import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.table.CellFormatter;
-import org.onosproject.ui.table.TableModel;
-import org.onosproject.ui.table.TableRequestHandler;
-import org.onosproject.ui.table.cell.AppIdFormatter;
-import org.onosproject.ui.table.cell.EnumFormatter;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Message handler for intent view related messages.
- */
-public class IntentViewMessageHandler extends UiMessageHandler {
-
- private static final String INTENT_DATA_REQ = "intentDataRequest";
- private static final String INTENT_DATA_RESP = "intentDataResponse";
- private static final String INTENTS = "intents";
-
- private static final String APP_ID = "appId";
- private static final String KEY = "key";
- private static final String TYPE = "type";
- private static final String PRIORITY = "priority";
- private static final String STATE = "state";
- private static final String RESOURCES = "resources";
- private static final String DETAILS = "details";
-
- private static final String[] COL_IDS = {
- APP_ID, KEY, TYPE, PRIORITY, STATE, RESOURCES, DETAILS
- };
-
- @Override
- protected Collection<RequestHandler> createRequestHandlers() {
- return ImmutableSet.of(new IntentDataRequest());
- }
-
- // handler for intent table requests
- private final class IntentDataRequest extends TableRequestHandler {
- private IntentDataRequest() {
- super(INTENT_DATA_REQ, INTENT_DATA_RESP, INTENTS);
- }
-
- @Override
- protected String defaultColumnId() {
- return APP_ID;
- }
-
- @Override
- protected String[] getColumnIds() {
- return COL_IDS;
- }
-
- @Override
- protected TableModel createTableModel() {
- TableModel tm = super.createTableModel();
- tm.setFormatter(APP_ID, AppIdFormatter.INSTANCE);
- tm.setFormatter(RESOURCES, new ResourcesFormatter());
- tm.setFormatter(DETAILS, new DetailsFormatter());
- tm.setFormatter(STATE, EnumFormatter.INSTANCE);
- return tm;
- }
-
- @Override
- protected void populateTable(TableModel tm, ObjectNode payload) {
- IntentService is = get(IntentService.class);
- for (Intent intent : is.getIntents()) {
- populateRow(tm.addRow(), intent, is);
- }
- }
-
- private void populateRow(TableModel.Row row, Intent intent, IntentService is) {
- row.cell(APP_ID, intent.appId())
- .cell(KEY, intent.key())
- .cell(TYPE, intent.getClass().getSimpleName())
- .cell(PRIORITY, intent.priority())
- .cell(STATE, is.getIntentState(intent.key()))
- .cell(RESOURCES, intent)
- .cell(DETAILS, intent);
- }
-
- private final class ResourcesFormatter implements CellFormatter {
- private static final String COMMA = ", ";
-
- @Override
- public String format(Object value) {
- Intent intent = (Intent) value;
- Collection<NetworkResource> resources = intent.resources();
- if (resources.isEmpty()) {
- return "(No resources for this intent)";
- }
- StringBuilder sb = new StringBuilder("Resources: ");
- for (NetworkResource nr : resources) {
- sb.append(nr).append(COMMA);
- }
- removeTrailingComma(sb);
-
- return sb.toString();
- }
-
- private StringBuilder removeTrailingComma(StringBuilder sb) {
- int pos = sb.lastIndexOf(COMMA);
- sb.delete(pos, sb.length());
- return sb;
- }
- }
-
- private final class DetailsFormatter implements CellFormatter {
- @Override
- public String format(Object value) {
- return formatDetails((Intent) value, new StringBuilder()).toString();
- }
-
- private StringBuilder formatDetails(Intent intent, StringBuilder sb) {
- if (intent instanceof ConnectivityIntent) {
- buildConnectivityDetails((ConnectivityIntent) intent, sb);
- }
-
- if (intent instanceof HostToHostIntent) {
- buildHostToHostDetails((HostToHostIntent) intent, sb);
-
- } else if (intent instanceof PointToPointIntent) {
- buildPointToPointDetails((PointToPointIntent) intent, sb);
-
- } else if (intent instanceof MultiPointToSinglePointIntent) {
- buildMPToSPDetails((MultiPointToSinglePointIntent) intent, sb);
-
- } else if (intent instanceof SinglePointToMultiPointIntent) {
- buildSPToMPDetails((SinglePointToMultiPointIntent) intent, sb);
-
- } else if (intent instanceof PathIntent) {
- buildPathDetails((PathIntent) intent, sb);
-
- } else if (intent instanceof LinkCollectionIntent) {
- buildLinkConnectionDetails((LinkCollectionIntent) intent, sb);
- }
-
- if (sb.length() == 0) {
- sb.append("(No details for this intent)");
- } else {
- sb.insert(0, "Details: ");
- }
- return sb;
- }
-
- private void appendMultiPointsDetails(Set<ConnectPoint> points,
- StringBuilder sb) {
- for (ConnectPoint point : points) {
- sb.append(point.elementId())
- .append('/')
- .append(point.port())
- .append(' ');
- }
- }
-
- private void buildConnectivityDetails(ConnectivityIntent intent,
- StringBuilder sb) {
- Set<Criterion> criteria = intent.selector().criteria();
- List<Instruction> instructions = intent.treatment().allInstructions();
- List<Constraint> constraints = intent.constraints();
-
- if (!criteria.isEmpty()) {
- sb.append("Selector: ").append(criteria);
- }
- if (!instructions.isEmpty()) {
- sb.append("Treatment: ").append(instructions);
- }
- if (constraints != null && !constraints.isEmpty()) {
- sb.append("Constraints: ").append(constraints);
- }
- }
-
- private void buildHostToHostDetails(HostToHostIntent intent,
- StringBuilder sb) {
- sb.append(" Host 1: ")
- .append(intent.one())
- .append(", Host 2: ")
- .append(intent.two());
- }
-
- private void buildPointToPointDetails(PointToPointIntent intent,
- StringBuilder sb) {
- ConnectPoint ingress = intent.ingressPoint();
- ConnectPoint egress = intent.egressPoint();
- sb.append(" Ingress: ")
- .append(ingress.elementId())
- .append('/')
- .append(ingress.port())
-
- .append(", Egress: ")
- .append(egress.elementId())
- .append('/')
- .append(egress.port())
- .append(' ');
- }
-
- private void buildMPToSPDetails(MultiPointToSinglePointIntent intent,
- StringBuilder sb) {
- ConnectPoint egress = intent.egressPoint();
-
- sb.append(" Ingress=");
- appendMultiPointsDetails(intent.ingressPoints(), sb);
-
- sb.append(", Egress=")
- .append(egress.elementId())
- .append('/')
- .append(egress.port())
- .append(' ');
- }
-
- private void buildSPToMPDetails(SinglePointToMultiPointIntent intent,
- StringBuilder sb) {
- ConnectPoint ingress = intent.ingressPoint();
-
- sb.append(" Ingress=")
- .append(ingress.elementId())
- .append('/')
- .append(ingress.port())
- .append(", Egress=");
-
- appendMultiPointsDetails(intent.egressPoints(), sb);
- }
-
- private void buildPathDetails(PathIntent intent, StringBuilder sb) {
- sb.append(" path=")
- .append(intent.path().links())
- .append(", cost=")
- .append(intent.path().cost());
- }
-
- private void buildLinkConnectionDetails(LinkCollectionIntent intent,
- StringBuilder sb) {
- sb.append(" links=")
- .append(intent.links())
- .append(", egress=");
-
- appendMultiPointsDetails(intent.egressPoints(), sb);
- }
-
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/LinkViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/LinkViewMessageHandler.java
deleted file mode 100644
index 7de6d624..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/LinkViewMessageHandler.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableSet;
-import org.onosproject.net.Link;
-import org.onosproject.net.link.LinkService;
-import org.onosproject.ui.RequestHandler;
-import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.topo.BaseLink;
-import org.onosproject.ui.topo.BaseLinkMap;
-import org.onosproject.ui.table.TableModel;
-import org.onosproject.ui.table.TableRequestHandler;
-import org.onosproject.ui.table.cell.ConnectPointFormatter;
-import org.onosproject.ui.table.cell.EnumFormatter;
-
-import java.util.Collection;
-
-/**
- * Message handler for link view related messages.
- */
-public class LinkViewMessageHandler extends UiMessageHandler {
-
- private static final String A_BOTH_B = "A &harr; B";
- private static final String A_SINGLE_B = "A &rarr; B";
- private static final String SLASH = " / ";
-
- private static final String LINK_DATA_REQ = "linkDataRequest";
- private static final String LINK_DATA_RESP = "linkDataResponse";
- private static final String LINKS = "links";
-
- private static final String ONE = "one";
- private static final String TWO = "two";
- private static final String TYPE = "type";
- private static final String STATE = "_iconid_state";
- private static final String DIRECTION = "direction";
- private static final String DURABLE = "durable";
-
- private static final String[] COL_IDS = {
- ONE, TWO, TYPE, STATE, DIRECTION, DURABLE
- };
-
- private static final String ICON_ID_ONLINE = "active";
- private static final String ICON_ID_OFFLINE = "inactive";
-
- @Override
- protected Collection<RequestHandler> createRequestHandlers() {
- return ImmutableSet.of(new LinkDataRequest());
- }
-
- // handler for link table requests
- private final class LinkDataRequest extends TableRequestHandler {
- private LinkDataRequest() {
- super(LINK_DATA_REQ, LINK_DATA_RESP, LINKS);
- }
-
- @Override
- protected String[] getColumnIds() {
- return COL_IDS;
- }
-
- @Override
- protected String defaultColumnId() {
- return ONE;
- }
-
- @Override
- protected TableModel createTableModel() {
- TableModel tm = super.createTableModel();
- tm.setFormatter(ONE, ConnectPointFormatter.INSTANCE);
- tm.setFormatter(TWO, ConnectPointFormatter.INSTANCE);
- tm.setFormatter(TYPE, EnumFormatter.INSTANCE);
- return tm;
- }
-
- @Override
- protected void populateTable(TableModel tm, ObjectNode payload) {
- LinkService ls = get(LinkService.class);
- BaseLinkMap linkMap = new BaseLinkMap();
- ls.getLinks().forEach(linkMap::add);
- linkMap.biLinks().forEach(blink -> populateRow(tm.addRow(), blink));
- }
-
- private void populateRow(TableModel.Row row, BaseLink blink) {
- row.cell(ONE, blink.one().src())
- .cell(TWO, blink.one().dst())
- .cell(TYPE, linkType(blink))
- .cell(STATE, linkState(blink))
- .cell(DIRECTION, linkDir(blink))
- .cell(DURABLE, blink.one().isDurable());
- }
-
- private String linkType(BaseLink link) {
- StringBuilder sb = new StringBuilder();
- sb.append(link.one().type());
- if (link.two() != null && link.two().type() != link.one().type()) {
- sb.append(SLASH).append(link.two().type());
- }
- return sb.toString();
- }
-
- private String linkState(BaseLink link) {
- return (link.one().state() == Link.State.ACTIVE ||
- link.two().state() == Link.State.ACTIVE) ?
- ICON_ID_ONLINE : ICON_ID_OFFLINE;
- }
-
- private String linkDir(BaseLink link) {
- return link.two() != null ? A_BOTH_B : A_SINGLE_B;
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/LogoutResource.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/LogoutResource.java
deleted file mode 100644
index b21b5cdb..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/LogoutResource.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import org.onlab.rest.BaseResource;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.Response;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-/**
- * Application upload resource.
- */
-@Path("logout")
-public class LogoutResource extends BaseResource {
-
- @Context
- private HttpServletRequest servletRequest;
-
- @GET
- public Response logout() throws IOException, URISyntaxException {
- servletRequest.getSession().invalidate();
- String url = servletRequest.getRequestURL().toString();
- url = url.replaceFirst("/onos/ui/.*", "/onos/ui/login.html");
- return Response.temporaryRedirect(new URI(url)).build();
- }
-
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainIndexResource.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainIndexResource.java
deleted file mode 100644
index a30c0470..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainIndexResource.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableList.Builder;
-import org.onlab.osgi.ServiceNotFoundException;
-import org.onosproject.rest.AbstractInjectionResource;
-import org.onosproject.ui.UiExtensionService;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.SequenceInputStream;
-
-import static com.google.common.collect.ImmutableList.of;
-import static com.google.common.io.ByteStreams.toByteArray;
-
-/**
- * Resource for serving the dynamically composed index.html.
- */
-@Path("/")
-public class MainIndexResource extends AbstractInjectionResource {
-
- private static final String INDEX = "index.html";
- private static final String NOT_READY = "not-ready.html";
-
- private static final String INJECT_CSS_START = "<!-- {INJECTED-STYLESHEETS-START} -->";
- private static final String INJECT_CSS_END = "<!-- {INJECTED-STYLESHEETS-END} -->";
-
- private static final String INJECT_JS_START = "<!-- {INJECTED-JAVASCRIPT-START} -->";
- private static final String INJECT_JS_END = "<!-- {INJECTED-JAVASCRIPT-END} -->";
-
- @GET
- @Produces(MediaType.TEXT_HTML)
- public Response getMainIndex() throws IOException {
- ClassLoader classLoader = getClass().getClassLoader();
- UiExtensionService service;
- try {
- service = get(UiExtensionService.class);
- } catch (ServiceNotFoundException e) {
- return Response.ok(classLoader.getResourceAsStream(NOT_READY)).build();
- }
-
- InputStream indexTemplate = classLoader.getResourceAsStream(INDEX);
- String index = new String(toByteArray(indexTemplate));
-
- int p1s = split(index, 0, INJECT_JS_START);
- int p1e = split(index, p1s, INJECT_JS_END);
- int p2s = split(index, p1e, INJECT_CSS_START);
- int p2e = split(index, p2s, INJECT_CSS_END);
- int p3s = split(index, p2e, null);
-
- StreamEnumeration streams =
- new StreamEnumeration(of(stream(index, 0, p1s),
- includeJs(service),
- stream(index, p1e, p2s),
- includeCss(service),
- stream(index, p2e, p3s)));
-
- return Response.ok(new SequenceInputStream(streams)).build();
- }
-
- // Produces an input stream including CSS injections from all extensions.
- private InputStream includeCss(UiExtensionService service) {
- Builder<InputStream> builder = ImmutableList.builder();
- service.getExtensions().forEach(ext -> add(builder, ext.css()));
- return new SequenceInputStream(new StreamEnumeration(builder.build()));
- }
-
- // Produces an input stream including JS injections from all extensions.
- private InputStream includeJs(UiExtensionService service) {
- Builder<InputStream> builder = ImmutableList.builder();
- service.getExtensions().forEach(ext -> add(builder, ext.js()));
- return new SequenceInputStream(new StreamEnumeration(builder.build()));
- }
-
- // Safely adds the stream to the list builder only if stream is not null.
- private void add(Builder<InputStream> builder, InputStream inputStream) {
- if (inputStream != null) {
- builder.add(inputStream);
- }
- }
-
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainModuleResource.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainModuleResource.java
deleted file mode 100644
index 42d1dff9..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainModuleResource.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import org.onosproject.rest.AbstractInjectionResource;
-import org.onosproject.ui.UiExtension;
-import org.onosproject.ui.UiExtensionService;
-import org.onosproject.ui.UiView;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Response;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.SequenceInputStream;
-
-import static com.google.common.collect.ImmutableList.of;
-import static com.google.common.io.ByteStreams.toByteArray;
-import static org.onosproject.ui.impl.MainViewResource.SCRIPT;
-
-/**
- * Resource for serving the dynamically composed onos.js.
- */
-@Path("/")
-public class MainModuleResource extends AbstractInjectionResource {
-
- private static final String MAIN_JS = "onos.js";
-
- private static final String INJECT_VIEW_IDS_START = "// {INJECTED-VIEW-IDS-START}";
- private static final String INJECT_VIEW_IDS_END = "// {INJECTED-VIEW-IDS-END}";
-
- @GET
- @Produces(SCRIPT)
- public Response getMainModule() throws IOException {
- UiExtensionService service = get(UiExtensionService.class);
- InputStream jsTemplate = getClass().getClassLoader().getResourceAsStream(MAIN_JS);
- String js = new String(toByteArray(jsTemplate));
-
- int p1s = split(js, 0, INJECT_VIEW_IDS_START);
- int p1e = split(js, 0, INJECT_VIEW_IDS_END);
- int p2s = split(js, p1e, null);
-
- StreamEnumeration streams =
- new StreamEnumeration(of(stream(js, 0, p1s),
- includeViewIds(service),
- stream(js, p1e, p2s)));
-
- return Response.ok(new SequenceInputStream(streams)).build();
- }
-
- // Produces an input stream including view id injections from all extensions.
- private InputStream includeViewIds(UiExtensionService service) {
- StringBuilder sb = new StringBuilder("\n");
- for (UiExtension extension : service.getExtensions()) {
- for (UiView view : extension.views()) {
- sb.append(" '").append(view.id()).append("',");
- }
- }
- return new ByteArrayInputStream(sb.toString().getBytes());
- }
-
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainNavResource.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainNavResource.java
deleted file mode 100644
index 7f0af3a5..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainNavResource.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import org.onosproject.rest.AbstractInjectionResource;
-import org.onosproject.ui.UiExtension;
-import org.onosproject.ui.UiExtensionService;
-import org.onosproject.ui.UiView;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.SequenceInputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import static com.google.common.collect.ImmutableList.of;
-import static com.google.common.io.ByteStreams.toByteArray;
-
-/**
- * Resource for serving the dynamically composed nav.html.
- */
-@Path("/")
-public class MainNavResource extends AbstractInjectionResource {
-
- private static final String NAV_HTML = "nav.html";
-
- private static final String INJECT_VIEW_ITEMS_START =
- "<!-- {INJECTED-VIEW-NAV-START} -->";
- private static final String INJECT_VIEW_ITEMS_END =
- "<!-- {INJECTED-VIEW-NAV-END} -->";
-
- private static final String HDR_FORMAT =
- "<div class=\"nav-hdr\">%s</div>\n";
- private static final String NAV_FORMAT =
- "<a ng-click=\"navCtrl.hideNav()\" href=\"#/%s\">%s %s</a>\n";
-
- private static final String BLANK_GLYPH = "unknown";
-
- @GET
- @Produces(MediaType.TEXT_HTML)
- public Response getNavigation() throws IOException {
- UiExtensionService service = get(UiExtensionService.class);
- InputStream navTemplate =
- getClass().getClassLoader().getResourceAsStream(NAV_HTML);
- String html = new String(toByteArray(navTemplate));
-
- int p1s = split(html, 0, INJECT_VIEW_ITEMS_START);
- int p1e = split(html, 0, INJECT_VIEW_ITEMS_END);
- int p2s = split(html, p1e, null);
-
- StreamEnumeration streams =
- new StreamEnumeration(of(stream(html, 0, p1s),
- includeNavItems(service),
- stream(html, p1e, p2s)));
-
- return Response.ok(new SequenceInputStream(streams)).build();
- }
-
- // Produces an input stream of nav item injections from all extensions.
- private InputStream includeNavItems(UiExtensionService service) {
- List<UiExtension> extensions = service.getExtensions();
- StringBuilder sb = new StringBuilder("\n");
-
- for (UiView.Category cat : UiView.Category.values()) {
- if (cat == UiView.Category.HIDDEN) {
- continue;
- }
-
- List<UiView> catViews = getViewsForCat(extensions, cat);
- if (!catViews.isEmpty()) {
- addCatHeader(sb, cat);
- addCatItems(sb, catViews);
- }
- }
-
- return new ByteArrayInputStream(sb.toString().getBytes());
- }
-
- private List<UiView> getViewsForCat(List<UiExtension> extensions,
- UiView.Category cat) {
- List<UiView> views = new ArrayList<>();
- for (UiExtension extension : extensions) {
- views.addAll(extension.views().stream().filter(
- view -> cat.equals(view.category())
- ).collect(Collectors.toList()));
- }
- return views;
- }
-
- private void addCatHeader(StringBuilder sb, UiView.Category cat) {
- sb.append(String.format(HDR_FORMAT, cat.label()));
- }
-
- private void addCatItems(StringBuilder sb, List<UiView> catViews) {
- for (UiView view : catViews) {
- sb.append(String.format(NAV_FORMAT, view.id(), icon(view), view.label()));
- }
- }
-
- private String icon(UiView view) {
- String gid = view.iconId() == null ? BLANK_GLYPH : view.iconId();
- return "<div icon icon-id=\"" + gid + "\"></div>";
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainViewResource.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainViewResource.java
deleted file mode 100644
index 130a7eab..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/MainViewResource.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import org.onosproject.rest.AbstractInjectionResource;
-import org.onosproject.ui.UiExtension;
-import org.onosproject.ui.UiExtensionService;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.core.Response;
-import java.io.IOException;
-
-import static javax.ws.rs.core.MediaType.APPLICATION_OCTET_STREAM;
-import static javax.ws.rs.core.MediaType.TEXT_HTML;
-
-/**
- * Resource for serving the dynamically composed onos.js.
- */
-@Path("/")
-public class MainViewResource extends AbstractInjectionResource {
-
- static final String CONTENT_TYPE = "Content-Type";
- static final String STYLESHEET = "text/css";
- static final String SCRIPT = "text/javascript";
-
- @Path("{view}/{resource}")
- @GET
- public Response getViewResource(@PathParam("view") String viewId,
- @PathParam("resource") String resource) throws IOException {
- UiExtensionService service = get(UiExtensionService.class);
- UiExtension extension = service.getViewExtension(viewId);
- return extension != null ?
- Response.ok(extension.resource(viewId, resource))
- .header(CONTENT_TYPE, contentType(resource)).build() :
- Response.status(Response.Status.NOT_FOUND).build();
- }
-
- static String contentType(String resource) {
- return resource.endsWith(".html") ? TEXT_HTML :
- resource.endsWith(".css") ? STYLESHEET :
- resource.endsWith(".js") ? SCRIPT :
- APPLICATION_OCTET_STREAM;
- }
-
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/PortViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/PortViewMessageHandler.java
deleted file mode 100644
index 92ebcf75..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/PortViewMessageHandler.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableSet;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.device.PortStatistics;
-import org.onosproject.ui.RequestHandler;
-import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.table.TableModel;
-import org.onosproject.ui.table.TableRequestHandler;
-
-import java.util.Collection;
-
-
-/**
- * Message handler for port view related messages.
- */
-public class PortViewMessageHandler extends UiMessageHandler {
-
- private static final String PORT_DATA_REQ = "portDataRequest";
- private static final String PORT_DATA_RESP = "portDataResponse";
- private static final String PORTS = "ports";
-
- private static final String ID = "id";
- private static final String PKT_RX = "pkt_rx";
- private static final String PKT_TX = "pkt_tx";
- private static final String BYTES_RX = "bytes_rx";
- private static final String BYTES_TX = "bytes_tx";
- private static final String PKT_RX_DRP = "pkt_rx_drp";
- private static final String PKT_TX_DRP = "pkt_tx_drp";
- private static final String DURATION = "duration";
-
- private static final String[] COL_IDS = {
- ID, PKT_RX, PKT_TX, BYTES_RX, BYTES_TX,
- PKT_RX_DRP, PKT_TX_DRP, DURATION
- };
-
- @Override
- protected Collection<RequestHandler> createRequestHandlers() {
- return ImmutableSet.of(new PortDataRequest());
- }
-
- // handler for port table requests
- private final class PortDataRequest extends TableRequestHandler {
-
- private PortDataRequest() {
- super(PORT_DATA_REQ, PORT_DATA_RESP, PORTS);
- }
-
- @Override
- protected String[] getColumnIds() {
- return COL_IDS;
- }
-
- @Override
- protected void populateTable(TableModel tm, ObjectNode payload) {
- String uri = string(payload, "devId");
- if (!Strings.isNullOrEmpty(uri)) {
- DeviceId deviceId = DeviceId.deviceId(uri);
- DeviceService ds = get(DeviceService.class);
- for (PortStatistics stat : ds.getPortStatistics(deviceId)) {
- populateRow(tm.addRow(), stat);
- }
- }
- }
-
- private void populateRow(TableModel.Row row, PortStatistics stat) {
- row.cell(ID, stat.port())
- .cell(PKT_RX, stat.packetsReceived())
- .cell(PKT_TX, stat.packetsSent())
- .cell(BYTES_RX, stat.bytesReceived())
- .cell(BYTES_TX, stat.bytesSent())
- .cell(PKT_RX_DRP, stat.packetsRxDropped())
- .cell(PKT_TX_DRP, stat.packetsTxDropped())
- .cell(DURATION, stat.durationSec());
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ProcessorViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ProcessorViewMessageHandler.java
deleted file mode 100644
index 5d97504e..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/ProcessorViewMessageHandler.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableSet;
-import org.onosproject.net.packet.PacketProcessorEntry;
-import org.onosproject.net.packet.PacketService;
-import org.onosproject.ui.RequestHandler;
-import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.table.TableModel;
-import org.onosproject.ui.table.TableRequestHandler;
-import org.onosproject.ui.table.cell.NumberFormatter;
-
-import java.util.Collection;
-
-import static org.onosproject.net.packet.PacketProcessor.ADVISOR_MAX;
-import static org.onosproject.net.packet.PacketProcessor.DIRECTOR_MAX;
-
-/**
- * Message handler for packet processor view related messages.
- */
-public class ProcessorViewMessageHandler extends UiMessageHandler {
-
- private static final String PROCESSOR_DATA_REQ = "processorDataRequest";
- private static final String PROCESSOR_DATA_RESP = "processorDataResponse";
- private static final String PROCESSORS = "processors";
-
- private static final String OBSERVER = "observer";
- private static final String DIRECTOR = "director";
- private static final String ADVISOR = "advisor";
-
- private static final String ID = "id";
- private static final String TYPE = "type";
- private static final String PRIORITY = "priority";
- private static final String PROCESSOR = "processor";
- private static final String PACKETS = "packets";
- private static final String AVG_MS = "avgMillis";
-
- private static final long NANOS_IN_MS = 1_000_000;
-
- private static final String[] COL_IDS = {
- ID, TYPE, PRIORITY, PROCESSOR, PACKETS, AVG_MS
- };
-
- @Override
- protected Collection<RequestHandler> createRequestHandlers() {
- return ImmutableSet.of(new ProcessorDataRequest());
- }
-
- // handler for packet processor table requests
- private final class ProcessorDataRequest extends TableRequestHandler {
- private ProcessorDataRequest() {
- super(PROCESSOR_DATA_REQ, PROCESSOR_DATA_RESP, PROCESSORS);
- }
-
- @Override
- protected String[] getColumnIds() {
- return COL_IDS;
- }
-
- @Override
- protected TableModel createTableModel() {
- TableModel tm = super.createTableModel();
- tm.setFormatter(AVG_MS, new NumberFormatter());
- return tm;
- }
-
- @Override
- protected void populateTable(TableModel tm, ObjectNode payload) {
- PacketService ps = get(PacketService.class);
- ps.getProcessors().forEach(entry -> populateRow(tm.addRow(), entry));
- }
-
- private void populateRow(TableModel.Row row, PacketProcessorEntry entry) {
- row.cell(ID, entry.priority())
- .cell(TYPE, processorType(entry.priority()))
- .cell(PRIORITY, processorPriority(entry.priority()))
- .cell(PROCESSOR, entry.processor().getClass().getName())
- .cell(PACKETS, entry.invocations())
- .cell(AVG_MS, (double) entry.averageNanos() / NANOS_IN_MS);
- }
-
- private String processorType(int p) {
- return p > DIRECTOR_MAX ? OBSERVER : p > ADVISOR_MAX ? DIRECTOR : ADVISOR;
- }
-
- private int processorPriority(int p) {
- return p > DIRECTOR_MAX ? (p - DIRECTOR_MAX - 1) :
- p > ADVISOR_MAX ? (p - ADVISOR_MAX - 1) : (p - 1);
- }
-
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/SettingsViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/SettingsViewMessageHandler.java
deleted file mode 100644
index ed413fab..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/SettingsViewMessageHandler.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableSet;
-import org.onosproject.cfg.ComponentConfigService;
-import org.onosproject.cfg.ConfigProperty;
-import org.onosproject.ui.RequestHandler;
-import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.table.TableModel;
-import org.onosproject.ui.table.TableRequestHandler;
-
-import java.util.Collection;
-
-/**
- * Message handler for component configuration view related messages.
- */
-public class SettingsViewMessageHandler extends UiMessageHandler {
-
- private static final String DATA_REQUEST = "settingDataRequest";
- private static final String DATA_RESPONSE = "settingDataResponse";
- private static final String SETTINGS = "settings";
-
- private static final String COMPONENT = "component";
- private static final String ID = "id";
- private static final String TYPE = "type";
- private static final String VALUE = "value";
- private static final String DEFAULT = "defValue";
- private static final String DESC = "desc";
-
- private static final String[] COL_IDS = {
- COMPONENT, ID, TYPE, VALUE, DEFAULT, DESC
- };
-
- @Override
- protected Collection<RequestHandler> createRequestHandlers() {
- return ImmutableSet.of(new SettingsRequest());
- }
-
- // handler for host table requests
- private final class SettingsRequest extends TableRequestHandler {
- private SettingsRequest() {
- super(DATA_REQUEST, DATA_RESPONSE, SETTINGS);
- }
-
- @Override
- protected String[] getColumnIds() {
- return COL_IDS;
- }
-
- @Override
- protected String defaultColumnId() {
- return COMPONENT;
- }
-
- @Override
- protected TableModel createTableModel() {
- TableModel tm = super.createTableModel();
- return tm;
- }
-
- @Override
- protected void populateTable(TableModel tm, ObjectNode payload) {
- ComponentConfigService ccs = get(ComponentConfigService.class);
- for (String component : ccs.getComponentNames()) {
- for (ConfigProperty prop : ccs.getProperties(component)) {
- populateRow(tm.addRow(), component, prop);
- }
- }
- }
-
- private void populateRow(TableModel.Row row, String component, ConfigProperty prop) {
- row.cell(COMPONENT, component)
- .cell(ID, prop.name())
- .cell(TYPE, prop.type().toString().toLowerCase())
- .cell(VALUE, prop.value())
- .cell(DEFAULT, prop.defaultValue())
- .cell(DESC, prop.description());
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/SpriteService.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/SpriteService.java
deleted file mode 100644
index 7312329c..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/SpriteService.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.JsonNode;
-
-import java.util.Set;
-
-/**
- * Provisional service to keep track of the topology view sprite definitions.
- */
-public interface SpriteService {
-
- /**
- * Returns set of registered sprite definition names.
- *
- * @return set of sprite definition names
- */
- Set<String> getNames();
-
- /**
- * Registers sprite data under the specified name.
- *
- * @param name sprite definition name
- * @param spriteData sprite data
- */
- void put(String name, JsonNode spriteData);
-
- /**
- * Returns the sprite definition registered under the given name.
- *
- * @param name sprite definition name
- * @return sprite data
- */
- JsonNode get(String name);
-
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopoOverlayCache.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopoOverlayCache.java
deleted file mode 100644
index 99557c2d..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopoOverlayCache.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.onosproject.ui.impl;
-
-import org.onosproject.ui.UiTopoOverlay;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import static com.google.common.base.Strings.isNullOrEmpty;
-
-/**
- * A cache of {@link org.onosproject.ui.UiTopoOverlay}'s that were registered
- * at the time the UI connection was established.
- */
-public class TopoOverlayCache {
-
- private static final String EMPTY = "";
- private static final UiTopoOverlay NONE = new NullOverlay();
-
- private final Map<String, UiTopoOverlay> overlays = new HashMap<>();
- private UiTopoOverlay current = NONE;
-
- public TopoOverlayCache() {
- overlays.put(null, NONE);
- }
-
- /**
- * Adds a topology overlay to the cache.
- *
- * @param overlay a topology overlay
- */
- public void add(UiTopoOverlay overlay) {
- overlays.put(overlay.id(), overlay);
- }
-
- /**
- * Invoked when the cache is no longer needed.
- */
- public void destroy() {
- overlays.clear();
- }
-
- /**
- * Switching currently selected overlay.
- *
- * @param deact identity of overlay to deactivate
- * @param act identity of overlay to activate
- */
- public void switchOverlay(String deact, String act) {
- UiTopoOverlay toDeactivate = getOverlay(deact);
- UiTopoOverlay toActivate = getOverlay(act);
-
- toDeactivate.deactivate();
- current = toActivate;
- current.activate();
- }
-
- private UiTopoOverlay getOverlay(String id) {
- return isNullOrEmpty(id) ? NONE : overlays.get(id);
- }
-
- /**
- * Returns the current overlay instance.
- * Note that this method always returns a reference; when there is no
- * overlay selected the "NULL" overlay instance is returned.
- *
- * @return the current overlay
- */
- public UiTopoOverlay currentOverlay() {
- return current;
- }
-
- /**
- * Returns the number of overlays in the cache. Remember that this
- * includes the "NULL" overlay, representing "no overlay selected".
- *
- * @return number of overlays
- */
- public int size() {
- return overlays.size();
- }
-
- /**
- * Returns true if the identifier of the currently active overlay
- * matches the given parameter.
- *
- * @param overlayId overlay identifier
- * @return true if this matches the ID of currently active overlay
- */
- public boolean isActive(String overlayId) {
- return currentOverlay().id().equals(overlayId);
- }
-
- // overlay instance representing "no overlay selected"
- private static class NullOverlay extends UiTopoOverlay {
- public NullOverlay() {
- super(EMPTY);
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java
deleted file mode 100644
index 30960911..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2014-2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.onlab.rest.BaseResource;
-import org.slf4j.Logger;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Response;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map;
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Topology viewer resource.
- */
-@Path("topology")
-public class TopologyResource extends BaseResource {
-
- private static final Logger log = getLogger(TopologyResource.class);
-
- private final ObjectMapper mapper = new ObjectMapper();
-
- @Path("geoloc")
- @GET
- @Produces("application/json")
- public Response getGeoLocations() {
- ObjectNode rootNode = mapper.createObjectNode();
- ArrayNode devices = mapper.createArrayNode();
- ArrayNode hosts = mapper.createArrayNode();
-
- Map<String, ObjectNode> metaUi = TopologyViewMessageHandler.getMetaUi();
- for (String id : metaUi.keySet()) {
- ObjectNode memento = metaUi.get(id);
- if (id.length() > 17 && id.charAt(17) == '/') {
- addGeoData(hosts, "id", id, memento);
- } else {
- addGeoData(devices, "uri", id, memento);
- }
- }
-
- rootNode.set("devices", devices);
- rootNode.set("hosts", hosts);
- return Response.ok(rootNode.toString()).build();
- }
-
- private void addGeoData(ArrayNode array, String idField, String id,
- ObjectNode memento) {
- ObjectNode node = mapper.createObjectNode().put(idField, id);
- ObjectNode annot = mapper.createObjectNode();
- node.set("annotations", annot);
- try {
- annot.put("latitude", memento.get("lat").asDouble())
- .put("longitude", memento.get("lng").asDouble());
- array.add(node);
- } catch (Exception e) {
- log.debug("Skipping geo entry");
- }
- }
-
- @Path("sprites")
- @POST
- @Consumes("application/json")
- public Response setSprites(InputStream stream) throws IOException {
- JsonNode root = mapper.readTree(stream);
- String name = root.path("defn_name").asText("sprites");
- get(SpriteService.class).put(name, root);
- return Response.ok().build();
- }
-
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java
deleted file mode 100644
index 700e57e3..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java
+++ /dev/null
@@ -1,826 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableSet;
-import org.onlab.osgi.ServiceDirectory;
-import org.onlab.util.AbstractAccumulator;
-import org.onlab.util.Accumulator;
-import org.onosproject.cluster.ClusterEvent;
-import org.onosproject.cluster.ClusterEventListener;
-import org.onosproject.cluster.ControllerNode;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-import org.onosproject.core.DefaultApplicationId;
-import org.onosproject.event.Event;
-import org.onosproject.mastership.MastershipAdminService;
-import org.onosproject.mastership.MastershipEvent;
-import org.onosproject.mastership.MastershipListener;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.Link;
-import org.onosproject.net.device.DeviceEvent;
-import org.onosproject.net.device.DeviceListener;
-import org.onosproject.net.flow.DefaultTrafficSelector;
-import org.onosproject.net.flow.DefaultTrafficTreatment;
-import org.onosproject.net.flow.FlowRuleEvent;
-import org.onosproject.net.flow.FlowRuleListener;
-import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.host.HostEvent;
-import org.onosproject.net.host.HostListener;
-import org.onosproject.net.intent.HostToHostIntent;
-import org.onosproject.net.intent.Intent;
-import org.onosproject.net.intent.IntentEvent;
-import org.onosproject.net.intent.IntentListener;
-import org.onosproject.net.intent.Key;
-import org.onosproject.net.intent.MultiPointToSinglePointIntent;
-import org.onosproject.net.link.LinkEvent;
-import org.onosproject.net.link.LinkListener;
-import org.onosproject.ui.JsonUtils;
-import org.onosproject.ui.RequestHandler;
-import org.onosproject.ui.UiConnection;
-import org.onosproject.ui.impl.TrafficMonitor.Mode;
-import org.onosproject.ui.topo.Highlights;
-import org.onosproject.ui.topo.NodeSelection;
-import org.onosproject.ui.topo.PropertyPanel;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.Timer;
-import java.util.TimerTask;
-import java.util.concurrent.ExecutorService;
-
-import static java.util.concurrent.Executors.newSingleThreadExecutor;
-import static org.onlab.util.Tools.groupedThreads;
-import static org.onosproject.cluster.ClusterEvent.Type.INSTANCE_ADDED;
-import static org.onosproject.net.DeviceId.deviceId;
-import static org.onosproject.net.HostId.hostId;
-import static org.onosproject.net.device.DeviceEvent.Type.DEVICE_ADDED;
-import static org.onosproject.net.device.DeviceEvent.Type.DEVICE_UPDATED;
-import static org.onosproject.net.device.DeviceEvent.Type.PORT_STATS_UPDATED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
-import static org.onosproject.net.link.LinkEvent.Type.LINK_ADDED;
-import static org.onosproject.ui.JsonUtils.envelope;
-import static org.onosproject.ui.topo.TopoJson.highlightsMessage;
-import static org.onosproject.ui.topo.TopoJson.json;
-
-/**
- * Web socket capable of interacting with the GUI topology view.
- */
-public class TopologyViewMessageHandler extends TopologyViewMessageHandlerBase {
-
- // incoming event types
- private static final String REQ_DETAILS = "requestDetails";
- private static final String UPDATE_META = "updateMeta";
- private static final String ADD_HOST_INTENT = "addHostIntent";
- private static final String ADD_MULTI_SRC_INTENT = "addMultiSourceIntent";
- private static final String REQ_RELATED_INTENTS = "requestRelatedIntents";
- private static final String REQ_NEXT_INTENT = "requestNextRelatedIntent";
- private static final String REQ_PREV_INTENT = "requestPrevRelatedIntent";
- private static final String REQ_SEL_INTENT_TRAFFIC = "requestSelectedIntentTraffic";
- private static final String SEL_INTENT = "selectIntent";
- private static final String REQ_ALL_FLOW_TRAFFIC = "requestAllFlowTraffic";
- private static final String REQ_ALL_PORT_TRAFFIC = "requestAllPortTraffic";
- private static final String REQ_DEV_LINK_FLOWS = "requestDeviceLinkFlows";
- private static final String CANCEL_TRAFFIC = "cancelTraffic";
- private static final String REQ_SUMMARY = "requestSummary";
- private static final String CANCEL_SUMMARY = "cancelSummary";
- private static final String EQ_MASTERS = "equalizeMasters";
- private static final String SPRITE_LIST_REQ = "spriteListRequest";
- private static final String SPRITE_DATA_REQ = "spriteDataRequest";
- private static final String TOPO_START = "topoStart";
- private static final String TOPO_HEARTBEAT = "topoHeartbeat";
- private static final String TOPO_SELECT_OVERLAY = "topoSelectOverlay";
- private static final String TOPO_STOP = "topoStop";
-
- // outgoing event types
- private static final String SHOW_SUMMARY = "showSummary";
- private static final String SHOW_DETAILS = "showDetails";
- private static final String SPRITE_LIST_RESPONSE = "spriteListResponse";
- private static final String SPRITE_DATA_RESPONSE = "spriteDataResponse";
- private static final String UPDATE_INSTANCE = "updateInstance";
- private static final String TOPO_START_DONE = "topoStartDone";
-
- // fields
- private static final String ID = "id";
- private static final String KEY = "key";
- private static final String APP_ID = "appId";
- private static final String APP_NAME = "appName";
- private static final String DEVICE = "device";
- private static final String HOST = "host";
- private static final String CLASS = "class";
- private static final String UNKNOWN = "unknown";
- private static final String ONE = "one";
- private static final String TWO = "two";
- private static final String SRC = "src";
- private static final String DST = "dst";
- private static final String DATA = "data";
- private static final String NAME = "name";
- private static final String NAMES = "names";
- private static final String ACTIVATE = "activate";
- private static final String DEACTIVATE = "deactivate";
-
-
- private static final String MY_APP_ID = "org.onosproject.gui";
-
- private static final long TRAFFIC_PERIOD = 5000;
- private static final long SUMMARY_PERIOD = 30000;
-
- private static final Comparator<? super ControllerNode> NODE_COMPARATOR =
- (o1, o2) -> o1.id().toString().compareTo(o2.id().toString());
-
-
- private final Timer timer = new Timer("onos-topology-view");
-
- private static final int MAX_EVENTS = 1000;
- private static final int MAX_BATCH_MS = 5000;
- private static final int MAX_IDLE_MS = 1000;
-
- private ApplicationId appId;
-
- private final ClusterEventListener clusterListener = new InternalClusterListener();
- private final MastershipListener mastershipListener = new InternalMastershipListener();
- private final DeviceListener deviceListener = new InternalDeviceListener();
- private final LinkListener linkListener = new InternalLinkListener();
- private final HostListener hostListener = new InternalHostListener();
- private final IntentListener intentListener = new InternalIntentListener();
- private final FlowRuleListener flowListener = new InternalFlowListener();
-
- private final Accumulator<Event> eventAccummulator = new InternalEventAccummulator();
- private final ExecutorService msgSender =
- newSingleThreadExecutor(groupedThreads("onos/gui", "msg-sender"));
-
- private TopoOverlayCache overlayCache;
- private TrafficMonitor traffic;
-
- private TimerTask summaryTask = null;
- private boolean summaryRunning = false;
-
- private boolean listenersRemoved = false;
-
-
- @Override
- public void init(UiConnection connection, ServiceDirectory directory) {
- super.init(connection, directory);
- appId = directory.get(CoreService.class).registerApplication(MY_APP_ID);
- traffic = new TrafficMonitor(TRAFFIC_PERIOD, servicesBundle, this);
- }
-
- @Override
- public void destroy() {
- cancelAllRequests();
- removeListeners();
- super.destroy();
- }
-
- @Override
- protected Collection<RequestHandler> createRequestHandlers() {
- return ImmutableSet.of(
- new TopoStart(),
- new TopoHeartbeat(),
- new TopoSelectOverlay(),
- new TopoStop(),
- new ReqSummary(),
- new CancelSummary(),
- new SpriteListReq(),
- new SpriteDataReq(),
- new RequestDetails(),
- new UpdateMeta(),
- new EqMasters(),
-
- // TODO: migrate traffic related to separate app
- new AddHostIntent(),
- new AddMultiSourceIntent(),
-
- new ReqAllFlowTraffic(),
- new ReqAllPortTraffic(),
- new ReqDevLinkFlows(),
- new ReqRelatedIntents(),
- new ReqNextIntent(),
- new ReqPrevIntent(),
- new ReqSelectedIntentTraffic(),
- new SelIntent(),
-
- new CancelTraffic()
- );
- }
-
- /**
- * Injects the topology overlay cache.
- *
- * @param overlayCache injected cache
- */
- void setOverlayCache(TopoOverlayCache overlayCache) {
- this.overlayCache = overlayCache;
- }
-
- // ==================================================================
-
- private final class TopoStart extends RequestHandler {
- private TopoStart() {
- super(TOPO_START);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- addListeners();
- sendAllInstances(null);
- sendAllDevices();
- sendAllLinks();
- sendAllHosts();
- sendTopoStartDone();
- }
- }
-
- private final class TopoHeartbeat extends RequestHandler {
- private TopoHeartbeat() {
- super(TOPO_HEARTBEAT);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- // place holder for now
- }
- }
-
- private final class TopoSelectOverlay extends RequestHandler {
- private TopoSelectOverlay() {
- super(TOPO_SELECT_OVERLAY);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- String deact = string(payload, DEACTIVATE);
- String act = string(payload, ACTIVATE);
- overlayCache.switchOverlay(deact, act);
- }
- }
-
- private final class TopoStop extends RequestHandler {
- private TopoStop() {
- super(TOPO_STOP);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- removeListeners();
- stopSummaryMonitoring();
- traffic.stopMonitoring();
- }
- }
-
- private final class ReqSummary extends RequestHandler {
- private ReqSummary() {
- super(REQ_SUMMARY);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- requestSummary(sid);
- startSummaryMonitoring();
- }
- }
-
- private final class CancelSummary extends RequestHandler {
- private CancelSummary() {
- super(CANCEL_SUMMARY);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- stopSummaryMonitoring();
- }
- }
-
- private final class SpriteListReq extends RequestHandler {
- private SpriteListReq() {
- super(SPRITE_LIST_REQ);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- ObjectNode root = objectNode();
- ArrayNode names = arrayNode();
- get(SpriteService.class).getNames().forEach(names::add);
- root.set(NAMES, names);
- sendMessage(SPRITE_LIST_RESPONSE, sid, root);
- }
- }
-
- private final class SpriteDataReq extends RequestHandler {
- private SpriteDataReq() {
- super(SPRITE_DATA_REQ);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- String name = string(payload, NAME);
- ObjectNode root = objectNode();
- root.set(DATA, get(SpriteService.class).get(name));
- sendMessage(SPRITE_DATA_RESPONSE, sid, root);
- }
- }
-
- private final class RequestDetails extends RequestHandler {
- private RequestDetails() {
- super(REQ_DETAILS);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- String type = string(payload, CLASS, UNKNOWN);
- String id = string(payload, ID);
- PropertyPanel pp = null;
-
- if (type.equals(DEVICE)) {
- DeviceId did = deviceId(id);
- pp = deviceDetails(did, sid);
- overlayCache.currentOverlay().modifyDeviceDetails(pp, did);
- } else if (type.equals(HOST)) {
- HostId hid = hostId(id);
- pp = hostDetails(hid, sid);
- overlayCache.currentOverlay().modifyHostDetails(pp, hid);
- }
-
- sendMessage(envelope(SHOW_DETAILS, sid, json(pp)));
- }
- }
-
- private final class UpdateMeta extends RequestHandler {
- private UpdateMeta() {
- super(UPDATE_META);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- updateMetaUi(payload);
- }
- }
-
- private final class EqMasters extends RequestHandler {
- private EqMasters() {
- super(EQ_MASTERS);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- directory.get(MastershipAdminService.class).balanceRoles();
- }
- }
-
-
- // ========= -----------------------------------------------------------------
-
- // === TODO: move traffic related classes to traffic app
-
- private final class AddHostIntent extends RequestHandler {
- private AddHostIntent() {
- super(ADD_HOST_INTENT);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- // TODO: add protection against device ids and non-existent hosts.
- HostId one = hostId(string(payload, ONE));
- HostId two = hostId(string(payload, TWO));
-
- HostToHostIntent intent = HostToHostIntent.builder()
- .appId(appId)
- .one(one)
- .two(two)
- .build();
-
- intentService.submit(intent);
- if (overlayCache.isActive(TrafficOverlay.TRAFFIC_ID)) {
- traffic.monitor(intent);
- }
- }
- }
-
- private final class AddMultiSourceIntent extends RequestHandler {
- private AddMultiSourceIntent() {
- super(ADD_MULTI_SRC_INTENT);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- // TODO: add protection against device ids and non-existent hosts.
- Set<HostId> src = getHostIds((ArrayNode) payload.path(SRC));
- HostId dst = hostId(string(payload, DST));
- Host dstHost = hostService.getHost(dst);
-
- Set<ConnectPoint> ingressPoints = getHostLocations(src);
-
- // FIXME: clearly, this is not enough
- TrafficSelector selector = DefaultTrafficSelector.builder()
- .matchEthDst(dstHost.mac()).build();
- TrafficTreatment treatment = DefaultTrafficTreatment.emptyTreatment();
-
- MultiPointToSinglePointIntent intent =
- MultiPointToSinglePointIntent.builder()
- .appId(appId)
- .selector(selector)
- .treatment(treatment)
- .ingressPoints(ingressPoints)
- .egressPoint(dstHost.location())
- .build();
-
- intentService.submit(intent);
- if (overlayCache.isActive(TrafficOverlay.TRAFFIC_ID)) {
- traffic.monitor(intent);
- }
- }
- }
-
- // ========= -----------------------------------------------------------------
-
- private final class ReqAllFlowTraffic extends RequestHandler {
- private ReqAllFlowTraffic() {
- super(REQ_ALL_FLOW_TRAFFIC);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- traffic.monitor(Mode.ALL_FLOW_TRAFFIC);
- }
- }
-
- private final class ReqAllPortTraffic extends RequestHandler {
- private ReqAllPortTraffic() {
- super(REQ_ALL_PORT_TRAFFIC);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- traffic.monitor(Mode.ALL_PORT_TRAFFIC);
- }
- }
-
- private final class ReqDevLinkFlows extends RequestHandler {
- private ReqDevLinkFlows() {
- super(REQ_DEV_LINK_FLOWS);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- NodeSelection nodeSelection =
- new NodeSelection(payload, deviceService, hostService);
- traffic.monitor(Mode.DEV_LINK_FLOWS, nodeSelection);
- }
- }
-
- private final class ReqRelatedIntents extends RequestHandler {
- private ReqRelatedIntents() {
- super(REQ_RELATED_INTENTS);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- NodeSelection nodeSelection =
- new NodeSelection(payload, deviceService, hostService);
- traffic.monitor(Mode.RELATED_INTENTS, nodeSelection);
- }
- }
-
- private final class ReqNextIntent extends RequestHandler {
- private ReqNextIntent() {
- super(REQ_NEXT_INTENT);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- traffic.selectNextIntent();
- }
- }
-
- private final class ReqPrevIntent extends RequestHandler {
- private ReqPrevIntent() {
- super(REQ_PREV_INTENT);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- traffic.selectPreviousIntent();
- }
- }
-
- private final class ReqSelectedIntentTraffic extends RequestHandler {
- private ReqSelectedIntentTraffic() {
- super(REQ_SEL_INTENT_TRAFFIC);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- traffic.monitor(Mode.SELECTED_INTENT);
- }
- }
-
- private final class SelIntent extends RequestHandler {
- private SelIntent() {
- super(SEL_INTENT);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- int appId = Integer.parseInt(string(payload, APP_ID));
- String appName = string(payload, APP_NAME);
- ApplicationId applicId = new DefaultApplicationId(appId, appName);
- long intentKey = Long.decode(string(payload, KEY));
-
- Key key = Key.of(intentKey, applicId);
- log.debug("Attempting to select intent key={}", key);
-
- Intent intent = intentService.getIntent(key);
- if (intent == null) {
- log.debug("no such intent found!");
- } else {
- log.debug("starting to monitor intent {}", key);
- traffic.monitor(intent);
- }
- }
- }
-
- private final class CancelTraffic extends RequestHandler {
- private CancelTraffic() {
- super(CANCEL_TRAFFIC);
- }
-
- @Override
- public void process(long sid, ObjectNode payload) {
- traffic.stopMonitoring();
- }
- }
-
- //=======================================================================
-
- // Converts highlights to JSON format and sends the message to the client
- protected void sendHighlights(Highlights highlights) {
- sendMessage(highlightsMessage(highlights));
- }
-
- // Subscribes for summary messages.
- private synchronized void requestSummary(long sid) {
- PropertyPanel pp = summmaryMessage(sid);
- overlayCache.currentOverlay().modifySummary(pp);
- sendMessage(envelope(SHOW_SUMMARY, sid, json(pp)));
- }
-
-
- private void cancelAllRequests() {
- stopSummaryMonitoring();
- traffic.stopMonitoring();
- }
-
- // Sends all controller nodes to the client as node-added messages.
- private void sendAllInstances(String messageType) {
- List<ControllerNode> nodes = new ArrayList<>(clusterService.getNodes());
- Collections.sort(nodes, NODE_COMPARATOR);
- for (ControllerNode node : nodes) {
- sendMessage(instanceMessage(new ClusterEvent(INSTANCE_ADDED, node),
- messageType));
- }
- }
-
- // Sends all devices to the client as device-added messages.
- private void sendAllDevices() {
- // Send optical first, others later for layered rendering
- for (Device device : deviceService.getDevices()) {
- if (device.type() == Device.Type.ROADM) {
- sendMessage(deviceMessage(new DeviceEvent(DEVICE_ADDED, device)));
- }
- }
- for (Device device : deviceService.getDevices()) {
- if (device.type() != Device.Type.ROADM) {
- sendMessage(deviceMessage(new DeviceEvent(DEVICE_ADDED, device)));
- }
- }
- }
-
- // Sends all links to the client as link-added messages.
- private void sendAllLinks() {
- // Send optical first, others later for layered rendering
- for (Link link : linkService.getLinks()) {
- if (link.type() == Link.Type.OPTICAL) {
- sendMessage(linkMessage(new LinkEvent(LINK_ADDED, link)));
- }
- }
- for (Link link : linkService.getLinks()) {
- if (link.type() != Link.Type.OPTICAL) {
- sendMessage(linkMessage(new LinkEvent(LINK_ADDED, link)));
- }
- }
- }
-
- // Sends all hosts to the client as host-added messages.
- private void sendAllHosts() {
- for (Host host : hostService.getHosts()) {
- sendMessage(hostMessage(new HostEvent(HOST_ADDED, host)));
- }
- }
-
- private Set<ConnectPoint> getHostLocations(Set<HostId> hostIds) {
- Set<ConnectPoint> points = new HashSet<>();
- for (HostId hostId : hostIds) {
- points.add(getHostLocation(hostId));
- }
- return points;
- }
-
- private HostLocation getHostLocation(HostId hostId) {
- return hostService.getHost(hostId).location();
- }
-
- // Produces a list of host ids from the specified JSON array.
- private Set<HostId> getHostIds(ArrayNode ids) {
- Set<HostId> hostIds = new HashSet<>();
- for (JsonNode id : ids) {
- hostIds.add(hostId(id.asText()));
- }
- return hostIds;
- }
-
- private void sendTopoStartDone() {
- sendMessage(JsonUtils.envelope(TOPO_START_DONE, objectNode()));
- }
-
- private synchronized void startSummaryMonitoring() {
- stopSummaryMonitoring();
- summaryTask = new SummaryMonitor();
- timer.schedule(summaryTask, SUMMARY_PERIOD, SUMMARY_PERIOD);
- summaryRunning = true;
- }
-
- private synchronized void stopSummaryMonitoring() {
- if (summaryTask != null) {
- summaryTask.cancel();
- summaryTask = null;
- }
- summaryRunning = false;
- }
-
-
- // Adds all internal listeners.
- private synchronized void addListeners() {
- listenersRemoved = false;
- clusterService.addListener(clusterListener);
- mastershipService.addListener(mastershipListener);
- deviceService.addListener(deviceListener);
- linkService.addListener(linkListener);
- hostService.addListener(hostListener);
- intentService.addListener(intentListener);
- flowService.addListener(flowListener);
- }
-
- // Removes all internal listeners.
- private synchronized void removeListeners() {
- if (!listenersRemoved) {
- listenersRemoved = true;
- clusterService.removeListener(clusterListener);
- mastershipService.removeListener(mastershipListener);
- deviceService.removeListener(deviceListener);
- linkService.removeListener(linkListener);
- hostService.removeListener(hostListener);
- intentService.removeListener(intentListener);
- flowService.removeListener(flowListener);
- }
- }
-
- // Cluster event listener.
- private class InternalClusterListener implements ClusterEventListener {
- @Override
- public void event(ClusterEvent event) {
- msgSender.execute(() -> sendMessage(instanceMessage(event, null)));
- }
- }
-
- // Mastership change listener
- private class InternalMastershipListener implements MastershipListener {
- @Override
- public void event(MastershipEvent event) {
- msgSender.execute(() -> {
- sendAllInstances(UPDATE_INSTANCE);
- Device device = deviceService.getDevice(event.subject());
- if (device != null) {
- sendMessage(deviceMessage(new DeviceEvent(DEVICE_UPDATED, device)));
- }
- });
- }
- }
-
- // Device event listener.
- private class InternalDeviceListener implements DeviceListener {
- @Override
- public void event(DeviceEvent event) {
- if (event.type() != PORT_STATS_UPDATED) {
- msgSender.execute(() -> sendMessage(deviceMessage(event)));
- eventAccummulator.add(event);
- }
- }
- }
-
- // Link event listener.
- private class InternalLinkListener implements LinkListener {
- @Override
- public void event(LinkEvent event) {
- msgSender.execute(() -> sendMessage(linkMessage(event)));
- eventAccummulator.add(event);
- }
- }
-
- // Host event listener.
- private class InternalHostListener implements HostListener {
- @Override
- public void event(HostEvent event) {
- msgSender.execute(() -> sendMessage(hostMessage(event)));
- eventAccummulator.add(event);
- }
- }
-
- // Intent event listener.
- private class InternalIntentListener implements IntentListener {
- @Override
- public void event(IntentEvent event) {
- msgSender.execute(traffic::pokeIntent);
- eventAccummulator.add(event);
- }
- }
-
- // Intent event listener.
- private class InternalFlowListener implements FlowRuleListener {
- @Override
- public void event(FlowRuleEvent event) {
- eventAccummulator.add(event);
- }
- }
-
-
- // === SUMMARY MONITORING
-
- // Periodic update of the summary information
- private class SummaryMonitor extends TimerTask {
- @Override
- public void run() {
- try {
- if (summaryRunning) {
- msgSender.execute(() -> requestSummary(0));
- }
- } catch (Exception e) {
- log.warn("Unable to handle summary request due to {}", e.getMessage());
- log.warn("Boom!", e);
- }
- }
- }
-
- // Accumulates events to drive methodic update of the summary pane.
- private class InternalEventAccummulator extends AbstractAccumulator<Event> {
- protected InternalEventAccummulator() {
- super(new Timer("topo-summary"), MAX_EVENTS, MAX_BATCH_MS, MAX_IDLE_MS);
- }
-
- @Override
- public void processItems(List<Event> items) {
- // Start-of-Debugging -- Keep in until ONOS-2572 is fixed for reals
- long now = System.currentTimeMillis();
- String me = this.toString();
- String miniMe = me.replaceAll("^.*@", "me@");
- log.debug("Time: {}; this: {}, processing items ({} events)",
- now, miniMe, items.size());
- // End-of-Debugging
-
- try {
- if (summaryRunning) {
- msgSender.execute(() -> requestSummary(0));
- }
- } catch (Exception e) {
- log.warn("Unable to handle summary request due to {}", e.getMessage());
- log.debug("Boom!", e);
- }
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
deleted file mode 100644
index a8e112a4..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.onlab.osgi.ServiceDirectory;
-import org.onlab.packet.IpAddress;
-import org.onlab.util.DefaultHashMap;
-import org.onosproject.cluster.ClusterEvent;
-import org.onosproject.cluster.ClusterService;
-import org.onosproject.cluster.ControllerNode;
-import org.onosproject.cluster.NodeId;
-import org.onosproject.core.CoreService;
-import org.onosproject.incubator.net.PortStatisticsService;
-import org.onosproject.incubator.net.tunnel.OpticalTunnelEndPoint;
-import org.onosproject.incubator.net.tunnel.Tunnel;
-import org.onosproject.incubator.net.tunnel.TunnelService;
-import org.onosproject.mastership.MastershipService;
-import org.onosproject.net.Annotated;
-import org.onosproject.net.AnnotationKeys;
-import org.onosproject.net.Annotations;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.DefaultEdgeLink;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.EdgeLink;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.Link;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.device.DeviceEvent;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.flow.FlowEntry;
-import org.onosproject.net.flow.FlowRuleService;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.flow.instructions.Instructions.OutputInstruction;
-import org.onosproject.net.host.HostEvent;
-import org.onosproject.net.host.HostService;
-import org.onosproject.net.intent.IntentService;
-import org.onosproject.net.link.LinkEvent;
-import org.onosproject.net.link.LinkService;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.statistic.StatisticService;
-import org.onosproject.net.topology.Topology;
-import org.onosproject.net.topology.TopologyService;
-import org.onosproject.ui.JsonUtils;
-import org.onosproject.ui.UiConnection;
-import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.impl.topo.ServicesBundle;
-import org.onosproject.ui.topo.PropertyPanel;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static org.onosproject.cluster.ControllerNode.State.ACTIVE;
-import static org.onosproject.net.DefaultEdgeLink.createEdgeLink;
-import static org.onosproject.net.PortNumber.portNumber;
-import static org.onosproject.ui.topo.TopoConstants.CoreButtons;
-import static org.onosproject.ui.topo.TopoConstants.Properties;
-import static org.onosproject.ui.topo.TopoUtils.compactLinkString;
-
-/**
- * Facility for creating messages bound for the topology viewer.
- */
-public abstract class TopologyViewMessageHandlerBase extends UiMessageHandler {
-
- // default to an "add" event...
- private static final DefaultHashMap<ClusterEvent.Type, String> CLUSTER_EVENT =
- new DefaultHashMap<>("addInstance");
-
- // default to an "update" event...
- private static final DefaultHashMap<DeviceEvent.Type, String> DEVICE_EVENT =
- new DefaultHashMap<>("updateDevice");
- private static final DefaultHashMap<LinkEvent.Type, String> LINK_EVENT =
- new DefaultHashMap<>("updateLink");
- private static final DefaultHashMap<HostEvent.Type, String> HOST_EVENT =
- new DefaultHashMap<>("updateHost");
-
- // but call out specific events that we care to differentiate...
- static {
- CLUSTER_EVENT.put(ClusterEvent.Type.INSTANCE_REMOVED, "removeInstance");
-
- DEVICE_EVENT.put(DeviceEvent.Type.DEVICE_ADDED, "addDevice");
- DEVICE_EVENT.put(DeviceEvent.Type.DEVICE_REMOVED, "removeDevice");
-
- LINK_EVENT.put(LinkEvent.Type.LINK_ADDED, "addLink");
- LINK_EVENT.put(LinkEvent.Type.LINK_REMOVED, "removeLink");
-
- HOST_EVENT.put(HostEvent.Type.HOST_ADDED, "addHost");
- HOST_EVENT.put(HostEvent.Type.HOST_REMOVED, "removeHost");
- HOST_EVENT.put(HostEvent.Type.HOST_MOVED, "moveHost");
- }
-
- protected static final Logger log =
- LoggerFactory.getLogger(TopologyViewMessageHandlerBase.class);
-
- private static final ProviderId PID =
- new ProviderId("core", "org.onosproject.core", true);
-
- protected static final String SHOW_HIGHLIGHTS = "showHighlights";
-
- protected ServiceDirectory directory;
- protected ClusterService clusterService;
- protected DeviceService deviceService;
- protected LinkService linkService;
- protected HostService hostService;
- protected MastershipService mastershipService;
- protected IntentService intentService;
- protected FlowRuleService flowService;
- protected StatisticService flowStatsService;
- protected PortStatisticsService portStatsService;
- protected TopologyService topologyService;
- protected TunnelService tunnelService;
-
- protected ServicesBundle servicesBundle;
-
- private String version;
-
- // TODO: extract into an external & durable state; good enough for now and demo
- private static Map<String, ObjectNode> metaUi = new ConcurrentHashMap<>();
-
- /**
- * Returns read-only view of the meta-ui information.
- *
- * @return map of id to meta-ui mementos
- */
- static Map<String, ObjectNode> getMetaUi() {
- return Collections.unmodifiableMap(metaUi);
- }
-
- @Override
- public void init(UiConnection connection, ServiceDirectory directory) {
- super.init(connection, directory);
- this.directory = checkNotNull(directory, "Directory cannot be null");
- clusterService = directory.get(ClusterService.class);
- deviceService = directory.get(DeviceService.class);
- linkService = directory.get(LinkService.class);
- hostService = directory.get(HostService.class);
- mastershipService = directory.get(MastershipService.class);
- intentService = directory.get(IntentService.class);
- flowService = directory.get(FlowRuleService.class);
- flowStatsService = directory.get(StatisticService.class);
- portStatsService = directory.get(PortStatisticsService.class);
- topologyService = directory.get(TopologyService.class);
- tunnelService = directory.get(TunnelService.class);
-
- servicesBundle = new ServicesBundle(intentService, deviceService,
- hostService, linkService,
- flowService,
- flowStatsService, portStatsService);
-
- String ver = directory.get(CoreService.class).version().toString();
- version = ver.replace(".SNAPSHOT", "*").replaceFirst("~.*$", "");
- }
-
- // Returns the specified set of IP addresses as a string.
- private String ip(Set<IpAddress> ipAddresses) {
- Iterator<IpAddress> it = ipAddresses.iterator();
- return it.hasNext() ? it.next().toString() : "unknown";
- }
-
- // Produces JSON structure from annotations.
- private JsonNode props(Annotations annotations) {
- ObjectNode props = objectNode();
- if (annotations != null) {
- for (String key : annotations.keys()) {
- props.put(key, annotations.value(key));
- }
- }
- return props;
- }
-
- // Produces an informational log message event bound to the client.
- protected ObjectNode info(long id, String message) {
- return message("info", id, message);
- }
-
- // Produces a warning log message event bound to the client.
- protected ObjectNode warning(long id, String message) {
- return message("warning", id, message);
- }
-
- // Produces an error log message event bound to the client.
- protected ObjectNode error(long id, String message) {
- return message("error", id, message);
- }
-
- // Produces a log message event bound to the client.
- private ObjectNode message(String severity, long id, String message) {
- ObjectNode payload = objectNode()
- .put("severity", severity)
- .put("message", message);
-
- return JsonUtils.envelope("message", id, payload);
- }
-
- // Produces a cluster instance message to the client.
- protected ObjectNode instanceMessage(ClusterEvent event, String msgType) {
- ControllerNode node = event.subject();
- int switchCount = mastershipService.getDevicesOf(node.id()).size();
- ObjectNode payload = objectNode()
- .put("id", node.id().toString())
- .put("ip", node.ip().toString())
- .put("online", clusterService.getState(node.id()) == ACTIVE)
- .put("uiAttached", node.equals(clusterService.getLocalNode()))
- .put("switches", switchCount);
-
- ArrayNode labels = arrayNode();
- labels.add(node.id().toString());
- labels.add(node.ip().toString());
-
- // Add labels, props and stuff the payload into envelope.
- payload.set("labels", labels);
- addMetaUi(node.id().toString(), payload);
-
- String type = msgType != null ? msgType : CLUSTER_EVENT.get(event.type());
- return JsonUtils.envelope(type, 0, payload);
- }
-
- // Produces a device event message to the client.
- protected ObjectNode deviceMessage(DeviceEvent event) {
- Device device = event.subject();
- ObjectNode payload = objectNode()
- .put("id", device.id().toString())
- .put("type", device.type().toString().toLowerCase())
- .put("online", deviceService.isAvailable(device.id()))
- .put("master", master(device.id()));
-
- // Generate labels: id, chassis id, no-label, optional-name
- String name = device.annotations().value(AnnotationKeys.NAME);
- ArrayNode labels = arrayNode();
- labels.add("");
- labels.add(isNullOrEmpty(name) ? device.id().toString() : name);
- labels.add(device.id().toString());
-
- // Add labels, props and stuff the payload into envelope.
- payload.set("labels", labels);
- payload.set("props", props(device.annotations()));
- addGeoLocation(device, payload);
- addMetaUi(device.id().toString(), payload);
-
- String type = DEVICE_EVENT.get(event.type());
- return JsonUtils.envelope(type, 0, payload);
- }
-
- // Produces a link event message to the client.
- protected ObjectNode linkMessage(LinkEvent event) {
- Link link = event.subject();
- ObjectNode payload = objectNode()
- .put("id", compactLinkString(link))
- .put("type", link.type().toString().toLowerCase())
- .put("online", link.state() == Link.State.ACTIVE)
- .put("linkWidth", 1.2)
- .put("src", link.src().deviceId().toString())
- .put("srcPort", link.src().port().toString())
- .put("dst", link.dst().deviceId().toString())
- .put("dstPort", link.dst().port().toString());
- String type = LINK_EVENT.get(event.type());
- return JsonUtils.envelope(type, 0, payload);
- }
-
- // Produces a host event message to the client.
- protected ObjectNode hostMessage(HostEvent event) {
- Host host = event.subject();
- Host prevHost = event.prevSubject();
- String hostType = host.annotations().value(AnnotationKeys.TYPE);
-
- ObjectNode payload = objectNode()
- .put("id", host.id().toString())
- .put("type", isNullOrEmpty(hostType) ? "endstation" : hostType)
- .put("ingress", compactLinkString(edgeLink(host, true)))
- .put("egress", compactLinkString(edgeLink(host, false)));
- payload.set("cp", hostConnect(host.location()));
- if (prevHost != null && prevHost.location() != null) {
- payload.set("prevCp", hostConnect(prevHost.location()));
- }
- payload.set("labels", labels(ip(host.ipAddresses()),
- host.mac().toString()));
- payload.set("props", props(host.annotations()));
- addGeoLocation(host, payload);
- addMetaUi(host.id().toString(), payload);
-
- String type = HOST_EVENT.get(event.type());
- return JsonUtils.envelope(type, 0, payload);
- }
-
- // Encodes the specified host location into a JSON object.
- private ObjectNode hostConnect(HostLocation location) {
- return objectNode()
- .put("device", location.deviceId().toString())
- .put("port", location.port().toLong());
- }
-
- // Encodes the specified list of labels a JSON array.
- private ArrayNode labels(String... labels) {
- ArrayNode json = arrayNode();
- for (String label : labels) {
- json.add(label);
- }
- return json;
- }
-
- // Returns the name of the master node for the specified device id.
- private String master(DeviceId deviceId) {
- NodeId master = mastershipService.getMasterFor(deviceId);
- return master != null ? master.toString() : "";
- }
-
- // Generates an edge link from the specified host location.
- private EdgeLink edgeLink(Host host, boolean ingress) {
- return new DefaultEdgeLink(PID, new ConnectPoint(host.id(), portNumber(0)),
- host.location(), ingress);
- }
-
- // Adds meta UI information for the specified object.
- private void addMetaUi(String id, ObjectNode payload) {
- ObjectNode meta = metaUi.get(id);
- if (meta != null) {
- payload.set("metaUi", meta);
- }
- }
-
- // Adds a geo location JSON to the specified payload object.
- private void addGeoLocation(Annotated annotated, ObjectNode payload) {
- Annotations annotations = annotated.annotations();
- if (annotations == null) {
- return;
- }
-
- String slat = annotations.value(AnnotationKeys.LATITUDE);
- String slng = annotations.value(AnnotationKeys.LONGITUDE);
- try {
- if (slat != null && slng != null && !slat.isEmpty() && !slng.isEmpty()) {
- double lat = Double.parseDouble(slat);
- double lng = Double.parseDouble(slng);
- ObjectNode loc = objectNode()
- .put("type", "latlng").put("lat", lat).put("lng", lng);
- payload.set("location", loc);
- }
- } catch (NumberFormatException e) {
- log.warn("Invalid geo data latitude={}; longiture={}", slat, slng);
- }
- }
-
- // Updates meta UI information for the specified object.
- protected void updateMetaUi(ObjectNode payload) {
- metaUi.put(JsonUtils.string(payload, "id"),
- JsonUtils.node(payload, "memento"));
- }
-
-
- // -----------------------------------------------------------------------
- // Create models of the data to return, that overlays can adjust / augment
-
- // Returns property panel model for summary response.
- protected PropertyPanel summmaryMessage(long sid) {
- Topology topology = topologyService.currentTopology();
-
- return new PropertyPanel("ONOS Summary", "node")
- .addProp(Properties.VERSION, version)
- .addSeparator()
- .addProp(Properties.DEVICES, deviceService.getDeviceCount())
- .addProp(Properties.LINKS, topology.linkCount())
- .addProp(Properties.HOSTS, hostService.getHostCount())
- .addProp(Properties.TOPOLOGY_SSCS, topology.clusterCount())
- .addSeparator()
- .addProp(Properties.INTENTS, intentService.getIntentCount())
- .addProp(Properties.TUNNELS, tunnelService.tunnelCount())
- .addProp(Properties.FLOWS, flowService.getFlowRuleCount());
- }
-
- // Returns property panel model for device details response.
- protected PropertyPanel deviceDetails(DeviceId deviceId, long sid) {
- Device device = deviceService.getDevice(deviceId);
- Annotations annot = device.annotations();
- String name = annot.value(AnnotationKeys.NAME);
- int portCount = deviceService.getPorts(deviceId).size();
- int flowCount = getFlowCount(deviceId);
- int tunnelCount = getTunnelCount(deviceId);
-
- String title = isNullOrEmpty(name) ? deviceId.toString() : name;
- String typeId = device.type().toString().toLowerCase();
-
- PropertyPanel pp = new PropertyPanel(title, typeId)
- .id(deviceId.toString())
-
- .addProp(Properties.URI, deviceId.toString())
- .addProp(Properties.VENDOR, device.manufacturer())
- .addProp(Properties.HW_VERSION, device.hwVersion())
- .addProp(Properties.SW_VERSION, device.swVersion())
- .addProp(Properties.SERIAL_NUMBER, device.serialNumber())
- .addProp(Properties.PROTOCOL, annot.value(AnnotationKeys.PROTOCOL))
- .addSeparator()
-
- .addProp(Properties.LATITUDE, annot.value(AnnotationKeys.LATITUDE))
- .addProp(Properties.LONGITUDE, annot.value(AnnotationKeys.LONGITUDE))
- .addSeparator()
-
- .addProp(Properties.PORTS, portCount)
- .addProp(Properties.FLOWS, flowCount)
- .addProp(Properties.TUNNELS, tunnelCount)
-
- .addButton(CoreButtons.SHOW_DEVICE_VIEW)
- .addButton(CoreButtons.SHOW_FLOW_VIEW)
- .addButton(CoreButtons.SHOW_PORT_VIEW)
- .addButton(CoreButtons.SHOW_GROUP_VIEW);
-
- return pp;
- }
-
- protected int getFlowCount(DeviceId deviceId) {
- int count = 0;
- for (FlowEntry flowEntry : flowService.getFlowEntries(deviceId)) {
- count++;
- }
- return count;
- }
-
- protected int getTunnelCount(DeviceId deviceId) {
- int count = 0;
- Collection<Tunnel> tunnels = tunnelService.queryAllTunnels();
- for (Tunnel tunnel : tunnels) {
- OpticalTunnelEndPoint src = (OpticalTunnelEndPoint) tunnel.src();
- OpticalTunnelEndPoint dst = (OpticalTunnelEndPoint) tunnel.dst();
- DeviceId srcDevice = (DeviceId) src.elementId().get();
- DeviceId dstDevice = (DeviceId) dst.elementId().get();
- if (srcDevice.toString().equals(deviceId.toString()) ||
- dstDevice.toString().equals(deviceId.toString())) {
- count++;
- }
- }
- return count;
- }
-
- // Counts all flow entries that egress on the links of the given device.
- private Map<Link, Integer> getLinkFlowCounts(DeviceId deviceId) {
- // get the flows for the device
- List<FlowEntry> entries = new ArrayList<>();
- for (FlowEntry flowEntry : flowService.getFlowEntries(deviceId)) {
- entries.add(flowEntry);
- }
-
- // get egress links from device, and include edge links
- Set<Link> links = new HashSet<>(linkService.getDeviceEgressLinks(deviceId));
- Set<Host> hosts = hostService.getConnectedHosts(deviceId);
- if (hosts != null) {
- for (Host host : hosts) {
- links.add(createEdgeLink(host, false));
- }
- }
-
- // compile flow counts per link
- Map<Link, Integer> counts = new HashMap<>();
- for (Link link : links) {
- counts.put(link, getEgressFlows(link, entries));
- }
- return counts;
- }
-
- // Counts all entries that egress on the link source port.
- private int getEgressFlows(Link link, List<FlowEntry> entries) {
- int count = 0;
- PortNumber out = link.src().port();
- for (FlowEntry entry : entries) {
- TrafficTreatment treatment = entry.treatment();
- for (Instruction instruction : treatment.allInstructions()) {
- if (instruction.type() == Instruction.Type.OUTPUT &&
- ((OutputInstruction) instruction).port().equals(out)) {
- count++;
- }
- }
- }
- return count;
- }
-
- // Returns host details response.
- protected PropertyPanel hostDetails(HostId hostId, long sid) {
- Host host = hostService.getHost(hostId);
- Annotations annot = host.annotations();
- String type = annot.value(AnnotationKeys.TYPE);
- String name = annot.value(AnnotationKeys.NAME);
- String vlan = host.vlan().toString();
-
- String title = isNullOrEmpty(name) ? hostId.toString() : name;
- String typeId = isNullOrEmpty(type) ? "endstation" : type;
-
- PropertyPanel pp = new PropertyPanel(title, typeId)
- .id(hostId.toString())
- .addProp(Properties.MAC, host.mac())
- .addProp(Properties.IP, host.ipAddresses(), "[\\[\\]]")
- .addProp(Properties.VLAN, vlan.equals("-1") ? "none" : vlan)
- .addSeparator()
- .addProp(Properties.LATITUDE, annot.value(AnnotationKeys.LATITUDE))
- .addProp(Properties.LONGITUDE, annot.value(AnnotationKeys.LONGITUDE));
-
- // Potentially add button descriptors here
- return pp;
- }
-
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TrafficMonitor.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TrafficMonitor.java
deleted file mode 100644
index 3d733f9e..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TrafficMonitor.java
+++ /dev/null
@@ -1,675 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.onosproject.ui.impl;
-
-import com.google.common.collect.ImmutableList;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.ElementId;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.Link;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.flow.FlowEntry;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.flow.instructions.Instructions.OutputInstruction;
-import org.onosproject.net.intent.FlowRuleIntent;
-import org.onosproject.net.intent.Intent;
-import org.onosproject.net.intent.LinkCollectionIntent;
-import org.onosproject.net.intent.OpticalConnectivityIntent;
-import org.onosproject.net.intent.OpticalPathIntent;
-import org.onosproject.net.intent.PathIntent;
-import org.onosproject.net.statistic.Load;
-import org.onosproject.ui.impl.topo.IntentSelection;
-import org.onosproject.ui.impl.topo.ServicesBundle;
-import org.onosproject.ui.impl.topo.TopoIntentFilter;
-import org.onosproject.ui.impl.topo.TrafficLink;
-import org.onosproject.ui.impl.topo.TrafficLink.StatsType;
-import org.onosproject.ui.impl.topo.TrafficLinkMap;
-import org.onosproject.ui.topo.DeviceHighlight;
-import org.onosproject.ui.topo.Highlights;
-import org.onosproject.ui.topo.Highlights.Amount;
-import org.onosproject.ui.topo.HostHighlight;
-import org.onosproject.ui.topo.LinkHighlight.Flavor;
-import org.onosproject.ui.topo.NodeHighlight;
-import org.onosproject.ui.topo.NodeSelection;
-import org.onosproject.ui.topo.TopoUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Timer;
-import java.util.TimerTask;
-
-import static org.onosproject.net.DefaultEdgeLink.createEdgeLink;
-import static org.onosproject.ui.impl.TrafficMonitor.Mode.*;
-
-/**
- * Encapsulates the behavior of monitoring specific traffic patterns.
- */
-public class TrafficMonitor {
-
- // 4 Kilo Bytes as threshold
- private static final double BPS_THRESHOLD = 4 * TopoUtils.KILO;
-
- private static final Logger log =
- LoggerFactory.getLogger(TrafficMonitor.class);
-
- /**
- * Designates the different modes of operation.
- */
- public enum Mode {
- IDLE,
- ALL_FLOW_TRAFFIC,
- ALL_PORT_TRAFFIC,
- DEV_LINK_FLOWS,
- RELATED_INTENTS,
- SELECTED_INTENT
- }
-
- private final long trafficPeriod;
- private final ServicesBundle servicesBundle;
- private final TopologyViewMessageHandler msgHandler;
- private final TopoIntentFilter intentFilter;
-
- private final Timer timer = new Timer("topo-traffic");
-
- private TimerTask trafficTask = null;
- private Mode mode = IDLE;
- private NodeSelection selectedNodes = null;
- private IntentSelection selectedIntents = null;
-
-
- /**
- * Constructs a traffic monitor.
- *
- * @param trafficPeriod traffic task period in ms
- * @param servicesBundle bundle of services
- * @param msgHandler our message handler
- */
- public TrafficMonitor(long trafficPeriod, ServicesBundle servicesBundle,
- TopologyViewMessageHandler msgHandler) {
- this.trafficPeriod = trafficPeriod;
- this.servicesBundle = servicesBundle;
- this.msgHandler = msgHandler;
-
- intentFilter = new TopoIntentFilter(servicesBundle);
- }
-
- // =======================================================================
- // === API ===
-
- /**
- * Monitor for traffic data to be sent back to the web client, under
- * the given mode. This causes a background traffic task to be
- * scheduled to repeatedly compute and transmit the appropriate traffic
- * data to the client.
- * <p>
- * The monitoring mode is expected to be one of:
- * <ul>
- * <li>ALL_FLOW_TRAFFIC</li>
- * <li>ALL_PORT_TRAFFIC</li>
- * <li>SELECTED_INTENT</li>
- * </ul>
- *
- * @param mode monitoring mode
- */
- public synchronized void monitor(Mode mode) {
- log.debug("monitor: {}", mode);
- this.mode = mode;
-
- switch (mode) {
- case ALL_FLOW_TRAFFIC:
- clearSelection();
- scheduleTask();
- sendAllFlowTraffic();
- break;
-
- case ALL_PORT_TRAFFIC:
- clearSelection();
- scheduleTask();
- sendAllPortTraffic();
- break;
-
- case SELECTED_INTENT:
- scheduleTask();
- sendSelectedIntentTraffic();
- break;
-
- default:
- log.debug("Unexpected call to monitor({})", mode);
- clearAll();
- break;
- }
- }
-
- /**
- * Monitor for traffic data to be sent back to the web client, under
- * the given mode, using the given selection of devices and hosts.
- * In the case of "device link flows", this causes a background traffic
- * task to be scheduled to repeatedly compute and transmit the appropriate
- * traffic data to the client. In the case of "related intents", no
- * repeating task is scheduled.
- * <p>
- * The monitoring mode is expected to be one of:
- * <ul>
- * <li>DEV_LINK_FLOWS</li>
- * <li>RELATED_INTENTS</li>
- * </ul>
- *
- * @param mode monitoring mode
- * @param nodeSelection how to select a node
- */
- public synchronized void monitor(Mode mode, NodeSelection nodeSelection) {
- log.debug("monitor: {} -- {}", mode, nodeSelection);
- this.mode = mode;
- this.selectedNodes = nodeSelection;
-
- switch (mode) {
- case DEV_LINK_FLOWS:
- // only care about devices (not hosts)
- if (selectedNodes.devicesWithHover().isEmpty()) {
- sendClearAll();
- } else {
- scheduleTask();
- sendDeviceLinkFlows();
- }
- break;
-
- case RELATED_INTENTS:
- if (selectedNodes.none()) {
- sendClearAll();
- } else {
- selectedIntents = new IntentSelection(selectedNodes, intentFilter);
- if (selectedIntents.none()) {
- sendClearAll();
- } else {
- sendSelectedIntents();
- }
- }
- break;
-
- default:
- log.debug("Unexpected call to monitor({}, {})", mode, nodeSelection);
- clearAll();
- break;
- }
- }
-
- // TODO: move this out to the "h2h/multi-intent app"
- /**
- * Monitor for traffic data to be sent back to the web client, for the
- * given intent.
- *
- * @param intent the intent to monitor
- */
- public synchronized void monitor(Intent intent) {
- log.debug("monitor intent: {}", intent.id());
- selectedNodes = null;
- selectedIntents = new IntentSelection(intent);
- mode = SELECTED_INTENT;
- scheduleTask();
- sendSelectedIntentTraffic();
- }
-
- /**
- * Selects the next intent in the select group (if there is one),
- * and sends highlighting data back to the web client to display
- * which path is selected.
- */
- public synchronized void selectNextIntent() {
- if (selectedIntents != null) {
- selectedIntents.next();
- sendSelectedIntents();
- if (mode == SELECTED_INTENT) {
- mode = RELATED_INTENTS;
- }
- }
- }
-
- /**
- * Selects the previous intent in the select group (if there is one),
- * and sends highlighting data back to the web client to display
- * which path is selected.
- */
- public synchronized void selectPreviousIntent() {
- if (selectedIntents != null) {
- selectedIntents.prev();
- sendSelectedIntents();
- if (mode == SELECTED_INTENT) {
- mode = RELATED_INTENTS;
- }
- }
- }
-
- /**
- * Resends selected intent traffic data. This is called, for example,
- * when the system detects an intent update happened.
- */
- public synchronized void pokeIntent() {
- if (mode == SELECTED_INTENT) {
- sendSelectedIntentTraffic();
- }
- }
-
- /**
- * Stop all traffic monitoring.
- */
- public synchronized void stopMonitoring() {
- log.debug("STOP monitoring");
- if (mode != IDLE) {
- sendClearAll();
- }
- }
-
-
- // =======================================================================
- // === Helper methods ===
-
- private void sendClearAll() {
- clearAll();
- sendClearHighlights();
- }
-
- private void clearAll() {
- this.mode = IDLE;
- clearSelection();
- cancelTask();
- }
-
- private void clearSelection() {
- selectedNodes = null;
- selectedIntents = null;
- }
-
- private synchronized void scheduleTask() {
- if (trafficTask == null) {
- log.debug("Starting up background traffic task...");
- trafficTask = new TrafficUpdateTask();
- timer.schedule(trafficTask, trafficPeriod, trafficPeriod);
- } else {
- log.debug("(traffic task already running)");
- }
- }
-
- private synchronized void cancelTask() {
- if (trafficTask != null) {
- trafficTask.cancel();
- trafficTask = null;
- }
- }
-
- private void sendAllFlowTraffic() {
- log.debug("sendAllFlowTraffic");
- msgHandler.sendHighlights(trafficSummary(StatsType.FLOW_STATS));
- }
-
- private void sendAllPortTraffic() {
- log.debug("sendAllPortTraffic");
- msgHandler.sendHighlights(trafficSummary(StatsType.PORT_STATS));
- }
-
- private void sendDeviceLinkFlows() {
- log.debug("sendDeviceLinkFlows: {}", selectedNodes);
- msgHandler.sendHighlights(deviceLinkFlows());
- }
-
- private void sendSelectedIntents() {
- log.debug("sendSelectedIntents: {}", selectedIntents);
- msgHandler.sendHighlights(intentGroup());
- }
-
- private void sendSelectedIntentTraffic() {
- log.debug("sendSelectedIntentTraffic: {}", selectedIntents);
- msgHandler.sendHighlights(intentTraffic());
- }
-
- private void sendClearHighlights() {
- log.debug("sendClearHighlights");
- msgHandler.sendHighlights(new Highlights());
- }
-
- // =======================================================================
- // === Generate messages in JSON object node format
-
- private Highlights trafficSummary(StatsType type) {
- Highlights highlights = new Highlights();
-
- TrafficLinkMap linkMap = new TrafficLinkMap();
- compileLinks(linkMap);
- addEdgeLinks(linkMap);
-
- for (TrafficLink tlink : linkMap.biLinks()) {
- if (type == StatsType.FLOW_STATS) {
- attachFlowLoad(tlink);
- } else if (type == StatsType.PORT_STATS) {
- attachPortLoad(tlink);
- }
-
- // we only want to report on links deemed to have traffic
- if (tlink.hasTraffic()) {
- highlights.add(tlink.highlight(type));
- }
- }
- return highlights;
- }
-
- // create highlights for links, showing flows for selected devices.
- private Highlights deviceLinkFlows() {
- Highlights highlights = new Highlights();
-
- if (selectedNodes != null && !selectedNodes.devicesWithHover().isEmpty()) {
- // capture flow counts on bilinks
- TrafficLinkMap linkMap = new TrafficLinkMap();
-
- for (Device device : selectedNodes.devicesWithHover()) {
- Map<Link, Integer> counts = getLinkFlowCounts(device.id());
- for (Link link : counts.keySet()) {
- TrafficLink tlink = linkMap.add(link);
- tlink.addFlows(counts.get(link));
- }
- }
-
- // now report on our collated links
- for (TrafficLink tlink : linkMap.biLinks()) {
- highlights.add(tlink.highlight(StatsType.FLOW_COUNT));
- }
-
- }
- return highlights;
- }
-
- private Highlights intentGroup() {
- Highlights highlights = new Highlights();
-
- if (selectedIntents != null && !selectedIntents.none()) {
- // If 'all' intents are selected, they will all have primary
- // highlighting; otherwise, the specifically selected intent will
- // have primary highlighting, and the remainder will have secondary
- // highlighting.
- Set<Intent> primary;
- Set<Intent> secondary;
- int count = selectedIntents.size();
-
- Set<Intent> allBut = new HashSet<>(selectedIntents.intents());
- Intent current;
-
- if (selectedIntents.all()) {
- primary = allBut;
- secondary = Collections.emptySet();
- log.debug("Highlight all intents ({})", count);
- } else {
- current = selectedIntents.current();
- primary = new HashSet<>();
- primary.add(current);
- allBut.remove(current);
- secondary = allBut;
- log.debug("Highlight intent: {} ([{}] of {})",
- current.id(), selectedIntents.index(), count);
- }
-
- highlightIntentLinks(highlights, primary, secondary);
- }
- return highlights;
- }
-
- private Highlights intentTraffic() {
- Highlights highlights = new Highlights();
-
- if (selectedIntents != null && selectedIntents.single()) {
- Intent current = selectedIntents.current();
- Set<Intent> primary = new HashSet<>();
- primary.add(current);
- log.debug("Highlight traffic for intent: {} ([{}] of {})",
- current.id(), selectedIntents.index(), selectedIntents.size());
-
- highlightIntentLinksWithTraffic(highlights, primary);
- highlights.subdueAllElse(Amount.MINIMALLY);
- }
- return highlights;
- }
-
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- private void compileLinks(TrafficLinkMap linkMap) {
- servicesBundle.linkService().getLinks().forEach(linkMap::add);
- }
-
- private void addEdgeLinks(TrafficLinkMap linkMap) {
- servicesBundle.hostService().getHosts().forEach(host -> {
- linkMap.add(createEdgeLink(host, true));
- linkMap.add(createEdgeLink(host, false));
- });
- }
-
- private Load getLinkFlowLoad(Link link) {
- if (link != null && link.src().elementId() instanceof DeviceId) {
- return servicesBundle.flowStatsService().load(link);
- }
- return null;
- }
-
- private void attachFlowLoad(TrafficLink link) {
- link.addLoad(getLinkFlowLoad(link.one()));
- link.addLoad(getLinkFlowLoad(link.two()));
- }
-
- private void attachPortLoad(TrafficLink link) {
- // For bi-directional traffic links, use
- // the max link rate of either direction
- // (we choose 'one' since we know that is never null)
- Link one = link.one();
- Load egressSrc = servicesBundle.portStatsService().load(one.src());
- Load egressDst = servicesBundle.portStatsService().load(one.dst());
- link.addLoad(maxLoad(egressSrc, egressDst), BPS_THRESHOLD);
-// link.addLoad(maxLoad(egressSrc, egressDst), 10); // DEBUG ONLY!!
- }
-
- private Load maxLoad(Load a, Load b) {
- if (a == null) {
- return b;
- }
- if (b == null) {
- return a;
- }
- return a.rate() > b.rate() ? a : b;
- }
-
- // Counts all flow entries that egress on the links of the given device.
- private Map<Link, Integer> getLinkFlowCounts(DeviceId deviceId) {
- // get the flows for the device
- List<FlowEntry> entries = new ArrayList<>();
- for (FlowEntry flowEntry : servicesBundle.flowService()
- .getFlowEntries(deviceId)) {
- entries.add(flowEntry);
- }
-
- // get egress links from device, and include edge links
- Set<Link> links = new HashSet<>(servicesBundle.linkService()
- .getDeviceEgressLinks(deviceId));
- Set<Host> hosts = servicesBundle.hostService().getConnectedHosts(deviceId);
- if (hosts != null) {
- for (Host host : hosts) {
- links.add(createEdgeLink(host, false));
- }
- }
-
- // compile flow counts per link
- Map<Link, Integer> counts = new HashMap<>();
- for (Link link : links) {
- counts.put(link, getEgressFlows(link, entries));
- }
- return counts;
- }
-
- // Counts all entries that egress on the link source port.
- private int getEgressFlows(Link link, List<FlowEntry> entries) {
- int count = 0;
- PortNumber out = link.src().port();
- for (FlowEntry entry : entries) {
- TrafficTreatment treatment = entry.treatment();
- for (Instruction instruction : treatment.allInstructions()) {
- if (instruction.type() == Instruction.Type.OUTPUT &&
- ((OutputInstruction) instruction).port().equals(out)) {
- count++;
- }
- }
- }
- return count;
- }
-
- private void highlightIntentLinks(Highlights highlights,
- Set<Intent> primary, Set<Intent> secondary) {
- TrafficLinkMap linkMap = new TrafficLinkMap();
- // NOTE: highlight secondary first, then primary, so that links shared
- // by intents are colored correctly ("last man wins")
- createTrafficLinks(highlights, linkMap, secondary, Flavor.SECONDARY_HIGHLIGHT, false);
- createTrafficLinks(highlights, linkMap, primary, Flavor.PRIMARY_HIGHLIGHT, false);
- colorLinks(highlights, linkMap);
- }
-
- private void highlightIntentLinksWithTraffic(Highlights highlights,
- Set<Intent> primary) {
- TrafficLinkMap linkMap = new TrafficLinkMap();
- createTrafficLinks(highlights, linkMap, primary, Flavor.PRIMARY_HIGHLIGHT, true);
- colorLinks(highlights, linkMap);
- }
-
- private void createTrafficLinks(Highlights highlights,
- TrafficLinkMap linkMap, Set<Intent> intents,
- Flavor flavor, boolean showTraffic) {
- for (Intent intent : intents) {
- List<Intent> installables = servicesBundle.intentService()
- .getInstallableIntents(intent.key());
- Iterable<Link> links = null;
- if (installables != null) {
- for (Intent installable : installables) {
-
- if (installable instanceof PathIntent) {
- links = ((PathIntent) installable).path().links();
- } else if (installable instanceof FlowRuleIntent) {
- links = linkResources(installable);
- } else if (installable instanceof LinkCollectionIntent) {
- links = ((LinkCollectionIntent) installable).links();
- } else if (installable instanceof OpticalPathIntent) {
- links = ((OpticalPathIntent) installable).path().links();
- }
-
- boolean isOptical = intent instanceof OpticalConnectivityIntent;
- processLinks(linkMap, links, flavor, isOptical, showTraffic);
- updateHighlights(highlights, links);
- }
- }
- }
- }
-
- private void updateHighlights(Highlights highlights, Iterable<Link> links) {
- for (Link link : links) {
- ensureNodePresent(highlights, link.src().elementId());
- ensureNodePresent(highlights, link.dst().elementId());
- }
- }
-
- private void ensureNodePresent(Highlights highlights, ElementId eid) {
- String id = eid.toString();
- NodeHighlight nh = highlights.getNode(id);
- if (nh == null) {
- if (eid instanceof DeviceId) {
- nh = new DeviceHighlight(id);
- highlights.add((DeviceHighlight) nh);
- } else if (eid instanceof HostId) {
- nh = new HostHighlight(id);
- highlights.add((HostHighlight) nh);
- }
- }
- }
-
- // Extracts links from the specified flow rule intent resources
- private Collection<Link> linkResources(Intent installable) {
- ImmutableList.Builder<Link> builder = ImmutableList.builder();
- installable.resources().stream().filter(r -> r instanceof Link)
- .forEach(r -> builder.add((Link) r));
- return builder.build();
- }
-
- private void processLinks(TrafficLinkMap linkMap, Iterable<Link> links,
- Flavor flavor, boolean isOptical,
- boolean showTraffic) {
- if (links != null) {
- for (Link link : links) {
- TrafficLink tlink = linkMap.add(link);
- tlink.tagFlavor(flavor);
- tlink.optical(isOptical);
- if (showTraffic) {
- tlink.addLoad(getLinkFlowLoad(link));
- tlink.antMarch(true);
- }
- }
- }
- }
-
- private void colorLinks(Highlights highlights, TrafficLinkMap linkMap) {
- for (TrafficLink tlink : linkMap.biLinks()) {
- highlights.add(tlink.highlight(StatsType.TAGGED));
- }
- }
-
- // =======================================================================
- // === Background Task
-
- // Provides periodic update of traffic information to the client
- private class TrafficUpdateTask extends TimerTask {
- @Override
- public void run() {
- try {
- switch (mode) {
- case ALL_FLOW_TRAFFIC:
- sendAllFlowTraffic();
- break;
- case ALL_PORT_TRAFFIC:
- sendAllPortTraffic();
- break;
- case DEV_LINK_FLOWS:
- sendDeviceLinkFlows();
- break;
- case SELECTED_INTENT:
- sendSelectedIntentTraffic();
- break;
-
- default:
- // RELATED_INTENTS and IDLE modes should never invoke
- // the background task, but if they do, they have
- // nothing to do
- break;
- }
-
- } catch (Exception e) {
- log.warn("Unable to process traffic task due to {}", e.getMessage());
- log.warn("Boom!", e);
- }
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TrafficOverlay.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TrafficOverlay.java
deleted file mode 100644
index f4b5598d..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TrafficOverlay.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.onosproject.ui.impl;
-
-import org.onosproject.net.DeviceId;
-import org.onosproject.ui.UiTopoOverlay;
-import org.onosproject.ui.topo.ButtonId;
-import org.onosproject.ui.topo.PropertyPanel;
-
-/**
- * Topology Overlay for network traffic.
- */
-public class TrafficOverlay extends UiTopoOverlay {
- /**
- * Traffic Overlay identifier.
- */
- public static final String TRAFFIC_ID = "traffic";
-
- private static final String SDF_ID = "showDeviceFlows";
- private static final String SRT_ID = "showRelatedTraffic";
-
- private static final ButtonId SHOW_DEVICE_FLOWS = new ButtonId(SDF_ID);
- private static final ButtonId SHOW_RELATED_TRAFFIC = new ButtonId(SRT_ID);
-
-
- public TrafficOverlay() {
- super(TRAFFIC_ID);
- }
-
- // override activate and deactivate, to write log messages
- @Override
- public void activate() {
- super.activate();
- log.debug("TrafficOverlay Activated");
- }
-
- @Override
- public void deactivate() {
- super.deactivate();
- log.debug("TrafficOverlay Deactivated");
- }
-
- @Override
- public void modifyDeviceDetails(PropertyPanel pp, DeviceId deviceId) {
- pp.addButton(SHOW_DEVICE_FLOWS)
- .addButton(SHOW_RELATED_TRAFFIC);
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TunnelViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TunnelViewMessageHandler.java
deleted file mode 100644
index 16848188..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TunnelViewMessageHandler.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableSet;
-import org.onosproject.incubator.net.tunnel.Tunnel;
-import org.onosproject.incubator.net.tunnel.TunnelEndPointFormatter;
-import org.onosproject.incubator.net.tunnel.TunnelService;
-import org.onosproject.ui.RequestHandler;
-import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.table.TableModel;
-import org.onosproject.ui.table.TableRequestHandler;
-import org.onosproject.ui.table.cell.EnumFormatter;
-
-import java.util.Collection;
-
-public class TunnelViewMessageHandler extends UiMessageHandler {
- private static final String TUNNEL_DATA_REQ = "tunnelDataRequest";
- private static final String TUNNEL_DATA_RESP = "tunnelDataResponse";
- private static final String TUNNELS = "tunnels";
- private static final String ID = "id";
- private static final String NAME = "name";
- private static final String ONE = "one";
- private static final String TWO = "two";
- private static final String TYPE = "type";
- private static final String GROUP_ID = "group_id";
-
- private static final String BANDWIDTH = "bandwidth";
- private static final String PATH = "path";
-
-
- private static final String[] COL_IDS = {
- ID, NAME, ONE, TWO, TYPE, GROUP_ID,
- BANDWIDTH, PATH
- };
-
- @Override
- protected Collection<RequestHandler> createRequestHandlers() {
- return ImmutableSet.of(new TunnelDataRequestHandler());
- }
-
- private final class TunnelDataRequestHandler extends TableRequestHandler {
-
- public TunnelDataRequestHandler() {
- super(TUNNEL_DATA_REQ, TUNNEL_DATA_RESP, TUNNELS);
- }
-
- @Override
- protected String[] getColumnIds() {
- return COL_IDS;
- }
-
- @Override
- protected TableModel createTableModel() {
- TableModel tm = super.createTableModel();
- //TODO add more formater class so that we can get a more readable table
- tm.setFormatter(ONE, TunnelEndPointFormatter.INSTANCE);
- tm.setFormatter(TWO, TunnelEndPointFormatter.INSTANCE);
- tm.setFormatter(TYPE, EnumFormatter.INSTANCE);
- return tm;
- }
-
- @Override
- protected void populateTable(TableModel tm, ObjectNode payload) {
- TunnelService ts = get(TunnelService.class);
- ts.queryAllTunnels().forEach(tunnel -> populateRow(tm.addRow(), tunnel));
- }
-
- }
-
- private void populateRow(TableModel.Row row, Tunnel tunnel) {
- row.cell(ID, tunnel.tunnelId().id())
- .cell(NAME, tunnel.tunnelName().value())
- .cell(ONE, tunnel.src())
- .cell(TWO, tunnel.dst())
- .cell(TYPE, tunnel.type())
- .cell(GROUP_ID, tunnel.groupId().id())
- .cell(BANDWIDTH, tunnel.annotations().value(BANDWIDTH))
- .cell(PATH, tunnel.path());
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
deleted file mode 100644
index 86cf038b..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.Service;
-import org.onosproject.mastership.MastershipService;
-import org.onosproject.ui.UiExtension;
-import org.onosproject.ui.UiExtensionService;
-import org.onosproject.ui.UiMessageHandlerFactory;
-import org.onosproject.ui.UiTopoOverlayFactory;
-import org.onosproject.ui.UiView;
-import org.onosproject.ui.UiViewHidden;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static com.google.common.collect.ImmutableList.of;
-import static java.util.stream.Collectors.toSet;
-import static org.onosproject.ui.UiView.Category.NETWORK;
-import static org.onosproject.ui.UiView.Category.PLATFORM;
-
-/**
- * Manages the user interface extensions.
- */
-@Component(immediate = true)
-@Service
-public class UiExtensionManager implements UiExtensionService, SpriteService {
-
- private static final ClassLoader CL =
- UiExtensionManager.class.getClassLoader();
- private static final String CORE = "core";
-
- private final Logger log = LoggerFactory.getLogger(getClass());
-
- // List of all extensions
- private final List<UiExtension> extensions = Lists.newArrayList();
-
- // Map of views to extensions
- private final Map<String, UiExtension> views = Maps.newHashMap();
-
- // Core views & core extension
- private final UiExtension core = createCoreExtension();
-
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected MastershipService mastershipService;
-
- // Creates core UI extension
- private UiExtension createCoreExtension() {
- List<UiView> coreViews = of(
- new UiView(PLATFORM, "app", "Applications", "nav_apps"),
- new UiView(PLATFORM, "settings", "Settings", "nav_settings"),
- new UiView(PLATFORM, "cluster", "Cluster Nodes", "nav_cluster"),
- new UiView(PLATFORM, "processor", "Packet Processors", "nav_processors"),
- new UiView(NETWORK, "topo", "Topology", "nav_topo"),
- new UiView(NETWORK, "device", "Devices", "nav_devs"),
- new UiViewHidden("flow"),
- new UiViewHidden("port"),
- new UiViewHidden("group"),
- new UiView(NETWORK, "link", "Links", "nav_links"),
- new UiView(NETWORK, "host", "Hosts", "nav_hosts"),
- new UiView(NETWORK, "intent", "Intents", "nav_intents"),
- //TODO add a new type of icon for tunnel
- new UiView(NETWORK, "tunnel", "Tunnels", "nav_links")
- );
-
- UiMessageHandlerFactory messageHandlerFactory =
- () -> ImmutableList.of(
- new TopologyViewMessageHandler(),
- new DeviceViewMessageHandler(),
- new LinkViewMessageHandler(),
- new HostViewMessageHandler(),
- new FlowViewMessageHandler(),
- new PortViewMessageHandler(),
- new GroupViewMessageHandler(),
- new IntentViewMessageHandler(),
- new ApplicationViewMessageHandler(),
- new SettingsViewMessageHandler(),
- new ClusterViewMessageHandler(),
- new ProcessorViewMessageHandler(),
- new TunnelViewMessageHandler()
- );
-
- UiTopoOverlayFactory topoOverlayFactory =
- () -> ImmutableList.of(
- new TrafficOverlay()
- );
-
- return new UiExtension.Builder(CL, coreViews)
- .messageHandlerFactory(messageHandlerFactory)
- .topoOverlayFactory(topoOverlayFactory)
- .resourcePath(CORE)
- .build();
- }
-
- @Activate
- public void activate() {
- register(core);
- log.info("Started");
- }
-
- @Deactivate
- public void deactivate() {
- UiWebSocketServlet.closeAll();
- unregister(core);
- log.info("Stopped");
- }
-
- @Override
- public synchronized void register(UiExtension extension) {
- if (!extensions.contains(extension)) {
- extensions.add(extension);
- for (UiView view : extension.views()) {
- views.put(view.id(), extension);
- }
- }
- }
-
- @Override
- public synchronized void unregister(UiExtension extension) {
- extensions.remove(extension);
- extension.views().stream()
- .map(UiView::id).collect(toSet()).forEach(views::remove);
- }
-
- @Override
- public synchronized List<UiExtension> getExtensions() {
- return ImmutableList.copyOf(extensions);
- }
-
- @Override
- public synchronized UiExtension getViewExtension(String viewId) {
- return views.get(viewId);
- }
-
- // =====================================================================
- // Provisional tracking of sprite definitions
-
- private final Map<String, JsonNode> sprites = Maps.newHashMap();
-
- @Override
- public Set<String> getNames() {
- return ImmutableSet.copyOf(sprites.keySet());
- }
-
- @Override
- public void put(String name, JsonNode spriteData) {
- log.info("Registered sprite definition [{}]", name);
- sprites.put(name, spriteData);
- }
-
- @Override
- public JsonNode get(String name) {
- return sprites.get(name);
- }
-
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
deleted file mode 100644
index 1d49d028..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.eclipse.jetty.websocket.WebSocket;
-import org.onlab.osgi.ServiceDirectory;
-import org.onlab.osgi.ServiceNotFoundException;
-import org.onosproject.cluster.ClusterService;
-import org.onosproject.cluster.ControllerNode;
-import org.onosproject.ui.UiConnection;
-import org.onosproject.ui.UiExtensionService;
-import org.onosproject.ui.UiMessageHandlerFactory;
-import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.UiTopoOverlayFactory;
-import org.onosproject.ui.topo.TopoConstants;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Web socket capable of interacting with the GUI.
- */
-public class UiWebSocket
- implements UiConnection, WebSocket.OnTextMessage, WebSocket.OnControl {
-
- private static final Logger log = LoggerFactory.getLogger(UiWebSocket.class);
-
- private static final long MAX_AGE_MS = 30_000;
-
- private static final byte PING = 0x9;
- private static final byte PONG = 0xA;
- private static final byte[] PING_DATA = new byte[]{(byte) 0xde, (byte) 0xad};
-
- private final ServiceDirectory directory;
-
- private Connection connection;
- private FrameConnection control;
-
- private final ObjectMapper mapper = new ObjectMapper();
-
- private long lastActive = System.currentTimeMillis();
-
- private Map<String, UiMessageHandler> handlers;
- private TopoOverlayCache overlayCache;
-
- /**
- * Creates a new web-socket for serving data to GUI.
- *
- * @param directory service directory
- */
- public UiWebSocket(ServiceDirectory directory) {
- this.directory = directory;
- }
-
- /**
- * Issues a close on the connection.
- */
- synchronized void close() {
- destroyHandlersAndOverlays();
- if (connection.isOpen()) {
- connection.close();
- }
- }
-
- /**
- * Indicates if this connection is idle.
- *
- * @return true if idle or closed
- */
- synchronized boolean isIdle() {
- long quietFor = System.currentTimeMillis() - lastActive;
- boolean idle = quietFor > MAX_AGE_MS;
- if (idle || (connection != null && !connection.isOpen())) {
- log.debug("IDLE (or closed) websocket [{} ms]", quietFor);
- return true;
- } else if (connection != null) {
- try {
- control.sendControl(PING, PING_DATA, 0, PING_DATA.length);
- } catch (IOException e) {
- log.warn("Unable to send ping message due to: ", e);
- }
- }
- return false;
- }
-
- @Override
- public synchronized void onOpen(Connection connection) {
- this.connection = connection;
- this.control = (FrameConnection) connection;
- try {
- createHandlersAndOverlays();
- sendInstanceData();
- log.info("GUI client connected");
-
- } catch (ServiceNotFoundException e) {
- log.warn("Unable to open GUI connection; services have been shut-down", e);
- this.connection.close();
- this.connection = null;
- this.control = null;
- }
- }
-
- @Override
- public synchronized void onClose(int closeCode, String message) {
- destroyHandlersAndOverlays();
- log.info("GUI client disconnected [close-code={}, message={}]",
- closeCode, message);
- }
-
- @Override
- public boolean onControl(byte controlCode, byte[] data, int offset, int length) {
- lastActive = System.currentTimeMillis();
- return true;
- }
-
- @Override
- public void onMessage(String data) {
- log.debug("onMessage: {}", data);
- lastActive = System.currentTimeMillis();
- try {
- ObjectNode message = (ObjectNode) mapper.reader().readTree(data);
- String type = message.path("event").asText("unknown");
- UiMessageHandler handler = handlers.get(type);
- if (handler != null) {
- handler.process(message);
- } else {
- log.warn("No GUI message handler for type {}", type);
- }
- } catch (Exception e) {
- log.warn("Unable to parse GUI message {} due to {}", data, e);
- log.debug("Boom!!!", e);
- }
- }
-
- @Override
- public synchronized void sendMessage(ObjectNode message) {
- try {
- if (connection.isOpen()) {
- connection.sendMessage(message.toString());
- }
- } catch (IOException e) {
- log.warn("Unable to send message {} to GUI due to {}", message, e);
- log.debug("Boom!!!", e);
- }
- }
-
- @Override
- public synchronized void sendMessage(String type, long sid, ObjectNode payload) {
- ObjectNode message = mapper.createObjectNode();
- message.put("event", type);
- if (sid > 0) {
- message.put("sid", sid);
- }
- message.set("payload", payload);
- sendMessage(message);
-
- }
-
- // Creates new message handlers.
- private synchronized void createHandlersAndOverlays() {
- log.debug("creating handlers and overlays...");
- handlers = new HashMap<>();
- overlayCache = new TopoOverlayCache();
-
- UiExtensionService service = directory.get(UiExtensionService.class);
- service.getExtensions().forEach(ext -> {
- UiMessageHandlerFactory factory = ext.messageHandlerFactory();
- if (factory != null) {
- factory.newHandlers().forEach(handler -> {
- handler.init(this, directory);
- handler.messageTypes().forEach(type -> handlers.put(type, handler));
-
- // need to inject the overlay cache into topology message handler
- if (handler instanceof TopologyViewMessageHandler) {
- ((TopologyViewMessageHandler) handler).setOverlayCache(overlayCache);
- }
- });
- }
-
- UiTopoOverlayFactory overlayFactory = ext.topoOverlayFactory();
- if (overlayFactory != null) {
- overlayFactory.newOverlays().forEach(overlayCache::add);
- }
- });
- log.debug("#handlers = {}, #overlays = {}", handlers.size(),
- overlayCache.size());
- }
-
- // Destroys message handlers.
- private synchronized void destroyHandlersAndOverlays() {
- log.debug("destroying handlers and overlays...");
- handlers.forEach((type, handler) -> handler.destroy());
- handlers.clear();
-
- if (overlayCache != null) {
- overlayCache.destroy();
- overlayCache = null;
- }
- }
-
- // Sends cluster node/instance information to allow GUI to fail-over.
- private void sendInstanceData() {
- ClusterService service = directory.get(ClusterService.class);
- ArrayNode instances = mapper.createArrayNode();
-
- for (ControllerNode node : service.getNodes()) {
- ObjectNode instance = mapper.createObjectNode()
- .put("id", node.id().toString())
- .put("ip", node.ip().toString())
- .put(TopoConstants.Glyphs.UI_ATTACHED,
- node.equals(service.getLocalNode()));
- instances.add(instance);
- }
-
- ObjectNode payload = mapper.createObjectNode();
- payload.set("clusterNodes", instances);
- sendMessage("bootstrap", 0, payload);
- }
-
-}
-
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
deleted file mode 100644
index ffc558da..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl;
-
-import org.eclipse.jetty.websocket.WebSocket;
-import org.eclipse.jetty.websocket.WebSocketServlet;
-import org.onlab.osgi.DefaultServiceDirectory;
-import org.onlab.osgi.ServiceDirectory;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.Timer;
-import java.util.TimerTask;
-
-/**
- * Web socket servlet capable of creating web sockets for the user interface.
- */
-public class UiWebSocketServlet extends WebSocketServlet {
-
- private static final long PING_DELAY_MS = 5000;
-
- private static UiWebSocketServlet instance;
-
- private ServiceDirectory directory = new DefaultServiceDirectory();
-
- private final Set<UiWebSocket> sockets = new HashSet<>();
- private final Timer timer = new Timer();
- private final TimerTask pruner = new Pruner();
- private boolean isStopped = false;
-
- /**
- * Closes all currently open UI web-sockets.
- */
- public static void closeAll() {
- if (instance != null) {
- instance.isStopped = true;
- instance.sockets.forEach(UiWebSocket::close);
- instance.sockets.clear();
- instance.pruner.cancel();
- instance.timer.cancel();
- }
- }
-
- @Override
- public void init() throws ServletException {
- super.init();
- instance = this;
- timer.schedule(pruner, PING_DELAY_MS, PING_DELAY_MS);
- }
-
- @Override
- public WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
- if (isStopped) {
- return null;
- }
- UiWebSocket socket = new UiWebSocket(directory);
- synchronized (sockets) {
- sockets.add(socket);
- }
- return socket;
- }
-
- // Task for pruning web-sockets that are idle.
- private class Pruner extends TimerTask {
- @Override
- public void run() {
- synchronized (sockets) {
- Iterator<UiWebSocket> it = sockets.iterator();
- while (it.hasNext()) {
- UiWebSocket socket = it.next();
- if (socket.isIdle()) {
- it.remove();
- socket.close();
- }
- }
- }
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/package-info.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/package-info.java
deleted file mode 100644
index 0f228039..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2014-2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Set of resources providing data for the ONOS GUI.
- */
-package org.onosproject.ui.impl;
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/IntentSelection.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/IntentSelection.java
deleted file mode 100644
index 151e6131..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/IntentSelection.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.onosproject.ui.impl.topo;
-
-import org.onosproject.net.intent.Intent;
-import org.onosproject.ui.topo.NodeSelection;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Encapsulates a selection of intents (paths) inferred from a selection
- * of devices and/or hosts from the topology view.
- */
-public class IntentSelection {
-
- private static final int ALL = -1;
-
- protected static final Logger log =
- LoggerFactory.getLogger(IntentSelection.class);
-
- private final NodeSelection nodes;
-
- private final List<Intent> intents;
- private int index = ALL;
-
- /**
- * Creates an intent selection group, based on selected nodes.
- *
- * @param nodes node selection
- * @param filter intent filter
- */
- public IntentSelection(NodeSelection nodes, TopoIntentFilter filter) {
- this.nodes = nodes;
- intents = filter.findPathIntents(nodes.hostsWithHover(), nodes.devicesWithHover());
- if (intents.size() == 1) {
- index = 0; // pre-select a single intent
- }
- }
-
- /**
- * Creates an intent selection group, for a single intent.
- *
- * @param intent the intent
- */
- public IntentSelection(Intent intent) {
- nodes = null;
- intents = new ArrayList<>(1);
- intents.add(intent);
- index = 0;
- }
-
- /**
- * Returns true if no intents are selected.
- *
- * @return true if nothing selected
- */
- public boolean none() {
- return intents.isEmpty();
- }
-
- /**
- * Returns true if all intents in this select group are currently selected.
- * This is the initial state, so that all intents are shown on the
- * topology view with primary highlighting.
- *
- * @return true if all selected
- */
- public boolean all() {
- return index == ALL;
- }
-
- /**
- * Returns true if there is a single intent in this select group, or if
- * a specific intent has been marked (index != ALL).
- *
- * @return true if single intent marked
- */
- public boolean single() {
- return !all();
- }
-
- /**
- * Returns the number of intents in this selection group.
- *
- * @return number of intents
- */
- public int size() {
- return intents.size();
- }
-
- /**
- * Returns the index of the currently selected intent.
- *
- * @return the current index
- */
- public int index() {
- return index;
- }
-
- /**
- * The list of intents in this selection group.
- *
- * @return list of intents
- */
- public List<Intent> intents() {
- return Collections.unmodifiableList(intents);
- }
-
- /**
- * Marks and returns the next intent in this group. Note that the
- * selection wraps around to the beginning again, if necessary.
- *
- * @return the next intent in the group
- */
- public Intent next() {
- index += 1;
- if (index >= intents.size()) {
- index = 0;
- }
- return intents.get(index);
- }
-
- /**
- * Marks and returns the previous intent in this group. Note that the
- * selection wraps around to the end again, if necessary.
- *
- * @return the previous intent in the group
- */
- public Intent prev() {
- index -= 1;
- if (index < 0) {
- index = intents.size() - 1;
- }
- return intents.get(index);
- }
-
- /**
- * Returns the currently marked intent, or null if "all" intents
- * are marked.
- *
- * @return the currently marked intent
- */
- public Intent current() {
- return all() ? null : intents.get(index);
- }
-
- @Override
- public String toString() {
- return "IntentSelection{" +
- "nodes=" + nodes +
- ", #intents=" + intents.size() +
- ", index=" + index +
- '}';
- }
-
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/ServicesBundle.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/ServicesBundle.java
deleted file mode 100644
index bcc4ad8b..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/ServicesBundle.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.onosproject.ui.impl.topo;
-
-import org.onosproject.incubator.net.PortStatisticsService;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.flow.FlowRuleService;
-import org.onosproject.net.host.HostService;
-import org.onosproject.net.intent.IntentService;
-import org.onosproject.net.link.LinkService;
-import org.onosproject.net.statistic.StatisticService;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * A bundle of services that the topology view requires to get its job done.
- */
-public class ServicesBundle {
-
- private final IntentService intentService;
- private final DeviceService deviceService;
- private final HostService hostService;
- private final LinkService linkService;
- private final FlowRuleService flowService;
- private final StatisticService flowStatsService;
- private final PortStatisticsService portStatsService;
-
- /**
- * Creates the services bundle.
- *
- * @param intentService intent service reference
- * @param deviceService device service reference
- * @param hostService host service reference
- * @param linkService link service reference
- * @param flowService flow service reference
- * @param flowStatsService flow statistics service reference
- * @param portStatsService port statistics service reference
- */
- public ServicesBundle(IntentService intentService,
- DeviceService deviceService,
- HostService hostService,
- LinkService linkService,
- FlowRuleService flowService,
- StatisticService flowStatsService,
- PortStatisticsService portStatsService) {
- this.intentService = checkNotNull(intentService);
- this.deviceService = checkNotNull(deviceService);
- this.hostService = checkNotNull(hostService);
- this.linkService = checkNotNull(linkService);
- this.flowService = checkNotNull(flowService);
- this.flowStatsService = checkNotNull(flowStatsService);
- this.portStatsService = checkNotNull(portStatsService);
- }
-
- /**
- * Returns a reference to the intent service.
- *
- * @return intent service reference
- */
- public IntentService intentService() {
- return intentService;
- }
-
- /**
- * Returns a reference to the device service.
- *
- * @return device service reference
- */
- public DeviceService deviceService() {
- return deviceService;
- }
-
- /**
- * Returns a reference to the host service.
- *
- * @return host service reference
- */
- public HostService hostService() {
- return hostService;
- }
-
- /**
- * Returns a reference to the link service.
- *
- * @return link service reference
- */
- public LinkService linkService() {
- return linkService;
- }
-
- /**
- * Returns a reference to the flow rule service.
- *
- * @return flow service reference
- */
- public FlowRuleService flowService() {
- return flowService;
- }
-
- /**
- * Returns a reference to the flow statistics service.
- *
- * @return flow statistics service reference
- */
- public StatisticService flowStatsService() {
- return flowStatsService;
- }
-
- /**
- * Returns a reference to the port statistics service.
- *
- * @return port statistics service reference
- */
- public PortStatisticsService portStatsService() {
- return portStatsService;
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/TopoIntentFilter.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/TopoIntentFilter.java
deleted file mode 100644
index 8372dede..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/TopoIntentFilter.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright 2014-2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.ui.impl.topo;
-
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.Link;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.flow.FlowRule;
-import org.onosproject.net.host.HostService;
-import org.onosproject.net.intent.FlowRuleIntent;
-import org.onosproject.net.intent.HostToHostIntent;
-import org.onosproject.net.intent.Intent;
-import org.onosproject.net.intent.IntentService;
-import org.onosproject.net.intent.LinkCollectionIntent;
-import org.onosproject.net.intent.MultiPointToSinglePointIntent;
-import org.onosproject.net.intent.OpticalConnectivityIntent;
-import org.onosproject.net.intent.PathIntent;
-import org.onosproject.net.intent.PointToPointIntent;
-import org.onosproject.net.link.LinkService;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-
-import static org.onosproject.net.intent.IntentState.INSTALLED;
-
-/**
- * Auxiliary facility to query the intent service based on the specified
- * set of end-station hosts, edge points or infrastructure devices.
- */
-public class TopoIntentFilter {
-
- private final IntentService intentService;
- private final DeviceService deviceService;
- private final HostService hostService;
- private final LinkService linkService;
-
- /**
- * Creates an intent filter.
- *
- * @param services service references bundle
- */
- public TopoIntentFilter(ServicesBundle services) {
- this.intentService = services.intentService();
- this.deviceService = services.deviceService();
- this.hostService = services.hostService();
- this.linkService = services.linkService();
- }
-
- /**
- * Finds all path (host-to-host or point-to-point) intents that pertain
- * to the given hosts and devices.
- *
- * @param hosts set of hosts to query by
- * @param devices set of devices to query by
- * @return set of intents that 'match' all hosts and devices given
- */
- public List<Intent> findPathIntents(Set<Host> hosts, Set<Device> devices) {
- // start with all intents
- Iterable<Intent> sourceIntents = intentService.getIntents();
-
- // Derive from this the set of edge connect points.
- Set<ConnectPoint> edgePoints = getEdgePoints(hosts);
-
- // Iterate over all intents and produce a set that contains only those
- // intents that target all selected hosts or derived edge connect points.
- return getIntents(hosts, devices, edgePoints, sourceIntents);
- }
-
-
- // Produces a set of edge points from the specified set of hosts.
- private Set<ConnectPoint> getEdgePoints(Set<Host> hosts) {
- Set<ConnectPoint> edgePoints = new HashSet<>();
- for (Host host : hosts) {
- edgePoints.add(host.location());
- }
- return edgePoints;
- }
-
- // Produces a list of intents that target all selected hosts, devices or connect points.
- private List<Intent> getIntents(Set<Host> hosts, Set<Device> devices,
- Set<ConnectPoint> edgePoints,
- Iterable<Intent> sourceIntents) {
- List<Intent> intents = new ArrayList<>();
- if (hosts.isEmpty() && devices.isEmpty()) {
- return intents;
- }
-
- Set<OpticalConnectivityIntent> opticalIntents = new HashSet<>();
-
- // Search through all intents and see if they are relevant to our search.
- for (Intent intent : sourceIntents) {
- if (intentService.getIntentState(intent.key()) == INSTALLED) {
- boolean isRelevant = false;
- if (intent instanceof HostToHostIntent) {
- isRelevant = isIntentRelevantToHosts((HostToHostIntent) intent, hosts) &&
- isIntentRelevantToDevices(intent, devices);
- } else if (intent instanceof PointToPointIntent) {
- isRelevant = isIntentRelevant((PointToPointIntent) intent, edgePoints) &&
- isIntentRelevantToDevices(intent, devices);
- } else if (intent instanceof MultiPointToSinglePointIntent) {
- isRelevant = isIntentRelevant((MultiPointToSinglePointIntent) intent, edgePoints) &&
- isIntentRelevantToDevices(intent, devices);
- } else if (intent instanceof OpticalConnectivityIntent) {
- opticalIntents.add((OpticalConnectivityIntent) intent);
- }
- // TODO: add other intents, e.g. SinglePointToMultiPointIntent
-
- if (isRelevant) {
- intents.add(intent);
- }
- }
- }
-
- // As a second pass, try to link up any optical intents with the
- // packet-level ones.
- for (OpticalConnectivityIntent intent : opticalIntents) {
- if (isIntentRelevant(intent, intents) &&
- isIntentRelevantToDevices(intent, devices)) {
- intents.add(intent);
- }
- }
- return intents;
- }
-
- // Indicates whether the specified intent involves all of the given hosts.
- private boolean isIntentRelevantToHosts(HostToHostIntent intent, Iterable<Host> hosts) {
- for (Host host : hosts) {
- HostId id = host.id();
- // Bail if intent does not involve this host.
- if (!id.equals(intent.one()) && !id.equals(intent.two())) {
- return false;
- }
- }
- return true;
- }
-
- // Indicates whether the specified intent involves all of the given devices.
- private boolean isIntentRelevantToDevices(Intent intent, Iterable<Device> devices) {
- List<Intent> installables = intentService.getInstallableIntents(intent.key());
- for (Device device : devices) {
- if (!isIntentRelevantToDevice(installables, device)) {
- return false;
- }
- }
- return true;
- }
-
- // Indicates whether the specified intent involves the given device.
- private boolean isIntentRelevantToDevice(List<Intent> installables, Device device) {
- if (installables != null) {
- for (Intent installable : installables) {
- if (installable instanceof PathIntent) {
- PathIntent pathIntent = (PathIntent) installable;
- if (pathContainsDevice(pathIntent.path().links(), device.id())) {
- return true;
- }
- } else if (installable instanceof FlowRuleIntent) {
- FlowRuleIntent flowRuleIntent = (FlowRuleIntent) installable;
- if (rulesContainDevice(flowRuleIntent.flowRules(), device.id())) {
- return true;
- }
- } else if (installable instanceof LinkCollectionIntent) {
- LinkCollectionIntent linksIntent = (LinkCollectionIntent) installable;
- if (pathContainsDevice(linksIntent.links(), device.id())) {
- return true;
- }
- }
- }
- }
- return false;
- }
-
- // Indicates whether the specified links involve the given device.
- private boolean pathContainsDevice(Iterable<Link> links, DeviceId id) {
- for (Link link : links) {
- if (link.src().elementId().equals(id) || link.dst().elementId().equals(id)) {
- return true;
- }
- }
- return false;
- }
-
- // Indicates whether the specified flow rules involvesthe given device.
- private boolean rulesContainDevice(Collection<FlowRule> flowRules, DeviceId id) {
- for (FlowRule rule : flowRules) {
- if (rule.deviceId().equals(id)) {
- return true;
- }
- }
- return false;
- }
-
- private boolean isIntentRelevant(PointToPointIntent intent,
- Iterable<ConnectPoint> edgePoints) {
- for (ConnectPoint point : edgePoints) {
- // Bail if intent does not involve this edge point.
- if (!point.equals(intent.egressPoint()) &&
- !point.equals(intent.ingressPoint())) {
- return false;
- }
- }
- return true;
- }
-
- // Indicates whether the specified intent involves all of the given edge points.
- private boolean isIntentRelevant(MultiPointToSinglePointIntent intent,
- Iterable<ConnectPoint> edgePoints) {
- for (ConnectPoint point : edgePoints) {
- // Bail if intent does not involve this edge point.
- if (!point.equals(intent.egressPoint()) &&
- !intent.ingressPoints().contains(point)) {
- return false;
- }
- }
- return true;
- }
-
- // Indicates whether the specified intent involves all of the given edge points.
- private boolean isIntentRelevant(OpticalConnectivityIntent opticalIntent,
- Iterable<Intent> intents) {
- Link ccSrc = getFirstLink(opticalIntent.getSrc(), false);
- Link ccDst = getFirstLink(opticalIntent.getDst(), true);
- if (ccSrc == null || ccDst == null) {
- return false;
- }
-
- for (Intent intent : intents) {
- List<Intent> installables = intentService.getInstallableIntents(intent.key());
- for (Intent installable : installables) {
- if (installable instanceof PathIntent) {
- List<Link> links = ((PathIntent) installable).path().links();
- if (links.size() == 3) {
- Link tunnel = links.get(1);
- if (Objects.equals(tunnel.src(), ccSrc.src()) &&
- Objects.equals(tunnel.dst(), ccDst.dst())) {
- return true;
- }
- }
- }
- }
- }
- return false;
- }
-
- private Link getFirstLink(ConnectPoint point, boolean ingress) {
- for (Link link : linkService.getLinks(point)) {
- if (point.equals(ingress ? link.src() : link.dst())) {
- return link;
- }
- }
- return null;
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/TrafficLink.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/TrafficLink.java
deleted file mode 100644
index a0e16620..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/TrafficLink.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.onosproject.ui.impl.topo;
-
-import org.onosproject.net.Link;
-import org.onosproject.net.LinkKey;
-import org.onosproject.net.statistic.Load;
-import org.onosproject.ui.topo.BiLink;
-import org.onosproject.ui.topo.LinkHighlight;
-import org.onosproject.ui.topo.LinkHighlight.Flavor;
-import org.onosproject.ui.topo.TopoUtils;
-
-import static org.onosproject.ui.topo.LinkHighlight.Flavor.NO_HIGHLIGHT;
-import static org.onosproject.ui.topo.LinkHighlight.Flavor.PRIMARY_HIGHLIGHT;
-import static org.onosproject.ui.topo.LinkHighlight.Flavor.SECONDARY_HIGHLIGHT;
-
-/**
- * Representation of a link and its inverse, and associated traffic data.
- * This class understands how to generate the appropriate
- * {@link LinkHighlight}s for showing traffic data on the topology view.
- */
-public class TrafficLink extends BiLink {
-
- private static final String EMPTY = "";
- private static final String QUE = "?";
-
- private long bytes = 0;
- private long rate = 0;
- private long flows = 0;
- private Flavor taggedFlavor = NO_HIGHLIGHT;
- private boolean hasTraffic = false;
- private boolean isOptical = false;
- private boolean antMarch = false;
-
- /**
- * Constructs a traffic link for the given key and initial link.
- *
- * @param key canonical key for this traffic link
- * @param link first link
- */
- public TrafficLink(LinkKey key, Link link) {
- super(key, link);
- }
-
- /**
- * Sets the optical flag to the given value.
- *
- * @param b true if an optical link
- * @return self, for chaining
- */
- public TrafficLink optical(boolean b) {
- isOptical = b;
- return this;
- }
-
- /**
- * Sets the ant march flag to the given value.
- *
- * @param b true if marching ants required
- * @return self, for chaining
- */
- public TrafficLink antMarch(boolean b) {
- antMarch = b;
- return this;
- }
-
- /**
- * Tags this traffic link with the flavor to be used in visual rendering.
- *
- * @param flavor the flavor to tag
- * @return self, for chaining
- */
- public TrafficLink tagFlavor(Flavor flavor) {
- this.taggedFlavor = flavor;
- return this;
- }
-
- /**
- * Adds load statistics, marks the traffic link as having traffic.
- *
- * @param load load to add
- */
- public void addLoad(Load load) {
- addLoad(load, 0);
- }
-
- /**
- * Adds load statistics, marks the traffic link as having traffic, if the
- * load {@link Load#rate rate} is greater than the given threshold
- * (expressed in bytes per second).
- *
- * @param load load to add
- * @param threshold threshold to register traffic
- */
- public void addLoad(Load load, double threshold) {
- if (load != null) {
- this.hasTraffic = hasTraffic || load.rate() > threshold;
- this.bytes += load.latest();
- this.rate += load.rate();
- }
- }
-
- /**
- * Adds the given count of flows to this traffic link.
- *
- * @param count count of flows
- */
- public void addFlows(int count) {
- this.flows += count;
- }
-
- @Override
- public LinkHighlight highlight(Enum<?> type) {
- StatsType statsType = (StatsType) type;
- switch (statsType) {
- case FLOW_COUNT:
- return highlightForFlowCount(statsType);
-
- case FLOW_STATS:
- case PORT_STATS:
- return highlightForStats(statsType);
-
- case TAGGED:
- return highlightForTagging(statsType);
-
- default:
- throw new IllegalStateException("unexpected case: " + statsType);
- }
- }
-
- private LinkHighlight highlightForStats(StatsType type) {
- return new LinkHighlight(linkId(), SECONDARY_HIGHLIGHT)
- .setLabel(generateLabel(type));
- }
-
- private LinkHighlight highlightForFlowCount(StatsType type) {
- Flavor flavor = flows > 0 ? PRIMARY_HIGHLIGHT : SECONDARY_HIGHLIGHT;
- return new LinkHighlight(linkId(), flavor)
- .setLabel(generateLabel(type));
- }
-
- private LinkHighlight highlightForTagging(StatsType type) {
- LinkHighlight hlite = new LinkHighlight(linkId(), taggedFlavor)
- .setLabel(generateLabel(type));
- if (isOptical) {
- hlite.addMod(LinkHighlight.MOD_OPTICAL);
- }
- if (antMarch) {
- hlite.addMod(LinkHighlight.MOD_ANIMATED);
- }
- return hlite;
- }
-
- // Generates a string representation of the load, to be used as a label
- private String generateLabel(StatsType type) {
- switch (type) {
- case FLOW_COUNT:
- return TopoUtils.formatFlows(flows);
-
- case FLOW_STATS:
- return TopoUtils.formatBytes(bytes);
-
- case PORT_STATS:
- return TopoUtils.formatBitRate(rate);
-
- case TAGGED:
- return hasTraffic ? TopoUtils.formatBytes(bytes) : EMPTY;
-
- default:
- return QUE;
- }
- }
-
- /**
- * Returns true if this link has been deemed to have enough traffic
- * to register on the topology view in the web UI.
- *
- * @return true if this link has displayable traffic
- */
- public boolean hasTraffic() {
- return hasTraffic;
- }
-
- /**
- * Designates type of traffic statistics to report on a highlighted link.
- */
- public enum StatsType {
- /**
- * Number of flows.
- */
- FLOW_COUNT,
-
- /**
- * Number of bytes.
- */
- FLOW_STATS,
-
- /**
- * Number of bits per second.
- */
- PORT_STATS,
-
- /**
- * Custom tagged information.
- */
- TAGGED
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/TrafficLinkMap.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/TrafficLinkMap.java
deleted file mode 100644
index 081964f8..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/TrafficLinkMap.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.onosproject.ui.impl.topo;
-
-import org.onosproject.net.Link;
-import org.onosproject.net.LinkKey;
-import org.onosproject.ui.topo.BiLinkMap;
-
-/**
- * Collection of {@link TrafficLink}s.
- */
-public class TrafficLinkMap extends BiLinkMap<TrafficLink> {
-
- @Override
- public TrafficLink create(LinkKey key, Link link) {
- return new TrafficLink(key, link);
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/package-info.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/package-info.java
deleted file mode 100644
index 07f4802a..00000000
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/topo/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Topology resources for the ONOS GUI.
- */
-package org.onosproject.ui.impl.topo;
diff --git a/framework/src/onos/web/gui/src/main/resources/core/css.html b/framework/src/onos/web/gui/src/main/resources/core/css.html
deleted file mode 100644
index 97bee6ba..00000000
--- a/framework/src/onos/web/gui/src/main/resources/core/css.html
+++ /dev/null
@@ -1 +0,0 @@
-<!-- Builtin view stylesheets are in the main index.html -->
diff --git a/framework/src/onos/web/gui/src/main/resources/core/js.html b/framework/src/onos/web/gui/src/main/resources/core/js.html
deleted file mode 100644
index 8e2269bd..00000000
--- a/framework/src/onos/web/gui/src/main/resources/core/js.html
+++ /dev/null
@@ -1 +0,0 @@
-<!-- Builtin view javascript is in the main index.html --> \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/resources/not-ready.html b/framework/src/onos/web/gui/src/main/resources/not-ready.html
deleted file mode 100644
index 7843ca44..00000000
--- a/framework/src/onos/web/gui/src/main/resources/not-ready.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-<html>
-<head>
- <meta charset="utf-8">
- <link rel="shortcut icon" href="data/img/onos-logo.png">
-
- <link rel="apple-touch-icon" href="data/img/apple-touch-icon.png">
- <meta name="apple-mobile-web-app-capable" content="yes">
- <meta name="apple-mobile-web-app-status-bar-style" content="black">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
- <meta http-equiv="refresh" content="5;URL=/onos/ui">
-
- <title>ONOS</title>
-
-</head>
-<body>
-<h1>ONOS GUI not ready yet... stand by...</h1>
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/WEB-INF/web.xml b/framework/src/onos/web/gui/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index dda59f54..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Copyright 2014 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- id="ONOS" version="2.5">
- <display-name>ONOS GUI</display-name>
-
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- </welcome-file-list>
-
- <!--
- -->
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>Secured</web-resource-name>
- <url-pattern>/index.html</url-pattern>
- </web-resource-collection>
- <auth-constraint>
- <role-name>admin</role-name>
- </auth-constraint>
- <!--
- <user-data-constraint>
- <transport-guarantee>CONFIDENTIAL</transport-guarantee>
- </user-data-constraint>
- -->
- </security-constraint>
-
- <security-role>
- <role-name>admin</role-name>
- </security-role>
-
- <login-config>
- <auth-method>FORM</auth-method>
- <realm-name>karaf</realm-name>
- <form-login-config>
- <form-login-page>/login.html</form-login-page>
- <form-error-page>/error.html</form-error-page>
- </form-login-config>
- </login-config>
-
- <servlet>
- <servlet-name>Index Page</servlet-name>
- <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer
- </servlet-class>
- <init-param>
- <param-name>com.sun.jersey.config.property.resourceConfigClass
- </param-name>
- <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig
- </param-value>
- </init-param>
- <init-param>
- <param-name>com.sun.jersey.config.property.classnames</param-name>
- <param-value>org.onosproject.ui.impl.MainIndexResource</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>Index Page</servlet-name>
- <url-pattern>/index.html</url-pattern>
- </servlet-mapping>
-
- <servlet>
- <servlet-name>Main Module</servlet-name>
- <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer
- </servlet-class>
- <init-param>
- <param-name>com.sun.jersey.config.property.resourceConfigClass
- </param-name>
- <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig
- </param-value>
- </init-param>
- <init-param>
- <param-name>com.sun.jersey.config.property.classnames</param-name>
- <param-value>org.onosproject.ui.impl.MainModuleResource
- </param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>Main Module</servlet-name>
- <url-pattern>/onos.js</url-pattern>
- </servlet-mapping>
-
- <servlet>
- <servlet-name>Nav Module</servlet-name>
- <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer
- </servlet-class>
- <init-param>
- <param-name>com.sun.jersey.config.property.resourceConfigClass
- </param-name>
- <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig
- </param-value>
- </init-param>
- <init-param>
- <param-name>com.sun.jersey.config.property.classnames</param-name>
- <param-value>org.onosproject.ui.impl.MainNavResource</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>Nav Module</servlet-name>
- <url-pattern>/nav.html</url-pattern>
- </servlet-mapping>
-
- <servlet>
- <servlet-name>View Module</servlet-name>
- <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer
- </servlet-class>
- <init-param>
- <param-name>com.sun.jersey.config.property.resourceConfigClass
- </param-name>
- <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig
- </param-value>
- </init-param>
- <init-param>
- <param-name>com.sun.jersey.config.property.classnames</param-name>
- <param-value>org.onosproject.ui.impl.MainViewResource</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>View Module</servlet-name>
- <url-pattern>/app/view/*</url-pattern>
- </servlet-mapping>
-
- <servlet>
- <servlet-name>JAX-RS Service</servlet-name>
- <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer
- </servlet-class>
- <init-param>
- <param-name>com.sun.jersey.config.property.resourceConfigClass
- </param-name>
- <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig
- </param-value>
- </init-param>
- <init-param>
- <param-name>com.sun.jersey.config.property.classnames</param-name>
- <param-value>
- org.onosproject.ui.impl.LogoutResource,
- org.onosproject.ui.impl.TopologyResource,
- org.onosproject.ui.impl.ApplicationResource
- </param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>JAX-RS Service</servlet-name>
- <url-pattern>/rs/*</url-pattern>
- </servlet-mapping>
-
- <servlet>
- <servlet-name>Web Socket Service</servlet-name>
- <servlet-class>org.onosproject.ui.impl.UiWebSocketServlet
- </servlet-class>
- <load-on-startup>2</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>Web Socket Service</servlet-name>
- <url-pattern>/websock/*</url-pattern>
- </servlet-mapping>
-
-</web-app>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_bripc/practice-table.html b/framework/src/onos/web/gui/src/main/webapp/_bripc/practice-table.html
deleted file mode 100644
index 1912cc7e..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_bripc/practice-table.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE html>
-<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<!--
- ONOS -- Displaying icons with Angular test page
- -->
-
-<html>
-<head lang="en">
- <meta charset="UTF-8">
- <title>Practice Table Formatting</title>
-
- <script type="text/javascript" src="../tp/angular.js"></script>
- <script type="text/javascript" src="../tp/angular-route.js"></script>
-
- <script type="text/javascript" src="../tp/d3.js"></script>
-
- <script type="text/javascript" src="practice-table.js"></script>
- <script type="text/javascript" src="../app/fw/widget/widget.js"></script>
- <script type="text/javascript" src="../app/fw/widget/table.js"></script>
-
- <style>
- html,
- body {
- background-color: #ddf;
- font-family: Arial, Helvetica, sans-serif;
- font-size: 9pt;
- }
-
- h2 {
- color: darkred;
- }
-
- </style>
-
-</head>
-<!-- outline for using a controller in Angular -->
-<body ng-app="practiceTable">
- <h2>Scrolling Table Practice</h2>
- <div id="tableDiv" ng-controller="showTableCtrl as ctrl">
- </div>
-
-</body>
-</html> \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/_bripc/practice-table.js b/framework/src/onos/web/gui/src/main/webapp/_bripc/practice-table.js
deleted file mode 100644
index f244c866..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_bripc/practice-table.js
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Showing Icons Test Module
- */
-
-(function () {
- 'use strict';
-
- var config = {
- colIds: ['_iconid_available', 'id', 'mfr', 'hw', 'sw', 'serial',
- 'annotations'],
- colText: ['Availability', 'URI', 'Vendor', 'Hardware Version',
- 'Software Version', 'Serial Number', 'Protocol']
- },
- deviceData = {
- "devices": [{
- "id": "of:0000000000000001",
- "available": true,
- "_iconid_available": "active",
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000004",
- "available": false,
- "_iconid_available": "inactive",
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000092",
- "available": false,
- "_iconid_available": "inactive",
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000092",
- "available": false,
- "_iconid_available": "inactive",
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000092",
- "available": false,
- "_iconid_available": "inactive",
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000092",
- "available": false,
- "_iconid_available": "inactive",
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000092",
- "available": false,
- "_iconid_available": "inactive",
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000092",
- "available": false,
- "_iconid_available": "inactive",
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000092",
- "available": false,
- "_iconid_available": "inactive",
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000092",
- "available": false,
- "_iconid_available": "inactive",
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000092",
- "available": false,
- "_iconid_available": "inactive",
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000092",
- "available": false,
- "_iconid_available": "inactive",
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000092",
- "available": false,
- "_iconid_available": "inactive",
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- }]
- };
-
- function setColWidth(t) {
- var tHeaders, tdElement, colWidth;
-
- tHeaders = t.selectAll('th');
-
- // select each td in the first row and set the header's width to the
- // corresponding td's width, if td is larger than header's width
- tHeaders.each(function(thElement, index){
- thElement = d3.select(this);
-
- tdElement = t.select('td:nth-of-type(' + (index + 1) + ')');
- colWidth = tdElement.style('width');
-
- thElement.style('width', colWidth);
- tdElement.style('width', colWidth);
- });
- }
-
- function setCSS(thead, tbody, height) {
- thead.style('display', 'block');
- tbody.style({'display': 'block',
- 'height': height || '100px',
- 'overflow': 'auto'
- });
- }
-
- function fixTable(t, th, tb, height) {
- setColWidth(t);
- setCSS(th, tb, height);
- }
-
- angular.module('practiceTable', ['onosWidget'])
-
- .controller('showTableCtrl', ['$log', '$scope', '$rootScope',
- '$timeout', 'TableService',
- function ($log, $scope, $rootScope, $timeout, ts) {
- var self = this;
- var table = ts.renderTable(d3.select('#tableDiv'), config, deviceData);
- }])
-
- .directive('fixedHeader', ['$log', '$timeout', '$compile',
- function ($log, $timeout, $compile) {
- return {
- restrict: 'A',
- scope: {
- tHeight: '@'
- },
-
- link: function (scope, element, attrs) {
- var table = d3.select(element[0]),
- thead = table.select('thead'),
- tbody = table.select('tbody');
-
- // wait until the table is visible
- scope.$watch(
- function () { return (!(table.offsetParent === null)); },
- function(newValue, oldValue) {
- if (newValue === true) {
-
- // ensure thead and tbody have no display
- thead.style('display', null);
- tbody.style('display', null);
-
- $timeout(function () {
- fixTable(table, thead, tbody, scope.tHeight);
- });
- }
- });
- }
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/_bripc/show-icons-test.js b/framework/src/onos/web/gui/src/main/webapp/_bripc/show-icons-test.js
deleted file mode 100644
index 915e0168..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_bripc/show-icons-test.js
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Showing Icons Test Module
- */
-
-(function () {
- 'use strict';
-
- // assuming the glyph is a square
- // div is a D3 selection of the <DIV> element into which icon should load
- // size is the size of the glyph
- // id is the symbol id
- // rer is the rectangle the glyph will be in's rounded corners
- // svgClass is the class name for your glyph
- function createGlyph(div, size, id, rer, svgClass) {
- var dim = size || 20,
- texty = 30,
- gid = id || 'unknown',
- rx = rer || 4,
- svgCls = svgClass || 'embeddedGlyph',
- svg, g;
-
- svg = div.append('svg').attr({
- 'class': svgCls,
- width: dim,
- height: dim + texty,
- viewBox: '0 0 ' + dim + ' ' + dim
- });
-
- g = svg.append('g').attr({
- 'class': 'glyph'
- });
-
- g.append('rect').attr({
- width: dim,
- height: dim,
- rx: rx
- });
-
- g.append('use').attr({
- width: dim,
- height: dim,
- 'class': 'glyph',
- 'xlink:href': '#' + gid
- });
-
- g.append('text')
- .attr({
- 'text-anchor': 'left',
- y: '1em',
- x: 0,
- transform: 'translate(0, ' + dim + ')scale(0.8)'
- })
- .style('fill', '#800')
- .text(id);
- }
-
- angular.module('showIconsTest', ['onosSvg'])
-
- .controller('OvShowIconsTest', ['$log', 'GlyphService', 'IconService',
- function ($log, gs, icns) {
- var self = this;
-
- gs.init();
-
- var div = d3.select('#showIcons');
-
- // show device online and offline icons
- icns.loadEmbeddedIcon(div, 'active', 50);
- div.append('span').style('padding-left', '15px');
- icns.loadEmbeddedIcon(div, 'inactive', 50);
-
- var defs = d3.select('defs');
-
- // show all glyphs in glyph library
- gs.loadDefs(defs, null, true);
- var list = gs.ids(),
- gDiv = d3.select('#showGlyphs'),
- ctr = 0;
- list.forEach(function (id) {
- createGlyph(gDiv, 50, id);
- ctr += 1;
- if (ctr%6 > 0) {
- gDiv.append('span').style('padding-left', '15px');
- } else {
- gDiv.append('br');
- }
- });
-
- $log.log('OvShowIconsTest has been created');
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/_bripc/show-icons.html b/framework/src/onos/web/gui/src/main/webapp/_bripc/show-icons.html
deleted file mode 100644
index e6bf1dab..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_bripc/show-icons.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!DOCTYPE html>
-<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<!--
- ONOS -- Displaying icons with Angular test page
- -->
-
-<html>
-<head lang="en">
- <meta charset="UTF-8">
- <title>Show Icons Angular</title>
-
- <script type="text/javascript" src="../tp/angular.js"></script>
- <script type="text/javascript" src="../tp/angular-route.js"></script>
-
- <script type="text/javascript" src="../tp/d3.js"></script>
-
- <script type="text/javascript" src="../app/fw/util/util.js"></script>
- <script type="text/javascript" src="../app/fw/util/fn.js"></script>
- <script type="text/javascript" src="../app/fw/util/theme.js"></script>
- <script type="text/javascript" src="../app/fw/util/keys.js"></script>
-
- <script type="text/javascript" src="../app/fw/svg/svg.js"></script>
- <script type="text/javascript" src="../app/fw/svg/svgUtil.js"></script>
- <script type="text/javascript" src="../app/fw/svg/glyph.js"></script>
- <script type="text/javascript" src="../app/fw/svg/icon.js"></script>
- <script type="text/javascript" src="../app/fw/svg/geodata.js"></script>
- <script type="text/javascript" src="../app/fw/svg/map.js"></script>
- <script type="text/javascript" src="../app/fw/svg/zoom.js"></script>
-
- <script type="text/javascript" src="show-icons-test.js"></script>
-
- <link rel="stylesheet" href="../app/common.css">
- <link rel="stylesheet" href="../app/fw/svg/icon.css">
-
- <style>
- html,
- body {
- background-color: #ddf;
- font-family: Arial, Helvetica, sans-serif;
- font-size: 9pt;
- }
-
- h2 {
- color: darkred;
- }
-
- svg .glyph {
- stroke: none;
- fill: #123456;
- fill-rule: evenodd;
- }
-
- svg.embeddedGlyph .glyph rect {
- fill: #fff
- }
-
- </style>
-
-</head>
-<!-- outline for using a controller in Angular -->
-<body class="light" ng-app="showIconsTest" ng-controller="OvShowIconsTest as ctrl">
- <h2>Displaying Icons and Glyphs with Angular</h2>
- <div id="showIcons">
- <p>Show all icons in icon library:<br></p>
- </div>
- <hr>
- <div id="showGlyphs">
- <p>Show all glyphs in glyph library:</p>
- <p>(Displays checkMark and xMark too, because icons are built on top
- of glyphs.)</p>
- </div>
-
-
-
-</body>
-</html> \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/_bripc/svg-exercise.html b/framework/src/onos/web/gui/src/main/webapp/_bripc/svg-exercise.html
deleted file mode 100644
index f9c11b8d..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_bripc/svg-exercise.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html>
-<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<!--
- ONOS -- SVG mouse over d3 exercise html
- -->
-
-<html>
-<head lang="en">
- <meta charset="UTF-8">
- <title>Upgrade Performance</title>
-
- <script type="text/javascript" src="../tp/angular.js"></script>
- <script type="text/javascript" src="../tp/d3.js"></script>
- <script type="text/javascript" src="svg-exercise.js"></script>
- <script type="text/javascript" src="../app/fw/util/util.js"></script>
- <script type="text/javascript" src="../app/fw/util/fn.js"></script>
-
-
- <style>
- html,
- body, div {
- background-color: #eee;
- font-family: Arial, Helvetica, sans-serif;
- font-size: 9pt;
- margin: 0;
- overflow: hidden;
- }
- .button {
- fill: #369;
- filter: url(#buttonBevel);
- }
- svg text {
- fill: white;
- letter-spacing: .005em;
- }
- </style>
-</head>
-
-<body ng-app="svgExercise">
-
-<div id="svgExDiv" ng-controller="svgExCtrl as ctrl">
- <improve-performance></improve-performance>
-</div>
-
-<svg xmlns="http://www.w3.org/2000/svg"
- viewBox="-10 -10 110 110"
- visibility="hidden">
- <filter id="buttonBevel"
- filterUnits="objectBoundingBox"
- x="-10%" y="-10%" width="110%" height="110%">
- <feGaussianBlur in="SourceAlpha"
- stdDeviation="4"
- result="blur"/>
- <feSpecularLighting in="blur"
- surfaceScale="7"
- specularConstant="0.6"
- specularExponent="5"
- result="spec"
- lighting-color="#4E7199">
- <fePointLight x="-5000" y="-10000" z="20000"/>
- </feSpecularLighting>
- <feComposite in="spec"
- in2="SourceAlpha"
- operator="in"
- result="spec2"/>
- <feComposite in="SourceGraphic"
- in2="spec2"
- operator="arithmetic"
- k1="0" k2="1" k3="1" k4="0" />
- </filter>
-</svg>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_bripc/svg-exercise.js b/framework/src/onos/web/gui/src/main/webapp/_bripc/svg-exercise.js
deleted file mode 100644
index 96ed131f..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_bripc/svg-exercise.js
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- SVG mouse over d3 exercise module
- */
-
-(function () {
- 'use strict';
-
- // injected references
- var $log, fs;
-
- // constants
- var btnWidth = 175,
- btnHeight = 50,
- hoverZone = 70,
- sectorDivisions = 3,
- margin = 10;
-
- // svg elements
- var svg, g;
-
- // other variables
- var winWidth, winHeight,
- sectorWidth, sectorHeight,
- currSector = 4, // always starts in the middle
- mouse;
-
- // ====================================================
-
- function centeredOnWindow(axis, dim) {
- return (axis / 2) - (dim / 2);
- }
-
- function onMouseMove() {
- mouse = d3.mouse(this);
- moveButton();
- }
-
- function removeMouseListener() {
- g.on('mousemove', null);
- }
-
- function addMouseListener() {
- g.on('mousemove', onMouseMove);
- }
-
- function selectSector() {
- var sector, row, col,
- currCol = currSector % sectorDivisions;
-
- do {
- sector = Math.floor((Math.random() * 9));
- col = sector % sectorDivisions;
- } while (col === currCol);
- currSector = sector;
- row = Math.floor(sector / sectorDivisions);
-
- return {
- xmin: (sectorWidth * col) + margin,
- xmax: ((sectorWidth * col) + sectorWidth) - margin,
- ymin: (sectorHeight * row) + margin,
- ymax: ((sectorHeight * row) + sectorHeight) - margin
- };
- }
-
- function selectXY(sectorCoords) {
- var x, y, x1, y1;
-
- do {
- x = (Math.random() * sectorCoords.xmax) + sectorCoords.xmin;
- y = (Math.random() * sectorCoords.ymax) + sectorCoords.ymin;
- x1 = x + btnWidth;
- y1 = y + btnHeight;
- } while (x1 > sectorCoords.xmax || y1 > sectorCoords.ymax);
-
- return {
- x: x,
- y: y
- };
- }
-
- function gTranslate(x, y) {
- return 'translate(' + x + ',' + y + ')';
- }
-
- function moveButton() {
- var sec = selectSector(),
- pos = selectXY(sec);
- g.transition()
- .duration(300)
- .ease('cubic-out')
- .each('start', removeMouseListener)
- .attr('transform', gTranslate(pos.x, pos.y))
- .each('end', addMouseListener);
- }
-
- angular.module('svgExercise', ['onosUtil'])
-
- .controller('svgExCtrl', ['$log', function (_$log_) {
- $log = _$log_;
- }])
-
- .directive('improvePerformance', ['FnService', function (_fs_) {
- fs = _fs_;
- return {
- restrict: 'E',
- link: function (scope, elem) {
- winWidth = fs.windowSize().width;
- winHeight = fs.windowSize().height;
- sectorWidth = winWidth / sectorDivisions;
- sectorHeight = winHeight / sectorDivisions;
-
- svg = d3.select(elem[0])
- .append('svg')
- .attr({
- width: winWidth + 'px',
- height: winHeight + 'px'
- });
-
- g = svg.append('g');
-
- g.append('rect')
- .attr({
- width: btnWidth + 'px',
- height: btnHeight + 'px',
- rx: '10px',
- 'class': 'button'
- });
-
- g.append('text')
- .style('text-anchor', 'middle')
- .text('Click for better performance.')
- .attr({
- x: btnWidth / 2,
- y: (btnHeight / 2) + 5
- });
-
- g.append('rect')
- .attr({
- fill: 'none',
- 'pointer-events': 'all',
- width: btnWidth + hoverZone + 'px',
- height: btnHeight + hoverZone + 'px',
- x: -(hoverZone / 2),
- y: -(hoverZone / 2)
- });
- g.attr('transform',
- gTranslate(centeredOnWindow(winWidth, btnWidth),
- centeredOnWindow(winHeight, btnHeight)));
-
- addMouseListener();
- }
- };
- }]);
-}()); \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/checkmark-xmark-icon.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/checkmark-xmark-icon.html
deleted file mode 100644
index 4c726fe7..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/checkmark-xmark-icon.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<!DOCTYPE html>
-<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<!--
- ONOS -- Embedded checkmarks and xmarks in table page
- -->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Embedded Check and X Marks</title>
-
- <script src="../tp/d3.js"></script>
-
- <link rel="stylesheet" href="../app/common.css">
-
- <style>
- html,
- body {
- background-color: #fff;
- font-family: Arial, Helvetica, sans-serif;
- font-size: 9pt;
- }
-
- svg .icon .glyph {
- stroke: none;
- fill: white;
- fill-rule: evenodd;
- }
-
- svg .icon.active {
- fill: green;
- }
-
- svg .icon.inactive {
- fill: darkred;
- }
-
- svg .icon rect {
- stroke: white;
- stroke-width: 3px;
- }
-
- </style>
-</head>
-<body class="light">
-<!-- minimal framework to access glyphs library module -->
-<script>
- var libs = {};
- var ONOS = { ui: { addLib: function (id, things) { libs[id] = things; }}};
-
-
-</script>
-
-<!-- Test HTML -->
-
-<div>
- <table class="summary-list">
- <tr> <th></th> <th>Two</th> <th>Three</th> </tr>
- <tr>
- <td>
- <div icon icon-id="active">
-
- <!-- icon directive needs to inject the following structure -->
- <!-- ------------------------------------------------ -->
- <svg width="20" height="20" viewBox="0 0 50 50">
- <g class="icon active">
- <rect width="50" height="50" rx="10"></rect>
- <use class="glyph" xlink:href="#checkmark" width="50" height="50"></use>
- </g>
- </svg>
- <!-- ------------------------------------------------ -->
-
- </div>
- </td>
- <td>Some text</td>
- <td>Some text</td>
- </tr>
- <tr>
- <td>
- <div icon icon-id="inactive">
-
- <!-- icon directive needs to inject the following structure -->
- <!-- ------------------------------------------------ -->
- <svg width="20" height="20" viewBox="0 0 50 50">
- <g class="icon inactive">
- <rect width="50" height="50" rx="10"></rect>
- <use class="glyph" xlink:href="#xmark" width="50" height="50"></use>
- </g>
- </svg>
- <!-- ------------------------------------------------ -->
-
-
- </div>
- </td>
- <td>Some text</td>
- <td>Some Other text</td>
- </tr>
- </table>
-</div>
-
-<!-- common definitions for other SVG elements to use -->
-<svg width="0" height="0">
- <defs>
- <symbol id="checkmark" viewBox="0 0 10 10">
- <path d="M2.644,4.531c0,0,0.719-0.422,1.172,0.281l1.047,1.797c0,0,
- 2.675-5.449,2.781-5.719c0,0,0.547-0.859,1.359-0.094
- c0,0,0.484,0.484,0,1.297S6.775,7.305,5.557,9.211c0,0-0.413,0.461-1.194,
- 0.086S2.222,5.375,2.222,5.375S2.159,4.734,2.644,4.531z">
- </path>
- </symbol>
-
- <symbol id="xmark" viewBox="0 0 10 10">
- <path d="M8.967,7.196C8.172,6.852,7.37,6.058,6.672,5.189c0.385-0.463,
- 0.665-0.834,0.764-1.008C7.825,3.5,9.382,1.553,8.068,1.067
- C6.754,0.58,6.585,1.723,6.585,1.723C6.41,2.129,5.955,2.722,5.386,3.371C4.865,
- 2.544,4.541,1.918,4.541,1.918
- S3.812,0.24,2.863,0.654C1.915,1.067,2.304,2.283,2.304,2.283c0.349,1.122,
- 0.834,2.082,1.368,2.898
- C2.456,6.396,1.331,7.415,1.331,7.415S0.82,7.829,0.844,8.072C0.869,8.315,
- 0.917,9.556,2.4,9.067
- C3.084,8.843,4.122,7.933,5.083,6.95c1.306,1.348,2.498,1.949,2.498,1.949s0.535,
- 0.51,1.386-0.244
- C9.819,7.902,8.967,7.196,8.967,7.196z">
- </path>
- </symbol>
-
- </defs>
-</svg>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/embedded-icon.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/embedded-icon.html
deleted file mode 100644
index 8d4d62a8..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/embedded-icon.html
+++ /dev/null
@@ -1,130 +0,0 @@
-<!DOCTYPE html>
-<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<!--
- ONOS -- Embedded icon test page
- -->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Embedded Icons</title>
-
- <script src="../tp/d3.js"></script>
-
- <link rel="stylesheet" href="../app/common.css">
-
- <style>
- html,
- body {
- background-color: #fff;
- font-family: Arial, Helvetica, sans-serif;
- font-size: 9pt;
- }
-
- svg .icon .glyph {
- stroke: none;
- fill: white;
- fill-rule: evenodd;
- }
-
- svg .icon.active {
- fill: green;
- }
-
- svg .icon.inactive {
- fill: darkred;
- }
-
- svg .icon rect {
- stroke: black;
- stroke-width: 1px;
- }
-
- </style>
-</head>
-<body class="light">
-<!-- minimal framework to access glyphs library module -->
-<script>
- var libs = {};
- var ONOS = { ui: { addLib: function (id, things) { libs[id] = things; }}};
-
-
-</script>
-
-<!-- Test HTML -->
-
-<div>
- <table class="summary-list">
- <tr> <th></th> <th>Two</th> <th>Three</th> </tr>
- <tr>
- <td>
- <div icon icon-id="active">
-
- <!-- icon directive needs to inject the following structure -->
- <!-- ------------------------------------------------ -->
- <svg width="20" height="20" viewBox="0 0 50 50">
- <g class="icon active">
- <rect width="50" height="50" rx="4"></rect>
- <use class="glyph" xlink:href="#ui" width="50" height="50"></use>
- </g>
- </svg>
- <!-- ------------------------------------------------ -->
-
- </div>
- </td>
- <td>Some text</td>
- <td>Some text</td>
- </tr>
- <tr>
- <td>
- <div icon icon-id="inactive">
-
- <!-- icon directive needs to inject the following structure -->
- <!-- ------------------------------------------------ -->
- <svg width="20" height="20" viewBox="0 0 50 50">
- <g class="icon inactive">
- <rect width="50" height="50" rx="4"></rect>
- <use class="glyph" xlink:href="#ui" width="50" height="50"></use>
- </g>
- </svg>
- <!-- ------------------------------------------------ -->
-
-
- </div>
- </td>
- <td>Some text</td>
- <td>Some Other text</td>
- </tr>
- </table>
-</div>
-
-<!-- common definitions for other SVG elements to use -->
-<svg width="0" height="0">
- <defs>
- <symbol id="ui" viewBox="0 0 10 10">
- <path d="M2,2.5a.5,.5,0,0,1,.5-.5h5
- a.5,.5,0,0,1,.5,.5v3a.5,.5,0,0,1-.5,.5h-5a.5,
- .5,0,0,1-.5-.5zM2.5,2.8a.3,.3,0,0,1,.3-.3
- h4.4a.3,.3,0,0,1,.3,.3v2.4a.3,.3,0,0,1-.3,
- .3h-4.4a.3,.3,0,0,1-.3-.3zM2,6.55h6l1,1.45h-8z">
- </path>
- </symbol>
- </defs>
-</svg>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/glyphs.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/glyphs.html
deleted file mode 100644
index 589ef07b..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/glyphs.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<!DOCTYPE html>
-<!--
- ~ Copyright 2014 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<!--
- ONOS -- Glyphs library test page (old version)
- -->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Glyphs</title>
-
- <script src="../tp/d3.js"></script>
-
- <style>
- html,
- body {
- background-color: #ddf;
- font-family: Arial, Helvetica, sans-serif;
- font-size: 9pt;
- }
-
- svg {
- background-color: #fff;
- }
-
- svg .glyph {
- stroke: none;
- fill: black;
- fill-rule: evenodd;
- }
-
- svg .icon text {
- text-anchor: middle;
- font-size: 5pt;
- fill: green;
- stroke: none;
- }
-
- </style>
-</head>
-<body>
- <!-- minimal framework to access glyphs library module -->
- <script>
- var libs = {};
- var ONOS = { ui: { addLib: function (id, things) { libs[id] = things; }}};
- </script>
-
- <!-- import the glyphs library -->
- <script src="../glyphs.js"></script>
-
- <svg></svg>
-
- <!-- code to display the glyphs in the library -->
- <script>
- (function () {
- var w = 1000,
- h = 800,
- vb = '0 0 ' + w + ' ' + h;
-
- var svg = d3.select('svg')
- .attr({ width: w, height: h, viewBox: vb });
-
- // create definitions element...
- var defs = svg.append('defs');
-
- // create scaling group
- var grp = svg.append('g')
- .attr('transform', 'translate(20,20)scale(2)');
-
- var mag = svg.append('g')
- .attr('transform', 'translate(20,20)scale(12)');
-
- function translate(loc) {
- return 'translate(' + loc[0] + ',' + loc[1] +')';
- }
-
- function icon(what, id, loc, color, bg, size) {
- var i = '#' + id,
- c = color || 'black',
- b = bg || '#eef',
- z = size || 40,
- g;
-
- g = what.append('g')
- .attr({ 'class': 'icon', transform: translate(loc) });
-
- g.append('rect')
- .attr({ width: z, height: z, rx: 4 })
- .style('fill', b)
- .style('stroke', 'black')
- .style('stroke-width', 0.5);
-
- g.append('use')
- .attr({ 'class': 'glyph', width: z, height: z, 'xlink:href': i })
- .style('fill', c);
-
- if (id !== 'bird') {
- g.append('text')
- .text(id)
- .attr({ x: z / 2, y: z + 8 })
- }
- }
-
-
- // import glyphs...
- libs.glyphs.loadDefs(defs);
-
- // bird, top right corner
- icon(svg, 'bird', [830,10], '#800', '#ecc', 160);
-
- // show icons...
- icon(grp, 'unknown', [ 0, 0]);
- icon(grp, 'node', [ 50, 0]);
- icon(grp, 'switch', [100, 0]);
- icon(grp, 'roadm', [150, 0]);
- icon(grp, 'endstation', [200, 0]);
- icon(grp, 'router', [250, 0]);
- icon(grp, 'bgpSpeaker', [300, 0]);
- icon(grp, 'uiAttached', [350, 0]);
-
- icon(grp, 'chain', [ 0, 60]);
- icon(grp, 'crown', [ 50, 60]);
-
-// icon(mag, 'crown', [20, 15], 'rgba(240,120,120,1)', 'transparent');
-
- // more goodies to come soon.....
- })();
- </script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch01-01-hello-world-app.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch01-01-hello-world-app.html
deleted file mode 100644
index 82cfec6c..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch01-01-hello-world-app.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html>
-<html>
-<body ng-app>
- <input type="text"
- ng-model="name"
- placeholder="Enter your name">
-
- <h1>Hello <span ng-bind="name"></span></h1>
- <!-- Note alternate syntax for same thig... -->
- <h1>Hello {{ name }}</h1>
-
- <script src="../../tp/angular.js"></script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-01-module-example.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-01-module-example.html
deleted file mode 100644
index 97432e35..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-01-module-example.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Hello AngularJS</title>
-
- <script src="../../tp/angular.js"></script>
-</head>
-<body>
- Hello {{1 + 1}}nd time AngularJS
-
- <script type="text/javascript">
- angular.module('notesApp', []);
- </script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-02-creating-controller.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-02-creating-controller.html
deleted file mode 100644
index 566c6dd5..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-02-creating-controller.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Hello AngularJS</title>
-
- <script src="../../tp/angular.js"></script>
-</head>
-<body ng-controller="MainCtrl">
- Hello {{1 + 1}}nd time AngularJS
-
- <script type="text/javascript">
- angular.module('notesApp', [])
- .controller('MainCtrl', [function () {
- // controller specific code here
- console.log('MainCtrl has been created');
- }]);
- </script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-03-hello-controller.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-03-hello-controller.html
deleted file mode 100644
index c206bf8e..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-03-hello-controller.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
-</head>
-<body ng-controller="MainCtrl as ctrl">
- {{ctrl.helloMsg}} AngularJS.
- <br/>
- {{ctrl.goodbyeMsg}} AngularJS
-
- <script type="text/javascript">
- angular.module('notesApp', [])
- .controller('MainCtrl', [function () {
- this.helloMsg = 'Hello ';
- var goodbyeMsg = 'Goodbye ';
- }]);
- </script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-04-controller-click-msg.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-04-controller-click-msg.html
deleted file mode 100644
index 4a4a22ee..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-04-controller-click-msg.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
-</head>
-<body ng-controller="MainCtrl as ctrl">
- {{ctrl.message}} AngularJS.
-
- <button ng-click="ctrl.changeMessage()">
- Change Message
- </button>
-
- <script type="text/javascript">
- angular.module('notesApp', [])
- .controller('MainCtrl', [function () {
- var self = this;
- self.message = 'Hello';
- self.changeMessage = function () {
- self.message = 'Goodbye'
- };
- }]);
- </script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-05-ng-repeat-example-1.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-05-ng-repeat-example-1.html
deleted file mode 100644
index a262c1b6..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-05-ng-repeat-example-1.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
- <div ng-repeat="note in ctrl.notes">
- <span class="label"> {{note.label}} </span>
- <!--<span class="status" ng-bind="note.done"></span>-->
- <span class="status"> {{note.done}} </span>
- </div>
-
- <script type="text/javascript">
- angular.module('notesApp', [])
- .controller('MainCtrl', [function () {
- var self = this;
- self.notes = [
- {id: 1, label: 'First note', done: false},
- {id: 2, label: 'Second note', done: false},
- {id: 3, label: 'Done note', done: true},
- {id: 4, label: 'Last note', done: false}
- ]
- }]);
- </script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-06-more-directives.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-06-more-directives.html
deleted file mode 100644
index 254dd08c..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-06-more-directives.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <style>
- .done {
- background-color: limegreen;
- }
- .pending {
- background-color: yellow;
- }
- .assignee {
- color: red;
- font-weight: bold;
- }
- </style>
- <script src="../../tp/angular.js"></script>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
- <div ng-repeat="note in ctrl.notes"
- ng-class="ctrl.getNoteClass(note.done)">
- <span class="label"> {{note.label}} </span>
- <span class="assignee"
- ng-show="note.assignee"
- ng-bind="note.assignee">
- </span>
- </div>
-
- <script type="text/javascript">
- angular.module('notesApp', []).controller('MainCtrl', [
- function () {
- var self = this;
- self.notes = [
- {id: 1, label: 'First note', done: false, assignee: 'Simon'},
- {id: 2, label: 'Second note', done: false},
- {id: 3, label: 'Done note', done: true},
- {id: 4, label: 'Last note', done: false, assignee: 'Fred'}
- ];
-
- self.getNoteClass = function (status) {
- return {
- done: status,
- pending: !status
- };
- };
- }
- ]);
- </script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-07-ng-repeat-object.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-07-ng-repeat-object.html
deleted file mode 100644
index 43de929d..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-07-ng-repeat-object.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
- <div ng-repeat="(author, note) in ctrl.notes">
- <span class="label"> {{note.label}} </span>
- <span class="author" ng-bind="author"></span>
- </div>
-
- <script type="text/javascript">
- angular.module('notesApp', []).controller('MainCtrl', [
- function () {
- var self = this;
- self.notes = {
- simon: { id: 1, label: 'First note', done: false},
- Thomas: { id: 3, label: 'Finished third note', done: true},
- alice: { id: 2, label: 'Second note', done: false}
- };
- }
- ]);
- </script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-08-ng-helper-vars.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-08-ng-helper-vars.html
deleted file mode 100644
index cf872d92..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-08-ng-helper-vars.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
- <style>
- span {
- background-color: #cce;
- }
- </style>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
- <div ng-repeat="note in ctrl.notes">
- <div>First element: {{$first}}</div>
- <div>Middle element: {{$middle}}</div>
- <div>Last element: {{$last}}</div>
- <div>Index of element: {{$index}}</div>
- <div>At even position: {{$even}}</div>
- <div>At odd position: {{$odd}}</div>
-
- <span class="label"> {{note.label}} </span>
- <span class="status"> {{note.done}} </span>
- <br/><br/>
- </div>
-
- <script type="text/javascript">
- angular.module('notesApp', []).controller('MainCtrl', [
- function () {
- var self = this;
- self.notes = [
- {id: 1, label: 'First note', done: false},
- {id: 2, label: 'Second note', done: false},
- {id: 3, label: 'Done note', done: true},
- {id: 4, label: 'Last note', done: false}
- ];
- }
- ]);
- </script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-09-ng-repeat-track-id.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-09-ng-repeat-track-id.html
deleted file mode 100644
index 23ad7dc0..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-09-ng-repeat-track-id.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
- <style>
- span {
- background-color: #cce;
- }
- </style>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
- <button ng-click="ctrl.changeNotes()">Change Notes</button>
- <br/>
-
- DOM Elements change at every click
- <div ng-repeat="note in ctrl.notes1">
- {{note.$$hashKey}}
- <span class="label"> {{note.label}} </span>
- <span class="author"> {{note.done}} </span>
- </div>
- <br/>
-
- DOM Elements are reused at every click
- <div ng-repeat="note in ctrl.notes2 track by note.id">
- {{note.$$hashKey}}
- <span class="label"> {{note.label}} </span>
- <span class="author"> {{note.done}} </span>
- </div>
-
- <script type="text/javascript">
- angular.module('notesApp', []).controller('MainCtrl', [
- function () {
- var self = this;
- var notes = [
- {id: 1, label: 'First note', done: false, someRandom: 31431},
- {id: 2, label: 'Second note', done: false},
- {id: 3, label: 'Finished third note', done: true}
- ];
- self.notes1 = angular.copy(notes);
- self.notes2 = angular.copy(notes);
-
- self.changeNotes = function () {
- notes = [
- {id: 1, label: 'Changed note', done: false, someRandom: 4242},
- {id: 2, label: 'Second note', done: false},
- {id: 3, label: 'Finished third note', done: true}
- ];
- self.notes1 = angular.copy(notes);
- self.notes2 = angular.copy(notes);
- }
- }
- ]);
- </script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-10-ng-repeat-across-elements.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-10-ng-repeat-across-elements.html
deleted file mode 100644
index 06a4fa72..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch02-10-ng-repeat-across-elements.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
- <style>
- span {
- background-color: #cce;
- }
- </style>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
- <table>
- <tr ng-repeat-start="note in ctrl.notes">
- <td>{{note.label}}</td>
- </tr>
- <tr ng-repeat-end>
- <td>Done: {{note.done}}</td>
- </tr>
- </table>
-
-
- <script type="text/javascript">
- angular.module('notesApp', []).controller('MainCtrl', [
- function () {
- var self = this;
- self.notes = [
- {id: 1, label: 'First note', done: false},
- {id: 2, label: 'Second note', done: false},
- {id: 3, label: 'Finished third note', done: true}
- ];
- }
- ]);
- </script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-01-simple-ng-model.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-01-simple-ng-model.html
deleted file mode 100644
index 5c8a4b13..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-01-simple-ng-model.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
- <style>
- span {
- background-color: #cce;
- }
- </style>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
-<input type="text" ng-model="ctrl.username"/>
-You typed {{ctrl.username}}
-
-
-<script type="text/javascript">
- angular.module('notesApp', []).controller('MainCtrl', [
- function () {
- var self = this;
- self.username = 'nothing';
- }
- ]);
-</script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-02-simple-ng-model2.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-02-simple-ng-model2.html
deleted file mode 100644
index d02909f7..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-02-simple-ng-model2.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
- <style>
- span {
- background-color: #cce;
- }
- </style>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
-<input type="text" ng-model="ctrl.username"/>
-<input type="password" ng-model="ctrl.password"/>
-<button ng-click="ctrl.change()">Change values</button>
-<button ng-click="ctrl.submit()">Submit</button>
-
-
-
-
-<script type="text/javascript">
- angular.module('notesApp', []).controller('MainCtrl', [
- function () {
- var self = this;
- self.change = function () {
- self.username = 'changed';
- self.password = 'password';
- };
-
- self.submit = function () {
- console.log('user clicked submit with ',
- self.username, self.password);
- };
- }
- ]);
-</script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-03-simple-form.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-03-simple-form.html
deleted file mode 100644
index 54a7ea4b..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-03-simple-form.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
- <style>
- span {
- background-color: #cce;
- }
- </style>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
-<!--
- - Note, using a form has the advantage of reacting to RETURN triggering
- - the submit, as well as pressing the submit button.
- -->
-<form ng-submit="ctrl.submit()">
- <input type="text" placeholder="username" ng-model="ctrl.user.username"/>
- <input type="password" placeholder="password" ng-model="ctrl.user.password"/>
- <input type="submit" value="Submit"/>
- <p></p>
- <textarea cols="60" rows="5" ng-model="ctrl.user.notes" placeholder="Notes">
- </textarea>
- <p>
- NOTES:
- <div>
- {{ctrl.user.notes}}
- </div>
- </p>
-</form>
-
-<script type="text/javascript">
- angular.module('notesApp', [])
- .controller('MainCtrl', [function () {
- var self = this;
-
- self.submit = function () {
- console.log('User clicked submit with ', self.user);
- };
- }]);
-</script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-04-two-forms-databinding.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-04-two-forms-databinding.html
deleted file mode 100644
index 9cb4961c..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-04-two-forms-databinding.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
- <style>
- span {
- background-color: #cce;
- }
- </style>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
-<form ng-submit="ctrl.submit1()">
- <input type="text" placeholder="username" ng-model="ctrl.username"/>
- <input type="password" placeholder="password" ng-model="ctrl.password"/>
- <input type="submit" value="Submit"/>
-</form>
-
-<!-- Better way of structuring the form data -->
-<form ng-submit="ctrl.submit2()">
- <input type="text" placeholder="username" ng-model="ctrl.user.username"/>
- <input type="password" placeholder="password" ng-model="ctrl.user.password"/>
- <input type="submit" value="Submit"/>
-</form>
-
-<script type="text/javascript">
- angular.module('notesApp', [])
- .controller('MainCtrl', [function () {
- var self = this;
-
- self.submit1 = function () {
- // create user object to send to server
- var user = {username: self.username, password: self.password};
- console.log('First submit: ', user);
- };
- self.submit2 = function () {
- console.log('Second submit: ', self.user);
- };
- }]);
-</script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-05-form-validation.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-05-form-validation.html
deleted file mode 100644
index 3501adb1..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-05-form-validation.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
- <style>
- span {
- background-color: #cce;
- }
- </style>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
-<form ng-submit="ctrl.submit()" name="myForm">
- <input type="text"
- placeholder="username"
- ng-model="ctrl.user.username"
- required
- ng-minlength="4"/>
-
- <input type="password"
- placeholder="password"
- ng-model="ctrl.user.password"
- required/>
-
- <input type="submit"
- value="Submit"
- ng-disabled="myForm.$invalid"/>
-</form>
-
-<script type="text/javascript">
- angular.module('notesApp', [])
- .controller('MainCtrl', [function () {
- var self = this;
- self.submit = function () {
- console.log('Submit: ', self.user);
- };
- }]);
-</script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-06-form-error-messages.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-06-form-error-messages.html
deleted file mode 100644
index 46c38c94..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-06-form-error-messages.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
-<form ng-submit="ctrl.submit()" name="myForm">
- <input type="text"
- name="uname"
- placeholder="username"
- ng-model="ctrl.user.username"
- required
- ng-minlength="4"/>
- <span ng-show="myForm.uname.$error.required">
- This is a required field
- </span>
- <span ng-show="myForm.uname.$error.minlength">
- Minimum length required is 4
- </span>
- <span ng-show="myForm.uname.$invalid">
- This field is invalid
- </span>
- <br/>
-
- <input type="password"
- name="pwd"
- placeholder="password"
- ng-model="ctrl.user.password"
- required/>
- <span ng-show="myForm.pwd.$error.required">
- This is a required field
- </span>
- <br/>
-
- <input type="submit"
- value="Submit"
- ng-disabled="myForm.$invalid"/>
-</form>
-
-<script type="text/javascript">
- angular.module('notesApp', [])
- .controller('MainCtrl', [function () {
- var self = this;
- self.submit = function () {
- console.log('Submit: ', self.user);
- };
- }]);
-</script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-07-form-styling.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-07-form-styling.html
deleted file mode 100644
index 1b6ab867..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-07-form-styling.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
- <style>
- .username.ng-valid {
- background-color: greenyellow;
- }
- .username.ng-dirty.ng-invalid-required {
- background-color: hotpink;
- }
- .username.ng-dirty.ng-invalid-minlength {
- background-color: lightpink;
- }
- </style>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
-<form ng-submit="ctrl.submit()" name="myForm">
- <input type="text"
- class="username"
- name="uname"
- placeholder="username"
- ng-model="ctrl.user.username"
- required
- ng-minlength="4"/>
-
- <input type="submit"
- value="Submit"
- ng-disabled="myForm.$invalid"/>
-</form>
-
-<script type="text/javascript">
- angular.module('notesApp', [])
- .controller('MainCtrl', [function () {
- var self = this;
- self.submit = function () {
- console.log('Submit: ', self.user);
- };
- }]);
-</script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-08-nested-forms.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-08-nested-forms.html
deleted file mode 100644
index c3149195..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-08-nested-forms.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE html>
-<html ng-app>
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
-</head>
-<!-- no controller in this example -->
-<body>
-
-<form novalidate name="myForm">
- <input type="text"
- class="username"
- name="uname"
- ng-model="ctrl.user.username"
- required=""
- placeholder="Username"
- ng-minlength="4"/>
-
- <input type="password"
- class="password"
- name="pad"
- ng-model="ctrl.user.password"
- required=""
- placeholder="Password"
- required=""/>
-
- <p/>
-
- <ng-form name="profile">
- <input type="text"
- name="firstName"
- ng-model="ctrl.user.profile.firstName"
- placeholder="First Name"
- required/>
- <input type="text"
- name="middleName"
- ng-model="ctrl.user.profile.middleName"
- placeholder="Middle Name"/>
- <input type="text"
- name="lastName"
- ng-model="ctrl.user.profile.lastName"
- placeholder="Last Name"
- required/>
-
- <input type="date"
- name="dob"
- placeholder="Date of birth"
- ng-model="ctrl.user.profile.dob"/>
- </ng-form>
-
- <span ng-show="myForm.profile.$invalid">
- Please fill out the profile information
- </span>
-
- <p/>
-
- <input type="submit"
- value="Submit"
- ng-disabled="myForm.$invalid"/>
-</form>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-09-checkbox-example.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-09-checkbox-example.html
deleted file mode 100644
index fe35af10..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-09-checkbox-example.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
- <div>
- <h2>What are your favorite sports?</h2>
- <div ng-repeat="sport in ctrl.sports">
- <label ng-bind="sport.label"></label>
- <div>
- With binding:
- <input type="checkbox"
- ng-model="sport.selected"
- ng-true-value="'YES'"
- ng-false-value="'NO'"/>
- </div>
- <div>
- using ng-checked:
- <input type="checkbox"
- ng-checked="sport.selected === 'YES'"/>
- </div>
- <div>
- Current state: {{sport.selected}}
- </div>
- <br/>
- </div>
-
- </div>
-
- <script type="text/javascript">
- angular.module('notesApp', [])
- .controller('MainCtrl', [function () {
- var self = this;
- self.sports = [
- {label: 'Basketball', selected: 'YES'},
- {label: 'Cricket', selected: 'NO'},
- {label: 'Soccer', selected: 'NO'},
- {label: 'Swimming', selected: 'YES'}
- ];
- }]);
- </script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-10-radio-buttons.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-10-radio-buttons.html
deleted file mode 100644
index 2a2cb83d..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-10-radio-buttons.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
- <div>
- <h2>Radio Buttons</h2>
- <div ng-init="user.gender = 'female'">
- <input type="radio"
- name="gender"
- ng-model="user.gender"
- value="male"/>Male
- <input type="radio"
- name="gender"
- ng-model="user.gender"
- value="female"/>Female
- </div>
- </div>
-
- <div>
- <h2>Radio Buttons two</h2>
- <div ng-init="user.gender2 = 'male'; otherGender = 'Other'">
- <input type="radio"
- name="gender2"
- ng-model="user.gender2"
- value="male"/>Male
- <input type="radio"
- name="gender2"
- ng-model="user.gender2"
- value="female"/>Female
- <input type="radio"
- name="gender2"
- ng-model="user.gender2"
- ng-value="otherGender"/>{{otherGender}}
- </div>
- </div>
-
- <div>
- <h2>Radio Buttons three</h2>
- <div ng-repeat="ch in ctrl.choices">
- <input type="radio"
- name="choice"
- ng-model="user.choice"
- ng-value="ch"/>{{ch}}
-
- </div>
- </div>
-
-
- <script type="text/javascript">
- angular.module('notesApp', [])
- .controller('MainCtrl', [function () {
- var self = this;
-
- self.choices = ['foo', 'bar', 'baz', 'zoo', 'goo'];
- }]);
- </script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-11-select-example.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-11-select-example.html
deleted file mode 100644
index a8cda33c..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch04-11-select-example.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
-</head>
-<body ng-controller="MainCtrl as ctrl">
-
- <div>
- <select ng-model="ctrl.selectedCountryId"
- ng-options="c.id as c.label for c in ctrl.countries">
- </select>
- Selected Country ID: {{ctrl.selectedCountryId}}
- </div>
-
- <div>
- <select ng-model="ctrl.selectedCountry"
- ng-options="c.label for c in ctrl.countries track by c.id">
- </select>
- Selected Country: {{ctrl.selectedCountry}}
- </div>
-
- <script type="text/javascript">
- angular.module('notesApp', [])
- .controller('MainCtrl', [function () {
- var self = this;
-
- self.countries = [
- {label: 'UK', id: 1},
- {label: 'USA', id: 2},
- {label: 'France', id: 3},
- {label: 'Italy', id: 4}
- ];
- var first = self.countries[0];
- self.selectedCountryId = first.id;
- self.selectedCountry = first;
- }]);
- </script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-01-need-for-service-app.js b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-01-need-for-service-app.js
deleted file mode 100644
index 4e25b0b1..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-01-need-for-service-app.js
+++ /dev/null
@@ -1,34 +0,0 @@
-// ch05-01-need-for-service-app.js
-
-angular.module('notesApp', [])
- .controller('MainCtrl', [function () {
- var self = this;
- self.tab = 'first';
- self.open = function (tab) {
- self.tab = tab;
- }
- }])
- .controller('SubCtrl', [function () {
- var self = this;
- self.list = [
- {id: 0, label: 'Item 0'},
- {id: 1, label: 'Item 1'}
- ];
-
- self.add = function () {
- var n = self.list.length;
- self.list.push({
- id: n,
- label: 'Item ' + n
- });
- }
- }]);
-
-/*
- NOTE: When we use controllers, they are instances that get created and
- destroyed as we navigate across the application. Any state they
- hold is temporary at best, and cannot be communicated to other
- controllers.
-
- That's why we'd use "services" instead.
- */
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-01-need-for-service.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-01-need-for-service.html
deleted file mode 100644
index 21d17e4c..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-01-need-for-service.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
- <script src="ch05-01-need-for-service-app.js"></script>
-</head>
-<body ng-controller="MainCtrl as mainCtrl">
-
- <h1> Hello Controllers! </h1>
- <button ng-click="mainCtrl.open('first')">Open First</button>
- <button ng-click="mainCtrl.open('second')">Open Second</button>
-
- <div ng-switch on="mainCtrl.tab">
-
- <div ng-switch-when="first">
- <div ng-controller="SubCtrl as ctrl">
- <h3>First Tab</h3>
- <button ng-click="ctrl.add()">Add more items</button>
- <ul>
- <li ng-repeat="item in ctrl.list">
- <span ng-bind="item.label"></span>
- </li>
- </ul>
- </div>
- </div>
-
- <div ng-switch-when="second">
- <div ng-controller="SubCtrl as ctrl">
- <h3>Second Tab</h3>
- <button ng-click="ctrl.add()">Add more items</button>
- <ul>
- <li ng-repeat="item in ctrl.list">
- <span ng-bind="item.label"></span>
- </li>
- </ul>
- </div>
- </div>
- </div>
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-02-log-example.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-02-log-example.html
deleted file mode 100644
index d516440d..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-02-log-example.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
-</head>
-<body ng-controller="MainCtrl as mainCtrl">
-
- <h1> Hello Services! </h1>
- <button ng-click="mainCtrl.logStuff()">Log something</button>
-
- <script type="text/javascript">
- angular.module('notesApp', [])
- .controller('MainCtrl', ['$log', function ($log) {
- var self = this;
- self.logStuff = function () {
- $log.log('The button was pressed');
- };
- }]);
- </script>
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-03-simple-angular-service.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-03-simple-angular-service.html
deleted file mode 100644
index 74f2a8e8..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-03-simple-angular-service.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE html>
-<html ng-app="notesApp">
-<head>
- <title>Notes App</title>
- <script src="../../tp/angular.js"></script>
- <script src="ch05-03-simple-angular-service.js"></script>
-</head>
-<body ng-controller="MainCtrl as mainCtrl">
-
- <h1> Hello Controllers! </h1>
-
- <button ng-click="mainCtrl.open('first')"> Open First </button>
- <button ng-click="mainCtrl.open('second')"> Open Second </button>
-
- <div ng-switch on="mainCtrl.tab">
-
- <div ng-switch-when="first">
- <div ng-controller="SubCtrl as ctrl">
- <h3>First Tab</h3>
- <button ng-click="ctrl.add()">Add item</button>
- <ul>
- <li ng-repeat="item in ctrl.list()">
- <span ng-bind="item.label"></span>
- </li>
- </ul>
- </div>
- </div>
-
- <div ng-switch-when="second">
- <div ng-controller="SubCtrl as ctrl">
- <h3>Second Tab</h3>
- <button ng-click="ctrl.add()">Add item</button>
- <ul>
- <li ng-repeat="item in ctrl.list()">
- <span ng-bind="item.label"></span>
- </li>
- </ul>
- </div>
- </div>
- </div>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-03-simple-angular-service.js b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-03-simple-angular-service.js
deleted file mode 100644
index 25786bed..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch05-03-simple-angular-service.js
+++ /dev/null
@@ -1,115 +0,0 @@
-// ch05-03-simple-angular-service.js
-
-// this example shows three different ways of defining our own "service"...
-
-// use 'factory()' for functions/plain objects API
-// use 'service()' for JS class object API
-// use 'provider()' for configurable service API
-
-
-// this is a service definition
-function ItemServiceTwo() {
- var items = [
- {id: 0, label: 'Item 0'},
- {id: 1, label: 'Item 1'}
- ];
- this.list = function () {
- return items;
- };
- this.add = function (item) {
- items.push(item);
- };
-}
-
-// this is a provider definition
-function ItemServiceThree(optItems) {
- var items = optItems || [];
-
- this.list = function () {
- return items;
- };
- this.add = function (item) {
- items.push(item);
- }
-}
-
-angular.module('notesApp', [])
-
- // [provider] define item service as configurable provider
- .provider('ItemServiceThree', function () {
- var haveDefaultItems = true;
-
- this.disableDefaultItems = function () {
- haveDefaultItems = false;
- };
-
- // this function gets our dependencies..
- this.$get = [function () {
- var optItems = [];
- if (haveDefaultItems) {
- optItems = [
- {id: 0, label: 'Item 0'},
- {id: 1, label: 'Item 1'}
- ];
- }
- return new ItemServiceThree(optItems);
- }];
- })
-
- // [provider] define configuration for provider
- .config(['ItemServiceThreeProvider', function (ItemServiceThreeProvider) {
- // to see how the provider can change configuration
- // change the value of shouldHaveDefaults to true and
- // try running the example
- var shouldHaveDefaults = false;
-
- // get configuration from server.
- // set shouldHaveDefaults somehow
- // assume it magically changes for now
- if (!shouldHaveDefaults) {
- ItemServiceThreeProvider.disableDefaultItems();
- }
- }])
-
- // [service] define item service as a JS class
- .service('ItemServiceTwo', [ItemServiceTwo])
-
- // [factory] define item service factory
- .factory('ItemService', [function () {
- var items = [
- {id: 0, label: 'Item 0'},
- {id: 1, label: 'Item 1'}
- ];
- return {
- list: function () {
- return items;
- },
- add: function (item) {
- items.push(item);
- }
- };
- }])
-
- // ======================================================================
- // define controllers...
- .controller('MainCtrl', [function () {
- var self = this;
- self.tab = 'first';
- self.open = function (tab) {
- self.tab = tab;
- };
- }])
-
- .controller('SubCtrl', ['ItemService', function (ItemService) {
- var self = this;
- self.list = function () {
- return ItemService.list();
- };
- self.add = function () {
- var n = self.list().length;
- ItemService.add({
- id: n,
- label: 'Item ' + n
- });
- };
- }]);
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-01-filter-example.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-01-filter-example.html
deleted file mode 100644
index 105209ca..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-01-filter-example.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Filters in Action</title>
- <script src="../../tp/angular.js"></script>
-</head>
-<body ng-app="filtersApp">
-
- <div ng-controller="FilterCtrl as ctrl">
- <div>
- Amount as a number: {{ctrl.amount | number}}
- </div>
- <div>
- Total cost as a currency: {{ctrl.totalCost | currency}}
- </div>
- <div>
- Total cost in GBP: {{ctrl.totalCost | currency:'GBP '}}
- </div>
- <div>
- Shout: {{ctrl.name | uppercase}}
- </div>
- <div>
- Whisper: {{ctrl.name | lowercase}}
- </div>
- <div>
- Start time: {{ctrl.startTime | date:'medium'}}
- </div>
- <div>
- as JSON: {{ctrl.struct | json}}
- </div>
- </div>
-
- <script type="text/javascript">
- angular.module('filtersApp', [])
- .controller('FilterCtrl', [function () {
- var self = this;
- self.amount = 1024;
- self.totalCost = 4906;
- self.name = 'Onos Rocks!';
- self.startTime = new Date().getTime();
- self.struct = {
- foo: 'bar',
- baz: 3.1415
- };
- }]);
- </script>
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-02-filter-number-string.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-02-filter-number-string.html
deleted file mode 100644
index 46e9c4d7..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-02-filter-number-string.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Filters in Action</title>
- <script src="../../tp/angular.js"></script>
-</head>
-<body ng-app="filtersApp">
-
- <ul ng-controller="FilterCtrl as ctrl">
- <li>
- Amount - {{ctrl.amount}}
- </li>
- <li>
- Amount - Default Currency: {{ctrl.amount | currency}}
- </li>
- <li>
- <!-- Using English pound sign -->
- Amount - GBP Currency: {{ctrl.amount | currency:'&#163'}}
- </li>
- <li>
- Amount - Number: {{ctrl.amount | number }}
- </li>
- <li>
- Amount - Number (4 decimals): {{ctrl.amount | number:4}}
- </li>
- <li>
- Amount - Yummy &#x3c0 = {{ctrl.pi | number:4 }}
- </li>
-
- <li>
- Name - no filters: {{ctrl.name}}
- </li>
- <li>
- Name - lowercase: {{ctrl.name | lowercase}}
- </li>
- <li>
- Name - uppercase: {{ctrl.name | uppercase}}
- </li>
- <li>
- Name - prefix: {{ctrl.name | limitTo:4}}
- </li>
-
- <li>
- JSON filter: {{ctrl.struct | json}}
- </li>
-
- <li>
- Timestamp: {{ctrl.startTime}}
- </li>
- <li>
- Default Date filter: {{ctrl.startTime | date}}
- </li>
- <li>
- Medium Date filter: {{ctrl.startTime | date:'medium'}}
- </li>
- <li>
- Long Date filter: {{ctrl.startTime | date:'longDate'}}
- </li>
- <li>
- Custom Date filter: {{ctrl.startTime | date:'M/dd, yyyy'}}
- </li>
- <li>
- Custom Time filter: {{ctrl.startTime | date:'h:m a'}}
- </li>
- </ul>
-
- <script type="text/javascript">
- angular.module('filtersApp', [])
- .controller('FilterCtrl', [function () {
- var self = this;
- self.amount = 1024;
- self.totalCost = 4906;
- self.name = 'Onos Rocks!';
- self.startTime = new Date().getTime();
- self.struct = {
- foo: 'bar',
- baz: 3.1415
- };
- self.pi = Math.PI;
- }]);
- </script>
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-03-filter-arrays.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-03-filter-arrays.html
deleted file mode 100644
index a9ce3cae..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-03-filter-arrays.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Filters in Action</title>
- <script src="../../tp/angular.js"></script>
-</head>
-<body ng-app="filtersApp">
-
- <div ng-controller="FilterCtrl as ctrl">
-
- <table>
- <tr>
- <td>
- <button ng-click="ctrl.currentFilter = 'string'">
- Filter with string
- </button>
- </td>
- <td>
- Filter Text
- <input type="text"
- ng-model="ctrl.filterOptions['string']"/>
- </td>
- </tr>
- <tr>
- <td>
- <button ng-click="ctrl.currentFilter = 'object'">
- Filter with object
- </button>
- </td>
- <td>
- Show Done or Not Done
- <input type="checkbox"
- ng-model="ctrl.filterOptions['object'].done"/>
- </td>
- </tr>
- <tr>
- <td>
- <button ng-click="ctrl.currentFilter = 'function'">
- Filter with function
- </button>
- </td>
- </tr>
- </table>
- <ul>
- <li ng-repeat="note in ctrl.notes |
- filter:ctrl.filterOptions[ctrl.currentFilter] |
- orderBy:ctrl.sortOrder |
- limitTo:5">
- {{note.label}} - {{note.type}} - {{note.done}}
- </li>
- </ul>
- </div>
-
-
- <script type="text/javascript">
- angular.module('filtersApp', [])
- .controller('FilterCtrl', [function () {
- var self = this;
-
- self.notes = [
- {label: 'FC Todo', type: 'chore', done: false},
- {label: 'FT Todo', type: 'task', done: false},
- {label: 'FF Todo', type: 'fun', done: true},
- {label: 'SC Todo', type: 'chore', done: false},
- {label: 'ST Todo', type: 'task', done: true},
- {label: 'SF Todo', type: 'fun', done: true},
- {label: 'TC Todo', type: 'chore', done: false},
- {label: 'TT Todo', type: 'task', done: false},
- {label: 'TF Todo', type: 'fun', done: false}
- ];
-
- self.sortOrder = ['+type', '-label'];
-
- self.filterOptions = {
- 'string': '',
- 'object': {done: false, label: 'F'},
- 'function': function (note) {
- return note.type === 'task' && note.done === false;
- }
- };
-
- self.currentFilter = 'string';
- }]);
- </script>
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-04-custom-filters.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-04-custom-filters.html
deleted file mode 100644
index f39991d9..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch08-04-custom-filters.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Custom Filters in Action</title>
- <script src="../../tp/angular.js"></script>
-</head>
-<body ng-app="filtersApp">
-
- <div ng-controller="FilterCtrl as ctrl">
- <div>
- Start time (Timestamp): {{ctrl.startTime}}
- </div>
- <div>
- Start time (Time): {{ctrl.startTime | date:'h:m a'}}
- </div>
- <div>
- Start time (Our filter): {{ctrl.startTime | timeAgo}}
- </div>
- <div>
- Start time (Our filter 2): {{ctrl.startTime | timeAgo:true}}
- </div>
- <div>
- Some time ago (Computed): {{ctrl.someTimeAgo | date:'h:m a'}}
- </div>
- <div>
- Some time ago (Our filter): {{ctrl.someTimeAgo | timeAgo}}
- </div>
- </div>
-
- <script type="text/javascript">
- angular.module('filtersApp', [])
- .controller('FilterCtrl', [function () {
- var self = this;
- self.startTime = new Date().getTime();
- self.someTimeAgo = self.startTime - (1000*3600*4);
- }])
- .filter('timeAgo', [function () {
- var _m = 1000 * 60,
- _h = _m * 60,
- _d = _h * 24,
- _mon = _d * 30;
-
- return function (ts, ignoreSecs) {
- var now = new Date().getTime(),
- diff = now - ts;
- if (diff < _m && !ignoreSecs) {
- return 'seconds ago';
- } else if (diff < _h) {
- return 'minutes ago';
- } else if (diff < _d) {
- return 'hours ago';
- } else if (diff < _mon) {
- return 'days ago';
- } else {
- return 'months ago';
- }
- }
- }]);
- </script>
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch10-01-simple-routing.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch10-01-simple-routing.html
deleted file mode 100644
index 29614127..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/ch10-01-simple-routing.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Simple Routing</title>
- <script src="../../tp/angular.js"></script>
- <script src="../../tp/angular-route.js"></script>
-</head>
-<body ng-app="routingApp">
-
- <h2>Angular Routing</h2>
-
- <ul>
- <li><a href="#/">Default Route</a></li>
- <li><a href="#/second">Second Route</a></li>
- <li><a href="#/asdfertdfghsdfg">Non-existent Route</a></li>
- </ul>
-
- <div ng-view></div>
-
- <script type="text/javascript">
- angular.module('routingApp', ['ngRoute'])
- .config(['$routeProvider', function ($routeProvider) {
- $routeProvider
- .when('/', {
- template: '<h5>This is the default route</h5>'
- })
- .when('/second', {
- template: '<h5>This is the second route</h5>'
- })
- .otherwise({
- redirectTo: '/'
- });
- }]);
- </script>
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/js/ch03-controller.js b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/js/ch03-controller.js
deleted file mode 100644
index 92d3b0c0..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/js/ch03-controller.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// Simple controller
-
-angular.module('notesApp', [])
- .controller('ListCtrl', [function () {
- var self = this;
- self.items = [
- {id: 1, label: 'First', done: true},
- {id: 2, label: 'Second', done: false}
- ];
-
- self.getDoneClass = function (item) {
- return {
- finished: item.done,
- unfinished: !item.done
- };
- };
- }]);
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/js/ch09-01-time-ago.js b/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/js/ch09-01-time-ago.js
deleted file mode 100644
index 1a8b7f1c..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/ng-examples/js/ch09-01-time-ago.js
+++ /dev/null
@@ -1,27 +0,0 @@
-// ch09-01-time-ago.js
-
-angular.module('filterApp', [])
- .filter('timeAgo', [function () {
- var _m = 1000 * 60,
- _h = _m * 60,
- _d = _h * 24,
- _mon = _d * 30;
-
- return function (ts, ignoreSecs) {
- var showSecs = !ignoreSecs,
- now = new Date().getTime(),
- diff = now - ts;
-
- if (diff < _m && showSecs) {
- return 'seconds ago';
- } else if (diff < _h) {
- return 'minutes ago';
- } else if (diff < _d) {
- return 'hours ago';
- } else if (diff < _mon) {
- return 'days ago';
- } else {
- return 'months ago';
- }
- }
- }]);
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/oblique.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/oblique.html
deleted file mode 100644
index e54d18f5..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/oblique.html
+++ /dev/null
@@ -1,473 +0,0 @@
-<!DOCTYPE html>
-<!--
- ~ Copyright 2014 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<!--
- Testing transformations for transitioning between overhead and
- perspective projections of two layers.
- -->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Layer Transformations</title>
-
- <script src="../tp/d3.js"></script>
- <script src="../tp/jquery-2.1.1.min.js"></script>
-
- <style>
- html,
- body {
- background-color: #ccc;
- font-family: Arial, Helvetica, sans-serif;
- font-size: 9pt;
- }
-
- svg {
- position: absolute;
- background-color: #fff;
- top: 30px;
- left: 60px;
- }
-
- svg text {
- font-size: 3pt;
- }
-
- </style>
-</head>
-<body>
- <svg width="1000px" height="600px" viewBox="0 0 160 120"></svg>
-
- <script>
- (function (){
-
- // Configuration...
- var w = 160,
- h = 120,
- time = 1500;
-
- var pktData = [
- [20,60,'a'],
- [60,20,'b'],
- [100,20,'c'],
- [140,60,'d'],
- [100,100,'e'],
- [60,100,'f'],
- [20,20,'w'],
- [140,20,'x'],
- [20,100,'y'],
- [140,100,'z']
- ],
- optData = [
- [40,40,'p'],
- [120,40,'q'],
- [120,80,'r'],
- [40,80,'s'],
- [20,20,'j'],
- [140,20,'k'],
- [20,100,'l'],
- [140,100,'m']
- ],
- linkData = [
- ['a','p'],
- ['p','b'],
- ['b','c'],
- ['c','q'],
- ['q','d'],
- ['d','r'],
- ['r','e'],
- ['e','f'],
- ['f','s'],
- ['s','a'],
- ['s','q'],
- ['p','r'],
- ['b','f'],
- ['c','e'],
- ['w','j'],
- ['x','k'],
- ['z','m'],
- ['y','l']
- ];
-
- // Transform parameters
- var tf = {
- tt: -.7, // x skew y factor
- xsk: -35, // x skew angle
- ysc: 0.5, // y scale
- ytr: 50, // y translate
- pad: 5
- },
- rectFill = {
- pkt: 'rgba(130,130,170,0.3)',
- opt: 'rgba(170,130,170,0.3)'
- };
-
- // Internal state...
- var nodes = [],
- links = [],
- overhead = true,
- xffn;
-
- // D3/DOM magic...
- var svg = d3.select('svg'),
- nodeG,
- linkG,
- node,
- link,
- force,
- pktLayer,
- optLayer;
-
-
- // General functions ...
- function isF(f) {
- return $.isFunction(f) ? f : null;
- }
-
- function translate(x,y) {
- return 'translate(' + x + ',' + y + ')';
- }
-
- function scale(x,y) {
- return 'scale(' + x + ',' + y + ')';
- }
- function skewX(x) {
- return 'skewX(' + x + ')';
- }
-
-
- // Key Bindings...
- var keyHandler = {
- T: transform
- };
-
- function whatKey(code) {
- switch (code) {
- case 13: return 'enter';
- case 16: return 'shift';
- case 17: return 'ctrl';
- case 18: return 'alt';
- case 27: return 'esc';
- case 32: return 'space';
- case 37: return 'leftArrow';
- case 38: return 'upArrow';
- case 39: return 'rightArrow';
- case 40: return 'downArrow';
- case 91: return 'cmdLeft';
- case 93: return 'cmdRight';
- case 187: return 'equals';
- case 189: return 'dash';
- case 191: return 'slash';
- default:
- if ((code >= 48 && code <= 57) ||
- (code >= 65 && code <= 90)) {
- return String.fromCharCode(code);
- } else if (code >= 112 && code <= 123) {
- return 'F' + (code - 111);
- }
- return '.';
- }
- }
-
- function keyIn() {
- var event = d3.event,
- keyCode = event.keyCode,
- key = whatKey(keyCode),
- fn = isF(keyHandler[key]);
- if (fn) {
- fn(key, keyCode, event);
- }
- }
-
- // Key events....
- function transform() {
- overhead = !overhead;
- if (overhead) {
- toOverhead();
- } else {
- toOblique();
- }
- }
-
- function toOverhead() {
- xffn = null;
- hidePlane(pktLayer);
- hidePlane(optLayer);
- transitionNodes();
- }
-
- function padBox(box, p) {
- box.x -= p;
- box.y -= p;
- box.width += p*2;
- box.height += p*2;
- }
-
- function toOblique() {
- var box = nodeG.node().getBBox();
- padBox(box, tf.pad);
-
- xffn = function (xy, dir) {
- var x = xy.x + xy.y*tf.tt,
- y = xy.y*tf.ysc + tf.ysc*tf.ytr*dir;
- return { x: x, y: y};
- };
-
- showPlane(pktLayer, box, -1);
- showPlane(optLayer, box, 1);
- transitionNodes();
- }
-
- function transitionNodes() {
- // note: turn off force layout while transitioning.. if it is on
-// force.stop();
-
- if (xffn) {
- nodes.forEach(function (d) {
- var dir = d.type === 'pkt' ? -1 : 1,
- oldxy = {x: d.x, y: d.y},
- coords = xffn(oldxy, dir);
- d.oldxy = oldxy;
- d.x = coords.x;
- d.y = coords.y;
- });
- } else {
- nodes.forEach(function (d) {
- d.x = d.oldxy.x;
- d.y = d.oldxy.y;
- delete d.oldxy;
- });
- }
-
- nodeG.selectAll('.node')
- .transition()
- .duration(time)
- .attr({
- transform: function (d) {
- return translate(d.x, d.y);
- }
- });
-
- linkG.selectAll('.link')
- .transition()
- .duration(time)
- .attr({
- x1: function (d) { return d.source.x; },
- y1: function (d) { return d.source.y; },
- x2: function (d) { return d.target.x; },
- y2: function (d) { return d.target.y; }
- });
- }
-
- function showPlane(layer, box, dir) {
- layer.select('rect')
- .attr(box)
- .attr('opacity', 0)
- .transition()
- .duration(time)
- .attr('opacity', 1)
- .attr('transform', obliqueXform(dir));
- }
-
- function hidePlane(layer) {
- var rect = layer.select('rect');
- rect.transition()
- .duration(time)
- .attr('opacity', 0)
- .attr('transform', overheadXform());
-
- }
-
- function obliqueXform(dir) {
- return scale(1, tf.ysc) + translate(0, dir * tf.ytr) + skewX(tf.xsk);
- }
-
-
- function overheadXform() {
- return skewX(0) + translate(0,0) + scale(1,1);
- }
-
- // Nodes and Links...
- function prepareNodes() {
- var hw = w/2,
- hh = h/2;
-
- function addNode(t, d) {
- nodes.push({
- type: t,
- x: d[0] - hw,
- y: d[1] - hh,
- id: d[2],
- fixed: true
- });
- }
-
- optData.forEach(function (d) {
- addNode('opt', d);
- });
- pktData.forEach(function (d) {
- addNode('pkt', d);
- });
- }
-
- function findNode(id) {
- for (var i=0,n=nodes.length; i<n; i++) {
- if (nodes[i].id === id) {
- return nodes[i];
- }
- }
- return null;
- }
-
- function prepareLinks() {
- linkData.forEach(function (d) {
- var src = d[0],
- dst = d[1];
- links.push({
- id: src + '-' + dst,
- source: findNode(src),
- target: findNode(dst)
- });
- });
-
- }
-
- function updateNodes() {
- node = nodeG.selectAll('.node')
- .data(nodes, function (d) { return d.id; });
-
- var entering = node.enter()
- .append('g').attr({
- id: function (d) { return d.id; },
- 'class': function (d) { return 'node ' + d.type; }
- });
-
- entering.each(function (d) {
- var el = d3.select(this);
- d.el = el;
-
- el.append('rect').attr({
- width: 5,
- height: 5,
- fill: function (d) {
- return d.type === 'pkt' ? '#669' : '#969';
- },
- rx: 1,
- transform: 'translate(-2.5,-2.5)'
- });
- el.append('text')
- .text(d.id)
- .attr({
- dy: '0.9em',
- 'text-anchor': 'middle',
- transform: 'translate(0,-2.5)',
- fill: 'white'
- });
- });
- }
-
- function updateLinks() {
- link = linkG.selectAll('.link')
- .data(links, function (d) { return d.id; });
-
- var entering = link.enter()
- .append('line').attr({
- id: function (d) { return d.id; },
- class: 'link',
- stroke: '#888',
- 'stroke-width': 0.4,
- opacity: 0.7
- });
-
- entering.each(function (d) {
- d.el = d3.select(this);
-
- });
- }
-
- function update() {
- updateNodes();
- updateLinks();
- }
-
- var ntick = 0;
- function tick() {
- console.log('tick ' + (++ntick));
- node.attr({
- transform: function (d) { return translate(d.x, d.y); }
- });
-
- link.attr({
- x1: function (d) { return d.source.x; },
- y1: function (d) { return d.source.y; },
- x2: function (d) { return d.target.x; },
- y2: function (d) { return d.target.y; }
- });
- }
-
- function setOrigin(/*varargs*/) {
- var i, n, g;
- for (i= 0,n=arguments.length; i< n; i++) {
- g = arguments[i];
- g.attr('transform', translate(w/2, h/2));
- }
- }
-
- function initLayers() {
- optLayer.attr('class', 'layer').append('rect')
- .attr('fill', rectFill.opt);
- pktLayer.attr('class', 'layer').append('rect')
- .attr('fill', rectFill.pkt);
- }
-
- function init() {
- svg.append('text')
- .text('Press the "T" key....')
- .attr({ dy: '1.2em', fill: '#999'})
- .style('font-size', '2.4pt')
- .style('font-style', 'italic');
-
- optLayer = svg.append('g').attr('id', 'optLayer');
- pktLayer = svg.append('g').attr('id', 'pktLayer');
- linkG = svg.append('g').attr('id', 'links');
- nodeG = svg.append('g').attr('id', 'nodes');
-
- setOrigin(optLayer, pktLayer, linkG, nodeG);
-
- node = nodeG.selectAll('.node');
- link = linkG.selectAll('.link');
-
- initLayers();
- prepareNodes();
- prepareLinks();
-
- force = d3.layout.force()
- .size([w,h])
- .nodes(nodes)
- .links(links)
- .gravity(0.4)
- .friction(0.7)
- .on('tick', tick);
- update();
- tick();
- d3.select('body').on('keydown', keyIn);
- }
-
- init();
- })();
- </script>
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/onos-logo.svg b/framework/src/onos/web/gui/src/main/webapp/_sdh/onos-logo.svg
deleted file mode 100644
index db4b81a7..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/onos-logo.svg
+++ /dev/null
@@ -1,176 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- viewBox="0 0 792 612" enable-background="new 0 0 792 612" xml:space="preserve">
-<g>
- <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="293.4264" y1="313.4543" x2="293.7567" y2="294.5293">
- <stop offset="0" style="stop-color:#007EC5"/>
- <stop offset="1" style="stop-color:#00C0ED"/>
- </linearGradient>
- <path fill="url(#SVGID_1_)" d="M308,377.4c1.7,0,3.2-0.3,4.3-1c1.1-0.6,2-1.4,2.6-2.3c0.6-0.9,1.1-1.9,1.3-3c0.2-1.1,0.3-2.1,0.3-3
- c0-0.9-0.1-1.9-0.3-3c-0.2-1.1-0.7-2.1-1.3-3c-0.6-0.9-1.5-1.7-2.6-2.3c-1.1-0.6-2.6-1-4.3-1h-31c-1.8,0-3.2,0.3-4.3,1
- c-1.1,0.6-2,1.4-2.6,2.3c-0.6,0.9-1.1,1.9-1.3,3c-0.2,1.1-0.3,2.1-0.3,3c0,0.9,0.1,1.9,0.3,3c0.2,1.1,0.7,2.1,1.3,3
- c0.6,0.9,1.5,1.7,2.6,2.3c1.1,0.6,2.5,1,4.3,1H308L308,377.4z M323.7,368c0,1.9-0.3,3.9-1,5.9c-0.6,2-1.6,3.8-2.8,5.4
- c-1.2,1.6-2.7,2.9-4.5,4c-1.7,1-3.7,1.5-5.9,1.5h-35c-2.1-0.1-4-0.7-5.6-1.7c-1.6-1.1-3-2.4-4.2-4c-1.2-1.6-2-3.4-2.6-5.3
- c-0.6-1.9-0.9-3.9-0.9-5.8c0-1.9,0.3-3.9,1-5.9c0.6-2,1.6-3.8,2.8-5.4c1.2-1.6,2.7-2.9,4.5-4c1.7-1,3.7-1.5,5.9-1.5h35
- c2.1,0.1,4,0.7,5.6,1.7c1.6,1,3,2.4,4.2,4c1.2,1.6,2,3.4,2.6,5.3C323.4,364.2,323.7,366.1,323.7,368z"/>
- <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="364.0253" y1="215.4108" x2="366.8113" y2="55.7995">
- <stop offset="0" style="stop-color:#007EC5"/>
- <stop offset="1" style="stop-color:#00C0ED"/>
- </linearGradient>
- <path fill="url(#SVGID_2_)" d="M383.7,368c0-0.9-0.1-1.9-0.3-3c-0.2-1.1-0.7-2.1-1.3-3c-0.6-0.9-1.5-1.7-2.6-2.3s-2.6-1-4.3-1
- h-27.7c-1.8,0-3.2,0.3-4.3,1c-1.1,0.6-2,1.4-2.6,2.3c-0.6,0.9-1.1,1.9-1.3,3c-0.2,1.1-0.3,2.1-0.3,3v13.1c0,1-0.4,1.9-1.1,2.6
- c-0.7,0.7-1.6,1.1-2.6,1.1c-1,0-1.9-0.4-2.6-1.1c-0.7-0.7-1.1-1.6-1.1-2.6V368c0-1.9,0.3-3.9,1-5.9c0.6-2,1.6-3.8,2.8-5.4
- c1.2-1.6,2.7-2.9,4.5-4c1.7-1,3.7-1.5,5.9-1.5h32.2c2.1,0.1,4,0.7,5.6,1.7c1.6,1,3,2.4,4.2,4c1.2,1.6,2,3.4,2.6,5.3
- c0.6,1.9,0.9,3.9,0.9,5.8v13.1c0,1-0.4,1.9-1.1,2.6c-0.7,0.7-1.6,1.1-2.6,1.1c-1,0-1.9-0.4-2.6-1.1c-0.7-0.7-1.1-1.6-1.1-2.6V368z"
- />
- <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="429.6967" y1="386.7026" x2="430.0228" y2="368.0231">
- <stop offset="0" style="stop-color:#007EC5"/>
- <stop offset="1" style="stop-color:#00C0ED"/>
- </linearGradient>
- <path fill="url(#SVGID_3_)" d="M445.5,377.4c1.7,0,3.2-0.3,4.3-1c1.1-0.6,2-1.4,2.6-2.3c0.6-0.9,1.1-1.9,1.3-3
- c0.2-1.1,0.3-2.1,0.3-3c0-0.9-0.1-1.9-0.3-3c-0.2-1.1-0.7-2.1-1.3-3c-0.6-0.9-1.5-1.7-2.6-2.3c-1.1-0.6-2.6-1-4.3-1h-31
- c-1.8,0-3.2,0.3-4.3,1c-1.1,0.6-2,1.4-2.6,2.3c-0.6,0.9-1.1,1.9-1.3,3c-0.2,1.1-0.3,2.1-0.3,3c0,0.9,0.1,1.9,0.3,3
- c0.2,1.1,0.7,2.1,1.3,3c0.6,0.9,1.5,1.7,2.6,2.3c1.1,0.6,2.5,1,4.3,1H445.5L445.5,377.4z M461.3,368c0,1.9-0.3,3.9-1,5.9
- c-0.6,2-1.6,3.8-2.8,5.4c-1.2,1.6-2.7,2.9-4.5,4c-1.7,1-3.7,1.5-5.9,1.5h-35c-2.1-0.1-4-0.7-5.6-1.7c-1.6-1.1-3-2.4-4.2-4
- c-1.2-1.6-2-3.4-2.6-5.3c-0.6-1.9-0.9-3.9-0.9-5.8c0-1.9,0.3-3.9,1-5.9c0.6-2,1.6-3.8,2.8-5.4c1.2-1.6,2.7-2.9,4.5-4
- c1.7-1,3.7-1.5,5.9-1.5h35c2.1,0.1,4,0.7,5.6,1.7c1.6,1,3,2.4,4.2,4c1.2,1.6,2,3.4,2.6,5.3C461,364.2,461.3,366.1,461.3,368z"/>
- <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="499.3867" y1="424.4887" x2="499.7166" y2="405.5856">
- <stop offset="0" style="stop-color:#007EC5"/>
- <stop offset="1" style="stop-color:#00C0ED"/>
- </linearGradient>
- <path fill="url(#SVGID_4_)" d="M479.2,371.7c-1.4,0-2.8-0.3-4-0.8c-1.2-0.5-2.3-1.3-3.2-2.2c-0.9-0.9-1.7-2-2.2-3.2
- c-0.5-1.2-0.8-2.6-0.8-4c0-1.4,0.3-2.8,0.8-4c0.5-1.2,1.3-2.3,2.2-3.2c0.9-0.9,2-1.7,3.2-2.2c1.2-0.5,2.6-0.8,4-0.8h46.6
- c1,0,1.9,0.4,2.6,1.1c0.7,0.7,1.1,1.6,1.1,2.6c0,1-0.4,1.9-1.1,2.6c-0.7,0.7-1.6,1.1-2.6,1.1H479c-0.8,0-1.4,0.3-2,0.8
- c-0.6,0.5-0.9,1.2-0.9,2c0,0.8,0.3,1.4,0.9,2c0.6,0.6,1.3,0.8,2,0.8h42.5c1.4,0,2.8,0.3,4,0.8c1.3,0.5,2.3,1.3,3.3,2.2
- c0.9,0.9,1.7,2,2.2,3.3c0.5,1.3,0.8,2.6,0.8,4c0,1.4-0.3,2.8-0.8,4c-0.5,1.2-1.3,2.3-2.2,3.2c-0.9,0.9-2,1.6-3.3,2.2
- c-1.3,0.5-2.6,0.8-4,0.8H475c-1,0-1.9-0.4-2.6-1.1c-0.7-0.7-1.1-1.6-1.1-2.6c0-1,0.4-1.9,1.1-2.6c0.7-0.7,1.6-1.1,2.6-1.1h46.8
- c0.8,0,1.4-0.3,2-0.8c0.6-0.5,0.8-1.2,0.8-2c0-0.8-0.3-1.5-0.8-2.1c-0.6-0.6-1.2-0.8-2-0.8H479.2z"/>
-</g>
-<g>
- <g>
- <path fill="#007EC5" d="M263,404.8c-1.2-1.2-1.8-2.7-1.8-4.6c0-1.9,0.6-3.4,1.8-4.6c1.2-1.2,2.7-1.8,4.5-1.8
- c1.8,0,3.3,0.6,4.5,1.8c1.2,1.2,1.8,2.7,1.8,4.6c0,1.9-0.6,3.4-1.8,4.6c-1.2,1.2-2.7,1.8-4.5,1.8C265.6,406.6,264.1,406,263,404.8
- L263,404.8z M263.7,396.4c-0.9,1-1.4,2.3-1.4,3.8c0,1.5,0.5,2.8,1.4,3.8c0.9,1,2.2,1.5,3.7,1.5c1.6,0,2.8-0.5,3.7-1.5
- c0.9-1,1.4-2.3,1.4-3.8c0-1.5-0.5-2.8-1.4-3.8c-0.9-1-2.2-1.5-3.7-1.5C265.9,394.9,264.7,395.4,263.7,396.4z"/>
- <path fill="#007EC5" d="M276.5,410.2v-11.8h1v1.4h0c0.3-0.5,0.7-0.9,1.3-1.2c0.6-0.3,1.2-0.4,1.8-0.4c1.2,0,2.2,0.4,3,1.2
- c0.8,0.8,1.2,1.8,1.2,3c0,1.2-0.4,2.2-1.2,3c-0.8,0.8-1.8,1.2-3,1.2c-0.6,0-1.3-0.1-1.8-0.4c-0.6-0.3-1-0.7-1.3-1.2h0v5.3H276.5
- L276.5,410.2z M278.4,400c-0.6,0.6-1,1.4-1,2.3c0,0.9,0.3,1.6,1,2.3c0.6,0.6,1.4,0.9,2.3,0.9c0.9,0,1.7-0.3,2.3-0.9
- c0.6-0.6,0.9-1.4,0.9-2.3c0-0.9-0.3-1.7-0.9-2.3c-0.6-0.6-1.3-0.9-2.3-0.9C279.8,399.1,279,399.4,278.4,400z"/>
- <path fill="#007EC5" d="M294.1,404.1l0.8,0.6c-0.8,1.1-1.9,1.7-3.4,1.7c-1.2,0-2.2-0.4-2.9-1.2c-0.7-0.8-1.1-1.8-1.1-3
- c0-1.2,0.4-2.2,1.1-3c0.7-0.8,1.7-1.2,2.8-1.2c1.2,0,2.1,0.4,2.7,1.1c0.7,0.7,1,1.6,1,2.6v0.7h-6.6c0,0.2,0,0.4,0.1,0.6
- c0.1,0.2,0.1,0.5,0.3,0.8c0.1,0.3,0.3,0.5,0.5,0.8c0.2,0.2,0.5,0.4,0.9,0.6c0.4,0.2,0.8,0.2,1.2,0.2c0.5,0,1-0.1,1.5-0.4
- C293.5,404.9,293.8,404.6,294.1,404.1L294.1,404.1z M288.5,401.6h5.6c0-0.7-0.3-1.3-0.8-1.8c-0.5-0.5-1.2-0.8-1.9-0.8
- c-0.5,0-1,0.1-1.4,0.3c-0.4,0.2-0.7,0.5-0.9,0.8c-0.2,0.3-0.3,0.6-0.4,0.8C288.5,401.3,288.5,401.5,288.5,401.6z"/>
- <path fill="#007EC5" d="M298.1,406.3v-5.7c0-0.2,0-0.6,0-1.2c0-0.6,0-0.9,0-1.1h1c0,0.8,0,1.3,0.1,1.4h0.1
- c0.2-0.5,0.6-0.8,1.1-1.1c0.5-0.3,1-0.5,1.7-0.5c2,0,3,1.1,3,3.4v4.7h-1v-4.7c0-1.7-0.7-2.5-2-2.5c-0.8,0-1.5,0.3-2,0.8
- c-0.5,0.6-0.8,1.4-0.8,2.4v3.9H298.1z"/>
- </g>
- <g>
- <polygon fill="#007EC5" points="313.1,406.3 313.1,394.2 314.5,394.2 321.9,404.8 321.9,404.8 321.9,394.2 323.1,394.2
- 323.1,406.3 321.6,406.3 314.2,395.7 314.2,395.7 314.2,406.3 "/>
- <path fill="#007EC5" d="M333,404.1l0.8,0.6c-0.8,1.1-1.9,1.7-3.4,1.7c-1.2,0-2.2-0.4-2.9-1.2c-0.7-0.8-1.1-1.8-1.1-3
- c0-1.2,0.4-2.2,1.1-3c0.7-0.8,1.7-1.2,2.8-1.2c1.2,0,2.1,0.4,2.7,1.1c0.7,0.7,1,1.6,1,2.6v0.7h-6.6c0,0.2,0,0.4,0.1,0.6
- c0.1,0.2,0.1,0.5,0.3,0.8c0.1,0.3,0.3,0.5,0.5,0.8c0.2,0.2,0.5,0.4,0.9,0.6c0.4,0.2,0.8,0.2,1.2,0.2c0.5,0,1-0.1,1.5-0.4
- C332.4,404.9,332.8,404.6,333,404.1L333,404.1z M327.4,401.6h5.6c0-0.7-0.3-1.3-0.8-1.8c-0.5-0.5-1.2-0.8-1.9-0.8
- c-0.5,0-1,0.1-1.4,0.3c-0.4,0.2-0.7,0.5-0.9,0.8c-0.2,0.3-0.3,0.6-0.4,0.8C327.4,401.3,327.4,401.5,327.4,401.6z"/>
- <path fill="#007EC5" d="M340.9,398.4v0.9h-2.3v5.1c0,0.4,0.1,0.6,0.3,0.8c0.2,0.2,0.5,0.3,0.8,0.3c0.4,0,0.7-0.1,1.2-0.3l0.1,0.9
- c-0.5,0.2-0.9,0.3-1.3,0.3c-0.7,0-1.2-0.2-1.5-0.6c-0.3-0.4-0.5-0.9-0.5-1.5v-5.1h-1.7v-0.9h1.7v-2.3h1v2.3H340.9z"/>
- <polygon fill="#007EC5" points="344.8,406.3 342.3,398.4 343.5,398.4 345.4,405 345.4,405 347.6,398.4 348.6,398.4 350.9,405
- 351,405 352.8,398.4 353.9,398.4 351.5,406.3 350.5,406.3 348.1,399.8 348.1,399.8 345.9,406.3 "/>
- <path fill="#007EC5" d="M356.9,405.3c-0.8-0.8-1.2-1.8-1.2-3c0-1.2,0.4-2.2,1.2-3c0.8-0.8,1.8-1.2,3-1.2c1.2,0,2.2,0.4,3,1.2
- c0.8,0.8,1.2,1.8,1.2,3c0,1.2-0.4,2.2-1.2,3c-0.8,0.8-1.8,1.2-3,1.2C358.7,406.5,357.7,406.1,356.9,405.3L356.9,405.3z M357.7,400
- c-0.6,0.6-0.9,1.4-0.9,2.3c0,0.9,0.3,1.7,0.9,2.3c0.6,0.6,1.3,0.9,2.3,0.9c0.9,0,1.7-0.3,2.3-0.9c0.6-0.6,0.9-1.4,0.9-2.3
- c0-0.9-0.3-1.7-0.9-2.3c-0.6-0.6-1.3-0.9-2.3-0.9C359,399.1,358.2,399.4,357.7,400z"/>
- <path fill="#007EC5" d="M367.1,406.3v-5.7c0-0.2,0-0.6,0-1.2c0-0.6,0-0.9,0-1.1h1c0,0.8,0,1.3,0.1,1.4c0.6-1.1,1.4-1.6,2.5-1.6
- c0.2,0,0.4,0,0.6,0.1l-0.1,1c-0.1,0-0.3-0.1-0.4-0.1c-0.9,0-1.5,0.3-1.9,0.8c-0.4,0.5-0.6,1.2-0.6,2v4.3H367.1z"/>
- <polygon fill="#007EC5" points="373.5,406.3 373.5,393.3 374.5,393.3 374.5,402 378.4,398.4 379.9,398.4 375.9,402 380.4,406.3
- 378.9,406.3 374.5,402.1 374.5,406.3 "/>
- </g>
- <g>
- <path fill="#007EC5" d="M388.2,404.8c-1.2-1.2-1.8-2.7-1.8-4.6c0-1.9,0.6-3.4,1.8-4.6c1.2-1.2,2.7-1.8,4.5-1.8
- c1.8,0,3.3,0.6,4.5,1.8c1.2,1.2,1.8,2.7,1.8,4.6c0,1.9-0.6,3.4-1.8,4.6c-1.2,1.2-2.7,1.8-4.5,1.8
- C390.8,406.6,389.3,406,388.2,404.8L388.2,404.8z M388.9,396.4c-0.9,1-1.4,2.3-1.4,3.8c0,1.5,0.5,2.8,1.4,3.8
- c0.9,1,2.2,1.5,3.7,1.5c1.6,0,2.8-0.5,3.7-1.5c0.9-1,1.4-2.3,1.4-3.8c0-1.5-0.5-2.8-1.4-3.8c-0.9-1-2.2-1.5-3.7-1.5
- C391.1,394.9,389.9,395.4,388.9,396.4z"/>
- <path fill="#007EC5" d="M401.7,410.2v-11.8h1v1.4h0c0.3-0.5,0.7-0.9,1.3-1.2c0.6-0.3,1.2-0.4,1.8-0.4c1.2,0,2.2,0.4,3,1.2
- c0.8,0.8,1.2,1.8,1.2,3c0,1.2-0.4,2.2-1.2,3c-0.8,0.8-1.8,1.2-3,1.2c-0.6,0-1.3-0.1-1.8-0.4c-0.6-0.3-1-0.7-1.3-1.2h0v5.3H401.7
- L401.7,410.2z M403.6,400c-0.6,0.6-1,1.4-1,2.3c0,0.9,0.3,1.6,1,2.3c0.6,0.6,1.4,0.9,2.3,0.9c0.9,0,1.7-0.3,2.3-0.9
- c0.6-0.6,0.9-1.4,0.9-2.3c0-0.9-0.3-1.7-0.9-2.3c-0.6-0.6-1.3-0.9-2.3-0.9C405,399.1,404.2,399.4,403.6,400z"/>
- <path fill="#007EC5" d="M419.3,404.1l0.8,0.6c-0.8,1.1-1.9,1.7-3.4,1.7c-1.2,0-2.2-0.4-2.9-1.2c-0.7-0.8-1.1-1.8-1.1-3
- c0-1.2,0.4-2.2,1.1-3s1.7-1.2,2.8-1.2c1.2,0,2.1,0.4,2.7,1.1c0.7,0.7,1,1.6,1,2.6v0.7h-6.6c0,0.2,0,0.4,0.1,0.6
- c0.1,0.2,0.1,0.5,0.3,0.8c0.1,0.3,0.3,0.5,0.5,0.8c0.2,0.2,0.5,0.4,0.9,0.6c0.4,0.2,0.8,0.2,1.2,0.2c0.5,0,1-0.1,1.5-0.4
- C418.7,404.9,419,404.6,419.3,404.1L419.3,404.1z M413.7,401.6h5.6c0-0.7-0.3-1.3-0.8-1.8c-0.5-0.5-1.2-0.8-1.9-0.8
- c-0.5,0-1,0.1-1.4,0.3c-0.4,0.2-0.7,0.5-0.9,0.8c-0.2,0.3-0.3,0.6-0.4,0.8C413.7,401.3,413.7,401.5,413.7,401.6z"/>
- <path fill="#007EC5" d="M423.3,406.3v-5.7c0-0.2,0-0.6,0-1.2c0-0.6,0-0.9,0-1.1h1c0,0.8,0,1.3,0.1,1.4c0.6-1.1,1.4-1.6,2.5-1.6
- c0.2,0,0.4,0,0.6,0.1l-0.1,1c-0.1,0-0.3-0.1-0.4-0.1c-0.9,0-1.5,0.3-1.9,0.8c-0.4,0.5-0.6,1.2-0.6,2v4.3H423.3z"/>
- <path fill="#007EC5" d="M435.9,401v1.9c0,1.4,0.1,2.5,0.2,3.3h-1c-0.1-0.4-0.1-0.8-0.1-1.3h0c-0.6,1-1.5,1.5-2.8,1.5
- c-0.8,0-1.4-0.2-2-0.6c-0.5-0.4-0.8-1-0.8-1.8c0-1.8,1.5-2.7,4.4-2.7h1.2V401c0-0.6-0.2-1.1-0.6-1.4c-0.4-0.3-0.9-0.5-1.6-0.5
- c-0.9,0-1.7,0.3-2.4,0.9l-0.6-0.7c0.4-0.3,0.8-0.6,1.4-0.8c0.6-0.2,1.1-0.3,1.6-0.3c1,0,1.8,0.2,2.3,0.7
- C435.6,399.3,435.9,400,435.9,401L435.9,401z M434.9,402.3h-1.1c-1,0-1.8,0.1-2.4,0.4c-0.7,0.3-1,0.7-1,1.4c0,0.5,0.2,0.8,0.5,1.1
- c0.4,0.3,0.8,0.4,1.2,0.4c1,0,1.7-0.3,2.1-0.8c0.4-0.5,0.6-1.2,0.6-1.9V402.3z"/>
- <path fill="#007EC5" d="M443.2,398.4v0.9h-2.3v5.1c0,0.4,0.1,0.6,0.3,0.8c0.2,0.2,0.5,0.3,0.8,0.3c0.4,0,0.7-0.1,1.2-0.3l0.1,0.9
- c-0.5,0.2-0.9,0.3-1.3,0.3c-0.7,0-1.2-0.2-1.5-0.6c-0.3-0.4-0.5-0.9-0.5-1.5v-5.1h-1.7v-0.9h1.7v-2.3h1v2.3H443.2z"/>
- <path fill="#007EC5" d="M445.9,406.3v-7.9h1v7.9H445.9L445.9,406.3z M445.9,395.8c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.2,0.1-0.4,0.2-0.5
- c0.1-0.1,0.3-0.2,0.5-0.2c0.2,0,0.4,0.1,0.5,0.2c0.1,0.1,0.2,0.3,0.2,0.5c0,0.2-0.1,0.4-0.2,0.5c-0.1,0.1-0.3,0.2-0.5,0.2
- C446.2,396,446,395.9,445.9,395.8z"/>
- <path fill="#007EC5" d="M450.6,406.3v-5.7c0-0.2,0-0.6,0-1.2c0-0.6,0-0.9,0-1.1h1c0,0.8,0,1.3,0.1,1.4h0.1
- c0.2-0.5,0.6-0.8,1.1-1.1c0.5-0.3,1-0.5,1.7-0.5c2,0,3,1.1,3,3.4v4.7h-1v-4.7c0-1.7-0.7-2.5-2-2.5c-0.8,0-1.5,0.3-2,0.8
- c-0.5,0.6-0.8,1.4-0.8,2.4v3.9H450.6z"/>
- <path fill="#007EC5" d="M468.7,398.4v7.4c0,0.8-0.1,1.4-0.3,2c-0.2,0.6-0.4,1-0.7,1.3c-0.3,0.3-0.6,0.6-1,0.8
- c-0.4,0.2-0.8,0.3-1.1,0.4c-0.3,0.1-0.7,0.1-1.1,0.1c-0.8,0-1.6-0.1-2.3-0.4c-0.7-0.3-1.3-0.7-1.7-1.2l0.8-0.8
- c0.7,1,1.7,1.5,3.1,1.5c2.1,0,3.2-1.2,3.2-3.6v-1.1h0c-0.6,1-1.6,1.5-3,1.5c-1.2,0-2.2-0.4-3-1.2c-0.8-0.8-1.2-1.7-1.2-2.9
- c0-1.1,0.4-2.1,1.2-2.9c0.8-0.8,1.8-1.2,3-1.2c1.3,0,2.3,0.5,3,1.5h0v-1.3H468.7L468.7,398.4z M466.8,404.4
- c0.6-0.6,0.9-1.3,0.9-2.2c0-0.9-0.3-1.6-0.9-2.2c-0.6-0.6-1.3-0.9-2.2-0.9c-0.9,0-1.6,0.3-2.2,0.9c-0.6,0.6-0.9,1.3-0.9,2.2
- c0,0.9,0.3,1.6,0.9,2.2c0.6,0.6,1.3,0.9,2.2,0.9C465.5,405.3,466.2,405,466.8,404.4z"/>
- </g>
- <g>
- <path fill="#007EC5" d="M476,404.7l1.1-0.7c0.6,1,1.5,1.5,2.8,1.5c0.8,0,1.4-0.2,1.9-0.6c0.5-0.4,0.8-1,0.8-1.7
- c0-0.5-0.2-1-0.5-1.3c-0.3-0.3-0.7-0.6-1.2-0.7c-0.5-0.1-1-0.3-1.5-0.5c-0.5-0.2-1-0.4-1.5-0.6c-0.5-0.2-0.8-0.6-1.2-1
- c-0.3-0.5-0.5-1.1-0.5-1.8c0-1,0.4-1.8,1.1-2.4c0.8-0.6,1.7-0.9,2.8-0.9c1.4,0,2.5,0.5,3.3,1.5l-1,0.7c-0.6-0.8-1.4-1.2-2.4-1.2
- c-0.8,0-1.4,0.2-1.9,0.6c-0.5,0.4-0.8,1-0.8,1.7c0,0.5,0.1,0.9,0.3,1.2c0.2,0.3,0.5,0.6,0.9,0.8c0.4,0.2,0.8,0.3,1.2,0.5
- c0.4,0.1,0.9,0.3,1.3,0.4c0.4,0.2,0.9,0.3,1.2,0.6c0.4,0.2,0.7,0.6,0.9,1c0.2,0.4,0.3,0.9,0.3,1.6c0,1-0.4,1.9-1.1,2.5
- c-0.7,0.6-1.6,0.9-2.7,0.9C478.1,406.6,476.8,406,476,404.7z"/>
- <path fill="#007EC5" d="M492.9,398.4l-4.1,10.3c-0.4,1.1-1.2,1.7-2.2,1.7c-0.3,0-0.6-0.1-1-0.2l0.1-1c0.4,0.1,0.7,0.2,0.9,0.2
- c0.3,0,0.6-0.1,0.8-0.4c0.2-0.2,0.4-0.6,0.5-1l0.7-1.8l-3.2-7.9h1.1l2.6,6.7l2.5-6.7H492.9z"/>
- <path fill="#007EC5" d="M494.4,404.9l0.9-0.6c0.2,0.4,0.5,0.7,0.9,1c0.4,0.2,0.9,0.3,1.4,0.3c0.5,0,0.9-0.1,1.3-0.4
- c0.4-0.3,0.5-0.6,0.5-1.1c0-0.4-0.2-0.7-0.5-0.9c-0.3-0.2-0.7-0.4-1.2-0.5c-0.5-0.1-0.9-0.2-1.4-0.3c-0.5-0.1-0.9-0.3-1.2-0.7
- c-0.3-0.3-0.5-0.8-0.5-1.3c0-0.7,0.3-1.3,0.8-1.7c0.5-0.4,1.2-0.6,1.9-0.6c1.4,0,2.3,0.5,2.8,1.5l-0.9,0.5c-0.4-0.7-1-1.1-1.9-1.1
- c-0.4,0-0.8,0.1-1.1,0.3c-0.4,0.2-0.5,0.5-0.5,0.9c0,0.4,0.2,0.7,0.5,0.9c0.3,0.2,0.7,0.3,1.2,0.4c0.5,0.1,0.9,0.2,1.4,0.3
- c0.5,0.1,0.9,0.3,1.2,0.7c0.3,0.3,0.5,0.8,0.5,1.4c0,0.8-0.3,1.4-0.8,1.8c-0.6,0.4-1.2,0.6-2,0.6
- C496.1,406.5,495,405.9,494.4,404.9z"/>
- <path fill="#007EC5" d="M507.2,398.4v0.9h-2.3v5.1c0,0.4,0.1,0.6,0.3,0.8c0.2,0.2,0.5,0.3,0.8,0.3c0.4,0,0.7-0.1,1.2-0.3l0.1,0.9
- c-0.5,0.2-0.9,0.3-1.3,0.3c-0.7,0-1.2-0.2-1.5-0.6c-0.3-0.4-0.5-0.9-0.5-1.5v-5.1h-1.7v-0.9h1.7v-2.3h1v2.3H507.2z"/>
- <path fill="#007EC5" d="M515.9,404.1l0.8,0.6c-0.8,1.1-1.9,1.7-3.4,1.7c-1.2,0-2.2-0.4-2.9-1.2c-0.7-0.8-1.1-1.8-1.1-3
- c0-1.2,0.4-2.2,1.1-3s1.7-1.2,2.8-1.2c1.2,0,2.1,0.4,2.7,1.1c0.7,0.7,1,1.6,1,2.6v0.7h-6.6c0,0.2,0,0.4,0.1,0.6
- c0.1,0.2,0.1,0.5,0.3,0.8c0.1,0.3,0.3,0.5,0.5,0.8c0.2,0.2,0.5,0.4,0.9,0.6c0.4,0.2,0.8,0.2,1.2,0.2c0.5,0,1-0.1,1.5-0.4
- C515.3,404.9,515.7,404.6,515.9,404.1L515.9,404.1z M510.3,401.6h5.6c0-0.7-0.3-1.3-0.8-1.8c-0.5-0.5-1.2-0.8-1.9-0.8
- c-0.5,0-1,0.1-1.4,0.3c-0.4,0.2-0.7,0.5-0.9,0.8c-0.2,0.3-0.3,0.6-0.4,0.8C510.3,401.3,510.3,401.5,510.3,401.6z"/>
- <path fill="#007EC5" d="M520,406.3v-5.7c0-0.2,0-0.6,0-1.2c0-0.6,0-0.9,0-1.1h1c0,0.8,0,1.3,0.1,1.4h0.1c0.2-0.5,0.6-0.8,1.1-1.1
- c0.5-0.3,1-0.5,1.7-0.5c0.5,0,1,0.1,1.5,0.4c0.4,0.3,0.7,0.7,0.9,1.3c0.2-0.6,0.6-1,1.1-1.3c0.5-0.3,1-0.4,1.6-0.4
- c2,0,3,1.1,3,3.4v4.7h-1v-4.7c0-1.7-0.7-2.5-2-2.5c-0.4,0-0.8,0.1-1.2,0.3c-0.3,0.2-0.6,0.4-0.8,0.7c-0.2,0.3-0.3,0.6-0.4,0.9
- c-0.1,0.3-0.1,0.6-0.1,0.9v4.4h-1v-4.8c0-0.8-0.1-1.3-0.4-1.8c-0.3-0.4-0.7-0.6-1.2-0.6c-0.8,0-1.5,0.3-2,0.8
- c-0.5,0.6-0.8,1.4-0.8,2.4v3.9H520z"/>
- </g>
-</g>
-<g>
-
- <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="280.7511" y1="468.8727" x2="530.5958" y2="160.3402" gradientTransform="matrix(-0.9595 0.2818 0.2818 0.9595 742.5177 -113.6192)">
- <stop offset="0" style="stop-color:#C6262F"/>
- <stop offset="1.288056e-03" style="stop-color:#C6262F"/>
- <stop offset="0.3136" style="stop-color:#D64B43"/>
- <stop offset="0.5951" style="stop-color:#E26255"/>
- <stop offset="0.8334" style="stop-color:#EA6F61"/>
- <stop offset="1" style="stop-color:#ED7466"/>
- </linearGradient>
- <path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_5_)" d="M427.7,300.4c-6.9,0.6-13.1,5-19.2,7.1
- c-18.1,6.2-33.9,9.1-56.5,4.7c24.6,17.2,36.6,13,63.7,0.1c-0.5,0.6-0.7,1.3-1.3,1.9c1.4-0.4,2.4-1.7,3.4-2.2
- c-0.4,0.7-0.9,1.5-1.4,1.9c2.2-0.6,3.7-2.3,5.9-3.9c-2.4,2.1-4.2,5-6,8c-1.5,2.5-3.1,4.8-5.1,6.9c-1,1-1.9,1.9-2.9,2.9
- c-1.4,1.3-2.9,2.5-5.1,2.9c1.7,0.1,3.6-0.3,6.5-1.9c-1.6,2.4-7.1,6.2-9.9,7.2c10.5-2.6,19.2-15.9,25.7-18
- c18.3-5.9,13.8-3.4,27-14.2c1.6-1.3,3-1,5.1-0.8c1.1,0.1,2.1,0.3,3.2,0.5c0.8,0.2,1.4,0.4,2.2,0.8l1.8,0.9c-1.9-4.5-2.3-4.1-5.9-6
- c-2.3-1.3-3.3-3.8-6.2-4.9c-7.1-2.6-11.9,11.7-11.7-5c0.1-8,4.2-14.4,6.4-22c1.1-3.8,2.3-7.6,2.4-11.5c0.1-2.3,0-4.7-0.4-7
- c-2-11.2-8.4-21.5-19.7-24.8c-1-0.3-1.1-0.3-0.9,0c9.6,17.1,7.2,38.3,3.1,54.2C429.9,285.5,426.7,293.2,427.7,300.4z"/>
- <path fill-rule="evenodd" clip-rule="evenodd" fill="#E6E7E8" d="M344.4,311.8c7.1,4.9,15,9.5,23.8,10.7
- c-8.3-0.4-16.6-3.8-27.3-11.3C342,311.4,343.2,311.6,344.4,311.8z"/>
-</g>
-</svg>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/overlaywork/AppUiTopoOverlay.java b/framework/src/onos/web/gui/src/main/webapp/_sdh/overlaywork/AppUiTopoOverlay.java
deleted file mode 100644
index c6d00cc0..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/overlaywork/AppUiTopoOverlay.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.meowster.over;
-
-import org.onosproject.ui.UiTopoOverlay;
-import org.onosproject.ui.topo.ButtonId;
-import org.onosproject.ui.topo.PropertyPanel;
-import org.onosproject.ui.topo.TopoConstants.CoreButtons;
-import org.onosproject.ui.topo.TopoConstants.Glyphs;
-
-import static org.onosproject.ui.topo.TopoConstants.Properties.*;
-
-/**
- * Our topology overlay.
- */
-public class AppUiTopoOverlay extends UiTopoOverlay {
-
- // NOTE: this must match the ID defined in topov.js
- private static final String OVERLAY_ID = "meowster-overlay";
-
- private static final String MY_TITLE = "I changed the title";
- private static final String MY_VERSION = "Beta-1.0.0042";
-
- private static final ButtonId FOO_BUTTON = new ButtonId("foo");
- private static final ButtonId BAR_BUTTON = new ButtonId("bar");
-
- public AppUiTopoOverlay() {
- super(OVERLAY_ID);
- }
-
-
- @Override
- public void modifySummary(PropertyPanel pp) {
- pp.title("My App Rocks!")
- .typeId(Glyphs.CROWN)
- .removeProps(
- TOPOLOGY_SSCS,
- INTENTS,
- TUNNELS,
- FLOWS,
- VERSION
- )
- .addProp(VERSION, MY_VERSION);
-
- }
-
- @Override
- public void modifyDeviceDetails(PropertyPanel pp) {
- pp.title(MY_TITLE);
- pp.removeProps(LATITUDE, LONGITUDE);
-
- pp.addButton(FOO_BUTTON)
- .addButton(BAR_BUTTON);
-
- pp.removeButtons(CoreButtons.SHOW_PORT_VIEW)
- .removeButtons(CoreButtons.SHOW_GROUP_VIEW);
- }
-
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/overlaywork/README.txt b/framework/src/onos/web/gui/src/main/webapp/_sdh/overlaywork/README.txt
deleted file mode 100644
index d7dcbecd..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/overlaywork/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-NOTE:
-
-This directory is putting under revision control some key files from
-an example stand-alone app, as I develop the topology overlay functionality.
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/overlaywork/topov.js b/framework/src/onos/web/gui/src/main/webapp/_sdh/overlaywork/topov.js
deleted file mode 100644
index 068c30c5..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/overlaywork/topov.js
+++ /dev/null
@@ -1,157 +0,0 @@
-// sample topology overlay - client side
-(function () {
- 'use strict';
-
- // injected refs
- var $log, tov;
-
- // internal state
- var someStateValue = true;
-
- // our overlay definition
- var overlay = {
- // NOTE: this must match the ID defined in AppUiTopoOverlay
- overlayId: 'meowster-overlay',
- glyphId: '*star4',
- tooltip: 'Sample Meowster Topo Overlay',
-
- // These glyphs get installed using the overlayId as a prefix.
- // e.g. 'star4' is installed as 'meowster-overlay-star4'
- // They can be referenced (from this overlay) as '*star4'
- // That is, the '*' prefix stands in for 'meowster-overlay-'
- glyphs: {
- star4: {
- vb: '0 0 8 8',
- d: 'M1,4l2,-1l1,-2l1,2l2,1l-2,1l-1,2l-1,-2z'
- },
- banner: {
- vb: '0 0 6 6',
- d: 'M1,1v4l2,-2l2,2v-4z'
- }
- },
-
- activate: function () {
- $log.debug("sample topology overlay ACTIVATED");
- },
- deactivate: function () {
- $log.debug("sample topology overlay DEACTIVATED");
- },
-
-
-
-
-
- // detail panel button definitions
- buttons: {
- foo: {
- gid: 'chain',
- tt: 'A FOO action',
- cb: function (data) {
- $log.debug('FOO action invoked with data:', data);
- }
- },
- bar: {
- gid: '*banner',
- tt: 'A BAR action',
- cb: function (data) {
- $log.debug('BAR action invoked with data:', data);
- }
- }
- },
-
- // Key bindings for traffic overlay buttons
- // NOTE: fully qual. button ID is derived from overlay-id and key-name
- keyBindings: {
- V: {
- cb: buttonCallback,
- tt: 'Uses the V key',
- gid: '*banner'
- },
- F: {
- cb: buttonCallback,
- tt: 'Uses the F key',
- gid: 'chain'
- },
- G: {
- cb: buttonCallback,
- tt: 'Uses the G key',
- gid: 'crown'
- },
-
- T: {
- cb: buttonCallback,
- tt: 'Uses the T key',
- gid: 'switch'
- },
-
- R: {
- cb: buttonCallback,
- tt: 'Uses the R key',
- gid: 'endstation'
- },
-
- 0: {
- cb: buttonCallback,
- tt: 'Uses the ZERO key',
- gid: 'xMark'
- },
-
- _keyOrder: [
- '0', 'V', 'F', 'G', 'T', 'R'
- ]
-
- // NOTE: T and R should be rejected (not installed)
- // T is reserved for 'toggle Theme'
- // R is reserved for 'Reset pan and zoom'
- },
-
- hooks: {
- // hook for handling escape key
- // Must return true to consume ESC, false otherwise.
- escape: cancelState,
-
- // hooks for when the selection changes...
- empty: function () {
- selectionCallback('empty');
- },
- single: function (data) {
- selectionCallback('single', data);
- },
- multi: function (selectOrder) {
- selectionCallback('multi', selectOrder);
- tov.addDetailButton('foo');
- tov.addDetailButton('bar');
- }
- }
-
- };
-
- // invoked when the escape key is pressed
- function cancelState() {
- if (someStateValue) {
- someStateValue = false;
- // we consumed the ESC event
- return true;
- }
- return false;
- }
-
- function buttonCallback(x) {
- $log.debug('Toolbar-button callback', x);
- }
-
- function selectionCallback(x, d) {
- $log.debug('Selection callback', x, d);
- }
-
- // invoke code to register with the overlay service
- angular.module('ovSample')
- .run(['$log', 'TopoOverlayService',
-
- function (_$log_, _tov_) {
- $log = _$log_;
- tov = _tov_;
- tov.register(overlay);
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/topojson/countrycodes.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/topojson/countrycodes.html
deleted file mode 100644
index 246d9e4c..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/topojson/countrycodes.html
+++ /dev/null
@@ -1,376 +0,0 @@
-<!DOCTYPE html>
-<!--
- *
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
--->
-<html lang="en">
-<head>
- <title>2-Letter, 3-Letter, Country Codes for All Countries in the World</title>
- <meta charset="utf-8">
- <script charset="utf-8" src="../../tp/jquery-2.1.1.min.js"></script>
-</head>
-<body>
-
-<style type="text/css" scoped>
- body {
- font-family: Helvetica Neue, Helvetica, Arial, sans-serif ;
- background-color: #eef;
- }
- .mainContent {
- margin: auto;
- width: 800px;
- background-color: #ddf;
- padding: 8px;
- }
-
- table {
- margin: auto;
- }
- th {
- font-style: italic;
- text-align: left;
- background-color: #aad;
- color: #66c;
- padding: 4px;
- }
- td {
- padding: 4px;
- }
- td.code {
- font-family: monospace;
- font-size: 120%;
- }
- td.num {
- text-align: right;
- }
- tr:nth-child(even) {
- background-color: #dde;
- }
- tr:nth-child(odd) {
- background-color: #eef;
- }
-
-</style>
-
-<div class="content">
- <div class="mainContent">
- <div class="miscTxt">
- <header>
- <h1>Complete List of Country Codes </h1>
- </header>
- <p>
- The 2-letter codes shown below are supplied by the ISO
- (<i>International Organization for Standardization</i>).
- It bases its list of country names and abbreviations on
- the list of names published by the United Nations.
- The UN also uses 3-letter codes, and numerical codes
- to identify nations.
- </p>
-
- <table>
- <thead>
- <tr>
- <th> Country </th>
- <th> A2 (ISO) </th>
- <th> A3 (UN) </th>
- <th> NUM (UN) </th>
- </tr>
- </thead>
- <tbody id="codes-body">
- </tbody>
- </table>
- </div>
- </div>
-</div>
-
-<script type="text/javascript">
-
- var data = [
- [ 'Afghanistan', 'AF', 'AFG', 4 ],
- [ 'Albania', 'AL', 'ALB', 8 ],
- [ 'Algeria', 'DZ', 'DZA', 12 ],
- [ 'American Samoa', 'AS', 'ASM', 16 ],
- [ 'Andorra', 'AD', 'AND', 20 ],
- [ 'Angola', 'AO', 'AGO', 24 ],
- [ 'Anguilla', 'AI', 'AIA', 660 ],
- [ 'Antarctica', 'AQ', 'ATA', 10 ],
- [ 'Antigua and Barbuda', 'AG', 'ATG', 28 ],
- [ 'Argentina', 'AR', 'ARG', 32 ],
- [ 'Armenia', 'AM', 'ARM', 51 ],
- [ 'Aruba', 'AW', 'ABW', 533 ],
- [ 'Australia', 'AU', 'AUS', 36 ],
- [ 'Austria', 'AT', 'AUT', 40 ],
- [ 'Azerbaijan', 'AZ', 'AZE', 31 ],
- [ 'Bahamas', 'BS', 'BHS', 44 ],
- [ 'Bahrain', 'BH', 'BHR', 48 ],
- [ 'Bangladesh', 'BD', 'BGD', 50 ],
- [ 'Barbados', 'BB', 'BRB', 52 ],
- [ 'Belarus', 'BY', 'BLR', 112 ],
- [ 'Belgium', 'BE', 'BEL', 56 ],
- [ 'Belize', 'BZ', 'BLZ', 84 ],
- [ 'Benin', 'BJ', 'BEN', 204 ],
- [ 'Bermuda', 'BM', 'BMU', 60 ],
- [ 'Bhutan', 'BT', 'BTN', 64 ],
- [ 'Bolivia', 'BO', 'BOL', 68 ],
- [ 'Bonaire', 'BQ', 'BES', 535 ],
- [ 'Bosnia and Herzegovina', 'BA', 'BIH', 70 ],
- [ 'Botswana', 'BW', 'BWA', 72 ],
- [ 'Bouvet Island', 'BV', 'BVT', 74 ],
- [ 'Brazil', 'BR', 'BRA', 76 ],
- [ 'British Indian Ocean Territory', 'IO', 'IOT', 86 ],
- [ 'Brunei Darussalam', 'BN', 'BRN', 96 ],
- [ 'Bulgaria', 'BG', 'BGR', 100 ],
- [ 'Burkina Faso', 'BF', 'BFA', 854 ],
- [ 'Burundi', 'BI', 'BDI', 108 ],
- [ 'Cambodia', 'KH', 'KHM', 116 ],
- [ 'Cameroon', 'CM', 'CMR', 120 ],
- [ 'Canada', 'CA', 'CAN', 124 ],
- [ 'Cape Verde', 'CV', 'CPV', 132 ],
- [ 'Cayman Islands', 'KY', 'CYM', 136 ],
- [ 'Central African Republic', 'CF', 'CAF', 140 ],
- [ 'Chad', 'TD', 'TCD', 148 ],
- [ 'Chile', 'CL', 'CHL', 152 ],
- [ 'China', 'CN', 'CHN', 156 ],
- [ 'Christmas Island', 'CX', 'CXR', 162 ],
- [ 'Cocos (Keeling) Islands', 'CC', 'CCK', 166 ],
- [ 'Colombia', 'CO', 'COL', 170 ],
- [ 'Comoros', 'KM', 'COM', 174 ],
- [ 'Congo', 'CG', 'COG', 178 ],
- [ 'Democratic Republic of the Congo', 'CD', 'COD', 180 ],
- [ 'Cook Islands', 'CK', 'COK', 184 ],
- [ 'Costa Rica', 'CR', 'CRI', 188 ],
- [ 'Croatia', 'HR', 'HRV', 191 ],
- [ 'Cuba', 'CU', 'CUB', 192 ],
- [ 'Curaçao', 'CW', 'CUW', 531 ],
- [ 'Cyprus', 'CY', 'CYP', 196 ],
- [ 'Czech Republic', 'CZ', 'CZE', 203 ],
- [ 'Côte dIvoire', 'CI', 'CIV', 384 ],
- [ 'Denmark', 'DK', 'DNK', 208 ],
- [ 'Djibouti', 'DJ', 'DJI', 262 ],
- [ 'Dominica', 'DM', 'DMA', 212 ],
- [ 'Dominican Republic', 'DO', 'DOM', 214 ],
- [ 'Ecuador', 'EC', 'ECU', 218 ],
- [ 'Egypt', 'EG', 'EGY', 818 ],
- [ 'El Salvador', 'SV', 'SLV', 222 ],
- [ 'Equatorial Guinea', 'GQ', 'GNQ', 226 ],
- [ 'Eritrea', 'ER', 'ERI', 232 ],
- [ 'Estonia', 'EE', 'EST', 233 ],
- [ 'Ethiopia', 'ET', 'ETH', 231 ],
- [ 'Falkland Islands (Malvinas)', 'FK', 'FLK', 238 ],
- [ 'Faroe Islands', 'FO', 'FRO', 234 ],
- [ 'Fiji', 'FJ', 'FJI', 242 ],
- [ 'Finland', 'FI', 'FIN', 246 ],
- [ 'France', 'FR', 'FRA', 250 ],
- [ 'French Guiana', 'GF', 'GUF', 254 ],
- [ 'French Polynesia', 'PF', 'PYF', 258 ],
- [ 'French Southern Territories', 'TF', 'ATF', 260 ],
- [ 'Gabon', 'GA', 'GAB', 266 ],
- [ 'Gambia', 'GM', 'GMB', 270 ],
- [ 'Georgia', 'GE', 'GEO', 268 ],
- [ 'Germany', 'DE', 'DEU', 276 ],
- [ 'Ghana', 'GH', 'GHA', 288 ],
- [ 'Gibraltar', 'GI', 'GIB', 292 ],
- [ 'Greece', 'GR', 'GRC', 300 ],
- [ 'Greenland', 'GL', 'GRL', 304 ],
- [ 'Grenada', 'GD', 'GRD', 308 ],
- [ 'Guadeloupe', 'GP', 'GLP', 312 ],
- [ 'Guam', 'GU', 'GUM', 316 ],
- [ 'Guatemala', 'GT', 'GTM', 320 ],
- [ 'Guernsey', 'GG', 'GGY', 831 ],
- [ 'Guinea', 'GN', 'GIN', 324 ],
- [ 'Guinea-Bissau', 'GW', 'GNB', 624 ],
- [ 'Guyana', 'GY', 'GUY', 328 ],
- [ 'Haiti', 'HT', 'HTI', 332 ],
- [ 'Heard Island and McDonald Mcdonald Islands', 'HM', 'HMD', 334 ],
- [ 'Holy See (Vatican City State)', 'VA', 'VAT', 336 ],
- [ 'Honduras', 'HN', 'HND', 340 ],
- [ 'Hong Kong', 'HK', 'HKG', 344 ],
- [ 'Hungary', 'HU', 'HUN', 348 ],
- [ 'Iceland', 'IS', 'ISL', 352 ],
- [ 'India', 'IN', 'IND', 356 ],
- [ 'Indonesia', 'ID', 'IDN', 360 ],
- [ 'Iran, Islamic Republic of', 'IR', 'IRN', 364 ],
- [ 'Iraq', 'IQ', 'IRQ', 368 ],
- [ 'Ireland', 'IE', 'IRL', 372 ],
- [ 'Isle of Man', 'IM', 'IMN', 833 ],
- [ 'Israel', 'IL', 'ISR', 376 ],
- [ 'Italy', 'IT', 'ITA', 380 ],
- [ 'Jamaica', 'JM', 'JAM', 388 ],
- [ 'Japan', 'JP', 'JPN', 392 ],
- [ 'Jersey', 'JE', 'JEY', 832 ],
- [ 'Jordan', 'JO', 'JOR', 400 ],
- [ 'Kazakhstan', 'KZ', 'KAZ', 398 ],
- [ 'Kenya', 'KE', 'KEN', 404 ],
- [ 'Kiribati', 'KI', 'KIR', 296 ],
- [ 'Korea, Democratic People\'s Republic of', 'KP', 'PRK', 408 ],
- [ 'Korea, Republic of', 'KR', 'KOR', 410 ],
- [ 'Kuwait', 'KW', 'KWT', 414 ],
- [ 'Kyrgyzstan', 'KG', 'KGZ', 417 ],
- [ 'Lao People\'s Democratic Republic', 'LA', 'LAO', 418 ],
- [ 'Latvia', 'LV', 'LVA', 428 ],
- [ 'Lebanon', 'LB', 'LBN', 422 ],
- [ 'Lesotho', 'LS', 'LSO', 426 ],
- [ 'Liberia', 'LR', 'LBR', 430 ],
- [ 'Libya', 'LY', 'LBY', 434 ],
- [ 'Liechtenstein', 'LI', 'LIE', 438 ],
- [ 'Lithuania', 'LT', 'LTU', 440 ],
- [ 'Luxembourg', 'LU', 'LUX', 442 ],
- [ 'Macao', 'MO', 'MAC', 446 ],
- [ 'Macedonia, the Former Yugoslav Republic of', 'MK', 'MKD', 807 ],
- [ 'Madagascar', 'MG', 'MDG', 450 ],
- [ 'Malawi', 'MW', 'MWI', 454 ],
- [ 'Malaysia', 'MY', 'MYS', 458 ],
- [ 'Maldives', 'MV', 'MDV', 462 ],
- [ 'Mali', 'ML', 'MLI', 466 ],
- [ 'Malta', 'MT', 'MLT', 470 ],
- [ 'Marshall Islands', 'MH', 'MHL', 584 ],
- [ 'Martinique', 'MQ', 'MTQ', 474 ],
- [ 'Mauritania', 'MR', 'MRT', 478 ],
- [ 'Mauritius', 'MU', 'MUS', 480 ],
- [ 'Mayotte', 'YT', 'MYT', 175 ],
- [ 'Mexico', 'MX', 'MEX', 484 ],
- [ 'Micronesia, Federated States of', 'FM', 'FSM', 583 ],
- [ 'Moldova, Republic of', 'MD', 'MDA', 498 ],
- [ 'Monaco', 'MC', 'MCO', 492 ],
- [ 'Mongolia', 'MN', 'MNG', 496 ],
- [ 'Montenegro', 'ME', 'MNE', 499 ],
- [ 'Montserrat', 'MS', 'MSR', 500 ],
- [ 'Morocco', 'MA', 'MAR', 504 ],
- [ 'Mozambique', 'MZ', 'MOZ', 508 ],
- [ 'Myanmar', 'MM', 'MMR', 104 ],
- [ 'Namibia', 'NA', 'NAM', 516 ],
- [ 'Nauru', 'NR', 'NRU', 520 ],
- [ 'Nepal', 'NP', 'NPL', 524 ],
- [ 'Netherlands', 'NL', 'NLD', 528 ],
- [ 'New Caledonia', 'NC', 'NCL', 540 ],
- [ 'New Zealand', 'NZ', 'NZL', 554 ],
- [ 'Nicaragua', 'NI', 'NIC', 558 ],
- [ 'Niger', 'NE', 'NER', 562 ],
- [ 'Nigeria', 'NG', 'NGA', 566 ],
- [ 'Niue', 'NU', 'NIU', 570 ],
- [ 'Norfolk Island', 'NF', 'NFK', 574 ],
- [ 'Northern Mariana Islands', 'MP', 'MNP', 580 ],
- [ 'Norway', 'NO', 'NOR', 578 ],
- [ 'Oman', 'OM', 'OMN', 512 ],
- [ 'Pakistan', 'PK', 'PAK', 586 ],
- [ 'Palau', 'PW', 'PLW', 585 ],
- [ 'Palestine, State of', 'PS', 'PSE', 275 ],
- [ 'Panama', 'PA', 'PAN', 591 ],
- [ 'Papua New Guinea', 'PG', 'PNG', 598 ],
- [ 'Paraguay', 'PY', 'PRY', 600 ],
- [ 'Peru', 'PE', 'PER', 604 ],
- [ 'Philippines', 'PH', 'PHL', 608 ],
- [ 'Pitcairn', 'PN', 'PCN', 612 ],
- [ 'Poland', 'PL', 'POL', 616 ],
- [ 'Portugal', 'PT', 'PRT', 620 ],
- [ 'Puerto Rico', 'PR', 'PRI', 630 ],
- [ 'Qatar', 'QA', 'QAT', 634 ],
- [ 'Romania', 'RO', 'ROU', 642 ],
- [ 'Russian Federation', 'RU', 'RUS', 643 ],
- [ 'Rwanda', 'RW', 'RWA', 646 ],
- [ 'Reunion', 'RE', 'REU', 638 ],
- [ 'Saint Barthalemy', 'BL', 'BLM', 652 ],
- [ 'Saint Helena', 'SH', 'SHN', 654 ],
- [ 'Saint Kitts and Nevis', 'KN', 'KNA', 659 ],
- [ 'Saint Lucia', 'LC', 'LCA', 662 ],
- [ 'Saint Martin (French part)', 'MF', 'MAF', 663 ],
- [ 'Saint Pierre and Miquelon', 'PM', 'SPM', 666 ],
- [ 'Saint Vincent and the Grenadines', 'VC', 'VCT', 670 ],
- [ 'Samoa', 'WS', 'WSM', 882 ],
- [ 'San Marino', 'SM', 'SMR', 674 ],
- [ 'Sao Tome and Principe', 'ST', 'STP', 678 ],
- [ 'Saudi Arabia', 'SA', 'SAU', 682 ],
- [ 'Senegal', 'SN', 'SEN', 686 ],
- [ 'Serbia', 'RS', 'SRB', 688 ],
- [ 'Seychelles', 'SC', 'SYC', 690 ],
- [ 'Sierra Leone', 'SL', 'SLE', 694 ],
- [ 'Singapore', 'SG', 'SGP', 702 ],
- [ 'Sint Maarten (Dutch part)', 'SX', 'SXM', 534 ],
- [ 'Slovakia', 'SK', 'SVK', 703 ],
- [ 'Slovenia', 'SI', 'SVN', 705 ],
- [ 'Solomon Islands', 'SB', 'SLB', 90 ],
- [ 'Somalia', 'SO', 'SOM', 706 ],
- [ 'South Africa', 'ZA', 'ZAF', 710 ],
- [ 'South Georgia and the South Sandwich Islands', 'GS', 'SGS', 239 ],
- [ 'South Sudan', 'SS', 'SSD', 728 ],
- [ 'Spain', 'ES', 'ESP', 724 ],
- [ 'Sri Lanka', 'LK', 'LKA', 144 ],
- [ 'Sudan', 'SD', 'SDN', 729 ],
- [ 'Suriname', 'SR', 'SUR', 740 ],
- [ 'Svalbard and Jan Mayen', 'SJ', 'SJM', 744 ],
- [ 'Swaziland', 'SZ', 'SWZ', 748 ],
- [ 'Sweden', 'SE', 'SWE', 752 ],
- [ 'Switzerland', 'CH', 'CHE', 756 ],
- [ 'Syrian Arab Republic', 'SY', 'SYR', 760 ],
- [ 'Taiwan, Province of China', 'TW', 'TWN', 158 ],
- [ 'Tajikistan', 'TJ', 'TJK', 762 ],
- [ 'United Republic of Tanzania', 'TZ', 'TZA', 834 ],
- [ 'Thailand', 'TH', 'THA', 764 ],
- [ 'Timor-Leste', 'TL', 'TLS', 626 ],
- [ 'Togo', 'TG', 'TGO', 768 ],
- [ 'Tokelau', 'TK', 'TKL', 772 ],
- [ 'Tonga', 'TO', 'TON', 776 ],
- [ 'Trinidad and Tobago', 'TT', 'TTO', 780 ],
- [ 'Tunisia', 'TN', 'TUN', 788 ],
- [ 'Turkey', 'TR', 'TUR', 792 ],
- [ 'Turkmenistan', 'TM', 'TKM', 795 ],
- [ 'Turks and Caicos Islands', 'TC', 'TCA', 796 ],
- [ 'Tuvalu', 'TV', 'TUV', 798 ],
- [ 'Uganda', 'UG', 'UGA', 800 ],
- [ 'Ukraine', 'UA', 'UKR', 804 ],
- [ 'United Arab Emirates', 'AE', 'ARE', 784 ],
- [ 'United Kingdom', 'GB', 'GBR', 826 ],
- [ 'United States', 'US', 'USA', 840 ],
- [ 'United States Minor Outlying Islands', 'UM', 'UMI', 581 ],
- [ 'Uruguay', 'UY', 'URY', 858 ],
- [ 'Uzbekistan', 'UZ', 'UZB', 860 ],
- [ 'Vanuatu', 'VU', 'VUT', 548 ],
- [ 'Venezuela', 'VE', 'VEN', 862 ],
- [ 'Viet Nam', 'VN', 'VNM', 704 ],
- [ 'British Virgin Islands', 'VG', 'VGB', 92 ],
- [ 'US Virgin Islands', 'VI', 'VIR', 850 ],
- [ 'Wallis and Futuna', 'WF', 'WLF', 876 ],
- [ 'Western Sahara', 'EH', 'ESH', 732 ],
- [ 'Yemen', 'YE', 'YEM', 887 ],
- [ 'Zambia', 'ZM', 'ZMB', 894 ],
- [ 'Zimbabwe', 'ZW', 'ZWE', 716 ],
- [ 'Aland Islands', 'AX', 'ALA', 248 ]
- ];
-
- var bod = $('#codes-body');
-
- function addRow(name, a2, a3, num) {
- bod.append('<tr>' +
- '<td>'+ name + '</td>' +
- '<td class="code">'+ a2 + '</td>' +
- '<td class="code">'+ a3 + '</td>' +
- '<td class="num">'+ num + '</td>' +
- '</tr>');
- }
-
- function loadRows() {
- data.forEach(function (d) {
- if (d.length) {
- addRow(d[0], d[1], d[2], d[3]);
- }
- });
- }
-
- loadRows();
-</script>
-
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/_sdh/topojson/samerica.html b/framework/src/onos/web/gui/src/main/webapp/_sdh/topojson/samerica.html
deleted file mode 100644
index 15bb331e..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/_sdh/topojson/samerica.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!--
- -- Sample code to show extracting country data from a countries TopoJSON
- -- file and projecting it into an SVG layer.
- --
- -- See: http://bl.ocks.org/pnavarrc/62047b5638d624cfa9cb
- -->
-<html>
-<head>
- <title>S America</title>
-
- <script charset="utf-8" src="../../tp/d3.min.js"></script>
- <script charset="utf-8" src="../../tp/topojson.v1.min.js"></script>
-
- <style>
- svg {
- border: 1px solid #888;
- }
- .country {
- fill: #bcd1ff;
- stroke: #7c79e6;
- stroke-width: 1;
- }
- </style>
-</head>
-
-<body>
- <div id="map"></div>
-
- <script>
- var datapath = '../../data/map/countries.topojson',
- height = 500,
- width = 500;
-
- // create geographic projection
- var projection = d3.geo.mercator()
- .translate([width/2, height/2]);
-
- // configure path generator
- var pathGenerator = d3.geo.path()
- .projection(projection);
-
- var div = d3.select('#map'),
- svg = div.append('svg'),
- grp = svg.append('g');
-
- svg.attr('width', width).attr('height', height);
-
- d3.json(datapath, function (error, data) {
- if (error) {
- console.error(error);
- throw error;
- }
-
- var features = topojson.feature(data, data.objects.countries).features;
-
- // S.America
- var southAmerica = features.filter(function (country) {
- return country.properties.continent === 'South America';
- });
-
- var southAmericaFeature = {
- type: 'FeatureCollection',
- features: southAmerica
- };
-
- // compute bounds and centroid
- var bounds = d3.geo.bounds(southAmericaFeature),
- center = d3.geo.centroid(southAmericaFeature);
-
- // compute angular distance between bound corners
- var distance = d3.geo.distance(bounds[0], bounds[1]),
- scale = height / distance / Math.sqrt(2);
-
- // update projection
- projection.scale(scale).center(center);
-
- // draw
- var countries = grp.selectAll('path.country')
- .data([southAmericaFeature]);
- countries.enter().append('path').classed('country', true);
- countries.attr('d', pathGenerator);
- countries.exit().remove();
- });
- </script>
-</body>
-
-</html> \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/README.txt b/framework/src/onos/web/gui/src/main/webapp/app/README.txt
deleted file mode 100644
index d5f94d87..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/README.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-# Main Application
-
-index.html is the main launch point for the application.
-
-fw/ contains framework related code
-
-view/ contains view related code \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/common.css b/framework/src/onos/web/gui/src/main/webapp/app/common.css
deleted file mode 100644
index 3a181afc..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/common.css
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- common -- CSS file
- */
-
-#view h2 {
- margin: 0;
- /* separated out so that other padding doesn't get clobbered */
- padding-top: 20px;
- padding-bottom: 20px;
-}
-
-.clickable {
- cursor: pointer;
-}
-
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/directives.js b/framework/src/onos/web/gui/src/main/webapp/app/directives.js
deleted file mode 100644
index 0b4f4957..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/directives.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- General Purpose Angular directives defined here.
- */
-
-(function () {
- 'use strict';
-
- angular.module('onosApp')
-
- // Create a resize directive, that we can apply to elements
- // so that they can respond to window resize events.
- .directive('resize', ['$window', 'FnService', function ($window, fs) {
- return {
- scope: {
- offsetHeight: '@',
- offsetWidth: '@',
- notifier: '&'
- },
- link: function (scope, element) {
- var elem = d3.select(element[0]);
- scope.$watchCollection(function () {
- return {
- h: $window.innerHeight,
- w: $window.innerWidth
- };
- }, function () {
- var offH = scope.offsetHeight || 0,
- offW = scope.offsetWidth || 0,
- wsz = fs.windowSize(offH, offW);
-
- elem.style({
- height: wsz.height + 'px',
- width: wsz.width + 'px'
- });
-
- if (fs.isF(scope.notifier)) {
- scope.notifier();
- }
- });
-
- angular.element($window).bind('resize', function () {
- scope.$apply();
- });
- }
- };
- }])
-
- .directive('ngRepeatComplete', [function () {
- return function (scope) {
- if (scope.$last) {
- scope.$emit('ngRepeatComplete');
- scope.$broadcast('ngRepeatComplete');
- }
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/README.txt b/framework/src/onos/web/gui/src/main/webapp/app/fw/README.txt
deleted file mode 100644
index 626547b2..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/README.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-# Framework related code
-
-- layer
- - Flash Service (transient messages)
- - Panel Service (floating panels)
- - Quick Help Service (key bindings, mouse gestures)
- - Veil Service (loss of server connection)
-
-- mast
- - Masthead Service
-
-- nav
- - Navigation Service (navigation menu)
-
-- remote
- - REST Service
- - URL functin Service
- - Web Socket Service
- - Web Socket Event Service
- - Web Socket encapsulation
-
- - (Login Service) << planned
-
-- svg
- - GeoData Service (TopoJSON map functions)
- - Glyph Service
- - Icon Service
- - Map Service
- - SVG Utilities Service
- - Zoom Service
-
-- util
- - General Functions
- - Key Handler
- - User Preference Service
- - Randomization Service
- - Theme Service
-
-- widget
- - Button Service
- - Table Service (table styling directives)
- - Table Builder Service
- - Toolbar Service
- - Tooltip Service
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/flash.css b/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/flash.css
deleted file mode 100644
index 02064625..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/flash.css
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Flash Service -- CSS file
- */
-
-#flash {
- z-index: 1400;
-}
-
-#flash svg {
- position: absolute;
- bottom: 0;
- opacity: 0.8;
-}
-
-.light #flash svg g.flashItem rect {
- fill: #ccc;
-}
-.dark #flash svg g.flashItem rect {
- fill: #555;
-}
-
-#flash svg g.flashItem text {
- stroke: none;
- text-anchor: middle;
- alignment-baseline: middle;
- font-size: 16pt;
-}
-.light #flash svg g.flashItem text {
- fill: #333;
-}
-.dark #flash svg g.flashItem text {
- fill: #999;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/flash.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/flash.js
deleted file mode 100644
index 0d95b774..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/flash.js
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Layer -- Flash Service
-
- Provides a mechanism to flash short informational messages to the screen
- to alert the user of something, e.g. "Hosts visible" or "Hosts hidden".
- */
-(function () {
- 'use strict';
-
- // injected references
- var $log, $timeout;
-
- // configuration
- var defaultSettings = {
- fade: 200,
- showFor: 1200
- },
- w = '100%',
- h = 200,
- xpad = 20,
- ypad = 10,
- rx = 10,
- vbox = '-200 -' + (h/2) + ' 400 ' + h;
-
- // internal state
- var settings,
- timer = null,
- data = [],
- enabled;
-
- // DOM elements
- var flashDiv, svg;
-
-
- function computeBox(el) {
- var text = el.select('text'),
- box = text.node().getBBox();
-
- // center
- box.x = -box.width / 2;
- box.y = -box.height / 2;
-
- // add some padding
- box.x -= xpad;
- box.width += xpad * 2;
- box.y -= ypad;
- box.height += ypad * 2;
-
- return box;
- }
-
- function updateFlash() {
- if (!svg) {
- svg = flashDiv.append('svg').attr({
- width: w,
- height: h,
- viewBox: vbox
- });
- }
-
- var items = svg.selectAll('.flashItem')
- .data(data);
-
- // this is when there is an existing item
- items.each(function (msg) {
- var el = d3.select(this),
- box;
-
- el.select('text').text(msg);
- box = computeBox(el);
- el.select('rect').attr(box);
- });
-
-
- // this is when there is no existing item
- var entering = items.enter()
- .append('g')
- .attr({
- class: 'flashItem',
- opacity: 0
- })
- .transition()
- .duration(settings.fade)
- .attr('opacity', 1);
-
- entering.each(function (msg) {
- var el = d3.select(this),
- box;
-
- el.append('rect').attr('rx', rx);
- el.append('text').text(msg);
- box = computeBox(el);
- el.select('rect').attr(box);
- });
-
- items.exit()
- .transition()
- .duration(settings.fade)
- .attr('opacity', 0)
- .remove();
-
- if (svg && data.length === 0) {
- svg.transition()
- .delay(settings.fade + 10)
- .remove();
- svg = null;
- }
- }
-
- function flash(msg) {
- if (!enabled) return;
-
- if (timer) {
- $timeout.cancel(timer);
- }
-
- timer = $timeout(function () {
- data = [];
- updateFlash();
- }, settings.showFor);
-
- data = [msg];
- updateFlash();
- }
-
- function enable(b) {
- enabled = !!b;
- }
-
- angular.module('onosLayer')
- .factory('FlashService', ['$log', '$timeout',
- function (_$log_, _$timeout_) {
- $log = _$log_;
- $timeout = _$timeout_;
-
- function initFlash(opts) {
- settings = angular.extend({}, defaultSettings, opts);
- flashDiv = d3.select('#flash');
- enabled = true;
- }
-
- return {
- initFlash: initFlash,
- flash: flash,
- enable: enable
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/layer.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/layer.js
deleted file mode 100644
index a47f53e0..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/layer.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Layers Module
- */
-(function () {
- 'use strict';
-
- angular.module('onosLayer', ['onosUtil']);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/panel.css b/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/panel.css
deleted file mode 100644
index ded05cf1..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/panel.css
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Panel Service -- CSS file
- */
-
-.floatpanel {
- position: absolute;
- z-index: 100;
- display: block;
- top: 64px;
- width: 200px;
- right: -220px;
- opacity: 0;
-
- padding: 10px;
- font-size: 10pt;
-
- -moz-border-radius: 6px;
- border-radius: 6px;
-}
-
-.floatpanel.dialog {
- top: 180px;
-}
-
-html[data-platform='iPad'] .floatpanel {
- top: 80px;
-}
-
-.light .floatpanel {
- background-color: rgba(255,255,255,0.8);
- color: black;
- box-shadow: 0 2px 12px #777;
-}
-.dark .floatpanel {
- background-color: rgba(50,50,50,0.8);
- color: #ccc;
- box-shadow: 0 2px 12px #000;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/panel.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/panel.js
deleted file mode 100644
index 10f04813..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/panel.js
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Layer -- Panel Service
- */
-(function () {
- 'use strict';
-
- var $log, fs;
-
- var defaultSettings = {
- edge: 'right',
- width: 200,
- margin: 20,
- hideMargin: 20,
- xtnTime: 750,
- fade: true
- };
-
- var panels,
- panelLayer;
-
-
- function init() {
- panelLayer = d3.select('#floatpanels');
- panelLayer.html('');
- panels = {};
- }
-
- // helpers for panel
- function noop() {}
-
- function margin(p) {
- return p.settings.margin;
- }
- function hideMargin(p) {
- return p.settings.hideMargin;
- }
- function noPx(p, what) {
- return Number(p.el.style(what).replace(/px$/, ''));
- }
- function widthVal(p) {
- return noPx(p, 'width');
- }
- function heightVal(p) {
- return noPx(p, 'height');
- }
- function pxShow(p) {
- return margin(p) + 'px';
- }
- function pxHide(p) {
- return (-hideMargin(p) - widthVal(p) - (noPx(p, 'padding') * 2)) + 'px';
- }
-
- function makePanel(id, settings) {
- var p = {
- id: id,
- settings: settings,
- on: false,
- el: null
- },
- api = {
- show: showPanel,
- hide: hidePanel,
- toggle: togglePanel,
- empty: emptyPanel,
- append: appendPanel,
- width: panelWidth,
- height: panelHeight,
- isVisible: panelIsVisible,
- classed: classed,
- el: panelEl
- };
-
- p.el = panelLayer.append('div')
- .attr('id', id)
- .attr('class', 'floatpanel')
- .style('opacity', 0);
-
- // has to be called after el is set
- p.el.style(p.settings.edge, pxHide(p));
- panelWidth(p.settings.width);
- if (p.settings.height) {
- panelHeight(p.settings.height);
- }
-
- panels[id] = p;
-
- function showPanel(cb) {
- var endCb = fs.isF(cb) || noop;
- p.on = true;
- p.el.transition().duration(p.settings.xtnTime)
- .each('end', endCb)
- .style(p.settings.edge, pxShow(p))
- .style('opacity', 1);
- }
-
- function hidePanel(cb) {
- var endCb = fs.isF(cb) || noop,
- endOpacity = p.settings.fade ? 0 : 1;
- p.on = false;
- p.el.transition().duration(p.settings.xtnTime)
- .each('end', endCb)
- .style(p.settings.edge, pxHide(p))
- .style('opacity', endOpacity);
- }
-
- function togglePanel(cb) {
- if (p.on) {
- hidePanel(cb);
- } else {
- showPanel(cb);
- }
- return p.on;
- }
-
- function emptyPanel() {
- return p.el.html('');
- }
-
- function appendPanel(what) {
- return p.el.append(what);
- }
-
- function panelWidth(w) {
- if (w === undefined) {
- return widthVal(p);
- }
- p.el.style('width', w + 'px');
- }
-
- function panelHeight(h) {
- if (h === undefined) {
- return heightVal(p);
- }
- p.el.style('height', h + 'px');
- }
-
- function panelIsVisible() {
- return p.on;
- }
-
- function classed(cls, bool) {
- return p.el.classed(cls, bool);
- }
-
- function panelEl() {
- return p.el;
- }
-
- return api;
- }
-
- function removePanel(id) {
- panelLayer.select('#' + id).remove();
- delete panels[id];
- }
-
- angular.module('onosLayer')
- .factory('PanelService',
- ['$log', '$window', 'FnService',
-
- function (_$log_, _$window_, _fs_) {
- $log = _$log_;
- fs = _fs_;
-
- function createPanel(id, opts) {
- var settings = angular.extend({}, defaultSettings, opts);
- if (!id) {
- $log.warn('createPanel: no ID given');
- return null;
- }
- if (panels[id]) {
- $log.warn('Panel with ID "' + id + '" already exists');
- return null;
- }
- if (fs.debugOn('widget')) {
- $log.debug('creating panel:', id, settings);
- }
- return makePanel(id, settings);
- }
-
- function destroyPanel(id) {
- if (panels[id]) {
- if (fs.debugOn('widget')) {
- $log.debug('destroying panel:', id);
- }
- removePanel(id);
- } else {
- if (fs.debugOn('widget')) {
- $log.debug('no panel to destroy:', id);
- }
- }
- }
-
- return {
- init: init,
- createPanel: createPanel,
- destroyPanel: destroyPanel
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/quickhelp.css b/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/quickhelp.css
deleted file mode 100644
index bb806d8a..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/quickhelp.css
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Quick Help Service -- CSS file
- */
-
-#quickhelp {
- z-index: 1300;
-}
-
-#quickhelp svg {
- position: absolute;
- top: 180px;
- opacity: 1;
-}
-
-#quickhelp svg g.help rect {
- fill: black;
- opacity: 0.7;
-}
-
-#quickhelp svg text.title {
- font-size: 10pt;
- font-style: italic;
- text-anchor: middle;
- fill: #999;
-}
-
-#quickhelp svg g.keyItem {
- fill: white;
-}
-
-#quickhelp svg g line.qhrowsep {
- stroke: #888;
- stroke-dasharray: 2 2;
-}
-
-#quickhelp svg text {
- font-size: 7pt;
- alignment-baseline: middle;
-}
-
-#quickhelp svg text.key {
- fill: #add;
-}
-
-#quickhelp svg text.desc {
- fill: #ddd;
-}
-
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/quickhelp.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/quickhelp.js
deleted file mode 100644
index a25cf68d..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/quickhelp.js
+++ /dev/null
@@ -1,387 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Layer -- Quick Help Service
-
- Provides a mechanism to display key bindings and mouse gesture notes.
- */
-(function () {
- 'use strict';
-
- // injected references
- var $log, fs, sus;
-
- // configuration
- var defaultSettings = {
- fade: 500
- },
- w = '100%',
- h = '80%',
- vbox = '-200 0 400 400',
- pad = 10,
- offy = 45,
- sepYDelta = 20,
- colXDelta = 16,
- yTextSpc = 12,
- offDesc = 8;
-
- // internal state
- var settings,
- data = [],
- yCount;
-
- // DOM elements
- var qhdiv, svg, pane, rect, items;
-
- // key-logical-name to key-display lookup..
- var keyDisp = {
- equals: '=',
- slash: '/',
- backSlash: '\\',
- backQuote: '`',
- leftArrow: 'L-arrow',
- upArrow: 'U-arrow',
- rightArrow: 'R-arrow',
- downArrow: 'D-arrow'
- };
-
- // list of needed bindings to use in aggregateData
- var neededBindings = [
- 'globalKeys', 'globalFormat', 'viewKeys', 'viewGestures'
- ];
-
- // ===========================================
- // === Function Definitions ===
-
- function mkKeyDisp(id) {
- var v = keyDisp[id] || id;
- return fs.cap(v);
- }
-
- function addSeparator(el, i) {
- var y = sepYDelta/2 - 5;
- el.append('line')
- .attr({ 'class': 'qhrowsep', x1: 0, y1: y, x2: 0, y2: y });
- }
-
- function addContent(el, data, ri) {
- var xCount = 0,
- clsPfx = 'qh-r' + ri + '-c';
-
- function addColumn(el, c, i) {
- var cls = clsPfx + i,
- oy = 0,
- aggKey = el.append('g').attr('visibility', 'hidden'),
- gcol = el.append('g').attr({
- 'class': cls,
- transform: sus.translate(xCount, 0)
- });
-
- c.forEach(function (j) {
- var k = j[0],
- v = j[1];
-
- if (k !== '-') {
- aggKey.append('text').text(k);
-
- gcol.append('text').text(k)
- .attr({
- 'class': 'key',
- y: oy
- });
- gcol.append('text').text(v)
- .attr({
- 'class': 'desc',
- y: oy
- });
- }
-
- oy += yTextSpc;
- });
-
- // adjust position of descriptions, based on widest key
- var kbox = aggKey.node().getBBox(),
- ox = kbox.width + offDesc;
- gcol.selectAll('.desc').attr('x', ox);
- aggKey.remove();
-
- // now update x-offset for next column
- var bbox = gcol.node().getBBox();
- xCount += bbox.width + colXDelta;
- }
-
- data.forEach(function (d, i) {
- addColumn(el, d, i);
- });
-
- // finally, return the height of the row..
- return el.node().getBBox().height;
- }
-
- function updateKeyItems() {
- var rows = items.selectAll('.qhRow').data(data);
-
- yCount = offy;
-
- var entering = rows.enter()
- .append('g')
- .attr({
- 'class': 'qhrow'
- });
-
- entering.each(function (r, i) {
- var el = d3.select(this),
- sep = r.type === 'sep',
- dy;
-
- el.attr('transform', sus.translate(0, yCount));
-
- if (sep) {
- addSeparator(el, i);
- yCount += sepYDelta;
- } else {
- dy = addContent(el, r.data, i);
- yCount += dy;
- }
- });
-
- // size the backing rectangle
- var ibox = items.node().getBBox(),
- paneW = ibox.width + pad * 2,
- paneH = ibox.height + offy;
-
- items.selectAll('.qhrowsep').attr('x2', ibox.width);
- items.attr('transform', sus.translate(-paneW/2, -pad));
- rect.attr({
- width: paneW,
- height: paneH,
- transform: sus.translate(-paneW/2-pad, 0)
- });
-
- }
-
- function checkFmt(fmt) {
- // should be a single array of keys,
- // or array of arrays of keys (one per column).
- // return null if there is a problem.
- var a = fs.isA(fmt),
- n = a && a.length,
- ns = 0,
- na = 0;
-
- if (n) {
- // it is an array which has some content
- a.forEach(function (d) {
- fs.isA(d) && na++;
- fs.isS(d) && ns++;
- });
- if (na === n || ns === n) {
- // all arrays or all strings...
- return a;
- }
- }
- return null;
- }
-
- function buildBlock(map, fmt) {
- var b = [];
- fmt.forEach(function (k) {
- var v = map.get(k),
- a = fs.isA(v),
- d = (a && a[1]);
-
- // '-' marks a separator; d is the description
- if (k === '-' || d) {
- b.push([mkKeyDisp(k), d]);
- }
- });
- return b;
- }
-
- function emptyRow() {
- return { type: 'row', data: [] };
- }
-
- function mkArrRow(fmt) {
- var d = emptyRow();
- d.data.push(fmt);
- return d;
- }
-
- function mkColumnarRow(map, fmt) {
- var d = emptyRow();
- fmt.forEach(function (a) {
- d.data.push(buildBlock(map, a));
- });
- return d;
- }
-
- function mkMapRow(map, fmt) {
- var d = emptyRow();
- d.data.push(buildBlock(map, fmt));
- return d;
- }
-
- function addRow(row) {
- var d = row || { type: 'sep' };
- data.push(d);
- }
-
- function aggregateData(bindings) {
- var hf = '_helpFormat',
- gmap = d3.map(bindings.globalKeys),
- gfmt = bindings.globalFormat,
- vmap = d3.map(bindings.viewKeys),
- vgest = bindings.viewGestures,
- vfmt, vkeys;
-
- // filter out help format entry
- vfmt = checkFmt(vmap.get(hf));
- vmap.remove(hf);
-
- // if bad (or no) format, fallback to sorted keys
- if (!vfmt) {
- vkeys = vmap.keys();
- vfmt = vkeys.sort();
- }
-
- data = [];
-
- addRow(mkMapRow(gmap, gfmt));
- addRow();
- addRow(fs.isA(vfmt[0]) ? mkColumnarRow(vmap, vfmt) : mkMapRow(vmap, vfmt));
- addRow();
- addRow(mkArrRow(vgest));
- }
-
-
- function popBind(bindings) {
- pane = svg.append('g')
- .attr({
- class: 'help',
- opacity: 0
- });
-
- rect = pane.append('rect')
- .attr('rx', 8);
-
- pane.append('text')
- .text('Quick Help')
- .attr({
- class: 'title',
- dy: '1.2em',
- transform: sus.translate(-pad,0)
- });
-
- items = pane.append('g');
- aggregateData(bindings);
- updateKeyItems();
-
- _fade(1);
- }
-
- function fadeBindings() {
- _fade(0);
- }
-
- function _fade(o) {
- svg.selectAll('g.help')
- .transition()
- .duration(settings.fade)
- .attr('opacity', o);
- }
-
- function addSvg() {
- svg = qhdiv.append('svg')
- .attr({
- width: w,
- height: h,
- viewBox: vbox
- });
- }
-
- function removeSvg() {
- svg.transition()
- .delay(settings.fade + 20)
- .remove();
- }
-
- function goodBindings(bindings) {
- var warnPrefix = 'Quickhelp Service: showQuickHelp(), ';
- if (!bindings || !fs.isO(bindings) || fs.isEmptyObject(bindings)) {
- $log.warn(warnPrefix + 'invalid bindings object');
- return false;
- }
- if (!(neededBindings.every(function (key) { return key in bindings; }))) {
- $log.warn(
- warnPrefix +
- 'needed bindings for help panel not provided:',
- neededBindings
- );
- return false
- }
- return true;
- }
-
- // ===========================================
- // === Module Definition ===
-
- angular.module('onosLayer')
- .factory('QuickHelpService',
- ['$log', 'FnService', 'SvgUtilService',
-
- function (_$log_, _fs_, _sus_) {
- $log = _$log_;
- fs = _fs_;
- sus = _sus_;
-
- function initQuickHelp(opts) {
- settings = angular.extend({}, defaultSettings, fs.isO(opts));
- qhdiv = d3.select('#quickhelp');
- }
-
- function showQuickHelp(bindings) {
- svg = qhdiv.select('svg');
- if (!goodBindings(bindings)) {
- return null;
- }
- if (svg.empty()) {
- addSvg();
- popBind(bindings);
- } else {
- hideQuickHelp();
- }
- }
-
- function hideQuickHelp() {
- svg = qhdiv.select('svg');
- if (!svg.empty()) {
- fadeBindings();
- removeSvg();
- return true;
- }
- return false;
- }
-
- return {
- initQuickHelp: initQuickHelp,
- showQuickHelp: showQuickHelp,
- hideQuickHelp: hideQuickHelp
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/veil.css b/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/veil.css
deleted file mode 100644
index afef94ac..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/veil.css
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Veil Service -- CSS file
- */
-
-#veil {
- z-index: 5000;
- display: none;
- position: absolute;
- top: 0;
- left: 0;
-}
-
-.light #veil {
- background-color: rgba(0,0,0,0.75);
-}
-.dark #veil {
- background-color: rgba(64,64,64,0.75);
-}
-
-#veil .msg {
- position: absolute;
- padding: 60px;
-}
-
-#veil .msg p {
- display: block;
- font-size: 14pt;
- font-style: italic;
- color: #ddd;
-}
-
-#veil svg .glyph {
- fill: #222;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/veil.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/veil.js
deleted file mode 100644
index fc0530af..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/layer/veil.js
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Layer -- Veil Service
-
- Provides a mechanism to display an overlaying div with information.
- Used mainly for web socket connection interruption.
- */
-(function () {
- 'use strict';
-
- // injected references
- var $log, $route, fs, ks, gs;
-
- var veil;
-
- function init() {
- var wSize = fs.windowSize(),
- ww = wSize.width,
- wh = wSize.height,
- shrink = wh * 0.3,
- birdDim = wh - shrink,
- birdCenter = (ww - birdDim) / 2,
- svg;
-
- veil = d3.select('#veil');
-
- svg = veil.select('svg').attr({
- width: ww,
- height: wh
- }).style('opacity', 0.2);
-
- gs.addGlyph(svg, 'bird', birdDim, false, [birdCenter, shrink/2]);
- }
-
- // msg should be an array of strings
- function show(msg) {
- var msgs = fs.isA(msg) || [msg],
- pdiv = veil.select('.msg');
- pdiv.selectAll('p').remove();
-
- msgs.forEach(function (line) {
- pdiv.append('p').text(line);
- });
-
- veil.style('display', 'block');
- ks.enableKeys(false);
- }
-
- function hide() {
- veil.style('display', 'none');
- ks.enableKeys(true);
- }
-
- // function that only invokes the veil if the caller is the current view
- // TODO: review - is this deprecated ?
- function lostServer(ctrlName, msg) {
- if ($route.current.$$route.controller === ctrlName) {
- $log.debug('VEIL-service: ', ctrlName);
- show(msg)
- } else {
- $log.debug('VEIL-service: IGNORING ', ctrlName);
- }
- }
-
- angular.module('onosLayer')
- .factory('VeilService',
- ['$log', '$route', 'FnService', 'KeyService', 'GlyphService',
-
- function (_$log_, _$route_, _fs_, _ks_, _gs_) {
- $log = _$log_;
- $route = _$route_;
- fs = _fs_;
- ks = _ks_;
- gs = _gs_;
-
- return {
- init: init,
- show: show,
- hide: hide,
- lostServer: lostServer
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/mast/mast.css b/framework/src/onos/web/gui/src/main/webapp/app/fw/mast/mast.css
deleted file mode 100644
index 2e86e86d..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/mast/mast.css
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Masthead -- CSS file
- */
-
-#mast {
- height: 36px;
- padding: 4px;
- vertical-align: baseline;
-}
-
-html[data-platform='iPad'] #mast {
- padding-top: 16px;
-}
-
-.light #mast {
- background-color: #bbb;
- box-shadow: 0 2px 8px #777;
-}
-.dark #mast {
- background-color: #444;
- box-shadow: 0 2px 8px #222;
-}
-
-#mast .nav-menu-button {
- width: 30px;
- height: 30px;
- margin-left: 8px;
- margin-bottom: 4px;
- cursor: pointer;
-}
-.light #mast .nav-menu-button:hover {
- background-color: #ddd;
-}
-.dark #mast .nav-menu-button:hover {
- background-color: #777;
-}
-
-#mast img.logo {
- height: 38px;
- padding-left: 8px;
- padding-right: 8px;
-}
-
-#mast img.logo:hover {
- /* need something better */
- /*background-color: #888;*/
-}
-
-#mast .title {
- font-size: 14pt;
- font-style: italic;
- vertical-align: 12px;
-}
-
-.light #mast .title {
- color: #369;
-}
-.dark #mast .title {
- color: #eee;
-}
-
-#mast-right {
- display: inline-block;
- padding-top: 8px;
- padding-right: 16px;
- float: right;
- /*border: 1px solid red;*/
-}
-
-#mast-right a {
- font-size: 12pt;
- font-style: normal;
- font-weight: bold;
- text-decoration: none;
-}
-
-.light #mast-right a {
- color: #369;
-}
-.dark #mast-right a {
- color: #eee;
-}
-
-#mast-right a:hover {
- color: #CE5650;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/mast/mast.html b/framework/src/onos/web/gui/src/main/webapp/app/fw/mast/mast.html
deleted file mode 100644
index 5bb488a8..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/mast/mast.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<!-- Masthead partial HTML -->
-<img class="nav-menu-button" src="data/img/nav-menu.png"
- ng-click="mastCtrl.toggleNav()"></div>
-<img class="logo" src="data/img/onos-logo.png">
-<span class="title">Open Network Operating System</span>
-<div id="mast-right"><a href="rs/logout">logout</a></div>
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/mast/mast.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/mast/mast.js
deleted file mode 100644
index 1cde58c7..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/mast/mast.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Masthead Module
- */
-(function () {
- 'use strict';
-
- // injected services
- var $log;
-
- // configuration
- var mastHeight = 36,
- padMobile = 16;
-
- angular.module('onosMast', ['onosNav'])
- .controller('MastCtrl', ['$log', 'NavService', function (_$log_, ns) {
- var self = this;
-
- $log = _$log_;
-
- // initialize mast controller here...
- self.radio = null;
-
- // delegate to NavService
- self.toggleNav = function () {
- ns.toggleNav();
- };
-
- $log.log('MastCtrl has been created');
- }])
-
- // also define a service to allow lookup of mast height.
- .factory('MastService', ['FnService', function (fs) {
- return {
- mastHeight: function () {
- return fs.isMobile() ? mastHeight + padMobile : mastHeight;
- }
- }
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/nav/nav.css b/framework/src/onos/web/gui/src/main/webapp/app/fw/nav/nav.css
deleted file mode 100644
index 4d2c4e91..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/nav/nav.css
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Navigation -- CSS file
- */
-
-#nav {
- position: absolute;
- top: 45px;
- left: 1px;
- padding: 0;
- z-index: 3000;
- visibility: hidden;
-}
-
-html[data-platform='iPad'] #nav {
- top: 57px;
-}
-
-.light #nav {
- background-color: #bbb;
- box-shadow: 0 2px 8px #777;
-}
-.dark #nav {
- background-color: #444;
- box-shadow: 0 2px 8px #111;
-}
-
-#nav .nav-hdr {
- font-style: italic;
- padding: 6px 8px 6px 8px;
-}
-
-.light #nav .nav-hdr {
- color: #ddd;
- border-bottom: solid 1px #999;
- background-color: #aaa;
-}
-.dark #nav .nav-hdr {
- color: #888;
- border-bottom: solid 1px #444;
- background-color: #555;
-}
-
-#nav a {
- text-decoration: none;
- font-size: 14pt;
- display: block;
- padding: 8px 16px 6px 12px;
-}
-
-.light #nav a {
- color: #369;
- border-bottom: solid #ccc 1px;
-}
-.dark #nav a {
- color: #eee;
- border-bottom: solid #333 1px;
-}
-
-.light #nav a:hover {
- background-color: #ddd;
-}
-.dark #nav a:hover {
- background-color: #777;
-}
-
-#nav a div {
- display: inline-block;
- vertical-align: middle;
- padding-right: 4px;
-}
-
-#nav a div svg.embeddedIcon g.icon .glyph {
- fill: #c66;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/nav/nav.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/nav/nav.js
deleted file mode 100644
index 36ef599e..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/nav/nav.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Navigation Module
- */
-(function () {
- 'use strict';
-
- // injected dependencies
- var $log, $location, $window, fs;
-
- // internal state
- var navShown = false;
-
- function updatePane() {
- var vis = navShown ? 'visible' : 'hidden';
- d3.select('#nav').style('visibility', vis);
- }
-
-
- function showNav() {
- navShown = true;
- updatePane();
- }
- function hideNav() {
- navShown = false;
- updatePane();
- }
- function toggleNav() {
- navShown = !navShown;
- updatePane();
- }
- function hideIfShown() {
- if (navShown) {
- hideNav();
- return true;
- }
- return false;
- }
-
- function navTo(path, params) {
- var url;
- if (!path) {
- $log.warn('Not a valid navigation path');
- return null;
- }
- $location.url('/' + path);
-
- if (fs.isO(params)) {
- $location.search(params);
- } else if (params !== undefined) {
- $log.warn('Query params not an object', params);
- }
-
- url = $location.absUrl();
- $log.log('Navigating to ', url);
- $window.location.href = url;
- }
-
- angular.module('onosNav', [])
- .controller('NavCtrl', ['$log',
-
- function (_$log_) {
- var self = this;
- $log = _$log_;
-
- self.hideNav = hideNav;
- $log.log('NavCtrl has been created');
- }
- ])
- .factory('NavService',
- ['$log', '$location', '$window', 'FnService',
-
- function (_$log_, _$location_, _$window_, _fs_) {
- $log = _$log_;
- $location = _$location_;
- $window = _$window_;
- fs = _fs_;
-
- return {
- showNav: showNav,
- hideNav: hideNav,
- toggleNav: toggleNav,
- hideIfShown: hideIfShown,
- navTo: navTo
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/remote.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/remote.js
deleted file mode 100644
index 453d08f9..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/remote.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Remote Communications Module
- */
-(function () {
- 'use strict';
-
- angular.module('onosRemote', ['onosUtil']);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/rest.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/rest.js
deleted file mode 100644
index 04b9fe02..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/rest.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Remote Communications Module -- REST Service
- */
-(function () {
- 'use strict';
-
- var $log;
-
- angular.module('onosRemote')
- .factory('RestService',
- ['$log', '$http', 'FnService', 'UrlFnService',
-
- function (_$log_, $http, fs, ufs) {
- $log = _$log_;
-
- function get(url, callback, errorCb) {
- var fullUrl = ufs.rsUrl(url);
-
- $http.get(fullUrl).then(function (response) {
- // success
- callback(response.data);
- }, function (response) {
- // error
- var emsg = 'Failed to retrieve JSON data: ' + fullUrl;
- $log.warn(emsg, response.status, response.data);
- if (errorCb) {
- errorCb(emsg);
- }
- });
- }
-
- // TODO: test this
- function post(url, data, callbacks) {
- var fullUrl = ufs.rsUrl(url);
- $http.post(fullUrl, data).then(function (response) {
- // success
- if (callbacks && fs.isF(callbacks.success)) {
- callbacks.success(response.data);
- }
- }, function (response) {
- // error
- var msg = 'Problem with $http post request: ' + fullUrl;
- $log.warn(msg, response.status, response.data);
-
- if (callbacks && fs.isF(callbacks.error)) {
- callbacks.error(msg);
- }
- });
- }
-
- return {
- get: get,
- post: post
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/urlfn.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/urlfn.js
deleted file mode 100644
index 6ec01b41..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/urlfn.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Remote -- General Purpose Functions
- */
-(function () {
- 'use strict';
-
- var uiContext = '/onos/ui/',
- rsSuffix = uiContext + 'rs/',
- wsSuffix = uiContext + 'websock/';
-
- angular.module('onosRemote')
- .factory('UrlFnService', ['$location', function ($loc) {
-
- function matchSecure(protocol) {
- var p = $loc.protocol(),
- secure = (p === 'https' || p === 'wss');
- return secure ? protocol + 's' : protocol;
- }
-
- function urlBase(protocol, port, host) {
- return matchSecure(protocol) + '://' +
- (host || $loc.host()) + ':' + (port || $loc.port());
- }
-
- function httpPrefix(suffix) {
- return urlBase('http') + suffix;
- }
-
- function wsPrefix(suffix, wsport, host) {
- return urlBase('ws', wsport, host) + suffix;
- }
-
- function rsUrl(path) {
- return httpPrefix(rsSuffix) + path;
- }
-
- function wsUrl(path, wsport, host) {
- return wsPrefix(wsSuffix, wsport, host) + path;
- }
-
- return {
- rsUrl: rsUrl,
- wsUrl: wsUrl
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/websocket.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/websocket.js
deleted file mode 100644
index 1c03d6fd..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/websocket.js
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Remote -- Web Socket Service
- */
-(function () {
- 'use strict';
-
- // injected refs
- var $log, $loc, fs, ufs, wsock, vs;
-
- // internal state
- var webSockOpts, // web socket options
- ws = null, // web socket reference
- wsUp = false, // web socket is good to go
- sid = 0, // event sequence identifier
- handlers = {}, // event handler bindings
- pendingEvents = [], // events TX'd while socket not up
- host, // web socket host
- url, // web socket URL
- clusterNodes = [], // ONOS instances data for failover
- clusterIndex = -1, // the instance to which we are connected
- connectRetries = 0, // limit our attempts at reconnecting
- openListeners = {}, // registered listeners for websocket open()
- nextListenerId = 1; // internal ID for open listeners
-
- // =======================
- // === Bootstrap Handler
-
- var builtinHandlers = {
- bootstrap: function (data) {
- clusterNodes = data.clusterNodes;
- clusterNodes.forEach(function (d, i) {
- if (d.uiAttached) {
- clusterIndex = i;
- $log.info('Connected to cluster node ' + d.ip);
- // TODO: add connect info to masthead somewhere
- }
- });
- }
- };
-
- // ==========================
- // === Web socket callbacks
-
- function handleOpen() {
- $log.info('Web socket open - ', url);
- vs.hide();
-
- if (fs.debugOn('txrx')) {
- $log.debug('Sending ' + pendingEvents.length + ' pending event(s)...');
- }
- pendingEvents.forEach(function (ev) {
- _send(ev);
- });
- pendingEvents = [];
-
- connectRetries = 0;
- wsUp = true;
- informListeners(host, url);
- }
-
- // Handles the specified (incoming) message using handler bindings.
- function handleMessage(msgEvent) {
- var ev, h;
-
- try {
- ev = JSON.parse(msgEvent.data);
- } catch (e) {
- $log.error('Message.data is not valid JSON', msgEvent.data, e);
- return null;
- }
- if (fs.debugOn('txrx')) {
- $log.debug(' << *Rx* ', ev.event, ev.payload);
- }
-
- if (h = handlers[ev.event]) {
- try {
- h(ev.payload);
- } catch (e) {
- $log.error('Problem handling event:', ev, e);
- return null;
- }
- } else {
- $log.warn('Unhandled event:', ev);
- }
-
- }
-
- function handleClose() {
- var gsucc;
-
- $log.info('Web socket closed');
- wsUp = false;
-
- if (gsucc = findGuiSuccessor()) {
- createWebSocket(webSockOpts, gsucc);
- } else {
- // If no controllers left to contact, show the Veil...
- vs.show([
- 'Oops!',
- 'Web-socket connection to server closed...',
- 'Try refreshing the page.'
- ]);
- }
- }
-
-
- // ==============================
- // === Private Helper Functions
-
- function findGuiSuccessor() {
- var ncn = clusterNodes.length,
- ip, node;
-
- while (connectRetries < ncn && !ip) {
- connectRetries++;
- clusterIndex = (clusterIndex + 1) % ncn;
- node = clusterNodes[clusterIndex];
- ip = node && node.ip;
- }
-
- return ip;
- }
-
- function informListeners(host, url) {
- angular.forEach(openListeners, function (lsnr) {
- lsnr.cb(host, url);
- });
- }
-
- function _send(ev) {
- if (fs.debugOn('txrx')) {
- $log.debug(' *Tx* >> ', ev.event, ev.payload);
- }
- ws.send(JSON.stringify(ev));
- }
-
- function noHandlersWarn(handlers, caller) {
- if (!handlers || fs.isEmptyObject(handlers)) {
- $log.warn('WSS.' + caller + '(): no event handlers');
- return true;
- }
- return false;
- }
-
- // ===================
- // === API Functions
-
- // Required for unit tests to set to known state
- function resetSid() {
- sid = 0;
- }
- function resetState() {
- webSockOpts = undefined;
- ws = null;
- wsUp = false;
- host = undefined;
- url = undefined;
- pendingEvents = [];
- handlers = {};
- sid = 0;
- clusterNodes = [];
- clusterIndex = -1;
- connectRetries = 0;
- openListeners = {};
- nextListenerId = 1;
- }
-
- // Currently supported opts:
- // wsport: web socket port (other than default 8181)
- // host: if defined, is the host address to use
- function createWebSocket(opts, _host_) {
- var wsport = (opts && opts.wsport) || null;
-
- webSockOpts = opts; // preserved for future calls
-
- host = _host_ || $loc.host();
- url = ufs.wsUrl('core', wsport, _host_);
-
- $log.debug('Attempting to open websocket to: ' + url);
- ws = wsock.newWebSocket(url);
- if (ws) {
- ws.onopen = handleOpen;
- ws.onmessage = handleMessage;
- ws.onclose = handleClose;
- }
- // Note: Wsock logs an error if the new WebSocket call fails
- return url;
- }
-
- // Binds the message handlers to their message type (event type) as
- // specified in the given map. Note that keys are the event IDs; values
- // are either:
- // * the event handler function, or
- // * an API object which has an event handler for the key
- //
- function bindHandlers(handlerMap) {
- var m,
- dups = [];
-
- if (noHandlersWarn(handlerMap, 'bindHandlers')) {
- return null;
- }
- m = d3.map(handlerMap);
-
- m.forEach(function (eventId, api) {
- var fn = fs.isF(api) || fs.isF(api[eventId]);
- if (!fn) {
- $log.warn(eventId + ' handler not a function');
- return;
- }
-
- if (handlers[eventId]) {
- dups.push(eventId);
- } else {
- handlers[eventId] = fn;
- }
- });
- if (dups.length) {
- $log.warn('duplicate bindings ignored:', dups);
- }
- }
-
- // Unbinds the specified message handlers.
- // Expected that the same map will be used, but we only care about keys
- function unbindHandlers(handlerMap) {
- var m;
-
- if (noHandlersWarn(handlerMap, 'unbindHandlers')) {
- return null;
- }
- m = d3.map(handlerMap);
-
- m.forEach(function (eventId) {
- delete handlers[eventId];
- });
- }
-
- function addOpenListener(callback) {
- var id = nextListenerId++,
- cb = fs.isF(callback),
- o = { id: id, cb: cb };
-
- if (cb) {
- openListeners[id] = o;
- } else {
- $log.error('WSS.addOpenListener(): callback not a function');
- o.error = 'No callback defined';
- }
- return o;
- }
-
- function removeOpenListener(lsnr) {
- var id = fs.isO(lsnr) && lsnr.id,
- o;
- if (!id) {
- $log.warn('WSS.removeOpenListener(): invalid listener', lsnr);
- return null;
- }
- o = openListeners[id];
-
- if (o) {
- delete openListeners[id];
- }
- }
-
- // Formulates an event message and sends it via the web-socket.
- // If the websocket is not up yet, we store it in a pending list.
- function sendEvent(evType, payload) {
- var ev = {
- event: evType,
- sid: ++sid,
- payload: payload || {}
- };
-
- if (wsUp) {
- _send(ev);
- } else {
- pendingEvents.push(ev);
- }
- }
-
-
- // ============================
- // ===== Definition of module
- angular.module('onosRemote')
- .factory('WebSocketService',
- ['$log', '$location', 'FnService', 'UrlFnService', 'WSock',
- 'VeilService',
-
- function (_$log_, _$loc_, _fs_, _ufs_, _wsock_, _vs_) {
- $log = _$log_;
- $loc = _$loc_;
- fs = _fs_;
- ufs = _ufs_;
- wsock = _wsock_;
- vs = _vs_;
-
- bindHandlers(builtinHandlers);
-
- return {
- resetSid: resetSid,
- resetState: resetState,
- createWebSocket: createWebSocket,
- bindHandlers: bindHandlers,
- unbindHandlers: unbindHandlers,
- addOpenListener: addOpenListener,
- removeOpenListener: removeOpenListener,
- sendEvent: sendEvent
- };
- }
- ]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/wsevent.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/wsevent.js
deleted file mode 100644
index 02d71b52..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/wsevent.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- DEPRECATED: to be deleted
- ONOS GUI -- Remote -- Web Socket Event Service
- */
-(function () {
- 'use strict';
-
- var sid = 0;
-
- angular.module('onosRemote')
- .factory('WsEventService', [function () {
-
- function sendEvent(ws, evType, payload) {
- var p = payload || {};
-
- ws.send({
- event: evType,
- sid: ++sid,
- payload: p
- });
- }
-
- function resetSid() {
- sid = 0;
- }
-
- return {
- sendEvent: sendEvent,
- resetSid: resetSid
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/wsock.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/wsock.js
deleted file mode 100644
index 0c58a798..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/remote/wsock.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Remote -- Web Socket Wrapper Service
-
- This service provided specifically so that it can be mocked in unit tests.
- */
-(function () {
- 'use strict';
-
- angular.module('onosRemote')
- .factory('WSock', ['$log', function ($log) {
-
- function newWebSocket(url) {
- var ws = null;
- try {
- ws = new WebSocket(url);
- } catch (e) {
- $log.error('Unable to create web socket:', e);
- }
- return ws;
- }
-
- return {
- newWebSocket: newWebSocket
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/geodata.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/geodata.js
deleted file mode 100644
index 6c54bb45..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/geodata.js
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- SVG -- GeoData Service
- */
-
-/*
- The GeoData Service facilitates the fetching and caching of TopoJSON data
- from the server, as well as providing a way of creating a path generator
- for that data, to be used to render the map in an SVG layer.
-
- A TopoData object can be fetched by ID. IDs that start with an asterisk
- identify maps bundled with the GUI. IDs that do not start with an
- asterisk are assumed to be URLs to externally provided data.
-
- var topodata = GeoDataService.fetchTopoData('*continental-us');
-
- The path generator can then be created for that data-set:
-
- var gen = GeoDataService.createPathGenerator(topodata, opts);
-
- opts is an optional argument that allows the override of default settings:
- {
- objectTag: 'states',
- projection: d3.geo.mercator(),
- logicalSize: 1000,
- mapFillScale: .95
- };
-
- The returned object (gen) comprises transformed data (TopoJSON -> GeoJSON),
- the D3 path generator function, and the settings used ...
-
- {
- geodata: { ... },
- pathgen: function (...) { ... },
- settings: { ... }
- }
- */
-
-(function () {
- 'use strict';
-
- // injected references
- var $log, $http, fs;
-
- // internal state
- var cache = d3.map(),
- bundledUrlPrefix = 'data/map/';
-
- function getUrl(id) {
- if (id[0] === '*') {
- return bundledUrlPrefix + id.slice(1) + '.topojson';
- }
- return id + '.topojson';
- }
-
-
- // start afresh...
- function clearCache() {
- cache = d3.map();
- }
-
- // returns a promise decorated with:
- // .meta -- id, url, and whether the data was cached
- // .topodata -- TopoJSON data (on response from server)
-
- function fetchTopoData(id) {
- if (!fs.isS(id)) {
- return null;
- }
- var url = getUrl(id),
- promise = cache.get(id);
-
- if (!promise) {
- // need to fetch the data, build the object,
- // cache it, and return it.
- promise = $http.get(url);
-
- promise.meta = {
- id: id,
- url: url,
- wasCached: false
- };
-
- promise.then(function (response) {
- // success
- promise.topodata = response.data;
- }, function (response) {
- // error
- $log.warn('Failed to retrieve map TopoJSON data: ' + url,
- response.status, response.data);
- });
-
- cache.set(id, promise);
-
- } else {
- promise.meta.wasCached = true;
- }
-
- return promise;
- }
-
- var defaultGenSettings = {
- objectTag: 'states',
- projection: d3.geo.mercator(),
- logicalSize: 1000,
- mapFillScale: .95
- };
-
- // converts given TopoJSON-format data into corresponding GeoJSON
- // data, and creates a path generator for that data.
- function createPathGenerator(topoData, opts) {
- var settings = angular.extend({}, defaultGenSettings, opts),
- topoObject = topoData.objects[settings.objectTag],
- geoData = topojson.feature(topoData, topoObject),
- proj = settings.projection,
- dim = settings.logicalSize,
- mfs = settings.mapFillScale,
- path = d3.geo.path().projection(proj);
-
- rescaleProjection(proj, mfs, dim, path, geoData);
-
- // return the results
- return {
- geodata: geoData,
- pathgen: path,
- settings: settings
- };
- }
-
- function rescaleProjection(proj, mfs, dim, path, geoData) {
- // adjust projection scale and translation to fill the view
- // with the map
-
- // start with unit scale, no translation..
- proj.scale(1).translate([0, 0]);
-
- // figure out dimensions of map data..
- var b = path.bounds(geoData),
- x1 = b[0][0],
- y1 = b[0][1],
- x2 = b[1][0],
- y2 = b[1][1],
- dx = x2 - x1,
- dy = y2 - y1,
- x = (x1 + x2) / 2,
- y = (y1 + y2) / 2;
-
- // size map to 95% of minimum dimension to fill space..
- var s = mfs / Math.min(dx / dim, dy / dim),
- t = [dim / 2 - s * x, dim / 2 - s * y];
-
- // set new scale, translation on the projection..
- proj.scale(s).translate(t);
- }
-
- angular.module('onosSvg')
- .factory('GeoDataService', ['$log', '$http', 'FnService',
- function (_$log_, _$http_, _fs_) {
- $log = _$log_;
- $http = _$http_;
- fs = _fs_;
-
-
- return {
- clearCache: clearCache,
- fetchTopoData: fetchTopoData,
- createPathGenerator: createPathGenerator,
- rescaleProjection: rescaleProjection
- };
- }]);
-}()); \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/glyph.css b/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/glyph.css
deleted file mode 100644
index 82910654..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/glyph.css
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Glyph Service -- CSS file
- */
-
-svg .glyph {
- stroke: none;
- fill-rule: evenodd;
-}
-
-.light svg .glyph,
-.dark svg .glyph.overlay {
- fill: black;
-}
-
-.dark svg .glyph,
-.light svg .glyph.overlay {
- fill: white;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/glyph.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/glyph.js
deleted file mode 100644
index d8dce362..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/glyph.js
+++ /dev/null
@@ -1,678 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- SVG -- Glyph Service
- */
-(function () {
- 'use strict';
-
- // injected references
- var $log, fs, sus;
-
- // internal state
- var glyphs = d3.map();
-
- // ----------------------------------------------------------------------
- // Base set of Glyphs...
-
- var birdData = {
- _bird: "352 224 113 112",
- bird: "M427.7,300.4 c-6.9,0.6-13.1,5-19.2,7.1c-18.1,6.2-33.9," +
- "9.1-56.5,4.7c24.6,17.2,36.6,13,63.7,0.1c-0.5,0.6-0.7,1.3-1.3," +
- "1.9c1.4-0.4,2.4-1.7,3.4-2.2c-0.4,0.7-0.9,1.5-1.4,1.9c2.2-0.6," +
- "3.7-2.3,5.9-3.9c-2.4,2.1-4.2,5-6,8c-1.5,2.5-3.1,4.8-5.1,6.9c-1," +
- "1-1.9,1.9-2.9,2.9c-1.4,1.3-2.9,2.5-5.1,2.9c1.7,0.1,3.6-0.3,6.5" +
- "-1.9c-1.6,2.4-7.1,6.2-9.9,7.2c10.5-2.6,19.2-15.9,25.7-18c18.3" +
- "-5.9,13.8-3.4,27-14.2c1.6-1.3,3-1,5.1-0.8c1.1,0.1,2.1,0.3,3.2," +
- "0.5c0.8,0.2,1.4,0.4,2.2,0.8l1.8,0.9c-1.9-4.5-2.3-4.1-5.9-6c-2.3" +
- "-1.3-3.3-3.8-6.2-4.9c-7.1-2.6-11.9,11.7-11.7-5c0.1-8,4.2-14.4," +
- "6.4-22c1.1-3.8,2.3-7.6,2.4-11.5c0.1-2.3,0-4.7-0.4-7c-2-11.2-8.4" +
- "-21.5-19.7-24.8c-1-0.3-1.1-0.3-0.9,0c9.6,17.1,7.2,38.3,3.1,54.2" +
- "C429.9,285.5,426.7,293.2,427.7,300.4z"
- },
-
- // TODO: ONOS-2566 glyphs for device types:
- // otn, roadm_otn, firewall, balancer, ips, ids,
- // controller, virtual, fiber_switch, other
-
- // NOTE: when adding glyphs, please also update TopoConstants.Glyphs class.
-
- glyphDataSet = {
- _viewbox: "0 0 110 110",
-
- unknown: "M35,40a5,5,0,0,1,5-5h30a5,5,0,0,1,5,5v30a5,5,0,0,1-5,5" +
- "h-30a5,5,0,0,1-5-5z",
-
- query: "M51.4,69.9c0-0.9,0-1.6,0-2.1c0-2.7,0.4-5.1,1.2-7.1" +
- "c0.6-1.5,1.5-3,2.8-4.5c0.9-1.1,2.6-2.7,5.1-4.8c2.4-2.1,4-3.8," +
- "4.8-5.1 c0.7-1.3,1.1-2.6,1.1-4.1c0-2.7-1.1-5.1-3.2-7.1c-2.1-2" +
- "-4.8-3.1-7.9-3.1c-3,0-5.5,0.9-7.5,2.8c-2,1.9-3.3,4.8-4,8.7l-7.2" +
- "-0.8 c0.7-5.3,2.6-9.3,5.8-12.1c3.2-2.8,7.5-4.2,12.8-4.2c5.6,0," +
- "10.1,1.5,13.4,4.5c3.3,3,5,6.7,5,10.9c0,2.5-0.6,4.8-1.8,6.8 " +
- "s-3.5,4.6-6.9,7.6c-2.3,2-3.8,3.5-4.5,4.4c-0.7,1-1.2,2-1.6,3.3" +
- "c-0.3,1.2-0.5,3.2-0.6,6H51.4z M51,83.8v-7.9h8v7.9H51z",
-
- node: "M15,100a5,5,0,0,1-5-5v-65a5,5,0,0,1,5-5h80a5,5,0,0,1,5,5" +
- "v65a5,5,0,0,1-5,5zM14,22.5l11-11a10,3,0,0,1,10-2h40a10,3,0,0,1," +
- "10,2l11,11zM16,35a5,5,0,0,1,10,0a5,5,0,0,1-10,0z",
-
- switch: "M10,20a10,10,0,0,1,10-10h70a10,10,0,0,1,10,10v70a10,10," +
- "0,0,1-10,10h-70a10,10,0,0,1-10-10zM60,26l12,0,0-8,18,13-18,13,0" +
- "-8-12,0zM60,60l12,0,0-8,18,13-18,13,0-8-12,0zM50,40l-12,0,0-8" +
- "-18,13,18,13,0-8,12,0zM50,74l-12,0,0-8-18,13,18,13,0-8,12,0z",
-
- roadm: "M10,35l25-25h40l25,25v40l-25,25h-40l-25-25zM58,26l12,0,0" +
- "-8,18,13-18,13,0-8-12,0zM58,60l12,0,0-8,18,13-18,13,0-8-12,0z" +
- "M52,40l-12,0,0-8-18,13,18,13,0-8,12,0zM52,74l-12,0,0-8-18,13," +
- "18,13,0-8,12,0z",
-
- endstation: "M10,15a5,5,0,0,1,5-5h65a5,5,0,0,1,5,5v80a5,5,0,0,1" +
- "-5,5h-65a5,5,0,0,1-5-5zM87.5,14l11,11a3,10,0,0,1,2,10v40a3,10," +
- "0,0,1,-2,10l-11,11zM17,19a2,2,0,0,1,2-2h56a2,2,0,0,1,2,2v26a2," +
- "2,0,0,1-2,2h-56a2,2,0,0,1-2-2zM20,20h54v10h-54zM20,33h54v10h" +
- "-54zM42,70a5,5,0,0,1,10,0a5,5,0,0,1-10,0z",
-
- router: "M10,55A45,45,0,0,1,100,55A45,45,0,0,1,10,55M20,50l12,0," +
- "0-8,18,13-18,13,0-8-12,0zM90,50l-12,0,0-8-18,13,18,13,0-8,12,0z" +
- "M50,47l0-12-8,0,13-18,13,18-8,0,0,12zM50,63l0,12-8,0,13,18,13" +
- "-18-8,0,0-12z",
-
- bgpSpeaker: "M10,40a45,35,0,0,1,90,0Q100,77,55,100Q10,77,10,40z" +
- "M50,29l12,0,0-8,18,13-18,13,0-8-12,0zM60,57l-12,0,0-8-18,13," +
- "18,13,0-8,12,0z",
-
- microwave: "M85,71.2c-8.9,10.5-29.6,8.7-45.3-3.5C23.9,55.4,19.8," +
- "37,28.6,26.5C29.9,38.6,71.5,69.9,85,71.2z M92.7,76.2M16.2,15 " +
- "M69.5,100.7v-4c0-1.4-1.2-2.2-2.6-2.2H19.3c-1.4,0-2.8,0.7-2.8,2.2" +
- "v3.9c0,0.7,0.8,1,1.5,1h50.3C69,101.5,69.5,101.3,69.5,100.7z " +
- "M77.3,7.5l0,3.7c9,0.1,16.3,7.1,16.2,15.7l3.9,0C97.5,16.3,88.5," +
- "7.6,77.3,7.5z M77.6,14.7l0,2.5c5.3,0,9.7,4.2,9.6,9.3l2.6,0C89.9" +
- ",20,84.4,14.7,77.6,14.7z M82.3,22.2c-1.3-1.2-2.9-1.9-4.7-1.9" +
- "l0,1.2c1.4,0,2.8,0.6,3.8,1.5c1,1,1.6,2.3,1.6,3.7l1.3,0C84.3,25.1," +
- "83.6,23.4,82.3,22.2z M38.9,69.5l-5.1,23h16.5l-2.5-17.2C44.1,73.3," +
- "38.9,69.5,38.9,69.5zM58.1,54.1c13.7,10.1,26.5,16.8,29.2,13.7" +
- "c2.7-3.1-5.6-13-19.3-24.4 M62.9,34.2 M62,37.9C47.7,27.3,33.7,20," +
- "31,23.1c-2.7,3.2,7,14.2,20.6,26 M73.9,25.7c-2.9,0.1-5.2,2.3-5.1," +
- "4.8c0,0.7,0.2,1.4,0.6,2l0,0L53.8,49.7l3.3,2.5L72.7,35l-0.4-0.3" +
- "c0.6,0.2,1.3,0.3,1.9,0.3c2.9-0.1,5.2-2.3,5.1-4.9C79.3,27.6,76.8," +
- "25.6,73.9,25.7z",
-
- chain: "M60.4,77.6c-4.9,5.2-9.6,11.3-15.3,16.3c-8.6,7.5-20.4,6.8" +
- "-28-0.8c-7.7-7.7-8.4-19.6-0.8-28.4c6.5-7.4,13.5-14.4,20.9-20.9" +
- "c7.5-6.7,19.2-6.7,26.5-0.8c3.5,2.8,4.4,6.1,2.2,8.7c-2.7,3.1" +
- "-5.5,2.5-8.5,0.3c-4.7-3.4-9.7-3.2-14,0.9C37.1,58.7,31,64.8," +
- "25.2,71c-4.2,4.4-4.2,10.6-0.6,14.3c3.7,3.7,9.7,3.7,14.3-0.4" +
- "c2.9-2.5,5.3-5.5,8.3-8c1-0.9,3-1.1,4.4-0.9C54.8,76.3,57.9,77.1," +
- "60.4,77.6zM49.2,32.2c5-5.2,9.7-10.9,15.2-15.7c12.8-11,31.2" +
- "-4.9,34.3,11.2C100,34.2,98.3,40.2,94,45c-6.7,7.4-13.7,14.6" +
- "-21.2,21.2C65.1,73,53.2,72.7,46,66.5c-3.2-2.8-3.9-5.8-1.6-8.4" +
- "c2.6-2.9,5.3-2.4,8.2-0.3c5.2,3.7,10,3.3,14.7-1.1c5.8-5.6,11.6" +
- "-11.3,17.2-17.2c4.6-4.8,4.9-11.1,0.9-15c-3.9-3.9-10.1-3.4-15," +
- "1.2c-3.1,2.9-5.7,7.4-9.3,8.5C57.6,35.3,53,33,49.2,32.2z",
-
- crown: "M99.5,21.6c0,3-2.3,5.4-5.1,5.4c-0.3,0-0.7,0-1-0.1c-1.8," +
- "4-4.8,10-7.2,17.3c-3.4,10.6-0.9,26.2,2.7,27.3C90.4,72,91.3," +
- "75,88,75H22.7c-3.3,0-2.4-3-0.9-3.5c3.6-1.1,6.1-16.7,2.7-27.3" +
- "c-2.4-7.4-5.4-13.5-7.2-17.5c-0.5,0.2-1,0.3-1.6,0.3c-2.8,0" +
- "-5.1-2.4-5.1-5.4c0-3,2.3-5.4,5.1-5.4c2.8,0,5.1,2.4,5.1,5.4c0," +
- "1-0.2,1.9-0.7,2.7c0.7,0.8,1.4,1.6,2.4,2.6c8.8,8.9,11.9,12.7," +
- "18.1,11.7c6.5-1,11-8.2,13.3-14.1c-2-0.8-3.3-2.7-3.3-5.1c0-3," +
- "2.3-5.4,5.1-5.4c2.8,0,5.1,2.4,5.1,5.4c0,2.5-1.6,4.5-3.7,5.2" +
- "c2.3,5.9,6.8,13,13.2,14c6.2,1,9.3-2.7,18.1-11.7c0.7-0.7,1.4" +
- "-1.5,2-2.1c-0.6-0.9-1-2-1-3.1c0-3,2.3-5.4,5.1-5.4C97.2,16.2," +
- "99.5,18.6,99.5,21.6zM92,87.9c0,2.2-1.7,4.1-3.8,4.1H22.4c" +
- "-2.1,0-4.4-1.9-4.4-4.1v-3.3c0-2.2,2.3-4.5,4.4-4.5h65.8c2.1," +
- "0,3.8,2.3,3.8,4.5V87.9z",
-
- lock: "M79.4,48.6h-2.7c0.2-5.7-0.2-20.4-7.9-28.8c-3.6-3.9-8.3" +
- "-5.9-13.7-5.9c-5.4,0-10.2,2-13.8,5.9c-7.8,8.4-8.3,23.2-8.1,28.8" +
- "h-2.7c-4.4,0-8,2.6-8,5.9v35.7c0,3.3,3.6,5.9,8,5.9h48.9c4.4,0," +
- "8-2.6,8-5.9V54.5C87.5,51.3,83.9,48.6,79.4,48.6z M48.1,26.1c1.9" +
- "-2,4.1-2.9,7-2.9c2.9,0,5.1,0.9,6.9,2.9c5,5.4,5.6,17.1,5.4,22.6" +
- "h-25C42.3,43.1,43.1,31.5,48.1,26.1z",
-
- topo: 'M97.2,76.3H86.6l-7.7-21.9H82c1,0,1.9-0.8,1.9-1.9V35.7c' +
- '0-1-0.8-1.9-1.9-1.9H65.2c-1,0-1.9,0.8-1.9,1.9v2.6L33.4,26.1v-11' +
- 'c0-1-0.8-1.9-1.9-1.9H14.7c-1,0-1.9,0.8-1.9,1.9v16.8c0,1,0.8,' +
- '1.9,1.9,1.9h16.8c1,0,1.9-0.8,1.9-1.9v-2.6l29.9,12.2v9L30.5,76.9' +
- 'c-0.3-0.3-0.8-0.5-1.3-0.5H12.4c-1,0-1.9,0.8-1.9,1.9V95c0,1,0.8,' +
- '1.9,1.9,1.9h16.8c1,0,1.9-0.8,1.9-1.9v-6.9h47.4V95c0,1,0.8,1.9,' +
- '1.9,1.9h16.8c1,0,1.9-0.8,1.9-1.9V78.2C99.1,77.2,98.2,76.3,97.2,' +
- '76.3z M31.1,85.1v-4.9l32.8-26.4c0.3,0.3,0.8,0.5,1.3,0.5h10.5l' +
- '7.7,21.9h-3c-1,0-1.9,0.8-1.9,1.9v6.9H31.1z',
-
- refresh: 'M102.6,40.8L88.4,70.5L69.8,43.4L80,42.6c-0.7-2.3-1.7-' +
- '5.1-3.4-7.8C71.8,27,64,23.1,53.5,23.1c-19.5,0-24.8,11.2-24.8,' +
- '11.3l-10.1-4.3c0.3-0.7,7.9-18,35-18c24.8,0,35,17.3,37.7,29.6L' +
- '102.6,40.8z M81.5,74.5c-0.2,0.5-5.5,11.4-24.9,11.4c-10.5,0-18.3' +
- '-3.9-23.1-11.7c-1.7-2.8-2.8-5.6-3.4-7.8l10.2-0.8L21.7,38.5L7.5,' +
- '68.2l11.4-0.9c2.7,12.3,12.9,29.6,37.7,29.6c26.9,0,34.6-17.2,34.9' +
- '-18L81.5,74.5z',
-
- garbage: 'M94.6,20.2c0,2.7-2.1,4.8-4.8,4.8H19.2c-2.7,0-4.8-2.1-' +
- '4.8-4.8s2.1-4.8,4.8-4.8h27.6c-0.8-0.7-1.4-1.7-1.4-2.9c0-2.1,1.7-' +
- '3.9,3.9-3.9h10.4c2.1,0,3.9,1.7,3.9,3.9c0,1.2-0.5,2.2-1.4,2.9h' +
- '27.6C92.5,15.4,94.6,17.6,94.6,20.2z M91,33.4v64.8c0,2-1.7,3.6-' +
- '3.8,3.6h-65c-2.1,0-3.8-1.6-3.8-3.6V33.4c0-2,1.7-3.6,3.8-3.6h65C' +
- '89.3,29.8,91,31.4,91,33.4z M31.5,37.7c0-2.1-1.2-3.8-2.7-3.8h-0.7' +
- 'c-1.5,0-2.7,1.7-2.7,3.8v55.9c0,2.1,1.2,3.8,2.7,3.8h0.7c1.5,0,2.7' +
- '-1.7,2.7-3.8V37.7z M58.5,37.7c0-2.1-1.8-3.8-4-3.8h-1c-2.2,0-4,' +
- '1.7-4,3.8v55.9c0,2.1,1.8,3.8,4,3.8h1c2.2,0,4-1.7,4-3.8V37.7z M' +
- '83.5,37.7c0-2.1-1.2-3.8-2.7-3.8h-0.7c-1.5,0-2.7,1.7-2.7,3.8v55.9' +
- 'c0,2.1,1.2,3.8,2.7,3.8h0.7c1.5,0,2.7-1.7,2.7-3.8V37.7z',
-
- loading: 'M103.1,53.1c0,0,0,0.2,0,0.5c0,0.2,0,0.4,0,0.7c0,0.3,0,0' +
- '.6,0,0.9c-0.1,1.3-0.2,3-0.5,4.8c-0.5,3.4-1.6,6.8-1.6,6.8l-9.2-2.' +
- '7c0,0,0.8-2.7,1.1-5.5c0.2-1.4,0.3-2.8,0.3-3.8c0-0.3,0-0.5,0-0.7c' +
- '0-0.2,0-0.4,0-0.6c0-0.3,0-0.5,0-0.5L103.1,53.1z M87.3,74.3c0,0-0' +
- '.1,0.2-0.3,0.5c-0.2,0.3-0.4,0.6-0.7,1.1c-0.6,0.9-1.4,2-2.3,3.1c-' +
- '1.8,2.2-3.9,4.1-3.9,4.1l5.7,6.5c0,0,0.7-0.5,1.6-1.4c1-0.9,2.2-2.' +
- '1,3.3-3.4c1.1-1.3,2.2-2.6,3-3.7c0.4-0.5,0.7-1,0.9-1.3c0.2-0.3,0.' +
- '3-0.4,0.3-0.4L87.3,74.3z M70.8,89.2c0,0-0.2,0.1-0.5,0.2c-0.3,0.2' +
- '-0.6,0.3-1.2,0.5c-1,0.4-2.3,0.9-3.7,1.4c-2.7,0.9-5.5,1.3-5.5,1.3' +
- 'l1.1,7.6c0,0,0.8-0.1,2.1-0.3c1.3-0.2,2.9-0.6,4.6-1c1.6-0.5,3.3-1' +
- ',4.5-1.5c0.6-0.2,1.2-0.5,1.5-0.6c0.3-0.1,0.5-0.2,0.5-0.2L70.8,89' +
- '.2z M48.6,92.9c0,0-0.2,0-0.5-0.1c-0.4,0-0.7-0.1-1.3-0.2c-1.1-0.2' +
- '-2.5-0.5-3.9-0.8c-2.8-0.7-5.4-1.9-5.4-1.9L34.6,96c0,0,3,1.5,6.3,' +
- '2.5c1.6,0.5,3.3,0.9,4.5,1.2c0.6,0.1,1.2,0.2,1.5,0.3c0.3,0.1,0.5,' +
- '0.1,0.5,0.1L48.6,92.9z M27.6,83.8c0,0-0.1-0.1-0.4-0.3c-0.3-0.2-0' +
- '.6-0.5-1-0.9c-0.8-0.7-1.8-1.8-2.8-2.8c-2-2.2-3.6-4.6-3.6-4.6l-5,' +
- '3.2c0,0,0.4,0.7,1.1,1.7c0.7,1,1.7,2.4,2.8,3.7c1.1,1.3,2.2,2.5,3.' +
- '1,3.4c0.4,0.4,0.9,0.8,1.1,1.1c0.3,0.2,0.4,0.4,0.4,0.4L27.6,83.8z' +
- 'M14.8,64.7c0,0-0.1-0.2-0.2-0.5c-0.1-0.3-0.2-0.7-0.4-1.3c-0.3-1.1' +
- '-0.6-2.5-0.8-4c-0.5-2.9-0.5-5.9-0.5-5.9l-5,0c0,0,0,0.8,0,2.1c0,1' +
- '.2,0.1,2.9,0.3,4.5c0.2,1.6,0.5,3.3,0.8,4.5c0.1,0.6,0.3,1.2,0.4,1' +
- '.5c0.1,0.3,0.1,0.5,0.1,0.5L14.8,64.7z M14.3,41.4c0,0,0.1-0.2,0.1' +
- '-0.5c0.1-0.3,0.2-0.7,0.4-1.3c0.3-1.1,0.8-2.5,1.4-3.8c1.2-2.7,2.8' +
- '-5.3,2.8-5.3l-3.4-2.2c0,0-1.8,2.7-3.2,5.7c-0.7,1.5-1.3,3-1.7,4.2' +
- 'c-0.2,0.6-0.4,1.1-0.5,1.4C10,39.9,10,40.1,10,40.1L14.3,41.4z M26' +
- '.7,21.3c0,0,0.1-0.1,0.4-0.4c0.3-0.2,0.6-0.5,1-0.9c0.9-0.7,2.1-1.' +
- '6,3.3-2.5c1.2-0.8,2.5-1.6,3.5-2.1c1-0.5,1.7-0.9,1.7-0.9l-1.3-2.9' +
- 'c0,0-0.7,0.3-1.8,0.9c-1.1,0.5-2.5,1.3-3.9,2.2c-1.4,0.9-2.7,1.8-3' +
- '.7,2.5c-0.5,0.4-0.9,0.7-1.2,0.9c-0.3,0.2-0.4,0.3-0.4,0.3L26.7,21' +
- '.3z M48.2,11c0,0,0.2,0,0.5-0.1c0.3,0,0.8-0.1,1.4-0.2c1.1-0.1,2.6' +
- '-0.3,4.2-0.3c3-0.1,6.1,0.3,6.1,0.3l0.3-2.3c0,0-0.8-0.1-2-0.3C57.' +
- '4,8.1,55.8,8,54.2,8c-1.6,0-3.2,0-4.4,0.1c-0.6,0-1.1,0.1-1.5,0.1c' +
- '-0.3,0-0.5,0.1-0.5,0.1L48.2,11z M72,14c0,0,0.7,0.3,1.7,0.8c1,0.5' +
- ',2.4,1.2,3.7,2c2.6,1.6,5,3.6,5,3.6l0.9-1c0,0-2.4-2.1-5-3.9c-1.3-' +
- '0.9-2.7-1.7-3.8-2.3c-1.1-0.6-1.8-0.9-1.8-0.9L72,14zM90.7,29.6c0,' +
- '0,0.4,0.6,1,1.6c0.6,1,1.4,2.3,2,3.7c0.7,1.4,1.3,2.8,1.7,3.9c0.4,' +
- '1.1,0.6,1.8,0.6,1.8l0.4-0.1c0,0-0.2-0.8-0.6-1.9c-0.4-1.1-0.9-2.6' +
- '-1.5-4c-0.6-1.4-1.3-2.9-1.9-3.9c-0.6-1-1-1.7-1-1.7L90.7,29.6z',
-
- // --- Navigation glyphs ------------------------------------
-
- flowTable: 'M15.9,19.1h-8v-13h8V19.1z M90.5,6.1H75.6v13h14.9V6.1z' +
- ' M71.9,6.1H56.9v13h14.9V6.1z M53.2,6.1H38.3v13h14.9V6.1z M34.5,' +
- '6.1H19.6v13h14.9V6.1z M102.2,6.1h-8v13h8V6.1z M102.2,23.6H7.9v' +
- '78.5h94.4V23.6z M86,63.2c0,3.3-2.7,6-6,6c-2.8,0-5.1-1.9-5.8-' +
- '4.5H63.3v5.1c0,0.9-0.7,1.5-1.5,1.5h-5.2v10.6c2.6,0.7,4.5,3,4.5,' +
- '5.8c0,3.3-2.7,6-6,6c-3.3,0-6-2.7-6-6c0-2.8,1.9-5.1,4.4-5.8V71.3' +
- 'H48c-0.9,0-1.5-0.7-1.5-1.5v-5.1H36c-0.7,2.6-3,4.4-5.8,4.4c-3.3,' +
- '0-6-2.7-6-6s2.7-6,6-6c2.8,0,5.2,1.9,5.8,4.5h10.5V56c0-0.9,0.7-' +
- '1.5,1.5-1.5h5.5V43.8c-2.6-0.7-4.5-3-4.5-5.8c0-3.3,2.7-6,6-6s6,' +
- '2.7,6,6c0,2.8-1.9,5.1-4.5,5.8v10.6h5.2c0.9,0,1.5,0.7,1.5,1.5v' +
- '5.6h10.8c0.7-2.6,3-4.5,5.8-4.5C83.3,57.1,86,59.8,86,63.2z M55.1,' +
- '42.3c2.3,0,4.3-1.9,4.3-4.3c0-2.3-1.9-4.3-4.3-4.3s-4.3,1.9-4.3,' +
- '4.3C50.8,40.4,52.7,42.3,55.1,42.3z M34.4,63.1c0-2.3-1.9-4.3-4.3' +
- '-4.3s-4.3,1.9-4.3,4.3s1.9,4.3,4.3,4.3S34.4,65.5,34.4,63.1z ' +
- 'M55.1,83.5c-2.3,0-4.3,1.9-4.3,4.3s1.9,4.3,4.3,4.3s4.3-1.9,4.3-' +
- '4.3S57.5,83.5,55.1,83.5zM84.2,63.2c0-2.3-1.9-4.3-4.3-4.3s-4.3,' +
- '1.9-4.3,4.3s1.9,4.3,4.3,4.3S84.2,65.5,84.2,63.2z',
-
- portTable: 'M15.9,19.1h-8v-13h8V19.1z M90.5,6.1H75.6v13h14.9V6.1' +
- 'z M71.9,6.1H56.9v13h14.9V6.1z M53.2,6.1H38.3v13h14.9V6.1z M34.5,' +
- '6.1H19.6v13h14.9V6.1z M102.2,6.1h-8v13h8V6.1z M102.6,23.6v78.5H' +
- '8.2V23.6H102.6z M85.5,37.7c0-0.7-0.4-1.3-0.9-1.3H26.2c-0.5,0-' +
- '0.9,0.6-0.9,1.3v34.6c0,0.7,0.4,1.3,0.9,1.3h11v9.6c0,1.1,0.5,2,' +
- '1.2,2h9.1c0,0.2,0,0.3,0,0.5v3c0,1.1,0.5,2,1.2,2h13.5c0.6,0,1.2-' +
- '0.9,1.2-2v-3c0-0.2,0-0.3,0-0.5h9.1c0.6,0,1.2-0.9,1.2-2v-9.6h11' +
- 'c0.5,0,0.9-0.6,0.9-1.3V37.7z M30.2,40h-1v8h1V40zM75.2,40h-2.1v8' +
- 'h2.1V40z M67.7,40h-2.1v8h2.1V40z M60.2,40h-2.1v8h2.1V40z M52.7,' +
- '40h-2.1v8h2.1V40z M45.2,40h-2.1v8h2.1V40zM37.7,40h-2.1v8h2.1V40' +
- 'z M81.6,40h-1v8h1V40z',
-
- groupTable: 'M16,19.1H8v-13h8V19.1z M90.6,6.1H75.7v13h14.9V6.1z ' +
- 'M71.9,6.1H57v13h14.9V6.1z M53.3,6.1H38.4v13h14.9V6.1z M34.6,6.1' +
- 'H19.7v13h14.9V6.1z M102.3,6.1h-8v13h8V6.1z M45.7,52.7c0.2-5.6,' +
- '2.6-10.7,6.2-14.4c-2.6-1.5-5.7-2.5-8.9-2.5c-9.8,0-17.7,7.9-17.7,' +
- '17.7c0,6.3,3.3,11.9,8.3,15C34.8,61.5,39.4,55.6,45.7,52.7z M51.9,' +
- '68.8c-3.1-3.1-5.2-7.2-6-11.7c-4.7,2.8-7.9,7.6-8.6,13.2c1.8,0.6,' +
- '3.6,0.9,5.6,0.9C46.2,71.2,49.3,70.3,51.9,68.8z M55.2,71.5c-3.5,' +
- '2.4-7.7,3.7-12.2,3.7c-1.9,0-3.8-0.3-5.6-0.7C38.5,83.2,45.9,90,' +
- '54.9,90c9,0,16.4-6.7,17.5-15.4c-1.6,0.4-3.4,0.6-5.1,0.6C62.8,' +
- '75.2,58.6,73.8,55.2,71.5z M54.9,50.6c1.9,0,3.8,0.3,5.6,0.7c-0.5' +
- '-4.1-2.5-7.9-5.4-10.6c-2.9,2.7-4.8,6.4-5.3,10.5C51.5,50.8,53.2,' +
- '50.6,54.9,50.6z M49.7,55.4c0.5,4.3,2.4,8.1,5.4,10.9c2.9-2.8,4.9' +
- '-6.6,5.4-10.8c-1.8-0.6-3.6-0.9-5.6-0.9C53.1,54.6,51.4,54.9,49.7,' +
- '55.4z M102.3,23.6v78.5H8V23.6H102.3z M89,53.5c0-12-9.7-21.7-' +
- '21.7-21.7c-4.5,0-8.7,1.4-12.2,3.7c-3.5-2.4-7.7-3.7-12.2-3.7c-12,' +
- '0-21.7,9.7-21.7,21.7c0,8.5,4.9,15.9,12,19.4C33.6,84.6,43.2,94,' +
- '54.9,94c11.7,0,21.2-9.3,21.7-20.9C84,69.7,89,62.2,89,53.5z M' +
- '64.3,57.3c-0.8,4.4-2.9,8.4-5.9,11.5c2.6,1.5,5.7,2.5,8.9,2.5c1.8,' +
- '0,3.6-0.3,5.2-0.8C72,64.9,68.8,60.1,64.3,57.3z M67.3,35.8c-3.3,0' +
- '-6.3,0.9-8.9,2.5c3.7,3.8,6.1,8.9,6.2,14.6c6.1,3.1,10.6,8.9,11.7,' +
- '15.8C81.5,65.6,85,60,85,53.5C85,43.8,77.1,35.8,67.3,35.8z',
-
- // --- Topology toolbar specific glyphs ----------------------
-
- summary: "M95.8,9.2H14.2c-2.8,0-5,2.2-5,5v81.5c0,2.8,2.2,5,5," +
- "5h81.5c2.8,0,5-2.2,5-5V14.2C100.8,11.5,98.5,9.2,95.8,9.2z " +
- "M16.7,22.2c0-1.1,0.9-2,2-2h20.1c1.1,0,2,0.9,2,2v20.1c0,1.1-0.9," +
- "2-2,2H18.7c-1.1,0-2-0.9-2-2V22.2z M93,87c0,1.1-0.9,2-2,2H18.9" +
- "c-1.1,0-2-0.9-2-2v-7c0-1.1,0.9-2,2-2H91c1.1,0,2,0.9,2,2V87z " +
- "M93,65c0,1.1-0.9,2-2,2H18.9c-1.1,0-2-0.9-2-2v-7c0-1.1,0.9-2," +
- "2-2H91c1.1,0,2,0.9,2,2V65z",
-
- details: "M95.8,9.2H14.2c-2.8,0-5,2.2-5,5v81.5c0,2.8,2.2,5,5," +
- "5h81.5c2.8,0,5-2.2,5-5V14.2C100.8,11.5,98.5,9.2,95.8,9.2z M16.9," +
- "22.2c0-1.1,0.9-2,2-2H91c1.1,0,2,0.9,2,2v7c0,1.1-0.9,2-2,2H18.9c" +
- "-1.1,0-2-0.9-2-2V22.2z M93,87.8c0,1.1-0.9,2-2,2H18.9c-1.1," +
- "0-2-0.9-2-2v-7c0-1.1,0.9-2,2-2H91c1.1,0,2,0.9,2,2V87.8z M93,68.2" +
- "c0,1.1-0.9,2-2,2H18.9c-1.1,0-2-0.9-2-2v-7c0-1.1,0.9-2,2-2H91" +
- "c1.1,0,2,0.9,2,2V68.2z M93,48.8c0,1.1-0.9,2-2,2H19c-1.1,0-2-" +
- "0.9-2-2v-7c0-1.1,0.9-2,2-2H91c1.1,0,2,0.9,2,2V48.8z",
-
- ports: "M98,9.2H79.6c-1.1,0-2.1,0.9-2.1,2.1v17.6l-5.4,5.4c-1.7" +
- "-1.1-3.8-1.8-6-1.8c-6,0-10.9,4.9-10.9,10.9c0,2.2,0.7,4.3,1.8,6" +
- "l-7.5,7.5c-1.8-1.2-3.9-1.9-6.2-1.9c-6,0-10.9,4.9-10.9,10.9c0," +
- "2.3,0.7,4.4,1.9,6.2l-6.2,6.2H11.3c-1.1,0-2.1,0.9-2.1,2.1v18.4" +
- "c0,1.1,0.9,2.1,2.1,2.1h18.4c1.1,0,2.1-0.9,2.1-2.1v-16l7-6.9" +
- "c1.4,0.7,3,1.1,4.7,1.1c6,0,10.9-4.9,10.9-10.9c0-1.7-0.4-3.3-" +
- "1.1-4.7l8-8c1.5,0.7,3.1,1.1,4.8,1.1c6,0,10.9-4.9,10.9-10.9c0" +
- "-1.7-0.4-3.4-1.1-4.8l6.9-6.9H98c1.1,0,2.1-0.9,2.1-2.1V11.3" +
- "C100.1,10.2,99.2,9.2,98,9.2z M43.4,72c-3.3,0-6-2.7-6-6s2.7-6," +
- "6-6s6,2.7,6,6S46.7,72,43.4,72z M66.1,49.5c-3.3,0-6-2.7-6-6" +
- "c0-3.3,2.7-6,6-6s6,2.7,6,6C72.2,46.8,69.5,49.5,66.1,49.5z",
-
- map: "M95.8,9.2H14.2c-2.8,0-5,2.2-5,5v66c0.3-1.4,0.7-2.8," +
- "1.1-4.1l1.6,0.5c-0.9,2.4-1.6,4.8-2.2,7.3l-0.5-0.1v12c0,2.8,2.2," +
- "5,5,5h81.5c2.8,0,5-2.2,5-5V14.2C100.8,11.5,98.5,9.2,95.8,9.2z " +
- "M16.5,67.5c-0.4,0.5-0.7,1-1,1.5c-0.3,0.5-0.6,1-0.9,1.6l-1.9-0.9" +
- "c0.3-0.6,0.6-1.2,0.9-1.8c0.3-0.6,0.6-1.2,1-1.7c0.7-1.1,1.5-2.2," +
- "2.5-3.2l1.8,1.8C18,65.6,17.2,66.5,16.5,67.5z M29.7,64.1" +
- "c-0.4-0.4-0.8-0.8-1.2-1.1c-0.1-0.1-0.2-0.1-0.2-0.1c0,0-0.1," +
- "0-0.1-0.1l-0.1,0l0,0l-0.1,0c-0.3-0.1-0.5-0.2-0.8-0.2c-0.5-0.1" +
- "-1.1-0.2-1.6-0.3c-0.6,0-1.1,0-1.6,0l-0.4-2.8c0.7-0.1,1.5-0.2,2.2" +
- "-0.1c0.7,0,1.4,0.1,2.2,0.3c0.4,0.1,0.7,0.2,1,0.3l0.1,0l0,0l0.1," +
- "0l0.1,0c0.1,0,0.1,0,0.3,0.1c0.3,0.1,0.5,0.2,0.7,0.4c0.7,0.5," +
- "1.2,0.9,1.7,1.4L29.7,64.1z M39.4,74.7c-1.8-1.8-3.6-3.8-5.3-5.7" +
- "l2.6-2.4c0.9,0.9,1.8,1.8,2.7,2.7c0.9,0.9,1.8,1.7,2.7,2.6L39.4," +
- "74.7z M50.8,84.2c-1.1-0.7-2.2-1.5-3.3-2.3c-0.5-0.4-1.1-0.8-1.6" +
- "-1.2c-0.5-0.4-1-0.8-1.5-1.2l2.7-3.4c0.5,0.4,1,0.8,1.5,1.1c0.5," +
- "0.3,1,0.7,1.5,1c1,0.7,2.1,1.3,3.1,1.9L50.8,84.2z M61.3," +
- "88.7c-0.7-0.1-1.4-0.3-2.1-0.5c-0.7-0.2-1.4-0.5-2-0.7l1.8" +
- "-4.8c0.6,0.2,1.1,0.4,1.6,0.5c0.5,0.2,1.1,0.3,1.6,0.4c1,0.2,2.1," +
- "0.2,3,0.1l0.7,5.1C64.3,89.1,62.7,88.9,61.3,88.7z M75.1,80.4c" +
- "-0.2,0.7-0.5,1.4-0.9,2c-0.2,0.3-0.3,0.7-0.5,1l-0.3,0.5l-0.3," +
- "0.4l-3.9-2.8l0.3-0.4l0.2-0.3c0.1-0.2,0.3-0.4,0.4-0.7c0.3-0.5," +
- "0.5-0.9,0.7-1.5c0.4-1,0.8-2.1,1.1-3.3l4.2,0.9C75.9,77.7,75.6," +
- "79,75.1,80.4z M73,69.2l0.2-1.9l0.1-1.9c0.1-1.2,0.1-2.5,0.1-" +
- "3.8l2.5-0.2c0.2,1.3,0.4,2.6,0.5,3.9l0.1,2l0.1,2L73,69.2z " +
- "M73,51l0.5-0.1c0.4,1.3,0.8,2.6,1.1,3.9L73.2,55C73.1,53.7,73.1," +
- "52.3,73,51z M91.9,20.4c-0.7,1.4-3.6,3.6-4.2,3.9c-1.5,0.8-5," +
- "2.8-10.1,7.7c3,2.9,5.8,5.4,7.3,6.4c2.6,1.8,3.4,4.3,3.6,6.1c0.1," +
- "1.1-0.1,2.5-0.4,3c-0.5,0.9-1.6,2-3,1.4c-2-0.8-11.5-9.6-13-11c" +
- "-3.5,3.9-7.4,8.9-11.7,15.1c0,0-3.1,3.4-5.2,0.9C52.9,51.5,61," +
- "39.3,61,39.3s2.2-3.1,5.6-7c-2.9-3-5.9-6.3-6.6-7.3c0,0-3.7-5-1.3" +
- "-6.6c3.2-2.1,6.3,0.8,6.3,0.8s3.1,3.3,7,7.2c4.7-4.7,10.1-9.2," +
- "14.7-10c0,0,3.3-1,5.2,1.7C92.5,18.8,92.4,19.6,91.9,20.4z",
-
- cycleLabels: "M72.5,33.9c0,0.6-0.2,1-0.5,1H40c-0.3,0-0.5-0.4" +
- "-0.5-1V20.7c0-0.6,0.2-1,0.5-1h32c0.3,0,0.5,0.4,0.5,1V33.9z " +
- "M41.2,61.8c0-0.6-0.2-1-0.5-1h-32c-0.3,0-0.5,0.4-0.5,1V75c0,0.6," +
- "0.2,1,0.5,1h32c0.3,0,0.5-0.4,0.5-1V61.8z M101.8,61.8c0-0.6-0.2" +
- "-1-0.5-1h-32c-0.3,0-0.5,0.4-0.5,1V75c0,0.6,0.2,1,0.5,1h32c0.3," +
- "0,0.5-0.4,0.5-1V61.8z M17.2,52.9c0-0.1-0.3-7.1,4.6-13.6l-2.4-1.8" +
- "c-5.4,7.3-5.2,15.2-5.1,15.5L17.2,52.9z M12.7,36.8l7.4,2.5l1.5," +
- "7.6L29.5,31L12.7,36.8z M94.2,42.3c-2.1-8.9-8.3-13.7-8.6-13.9l" +
- "-1.8,2.4c0.1,0,5.6,4.3,7.5,12.2L94.2,42.3z M99,37.8l-6.6,4.1l" +
- "-6.8-3.7l7.1,16.2L99,37.8z M69,90.2l-1.2-2.8c-0.1,0-6.6,2.8" +
- "-14.3,0.6l-0.8,2.9c2.5,0.7,4.9,1,7,1C65,91.8,68.7,90.2,69,90.2z " +
- "M54.3,97.3L54,89.5l6.6-4.1l-17.6-1.7L54.3,97.3z",
-
- oblique: "M80.9,30.2h4.3l15-16.9H24.8l-15,16.9h19v48.5h-4l-15," +
- "16.9h75.3l15-16.9H80.9V30.2z M78.6,78.7H56.1V30.2h22.5V78.7z" +
- "M79.7,17.4c2.4,0,4.3,1.9,4.3,4.3c0,2.4-1.9,4.3-4.3,4.3s-4.3" +
- "-1.9-4.3-4.3C75.4,19.3,77.4,17.4,79.7,17.4z M55,17.4c2.4,0," +
- "4.3,1.9,4.3,4.3c0,2.4-1.9,4.3-4.3,4.3s-4.3-1.9-4.3-4.3C50.7," +
- "19.3,52.6,17.4,55,17.4z M26.1,21.7c0-2.4,1.9-4.3,4.3-4.3c2.4," +
- "0,4.3,1.9,4.3,4.3c0,2.4-1.9,4.3-4.3,4.3C28,26,26.1,24.1,26.1," +
- "21.7z M31.1,30.2h22.6v48.5H31.1V30.2z M30.3,91.4c-2.4,0-4.3" +
- "-1.9-4.3-4.3c0-2.4,1.9-4.3,4.3-4.3c2.4,0,4.3,1.9,4.3,4.3C34.6," +
- "89.5,32.7,91.4,30.3,91.4z M54.9,91.4c-2.4,0-4.3-1.9-4.3-4.3c0" +
- "-2.4,1.9-4.3,4.3-4.3c2.4,0,4.3,1.9,4.3,4.3C59.2,89.5,57.3," +
- "91.4,54.9,91.4z M84,87.1c0,2.4-1.9,4.3-4.3,4.3c-2.4,0-4.3-1.9" +
- "-4.3-4.3c0-2.4,1.9-4.3,4.3-4.3C82.1,82.8,84,84.7,84,87.1z",
-
- filters: "M24.8,13.3L9.8,40.5h75.3l15.0-27.2H24.8z M72.8,32.1l-" +
- "9.7-8.9l-19.3,8.9l-6.0-7.4L24.1,30.9l-1.2-2.7l15.7-7.1l6.0,7.4" +
- "l19.0-8.8l9.7,8.8l11.5-5.6l1.3,2.7L72.8,32.1zM24.3,68.3L9.3," +
- "95.5h75.3l15.0-27.2H24.3z M84.3,85.9L70.7,79.8l-6.0,7.4l-19.3" +
- "-8.9l-9.7,8.9l-13.3-6.5l1.3-2.7l11.5,5.6l9.7-8.8l19.0,8.8l6.0" +
- "-7.4l15.7,7.1L84.3,85.9z M15.3,57h-6v-4h6V57zM88.1,57H76.0v-4h" +
- "12.1V57z M69.9,57H57.8v-4h12.1V57z M51.7,57H39.6v-4H51.7V57z " +
- "M33.5,57H21.4v-4h12.1V57zM100.2,57h-6v-4h6V57z",
-
- resetZoom: "M86,79.8L61.7,54.3c1.8-2.9,2.8-6.3,2.9-10c0.3-11.2" +
- "-8.6-20.5-19.8-20.8C33.7,23.2,24.3,32,24.1,43.2c-0.3,11.2,8.6," +
- "20.5,19.8,20.8c4,0.1,8.9-0.8,11.9-3.6l23.7,25c1.5,1.6,4,2.3," +
- "5.3,1l1.6-1.6C87.7,83.7,87.5,81.4,86,79.8z M31.4,43.4c0.2-7.1," +
- "6.1-12.8,13.2-12.6C51.8,31,57.5,37,57.3,44.1c-0.2,7.1-6.1,12.8" +
- "-13.2,12.6C36.9,56.5,31.3,50.6,31.4,43.4zM22.6,104H6V86.4c0" +
- "-1.7,1.4-3.1,3.1-3.1s3.1,1.4,3.1,3.1v11.4h10.4c1.7,0,3.1,1.4," +
- "3.1,3.1S24.3,104,22.6,104z M25.7,9.1c0,1.7-1.4,3.1-3.1,3.1" +
- "H12.2v11.4c0,1.7-1.4,3.1-3.1,3.1S6,25.3,6,23.6V6h16.6C24.3,6," +
- "25.7,7.4,25.7,9.1z M84.3,100.9c0-1.7,1.4-3.1,3.1-3.1h10.4V86.4" +
- "c0-1.7,1.4-3.1,3.1-3.1s3.1,1.4,3.1,3.1V104H87.4C85.7,104,84.3," +
- "102.6,84.3,100.9z M87.4,6H104v17.6c0,1.7-1.4,3.1-3.1,3.1s-3.1" +
- "-1.4-3.1-3.1V12.2H87.4c-1.7,0-3.1-1.4-3.1-3.1S85.7,6,87.4,6z",
-
- relatedIntents: "M99.9,43.7v22.6c0,1.9-1.5,3.4-3.4,3.4H73.9c" +
- "-1.9,0-3.4-1.5-3.4-3.4V43.7c0-1.9,1.5-3.4,3.4-3.4h22.6C98.4," +
- "40.3,99.9,41.8,99.9,43.7z M48.4,46.3l6.2,6.7h-4.6L38.5,38v9.7" +
- "l4.7,5.3H10.1V57h33.2l-4.8,5.3v9.5L49.8,57h5.1v0l-6.5,7v11.5" +
- "L64.1,55L48.4,34.4V46.3z",
-
- nextIntent: "M88.1,55.7L34.6,13.1c0,0-1.6-0.5-2.1-0.2c-1.9,1.2" +
- "-6.5,13.8-3.1,17.2c7,6.9,30.6,24.5,32.4,25.9c-1.8,1.4-25.4,19" +
- "-32.4,25.9c-3.4,3.4,1.2,16,3.1,17.2c0.6,0.4,2.1-0.2,2.1-0.2" +
- "s53.1-42.4,53.5-42.7C88.5,56,88.1,55.7,88.1,55.7z",
-
- prevIntent: "M22.5,55.6L76,12.9c0,0,1.6-0.5,2.2-0.2c1.9,1.2," +
- "6.5,13.8,3.1,17.2c-7,6.9-30.6,24.5-32.4,25.9c1.8,1.4,25.4,19," +
- "32.4,25.9c3.4,3.4-1.2,16-3.1,17.2c-0.6,0.4-2.2-0.2-2.2-0.2" +
- "S22.9,56.3,22.5,56C22.2,55.8,22.5,55.6,22.5,55.6z",
-
- intentTraffic: "M14.7,71.5h-6v-33h6V71.5z M88.5,38.5H76.9v33" +
- "h11.7V38.5z M70.1,38.5H58.4v33h11.7V38.5z M51.6,38.5H39.9v33" +
- "h11.7V38.5z M33.1,38.5H21.5v33h11.7V38.5z M101.3,38.5h-6v33h6" +
- "V38.5z",
-
- allTraffic: "M15.7,64.5h-7v-19h7V64.5z M78.6,45.5H62.9v19h15.7" +
- "V45.5z M47.1,45.5H31.4v19h15.7V45.5z M101.3,45.5h-7v19h7V45.5z" +
- "M14.7,14.1h-6v19h6V14.1z M88.5,14.1H76.9v19h11.7V14.1z M70.1," +
- "14.1H58.4v19h11.7V14.1z M51.6,14.1H39.9v19h11.7V14.1z M33.1,14.1" +
- "H21.5v19h11.7V14.1z M101.3,14.1h-6v19h6V14.1z M14.7,76.9h-6v19" +
- "h6V76.9z M88.5,76.9H76.9v19h11.7V76.9z M70.1,76.9H58.4v19h11.7" +
- "V76.9z M51.6,76.9H39.9v19h11.7V76.9z M33.1,76.9H21.5v19h11.7" +
- "V76.9z M101.3,76.9h-6v19h6V76.9z",
-
- flows: "M93.8,46.1c-4.3,0-8,3-9,7H67.9v-8.8c0-1.3-1.1-2.4-2.4" +
- "-2.4h-8.1V25.3c4-1,7-4.7,7-9.1c0-5.2-4.2-9.4-9.4-9.4c-5.2,0" +
- "-9.4,4.2-9.4,9.4c0,4.3,3,8,7,9v16.5H44c-1.3,0-2.4,1.1-2.4,2.4" +
- "v8.8H25.3c-1-4.1-4.7-7.1-9.1-7.1c-5.2,0-9.4,4.2-9.4,9.4s4.2," +
- "9.4,9.4,9.4c4.3,0,8-2.9,9-6.9h16.4v7.9c0,1.3,1.1,2.4,2.4,2.4" +
- "h8.6v16.6c-4,1.1-6.9,4.7-6.9,9c0,5.2,4.2,9.4,9.4,9.4c5.2,0," +
- "9.4-4.2,9.4-9.4c0-4.4-3-8-7.1-9.1V68.2h8.1c1.3,0,2.4-1.1,2.4" +
- "-2.4v-7.9h16.8c1.1,4,4.7,7,9,7c5.2,0,9.4-4.2,9.4-9.4S99,46.1," +
- "93.8,46.1z M48.7,16.3c0-3.5,2.9-6.4,6.4-6.4c3.5,0,6.4,2.9,6.4," +
- "6.4s-2.9,6.4-6.4,6.4C51.5,22.6,48.7,19.8,48.7,16.3zM16.2,61.7c" +
- "-3.5,0-6.4-2.9-6.4-6.4c0-3.5,2.9-6.4,6.4-6.4s6.4,2.9,6.4,6.4" +
- "C22.6,58.9,19.7,61.7,16.2,61.7z M61.4,93.7c0,3.5-2.9,6.4-6.4," +
- "6.4c-3.5,0-6.4-2.9-6.4-6.4c0-3.5,2.9-6.4,6.4-6.4C58.6,87.4," +
- "61.4,90.2,61.4,93.7z M93.8,61.8c-3.5,0-6.4-2.9-6.4-6.4c0-3.5," +
- "2.9-6.4,6.4-6.4s6.4,2.9,6.4,6.4C100.1,58.9,97.3,61.8,93.8,61.8z",
-
- eqMaster: "M100.1,46.9l-10.8-25h0.2c0.5,0,0.8-0.5,0.8-1.1v-3.2" +
- "c0-0.6-0.4-1.1-0.8-1.1H59.2v-5.1c0-0.5-0.8-1-1.7-1h-5.1c-0.9,0" +
- "-1.7,0.4-1.7,1v5.1l-30.2,0c-0.5,0-0.8,0.5-0.8,1.1v3.2c0,0.6," +
- "0.4,1.1,0.8,1.1h0.1l-10.8,25C9,47.3,8.4,48,8.4,48.8v1.6l0,0h0" +
- "v6.4c0,1.3,1.4,2.3,3.2,2.3h21.7c1.8,0,3.2-1,3.2-2.3v-8c0-0.9" +
- "-0.7-1.6-1.7-2L22.9,21.9h27.9v59.6l-29,15.9c0,1.2,1.8,2.2,4.1," +
- "2.2h58.3c2.3,0,4.1-1,4.1-2.2l-29-15.9V21.9h27.8L75.2,46.8c-1," +
- "0.4-1.7,1.1-1.7,2v8c0,1.3,1.4,2.3,3.2,2.3h21.7c1.8,0,3.2-1,3.2" +
- "-2.3v-8C101.6,48,101,47.3,100.1,46.9z M22,23.7l10.8,22.8H12.1" +
- "L22,23.7z M97.9,46.5H77.2L88,23.7L97.9,46.5z"
- },
-
- badgeDataSet = {
- _viewbox: "0 0 10 10",
-
- uiAttached: "M2,2.5a.5,.5,0,0,1,.5-.5h5a.5,.5,0,0,1,.5,.5v3" +
- "a.5,.5,0,0,1-.5,.5h-5a.5,.5,0,0,1-.5-.5zM2.5,2.8a.3,.3,0,0,1," +
- ".3-.3h4.4a.3,.3,0,0,1,.3,.3v2.4a.3,.3,0,0,1-.3,.3h-4.4" +
- "a.3,.3,0,0,1-.3-.3zM2,6.55h6l1,1.45h-8z",
-
- checkMark: "M2.6,4.5c0,0,0.7-0.4,1.2,0.3l1.0," +
- "1.8c0,0,2.7-5.4,2.8-5.7c0,0,0.5-0.9,1.4-0.1c0," +
- "0,0.5,0.5,0,1.3S6.8,7.3,5.6,9.2c0,0-0.4," +
- "0.5-1.2,0.1S2.2,5.4,2.2,5.4S2.2,4.7,2.6,4.5z",
-
- xMark: "M9.0,7.2C8.2,6.9,7.4,6.1,6.7,5.2c0.4-0.5," +
- "0.7-0.8,0.8-1.0C7.8,3.5,9.4,1.6,8.1,1.1" +
- "C6.8,0.6,6.6,1.7,6.6,1.7C6.4,2.1,6.0,2.7,5.4," +
- "3.4C4.9,2.5,4.5,1.9,4.5,1.9" +
- "S3.8,0.2,2.9,0.7C1.9,1.1,2.3,2.3,2.3,2.3c0.3,1.1,0.8,2.1,1.4,2.9" +
- "C2.5,6.4,1.3,7.4,1.3,7.4S0.8,7.8,0.8,8.1C0.9,8.3,0.9,9.6,2.4,9.1" +
- "C3.1,8.8,4.1,7.9,5.1,7.0c1.3,1.3,2.5,1.9,2.5,1.9s0.5,0.5,1.4-0.2" +
- "C9.8,7.9,9.0,7.2,9.0,7.2z",
-
- triangleUp: "M0.5,6.2c0,0,3.8-3.8,4.2-4.2C5,1.7,5.3,2,5.3,2l4.3," +
- "4.3c0,0,0.4,0.4-0.1,0.4c-1.7,0-8.2,0-8.8,0C0,6.6,0.5,6.2,0.5,6.2z",
-
- triangleDown: "M9.5,4.2c0,0-3.8,3.8-4.2,4.2c-0.3,0.3-0.5,0-0.5," +
- "0L0.5,4.2c0,0-0.4-0.4,0.1-0.4c1.7,0,8.2,0,8.8,0C10,3.8,9.5,4.2," +
- "9.5,4.2z",
-
- plus: "M4,2h2v2h2v2h-2v2h-2v-2h-2v-2h2z",
-
- minus: "M2,4h6v2h-6z",
-
- play: "M2.5,2l5.5,3l-5.5,3z",
-
- stop: "M2.5,2.5h5v5h-5z"
- },
-
- spriteData = {
- _cloud: '0 0 110 110',
- cloud: "M37.6,79.5c-6.9,8.7-20.4,8.6-22.2-2.7" +
- "M16.3,41.2c-0.8-13.9,19.4-19.2,23.5-7.8" +
- "M38.9,30.9c5.1-9.4,15.1-8.5,16.9-1.3" +
- "M54.4,32.9c4-12.9,14.8-9.6,18.6-3.8" +
- "M95.8,58.5c10-4.1,11.7-17.8-0.9-19.8" +
- "M18.1,76.4C5.6,80.3,3.8,66,13.8,61.5" +
- "M16.2,62.4C2.1,58.4,3.5,36,16.8,36.6" +
- "M93.6,74.7c10.2-2,10.7-14,5.8-18.3" +
- "M71.1,79.3c11.2,7.6,24.6,6.4,22.1-11.7" +
- "M36.4,76.8c3.4,13.3,35.4,11.6,36.1-1.4" +
- "M70.4,31c11.8-10.4,26.2-5.2,24.7,10.1"
- };
-
- // ----------------------------------------------------------------------
- // === Constants
-
- var msgGS = 'GlyphService.',
- rg = "registerGlyphs(): ",
- rgs = "registerGlyphSet(): ";
-
- // ----------------------------------------------------------------------
-
- function warn(msg) {
- $log.warn(msgGS + msg);
- }
-
- function addToMap(key, value, vbox, overwrite, dups) {
- if (!overwrite && glyphs.get(key)) {
- dups.push(key);
- } else {
- glyphs.set(key, {id: key, vb: vbox, d: value});
- }
- }
-
- function reportDups(dups, which) {
- var ok = (dups.length == 0),
- msg = 'ID collision: ';
-
- if (!ok) {
- dups.forEach(function (id) {
- warn(which + msg + '"' + id + '"');
- });
- }
- return ok;
- }
-
- function reportMissVb(missing, which) {
- var ok = (missing.length == 0),
- msg = 'Missing viewbox property: ';
-
- if (!ok) {
- missing.forEach(function (vbk) {
- warn(which + msg + '"' + vbk + '"');
- });
- }
- return ok;
- }
-
- // ----------------------------------------------------------------------
- // === API functions ===
-
- function clear() {
- // start with a fresh map
- glyphs = d3.map();
- }
-
- function init() {
- registerGlyphs(birdData);
- registerGlyphSet(glyphDataSet);
- registerGlyphSet(badgeDataSet);
- registerGlyphs(spriteData);
- }
-
- function registerGlyphs(data, overwrite) {
- var dups = [],
- missvb = [];
-
- angular.forEach(data, function (value, key) {
- var vbk = '_' + key,
- vb = data[vbk];
-
- if (key[0] !== '_') {
- if (!vb) {
- missvb.push(vbk);
- return;
- }
- addToMap(key, value, vb, overwrite, dups);
- }
- });
- return reportDups(dups, rg) && reportMissVb(missvb, rg);
- }
-
- function registerGlyphSet(data, overwrite) {
- var dups = [],
- vb = data._viewbox;
-
- if (!vb) {
- warn(rgs + 'no "_viewbox" property found');
- return false;
- }
-
- angular.forEach(data, function (value, key) {
- if (key[0] !== '_') {
- addToMap(key, value, vb, overwrite, dups);
- }
- });
- return reportDups(dups, rgs);
- }
-
- function ids() {
- return glyphs.keys();
- }
-
- function glyph(id) {
- return glyphs.get(id);
- }
-
- function glyphDefined(id) {
- return glyphs.has(id);
- }
-
- // Note: defs should be a D3 selection of a single <defs> element
- function loadDefs(defs, glyphIds, noClear) {
- var list = fs.isA(glyphIds) || ids(),
- clearCache = !noClear;
-
- if (clearCache) {
- // remove all existing content
- defs.html(null);
- }
-
- // load up the requested glyphs
- list.forEach(function (id) {
- var g = glyph(id);
- if (g) {
- if (noClear) {
- // quick exit if symbol is already present
- if (defs.select('symbol#' + g.id).size() > 0) {
- return;
- }
- }
- defs.append('symbol')
- .attr({ id: g.id, viewBox: g.vb })
- .append('path').attr('d', g.d);
- }
- });
- }
-
- // trans can specify translation [x,y]
- function addGlyph(elem, glyphId, size, overlay, trans) {
- var sz = size || 40,
- ovr = !!overlay,
- xns = fs.isA(trans),
- atr = {
- width: sz,
- height: sz,
- 'class': 'glyph',
- 'xlink:href': '#' + glyphId
- };
-
- if (xns) {
- atr.transform = sus.translate(trans);
- }
- return elem.append('use').attr(atr).classed('overlay', ovr);
- }
-
- // ----------------------------------------------------------------------
-
- angular.module('onosSvg')
- .factory('GlyphService',
- ['$log', 'FnService', 'SvgUtilService',
-
- function (_$log_, _fs_, _sus_) {
- $log = _$log_;
- fs = _fs_;
- sus = _sus_;
-
- return {
- clear: clear,
- init: init,
- registerGlyphs: registerGlyphs,
- registerGlyphSet: registerGlyphSet,
- ids: ids,
- glyph: glyph,
- glyphDefined: glyphDefined,
- loadDefs: loadDefs,
- addGlyph: addGlyph
- };
- }]
- )
- .run(['$log', function ($log) {
- $log.debug('Clearing glyph cache');
- clear();
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/icon.css b/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/icon.css
deleted file mode 100644
index 6ade7c7e..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/icon.css
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Icon Service -- CSS file
- */
-
-svg#IconLibDefs {
- display: none;
-}
-
-svg .svgIcon {
- fill-rule: evenodd;
-}
-
-svg.embeddedIcon g.icon {
- fill: none;
-}
-
-svg.embeddedIcon g.icon rect {
- stroke: none;
- fill: none;
-}
-
-svg.embeddedIcon g.icon .glyph {
- stroke: none;
- fill: white;
- fill-rule: evenodd;
-}
-
-
-/* Sortable table headers */
-.light div.tableColSort svg.embeddedIcon .icon .glyph {
- fill: black;
-}
-.dark div.tableColSort svg.embeddedIcon .icon .glyph {
- fill: #ccc;
-}
-
-
-/* color schemes for specific icon classes */
-
-svg.embeddedIcon .icon.appInactive .glyph {
- fill: none;
-}
-
-.light svg.embeddedIcon .icon.active .glyph {
- fill: green;
-}
-.dark svg.embeddedIcon .icon.active .glyph {
- fill: #308C10;
-}
-
-
-.light table svg.embeddedIcon {
- fill: #ccc;
-}
-.dark table svg.embeddedIcon {
- fill: #222;
-}
-.light table svg.embeddedIcon .glyph {
- fill: #333;
-}
-.dark table svg.embeddedIcon .glyph {
- fill: #ccc;
-}
-
-.light svg.embeddedIcon .icon.active .glyph {
- fill: green;
-}
-.light svg.embeddedIcon .icon.inactive .glyph {
- fill: darkred;
-}
-.dark svg.embeddedIcon .icon.active .glyph {
- fill: #308C10;
-}
-.dark svg.embeddedIcon .icon.inactive .glyph {
- fill: #AD2D2D;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/icon.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/icon.js
deleted file mode 100644
index d6a517fc..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/icon.js
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- SVG -- Icon Service
- */
-(function () {
- 'use strict';
-
- var $log, fs, gs, sus;
-
- var vboxSize = 50,
- cornerSize = vboxSize / 10,
- viewBox = '0 0 ' + vboxSize + ' ' + vboxSize;
-
- // Maps icon ID to the glyph ID it uses.
- // NOTE: icon ID maps to a CSS class for styling that icon
- var glyphMapping = {
- active: 'checkMark',
- inactive: 'xMark',
-
- plus: 'plus',
- minus: 'minus',
- play: 'play',
- stop: 'stop',
-
- topo: 'topo',
-
- refresh: 'refresh',
- garbage: 'garbage',
-
- upArrow: 'triangleUp',
- downArrow: 'triangleDown',
-
- loading: 'loading',
-
- appInactive: 'unknown',
-
- devIcon_SWITCH: 'switch',
- devIcon_ROADM: 'roadm',
- deviceTable: 'switch',
- flowTable: 'flowTable',
- portTable: 'portTable',
- groupTable: 'groupTable',
-
- hostIcon_endstation: 'endstation',
- hostIcon_router: 'router',
- hostIcon_bgpSpeaker: 'bgpSpeaker',
-
- nav_apps: 'bird',
- nav_settings: 'chain',
- nav_cluster: 'node',
- nav_topo: 'topo',
- nav_devs: 'switch',
- nav_links: 'ports',
- nav_hosts: 'endstation',
- nav_intents: 'relatedIntents',
- nav_processors: 'allTraffic'
- };
-
- function ensureIconLibDefs() {
- var body = d3.select('body'),
- svg = body.select('svg#IconLibDefs'),
- defs;
-
- if (svg.empty()) {
- svg = body.append('svg').attr('id', 'IconLibDefs');
- defs = svg.append('defs');
- }
- return svg.select('defs');
- }
-
- // div is a D3 selection of the <DIV> element into which icon should load
- // glyphId identifies the glyph to use
- // size is dimension of icon in pixels. Defaults to 20.
- // installGlyph, if truthy, will cause the glyph to be added to
- // well-known defs element. Defaults to false.
- // svgClass is the CSS class used to identify the SVG layer.
- // Defaults to 'embeddedIcon'.
- function loadIcon(div, glyphId, size, installGlyph, svgClass) {
- var dim = size || 20,
- svgCls = svgClass || 'embeddedIcon',
- gid = glyphId || 'unknown',
- svg, g;
-
- if (installGlyph) {
- gs.loadDefs(ensureIconLibDefs(), [gid], true);
- }
-
- svg = div.append('svg').attr({
- 'class': svgCls,
- width: dim,
- height: dim,
- viewBox: viewBox
- });
-
- g = svg.append('g').attr({
- 'class': 'icon'
- });
-
- g.append('rect').attr({
- width: vboxSize,
- height: vboxSize,
- rx: cornerSize
- });
-
- g.append('use').attr({
- width: vboxSize,
- height: vboxSize,
- 'class': 'glyph',
- 'xlink:href': '#' + gid
- });
- }
-
- // div is a D3 selection of the <DIV> element into which icon should load
- // iconCls is the CSS class used to identify the icon
- // size is dimension of icon in pixels. Defaults to 20.
- // installGlyph, if truthy, will cause the glyph to be added to
- // well-known defs element. Defaults to false.
- // svgClass is the CSS class used to identify the SVG layer.
- // Defaults to 'embeddedIcon'.
- function loadIconByClass(div, iconCls, size, installGlyph, svgClass) {
- loadIcon(div, glyphMapping[iconCls], size, installGlyph, svgClass);
- div.select('svg g').classed(iconCls, true);
- }
-
- function loadEmbeddedIcon(div, iconCls, size) {
- loadIconByClass(div, iconCls, size, true);
- }
-
-
- // configuration for device and host icons in the topology view
- var config = {
- device: {
- dim: 36,
- rx: 4
- },
- host: {
- badge: {
- dx: 14,
- dy: -14
- },
- radius: {
- noGlyph: 9,
- withGlyph: 14
- },
- glyphed: {
- endstation: 1,
- bgpSpeaker: 1,
- router: 1
- }
- }
- };
-
-
- // Adds a device icon to the specified element, using the given glyph.
- // Returns the D3 selection of the icon.
- function addDeviceIcon(elem, glyphId) {
- var cfg = config.device,
- gid = gs.glyphDefined(glyphId) ? glyphId : 'query',
- g = elem.append('g')
- .attr('class', 'svgIcon deviceIcon');
-
- g.append('rect').attr({
- x: 0,
- y: 0,
- rx: cfg.rx,
- width: cfg.dim,
- height: cfg.dim
- });
-
- g.append('use').attr({
- 'xlink:href': '#' + gid,
- width: cfg.dim,
- height: cfg.dim
- });
-
- g.dim = cfg.dim;
- return g;
- }
-
- function addHostIcon(elem, radius, glyphId) {
- var dim = radius * 1.5,
- xlate = -dim / 2,
- g = elem.append('g')
- .attr('class', 'svgIcon hostIcon');
-
- g.append('circle').attr('r', radius);
-
- g.append('use').attr({
- 'xlink:href': '#' + glyphId,
- width: dim,
- height: dim,
- transform: sus.translate(xlate,xlate)
- });
- return g;
- }
-
- function sortIcons() {
- function sortAsc(div) {
- div.style('display', 'inline-block');
- loadEmbeddedIcon(div, 'upArrow', 10);
- div.classed('tableColSort', true);
- }
-
- function sortDesc(div) {
- div.style('display', 'inline-block');
- loadEmbeddedIcon(div, 'downArrow', 10);
- div.classed('tableColSort', true);
- }
-
- function sortNone(div) {
- div.remove();
- }
-
- return {
- sortAsc: sortAsc,
- sortDesc: sortDesc,
- sortNone: sortNone
- };
- }
-
-
- // =========================
- // === DEFINE THE MODULE
-
- angular.module('onosSvg')
- .directive('icon', ['IconService', function (is) {
- return {
- restrict: 'A',
- link: function (scope, element, attrs) {
- attrs.$observe('iconId', function () {
- var div = d3.select(element[0]);
- div.selectAll('*').remove();
- is.loadEmbeddedIcon(div, attrs.iconId, attrs.iconSize);
- });
- }
- };
- }])
-
- .factory('IconService', ['$log', 'FnService', 'GlyphService',
- 'SvgUtilService',
-
- function (_$log_, _fs_, _gs_, _sus_) {
- $log = _$log_;
- fs = _fs_;
- gs = _gs_;
- sus = _sus_;
-
- return {
- loadIcon: loadIcon,
- loadIconByClass: loadIconByClass,
- loadEmbeddedIcon: loadEmbeddedIcon,
- addDeviceIcon: addDeviceIcon,
- addHostIcon: addHostIcon,
- iconConfig: function () { return config; },
- sortIcons: sortIcons
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/map.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/map.js
deleted file mode 100644
index f8d40f9c..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/map.js
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- SVG -- Map Service
- */
-
-/*
- The Map Service provides a simple API for loading geographical maps into
- an SVG layer. For example, as a background to the Topology View.
-
- e.g. var promise = MapService.loadMapInto(svgLayer, '*continental-us');
-
- The Map Service makes use of the GeoDataService to load the required data
- from the server and to create the appropriate geographical projection.
-
- A promise is returned to the caller, which is resolved with the
- map projection once created.
-*/
-
-(function () {
- 'use strict';
-
- // injected references
- var $log, $q, fs, gds;
-
- // NOTE: This method assumes the datafile has exactly the map data
- // that you want to load; for example id="*continental_us"
- // mapping to ~/data/map/continental_us.topojson contains
- // exactly the paths for the continental US.
-
- function loadMapInto(mapLayer, id, opts) {
- var promise = gds.fetchTopoData(id),
- deferredProjection = $q.defer();
-
- if (!promise) {
- $log.warn('Failed to load map: ' + id);
- return false;
- }
-
- promise.then(function () {
- var gen = gds.createPathGenerator(promise.topodata, opts);
-
- deferredProjection.resolve(gen.settings.projection);
-
- mapLayer.selectAll('path')
- .data(gen.geodata.features)
- .enter()
- .append('path')
- .attr('d', gen.pathgen);
- });
- return deferredProjection.promise;
- }
-
- // ---
-
- // NOTE: This method uses the countries.topojson data file, and then
- // filters the results based on the supplied options.
- // Usage:
- // promise = loadMapRegionInto(svgGroup, {
- // countryFilter: function (country) {
- // return country.properties.continent === 'South America';
- // }
- // });
-
- function loadMapRegionInto(mapLayer, filterOpts) {
- var promise = gds.fetchTopoData("*countries"),
- deferredProjection = $q.defer();
-
- if (!promise) {
- $log.warn('Failed to load countries TopoJSON data');
- return false;
- }
-
- promise.then(function () {
- var width = 1000,
- height = 1000,
- proj = d3.geo.mercator().translate([width/2, height/2]),
- pathGen = d3.geo.path().projection(proj),
- data = promise.topodata,
- features = topojson.feature(data, data.objects.countries).features,
- country = features.filter(filterOpts.countryFilter),
- countryFeature = {
- type: 'FeatureCollection',
- features: country
- },
- path = d3.geo.path().projection(proj);
-
- gds.rescaleProjection(proj, 0.95, 1000, path, countryFeature);
-
- deferredProjection.resolve(proj);
-
- mapLayer.selectAll('path.country')
- .data([countryFeature])
- .enter()
- .append('path').classed('country', true)
- .attr('d', pathGen);
- });
- return deferredProjection.promise;
- }
-
- angular.module('onosSvg')
- .factory('MapService', ['$log', '$q', 'FnService', 'GeoDataService',
- function (_$log_, _$q_, _fs_, _gds_) {
- $log = _$log_;
- $q = _$q_;
- fs = _fs_;
- gds = _gds_;
-
- return {
- loadMapRegionInto: loadMapRegionInto,
- loadMapInto: loadMapInto
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/svg.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/svg.js
deleted file mode 100644
index 8fd441fe..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/svg.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Scalable Vector Graphics Module
- */
-(function () {
- 'use strict';
-
- angular.module('onosSvg', ['onosUtil']);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/svgUtil.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/svgUtil.js
deleted file mode 100644
index cb67ae83..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/svgUtil.js
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- SVG -- Util Service
- */
-
-/*
- The SVG Util Service provides a miscellany of utility functions.
- */
-
-(function () {
- 'use strict';
-
- // injected references
- var $log, fs;
-
- angular.module('onosSvg')
- .factory('SvgUtilService', ['$log', 'FnService',
- function (_$log_, _fs_) {
- $log = _$log_;
- fs = _fs_;
-
- // TODO: change 'force' ref to be 'force.alpha' ref.
- function createDragBehavior(force, selectCb, atDragEnd,
- dragEnabled, clickEnabled) {
- var draggedThreshold = d3.scale.linear()
- .domain([0, 0.1])
- .range([5, 20])
- .clamp(true),
- drag,
- fSel = fs.isF(selectCb),
- fEnd = fs.isF(atDragEnd),
- fDEn = fs.isF(dragEnabled),
- fCEn = fs.isF(clickEnabled),
- bad = [];
-
- function naf(what) {
- return 'SvgUtilService: createDragBehavior(): ' + what +
- ' is not a function';
- }
-
- if (!force) {
- bad.push('SvgUtilService: createDragBehavior(): ' +
- 'Bad force reference');
- }
- if (!fSel) {
- bad.push(naf('selectCb'));
- }
- if (!fEnd) {
- bad.push(naf('atDragEnd'));
- }
- if (!fDEn) {
- bad.push(naf('dragEnabled'));
- }
- if (!fCEn) {
- bad.push(naf('clickEnabled'));
- }
-
- if (bad.length) {
- $log.error(bad.join('\n'));
- return null;
- }
-
- function dragged(d) {
- var threshold = draggedThreshold(force.alpha()),
- dx = d.oldX - d.px,
- dy = d.oldY - d.py;
- if (Math.abs(dx) >= threshold || Math.abs(dy) >= threshold) {
- d.dragged = true;
- }
- return d.dragged;
- }
-
- drag = d3.behavior.drag()
- .origin(function(d) { return d; })
- .on('dragstart', function(d) {
- if (clickEnabled() || dragEnabled()) {
- d3.event.sourceEvent.stopPropagation();
-
- d.oldX = d.x;
- d.oldY = d.y;
- d.dragged = false;
- d.fixed |= 2;
- d.dragStarted = true;
- }
- })
- .on('drag', function(d) {
- if (dragEnabled()) {
- d.px = d3.event.x;
- d.py = d3.event.y;
- if (dragged(d)) {
- if (!force.alpha()) {
- force.alpha(.025);
- }
- }
- }
- })
- .on('dragend', function(d) {
- if (d.dragStarted) {
- d.dragStarted = false;
- if (!dragged(d)) {
- // consider this the same as a 'click'
- // (selection of a node)
- if (clickEnabled()) {
- selectCb.call(this, d);
- }
- }
- d.fixed &= ~6;
-
- // hook at the end of a drag gesture
- if (dragEnabled()) {
- atDragEnd.call(this, d);
- }
- }
- });
-
- return drag;
- }
-
-
- function loadGlow(defs, r, g, b, id) {
- var glow = defs.append('filter')
- .attr('x', '-50%')
- .attr('y', '-50%')
- .attr('width', '200%')
- .attr('height', '200%')
- .attr('id', id);
-
- glow.append('feColorMatrix')
- .attr('type', 'matrix')
- .attr('values',
- '0 0 0 0 ' + r + ' ' +
- '0 0 0 0 ' + g + ' ' +
- '0 0 0 0 ' + b + ' ' +
- '0 0 0 1 0 ');
-
- glow.append('feGaussianBlur')
- .attr('stdDeviation', 3)
- .attr('result', 'coloredBlur');
-
- glow.append('feMerge').selectAll('feMergeNode')
- .data(['coloredBlur', 'SourceGraphic'])
- .enter().append('feMergeNode')
- .attr('in', String);
- }
-
- function loadGlowDefs(defs) {
- loadGlow(defs, 0.0, 0.0, 0.7, 'blue-glow');
- loadGlow(defs, 1.0, 1.0, 0.3, 'yellow-glow');
- }
-
- // --- Ordinal scales for 7 values.
-
- // blue brown brick red sea green purple dark teal lime
- var lightNorm = ['#3E5780', '#78533B', '#CB4D28', '#018D61', '#8A2979', '#006D73', '#56AF00'],
- lightMute = ['#A8B8CC', '#CCB3A8', '#FFC2BD', '#96D6BF', '#D19FCE', '#8FCCCA', '#CAEAA4'],
-
- darkNorm = ['#304860', '#664631', '#A8391B', '#00754B', '#77206D', '#005959', '#428700'],
- darkMute = ['#304860', '#664631', '#A8391B', '#00754B', '#77206D', '#005959', '#428700'];
-
- var colors= {
- light: {
- norm: d3.scale.ordinal().range(lightNorm),
- mute: d3.scale.ordinal().range(lightMute)
- },
- dark: {
- norm: d3.scale.ordinal().range(darkNorm),
- mute: d3.scale.ordinal().range(darkMute)
- }
- };
-
- function cat7() {
- var tcid = 'd3utilTestCard';
-
- function getColor(id, muted, theme) {
- // NOTE: since we are lazily assigning domain ids, we need to
- // get the color from all 4 scales, to keep the domains
- // in sync.
- var ln = colors.light.norm(id),
- lm = colors.light.mute(id),
- dn = colors.dark.norm(id),
- dm = colors.dark.mute(id);
- if (theme === 'dark') {
- return muted ? dm : dn;
- } else {
- return muted ? lm : ln;
- }
- }
-
- function testCard(svg) {
- var g = svg.select('g#' + tcid),
- dom = d3.range(7),
- k, muted, theme, what;
-
- if (!g.empty()) {
- g.remove();
-
- } else {
- g = svg.append('g')
- .attr('id', tcid)
- .attr('transform', 'scale(4)translate(20,20)');
-
- for (k=0; k<4; k++) {
- muted = k%2;
- what = muted ? ' muted' : ' normal';
- theme = k < 2 ? 'light' : 'dark';
- dom.forEach(function (id, i) {
- var x = i * 20,
- y = k * 20,
- f = get(id, muted, theme);
- g.append('circle').attr({
- cx: x,
- cy: y,
- r: 5,
- fill: f
- });
- });
- g.append('rect').attr({
- x: 140,
- y: k * 20 - 5,
- width: 32,
- height: 10,
- rx: 2,
- fill: '#888'
- });
- g.append('text').text(theme + what)
- .attr({
- x: 142,
- y: k * 20 + 2,
- fill: 'white'
- })
- .style('font-size', '4pt');
- }
- }
- }
-
- return {
- testCard: testCard,
- getColor: getColor
- };
- }
-
- function translate(x, y) {
- if (fs.isA(x) && x.length === 2 && !y) {
- return 'translate(' + x[0] + ',' + x[1] + ')';
- }
- return 'translate(' + x + ',' + y + ')';
- }
-
- function scale(x, y) {
- return 'scale(' + x + ',' + y + ')';
- }
-
- function skewX(x) {
- return 'skewX(' + x + ')';
- }
-
- function rotate(deg) {
- return 'rotate(' + deg + ')';
- }
-
- function stripPx(s) {
- return s.replace(/px$/,'');
- }
-
- function safeId(s) {
- return s.replace(/[^a-z0-9]/gi, '-');
- }
-
- function makeVisible(el, b) {
- el.style('visibility', (b ? 'visible' : 'hidden'));
- }
-
- function isVisible(el) {
- return el.style('visibility') === 'visible';
- }
-
- return {
- createDragBehavior: createDragBehavior,
- loadGlowDefs: loadGlowDefs,
- cat7: cat7,
- translate: translate,
- scale: scale,
- skewX: skewX,
- rotate: rotate,
- stripPx: stripPx,
- safeId: safeId,
- visible: function (el, x) {
- if (x === undefined) {
- return isVisible(el);
- } else {
- makeVisible(el, x);
- }
- }
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/zoom.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/zoom.js
deleted file mode 100644
index 6acab794..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/svg/zoom.js
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- SVG -- Zoom Service
- */
-(function () {
- 'use strict';
-
- // configuration
- var defaultSettings = {
- zoomMin: 0.05,
- zoomMax: 10,
- zoomEnabled: function (ev) { return true; },
- zoomCallback: function () {}
- };
-
- // injected references to services
- var $log;
-
- angular.module('onosSvg')
- .factory('ZoomService', ['$log',
-
- function (_$log_) {
- $log = _$log_;
-
-/*
- NOTE: opts is an object:
- {
- svg: svg, D3 selection of <svg> element
- zoomLayer: zoomLayer, D3 selection of <g> element
- zoomEnabled: function (ev) { ... },
- zoomCallback: function () { ... }
- }
-
- where:
- * svg and zoomLayer should be D3 selections of DOM elements.
- * zoomLayer <g> is a child of <svg> element.
- * zoomEnabled is an optional predicate based on D3 event.
- * default is always enabled.
- * zoomCallback is an optional callback invoked each time we pan/zoom.
- * default is do nothing.
-
- Optionally, zoomMin and zoomMax also can be defined.
- These default to 0.25 and 10 respectively.
-*/
- function createZoomer(opts) {
- var cz = 'ZoomService.createZoomer(): ',
- d3s = ' (D3 selection) property defined',
- settings = angular.extend({}, defaultSettings, opts),
- zoom = d3.behavior.zoom()
- .translate([0, 0])
- .scale(1)
- .scaleExtent([settings.zoomMin, settings.zoomMax])
- .on('zoom', zoomed),
- fail = false,
- zoomer;
-
- if (!settings.svg) {
- $log.error(cz + 'No "svg" (svg tag)' + d3s);
- fail = true;
- }
- if (!settings.zoomLayer) {
- $log.error(cz + 'No "zoomLayer" (g tag)' + d3s);
- fail = true;
- }
-
- if (fail) {
- return null;
- }
-
- // zoom events from mouse gestures...
- function zoomed() {
- var ev = d3.event.sourceEvent;
- if (settings.zoomEnabled(ev)) {
- adjustZoomLayer(d3.event.translate, d3.event.scale);
- }
- }
-
- function adjustZoomLayer(translate, scale) {
- settings.zoomLayer.attr('transform',
- 'translate(' + translate + ')scale(' + scale + ')');
- settings.zoomCallback();
- }
-
- zoomer = {
- panZoom: function (translate, scale) {
- zoom.translate(translate).scale(scale);
- adjustZoomLayer(translate, scale);
- },
-
- reset: function () {
- zoomer.panZoom([0,0], 1);
- },
-
- translate: function () {
- return zoom.translate();
- },
-
- scale: function () {
- return zoom.scale();
- },
-
- scaleExtent: function () {
- return zoom.scaleExtent();
- }
- };
-
- // apply the zoom behavior to the SVG element
- settings.svg && settings.svg.call(zoom);
- return zoomer;
- }
-
- return {
- createZoomer: createZoomer
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/util/fn.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/util/fn.js
deleted file mode 100644
index defb8458..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/util/fn.js
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Util -- General Purpose Functions
- */
-(function () {
- 'use strict';
-
- // injected services
- var $window, $log;
-
- // internal state
- var debugFlags = {};
-
-
- function _parseDebugFlags(dbgstr) {
- var bits = dbgstr ? dbgstr.split(",") : [];
- bits.forEach(function (key) {
- debugFlags[key] = true;
- });
- $log.debug('Debug flags:', dbgstr);
- }
-
- function isF(f) {
- return typeof f === 'function' ? f : null;
- }
-
- function isA(a) {
- // NOTE: Array.isArray() is part of EMCAScript 5.1
- return Array.isArray(a) ? a : null;
- }
-
- function isS(s) {
- return typeof s === 'string' ? s : null;
- }
-
- function isO(o) {
- return (o && typeof o === 'object' && o.constructor === Object) ? o : null;
- }
-
- function contains(a, x) {
- return isA(a) && a.indexOf(x) > -1;
- }
-
- // Returns true if all names in the array are defined as functions
- // on the given api object; false otherwise.
- // Also returns false if there are properties on the api that are NOT
- // listed in the array of names.
- function areFunctions(api, fnNames) {
- var fnLookup = {},
- extraFound = false;
-
- if (!isA(fnNames)) {
- return false;
- }
- var n = fnNames.length,
- i, name;
- for (i=0; i<n; i++) {
- name = fnNames[i];
- if (!isF(api[name])) {
- return false;
- }
- fnLookup[name] = true;
- }
-
- // check for properties on the API that are not listed in the array,
- angular.forEach(api, function (value, key) {
- if (!fnLookup[key]) {
- extraFound = true;
- }
- });
- return !extraFound;
- }
-
- // Returns true if all names in the array are defined as functions
- // on the given api object; false otherwise. This is a non-strict version
- // that does not care about other properties on the api.
- function areFunctionsNonStrict(api, fnNames) {
- if (!isA(fnNames)) {
- return false;
- }
- var n = fnNames.length,
- i, name;
- for (i=0; i<n; i++) {
- name = fnNames[i];
- if (!isF(api[name])) {
- return false;
- }
- }
- return true;
- }
-
- // Returns width and height of window inner dimensions.
- // offH, offW : offset width/height are subtracted, if present
- function windowSize(offH, offW) {
- var oh = offH || 0,
- ow = offW || 0;
- return {
- height: $window.innerHeight - oh,
- width: $window.innerWidth - ow
- };
- }
-
- // Returns true if current browser determined to be a mobile device
- function isMobile() {
- var ua = $window.navigator.userAgent,
- patt = /iPhone|iPod|iPad|Silk|Android|BlackBerry|Opera Mini|IEMobile/;
- return patt.test(ua);
- }
-
- // Returns true if the current browser determined to be Chrome
- function isChrome() {
- var isChromium = $window.chrome,
- vendorName = $window.navigator.vendor,
- isOpera = $window.navigator.userAgent.indexOf("OPR") > -1;
- return (isChromium !== null &&
- isChromium !== undefined &&
- vendorName === "Google Inc." &&
- isOpera == false);
- }
-
- // Returns true if the current browser determined to be Safari
- function isSafari() {
- return ($window.navigator.userAgent.indexOf('Safari') !== -1 &&
- $window.navigator.userAgent.indexOf('Chrome') === -1);
- }
-
- // Returns true if the current browser determined to be Firefox
- function isFirefox() {
- return typeof InstallTrigger !== 'undefined';
- }
-
- // search through an array of objects, looking for the one with the
- // tagged property matching the given key. tag defaults to 'id'.
- // returns the index of the matching object, or -1 for no match.
- function find(key, array, tag) {
- var _tag = tag || 'id',
- idx, n, d;
- for (idx = 0, n = array.length; idx < n; idx++) {
- d = array[idx];
- if (d[_tag] === key) {
- return idx;
- }
- }
- return -1;
- }
-
- // search through array to find (the first occurrence of) item,
- // returning its index if found; otherwise returning -1.
- function inArray(item, array) {
- var i;
- if (isA(array)) {
- for (i=0; i<array.length; i++) {
- if (array[i] === item) {
- return i;
- }
- }
- }
- return -1;
- }
-
- // remove (the first occurrence of) the specified item from the given
- // array, if any. Return true if the removal was made; false otherwise.
- function removeFromArray(item, array) {
- var found = false,
- i = inArray(item, array);
- if (i >= 0) {
- array.splice(i, 1);
- found = true;
- }
- return found;
- }
-
- // return true if the object is empty, return false otherwise
- function isEmptyObject(obj) {
- var key;
- for (key in obj) {
- return false;
- }
- return true;
- }
-
- // returns true if the two objects have all the same properties
- function sameObjProps(obj1, obj2) {
- var key;
- for (key in obj1) {
- if (obj1.hasOwnProperty(key)) {
- if (!(obj1[key] === obj2[key])) {
- return false;
- }
- }
- }
- return true;
- }
-
- // returns true if the array contains the object
- // does NOT use strict object reference equality,
- // instead checks each property individually for equality
- function containsObj(arr, obj) {
- var i,
- len = arr.length;
- for (i = 0; i < len; i++) {
- if (sameObjProps(arr[i], obj)) {
- return true;
- }
- }
- return false;
- }
-
- // return the given string with the first character capitalized.
- function cap(s) {
- return s.toLowerCase().replace(/^[a-z]/, function (m) {
- return m.toUpperCase();
- });
- }
-
- // return the parameter without a px suffix
- function noPx(num) {
- return Number(num.replace(/px$/, ''));
- }
-
- // return an element's given style property without px suffix
- function noPxStyle(elem, prop) {
- return Number(elem.style(prop).replace(/px$/, ''));
- }
-
- function endsWith(str, suffix) {
- return str.indexOf(suffix, str.length - suffix.length) !== -1;
- }
-
- function parseBitRate(str) {
- return Number(str.replace(/,/, '')
- .replace(/\s+.bps/i, '')
- .replace(/\.\d*/, ''));
- }
-
- // return true if the given debug flag was specified in the query params
- function debugOn(tag) {
- return debugFlags[tag];
- }
-
- angular.module('onosUtil')
- .factory('FnService',
- ['$window', '$location', '$log', function (_$window_, $loc, _$log_) {
- $window = _$window_;
- $log = _$log_;
-
- _parseDebugFlags($loc.search().debug);
-
- return {
- isF: isF,
- isA: isA,
- isS: isS,
- isO: isO,
- contains: contains,
- areFunctions: areFunctions,
- areFunctionsNonStrict: areFunctionsNonStrict,
- windowSize: windowSize,
- isMobile: isMobile,
- isChrome: isChrome,
- isSafari: isSafari,
- isFirefox: isFirefox,
- debugOn: debugOn,
- find: find,
- inArray: inArray,
- removeFromArray: removeFromArray,
- isEmptyObject: isEmptyObject,
- sameObjProps: sameObjProps,
- containsObj: containsObj,
- cap: cap,
- noPx: noPx,
- noPxStyle: noPxStyle,
- endsWith: endsWith,
- parseBitRate: parseBitRate
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/util/keys.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/util/keys.js
deleted file mode 100644
index 5ff4f7f4..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/util/keys.js
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Util -- Key Handler Service
- */
-(function () {
- 'use strict';
-
- // references to injected services
- var $log, fs, ts, ns, qhs;
-
- // internal state
- var enabled = true,
- globalEnabled = true,
- keyHandler = {
- globalKeys: {},
- maskedKeys: {},
- viewKeys: {},
- viewFn: null,
- viewGestures: []
- };
-
- function whatKey(code) {
- switch (code) {
- case 13: return 'enter';
- case 16: return 'shift';
- case 17: return 'ctrl';
- case 18: return 'alt';
- case 27: return 'esc';
- case 32: return 'space';
- case 37: return 'leftArrow';
- case 38: return 'upArrow';
- case 39: return 'rightArrow';
- case 40: return 'downArrow';
- case 91: return 'cmdLeft';
- case 93: return 'cmdRight';
- case 187: return 'equals';
- case 188: return 'comma';
- case 189: return 'dash';
- case 190: return 'dot';
- case 191: return 'slash';
- case 192: return 'backQuote';
- case 220: return 'backSlash';
- default:
- if ((code >= 48 && code <= 57) ||
- (code >= 65 && code <= 90)) {
- return String.fromCharCode(code);
- } else if (code >= 112 && code <= 123) {
- return 'F' + (code - 111);
- }
- return '.';
- }
- }
-
- function keyIn() {
- var event = d3.event,
- keyCode = event.keyCode,
- key = whatKey(keyCode),
- kh = keyHandler,
- gk = kh.globalKeys[key],
- gcb = fs.isF(gk) || (fs.isA(gk) && fs.isF(gk[0])),
- vk = kh.viewKeys[key],
- kl = fs.isF(kh.viewKeys._keyListener),
- vcb = fs.isF(vk) || (fs.isA(vk) && fs.isF(vk[0])) || fs.isF(kh.viewFn),
- token = 'keyev'; // indicate this was a key-pressed event
-
- d3.event.stopPropagation();
-
- if (enabled) {
- // global callback?
- if (gcb && gcb(token, key, keyCode, event)) {
- // if the event was 'handled', we are done
- return;
- }
- // otherwise, let the view callback have a shot
- if (vcb) {
- vcb(token, key, keyCode, event);
- }
- if (kl) {
- kl(key);
- }
- }
- }
-
- function setupGlobalKeys() {
- angular.extend(keyHandler, {
- globalKeys: {
- backSlash: [quickHelp, 'Show / hide Quick Help'],
- slash: [quickHelp, 'Show / hide Quick Help'],
- esc: [escapeKey, 'Dismiss dialog or cancel selections'],
- T: [toggleTheme, "Toggle theme"]
- },
- globalFormat: ['backSlash', 'slash', 'esc', 'T'],
-
- // Masked keys are global key handlers that always return true.
- // That is, the view will never see the event for that key.
- maskedKeys: {
- slash: true,
- backSlash: true,
- T: true
- }
- });
- }
-
- function quickHelp(view, key, code, ev) {
- if (!globalEnabled) {
- return false;
- }
- qhs.showQuickHelp(keyHandler);
- return true;
- }
-
- // returns true if we 'consumed' the ESC keypress, false otherwise
- function escapeKey(view, key, code, ev) {
- return ns.hideIfShown() || qhs.hideQuickHelp();
- }
-
- function toggleTheme(view, key, code, ev) {
- if (!globalEnabled) {
- return false;
- }
- ts.toggleTheme();
- return true;
- }
-
- function setKeyBindings(keyArg) {
- var viewKeys,
- masked = [];
-
- if (fs.isF(keyArg)) {
- // set general key handler callback
- keyHandler.viewFn = keyArg;
- } else {
- // set specific key filter map
- viewKeys = d3.map(keyArg).keys();
- viewKeys.forEach(function (key) {
- if (keyHandler.maskedKeys[key]) {
- masked.push('setKeyBindings(): Key "' + key + '" is reserved');
- }
- });
-
- if (masked.length) {
- $log.warn(masked.join('\n'));
- }
- keyHandler.viewKeys = keyArg;
- }
- }
-
- function getKeyBindings() {
- var gkeys = d3.map(keyHandler.globalKeys).keys(),
- masked = d3.map(keyHandler.maskedKeys).keys(),
- vkeys = d3.map(keyHandler.viewKeys).keys(),
- vfn = !!fs.isF(keyHandler.viewFn);
-
- return {
- globalKeys: gkeys,
- maskedKeys: masked,
- viewKeys: vkeys,
- viewFunction: vfn
- };
- }
-
- function unbindKeys() {
- keyHandler.viewKeys = {};
- keyHandler.viewFn = null;
- keyHandler.viewGestures = [];
- }
-
- function checkNotGlobal(o) {
- var oops = [];
- if (fs.isO(o)) {
- angular.forEach(o, function (val, key) {
- if (keyHandler.globalKeys[key]) {
- oops.push(key);
- }
- });
- if (oops.length) {
- $log.warn('Ignoring reserved global key(s):', oops.join(','));
- oops.forEach(function (key) {
- delete o[key];
- });
- }
- }
- }
-
- angular.module('onosUtil')
- .factory('KeyService',
- ['$log', 'FnService', 'ThemeService', 'NavService',
-
- function (_$log_, _fs_, _ts_, _ns_) {
- $log = _$log_;
- fs = _fs_;
- ts = _ts_;
- ns = _ns_;
-
- return {
- bindQhs: function (_qhs_) {
- qhs = _qhs_;
- },
- installOn: function (elem) {
- elem.on('keydown', keyIn);
- setupGlobalKeys();
- },
- keyBindings: function (x) {
- if (x === undefined) {
- return getKeyBindings();
- } else {
- setKeyBindings(x);
- }
- },
- unbindKeys: unbindKeys,
- gestureNotes: function (g) {
- if (g === undefined) {
- return keyHandler.viewGestures;
- } else {
- keyHandler.viewGestures = fs.isA(g) || [];
- }
- },
- enableKeys: function (b) {
- enabled = b;
- },
- enableGlobalKeys: function (b) {
- globalEnabled = b;
- },
- checkNotGlobal: checkNotGlobal
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/util/prefs.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/util/prefs.js
deleted file mode 100644
index 02a23909..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/util/prefs.js
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Util -- User Preference Service
- */
-(function () {
- 'use strict';
-
- // injected refs
- var $log, $cookies, fs;
-
- // internal state
- var cache = {};
-
- // NOTE: in Angular 1.3.5, $cookies is just a simple object, and
- // cookie values are just strings. From the 1.3.5 docs:
- //
- // "Only a simple Object is exposed and by adding or removing
- // properties to/from this object, new cookies are created/deleted
- // at the end of current $eval. The object's properties can only
- // be strings."
- //
- // We may want to upgrade the version of Angular sometime soon
- // since later version support objects as cookie values.
-
- // NOTE: prefs represented as simple name/value pairs
- // => a temporary restriction while we are encoding into cookies
- /*
- {
- foo: 1,
- bar: 0,
- goo: 2
- }
-
- stored as "foo:1,bar:0,goo:2"
- */
-
- // reads cookie with given name and returns an object rep of its value
- // or null if no such cookie is set
- function getPrefs(name) {
- var cook = $cookies[name],
- bits,
- obj = {};
-
- if (cook) {
- bits = cook.split(',');
- bits.forEach(function (value) {
- var x = value.split(':');
- obj[x[0]] = x[1];
- });
-
- // update the cache
- cache[name] = obj;
- return obj;
- }
- // perhaps we have a cached copy..
- return cache[name];
- }
-
- // converts string values to numbers for selected (or all) keys
- function asNumbers(obj, keys) {
- if (!obj) return null;
-
- if (!keys) {
- // do them all
- angular.forEach(obj, function (v, k) {
- obj[k] = Number(obj[k]);
- });
- } else {
- keys.forEach(function (k) {
- obj[k] = Number(obj[k]);
- });
- }
- return obj;
- }
-
- function setPrefs(name, obj) {
- var bits = [],
- str;
-
- angular.forEach(obj, function (value, key) {
- bits.push(key + ':' + value);
- });
- str = bits.join(',');
-
- // keep a cached copy of the object
- cache[name] = obj;
-
- // The angular way of doing this...
- // $cookies[name] = str;
- // ...but it appears that this gets delayed, and doesn't 'stick' ??
-
- // FORCE cookie to be set by writing directly to document.cookie...
- document.cookie = name + '=' + encodeURIComponent(str);
- if (fs.debugOn('prefs')) {
- $log.debug('<<>> Wrote cookie <'+name+'>:', str);
- }
- }
-
- angular.module('onosUtil')
- .factory('PrefsService', ['$log', '$cookies', 'FnService',
- function (_$log_, _$cookies_, _fs_) {
- $log = _$log_;
- $cookies = _$cookies_;
- fs = _fs_;
-
- return {
- getPrefs: getPrefs,
- asNumbers: asNumbers,
- setPrefs: setPrefs
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/util/random.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/util/random.js
deleted file mode 100644
index 2298a944..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/util/random.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Random -- Encapsulated randomness
- */
-(function () {
- 'use strict';
-
- var $log, fs;
-
- var halfRoot2 = 0.7071;
-
- // given some value, s, returns an integer between -s/2 and s/2
- // e.g. s = 100; result in the range [-50..50)
- function spread(s) {
- return Math.floor((Math.random() * s) - s / 2);
- }
-
- // for a given dimension, d, choose a random value somewhere between
- // 0 and d where the value is within (d / (2 * sqrt(2))) of d/2.
- function randDim(d) {
- return d / 2 + spread(d * halfRoot2);
- }
-
- angular.module('onosUtil')
- .factory('RandomService', ['$log', 'FnService',
-
- function (_$log_, _fs_) {
- $log = _$log_;
- fs = _fs_;
-
- return {
- spread: spread,
- randDim: randDim
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/util/theme.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/util/theme.js
deleted file mode 100644
index 0e0ee649..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/util/theme.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Util -- Theme Service
- */
-(function () {
- 'use strict';
-
- var $log, fs;
-
- var themes = ['light', 'dark'],
- themeStr = themes.join(' '),
- thidx,
- listeners = {},
- nextListenerId = 1;
-
- function init() {
- thidx = 0;
- updateBodyClass();
- }
-
- function getTheme() {
- return themes[thidx];
- }
-
- function setTheme(t) {
- var idx = themes.indexOf(t);
- if (idx > -1 && idx !== thidx) {
- thidx = idx;
- updateBodyClass();
- themeEvent('set');
- }
- }
-
- function toggleTheme() {
- var i = thidx + 1;
- thidx = (i===themes.length) ? 0 : i;
- updateBodyClass();
- themeEvent('toggle');
- return getTheme();
- }
-
- function updateBodyClass() {
- var body = d3.select('body');
- body.classed(themeStr, false);
- body.classed(getTheme(), true);
- }
-
- function themeEvent(w) {
- var t = getTheme(),
- m = 'Theme-Change-('+w+'): ' + t;
- $log.debug(m);
- angular.forEach(listeners, function(value) {
- value.cb(
- {
- event: 'themeChange',
- value: t
- }
- );
- });
- }
-
- function addListener(callback) {
- var id = nextListenerId++,
- cb = fs.isF(callback),
- o = { id: id, cb: cb };
-
- if (cb) {
- listeners[id] = o;
- } else {
- $log.error('ThemeService.addListener(): callback not a function');
- o.error = 'No callback defined';
- }
- return o;
- }
-
- function removeListener(lsnr) {
- var id = lsnr && lsnr.id,
- o = listeners[id];
- if (o) {
- delete listeners[id];
- }
- }
-
- angular.module('onosUtil')
- .factory('ThemeService', ['$log', 'FnService',
- function (_$log_, _fs_) {
- $log = _$log_;
- fs = _fs_;
- thidx = 0;
-
- return {
- init: init,
- theme: function (x) {
- if (x === undefined) {
- return getTheme();
- } else {
- setTheme(x);
- }
- },
- toggleTheme: toggleTheme,
- addListener: addListener,
- removeListener: removeListener
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/util/util.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/util/util.js
deleted file mode 100644
index dc3b09c2..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/util/util.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Utilities Module
- */
-(function () {
- 'use strict';
-
- angular.module('onosUtil', []);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/button.css b/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/button.css
deleted file mode 100644
index 9ae03595..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/button.css
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Button Service -- CSS file
- */
-
-.button,
-.toggleButton,
-.radioSet {
- display: inline-block;
- padding: 0 4px;
-}
-.radioButton {
- display: inline-block;
- padding: 0 2px;
-}
-
-.button svg.embeddedIcon,
-.toggleButton svg.embeddedIcon,
-.radioButton svg.embeddedIcon {
- cursor: pointer;
-}
-.button svg.embeddedIcon .icon rect,
-.toggleButton svg.embeddedIcon .icon rect,
-.radioButton svg.embeddedIcon .icon rect{
- stroke: none;
-}
-
-/* Selected button color */
-.light .button svg.embeddedIcon .icon rect,
-.light .toggleButton.selected svg.embeddedIcon .icon rect,
-.light .radioButton.selected svg.embeddedIcon .icon rect {
- fill: #838383;
-}
-
-.light .button:hover svg.embeddedIcon .icon rect,
-.light .toggleButton.selected:hover svg.embeddedIcon .icon rect
-/* NOTE: selected radio button should NOT have hover highlight */
-{
- fill: #444444;
-}
-
-.light .button svg.embeddedIcon .glyph,
-.light .toggleButton.selected svg.embeddedIcon .glyph,
-.light .radioButton.selected svg.embeddedIcon .glyph {
- fill: white;
-}
-
-.dark .button svg.embeddedIcon .icon rect,
-.dark .toggleButton.selected svg.embeddedIcon .icon rect,
-.dark .radioButton.selected svg.embeddedIcon .icon rect {
- fill: #151515;
-}
-
-.dark .button:hover svg.embeddedIcon .icon rect,
-.dark .toggleButton.selected:hover svg.embeddedIcon .icon rect
-/* NOTE: selected radio button should NOT have hover highlight */
-{
- fill: #444;
-}
-
-.dark .button svg.embeddedIcon .glyph,
-.dark .toggleButton.selected svg.embeddedIcon .glyph,
-.dark .radioButton.selected svg.embeddedIcon .glyph {
- fill: #B2B2B2;
-}
-
-/* Unselected button color */
-.light .toggleButton svg.embeddedIcon .icon rect,
-.light .radioButton svg.embeddedIcon .icon rect {
- fill: #eee;
-}
-
-.light .toggleButton:hover svg.embeddedIcon .icon rect,
-.light .radioButton:hover:not(.selected) svg.embeddedIcon .icon rect {
- fill: #ccc;
-}
-
-.light .toggleButton svg.embeddedIcon .glyph,
-.light .radioButton svg.embeddedIcon .glyph {
- fill: #bbb;
-}
-.light .toggleButton:hover:not(.selected) svg.embeddedIcon .glyph,
-.light .radioButton:hover:not(.selected) svg.embeddedIcon .glyph {
- fill: #999;
-}
-
-.dark .toggleButton svg.embeddedIcon .icon rect,
-.dark .radioButton svg.embeddedIcon .icon rect {
- fill: #303030;
-}
-
-.dark .toggleButton:hover:not(.selected) svg.embeddedIcon .icon rect,
-.dark .radioButton:hover:not(.selected) svg.embeddedIcon .icon rect {
- fill: #555;
-}
-
-.dark .toggleButton svg.embeddedIcon .glyph,
-.dark .radioButton svg.embeddedIcon .glyph {
- fill: #565656;
-}
-
-.dark .toggleButton:hover:not(.selected) svg.embeddedIcon .glyph,
-.dark .radioButton:hover:not(.selected) svg.embeddedIcon .glyph {
- fill: #777;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/button.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/button.js
deleted file mode 100644
index 2ef5b4b0..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/button.js
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Widget -- Button Service
- */
-(function () {
- 'use strict';
-
- // injected refs
- var $log, fs, is, tts;
-
- // configuration
- var btnSize = 25,
- btnPadding = 4;
-
-
- // === Helper Functions
-
- function divExists(div, msg) {
- if (!div) {
- $log.warn('div undefined (' + msg + ')');
- }
- return !!div;
- }
-
- function createDiv(div, cls, id) {
- return div.append('div')
- .classed(cls, true)
- .attr('id', id);
- }
-
- function noop() {}
-
- function buttonWidth() {
- return btnSize + 2 * btnPadding;
- }
-
- // === BUTTON =================================================
-
- // div is where to put the button (d3.selection of a DIV element)
- // id should be globally unique
- // gid is glyph ID (from Glyph Service)
- // cb is callback function on click
- // tooltip is text for tooltip
- function button(div, id, gid, cb, tooltip) {
- if (!divExists(div, 'button')) return null;
-
- var btnDiv = createDiv(div, 'button', id),
- cbFnc = fs.isF(cb) || noop;
-
- is.loadIcon(btnDiv, gid, btnSize, true);
- if (tooltip) { tts.addTooltip(btnDiv, tooltip); }
-
- btnDiv.on('click', cbFnc);
-
- return {
- id: id,
- width: buttonWidth
- }
- }
-
-
- // === TOGGLE BUTTON ==========================================
-
- // div is where to put the button (d3.selection of a DIV element)
- // id should be globally unique
- // gid is glyph ID (from Glyph Service)
- // initState is whether the toggle is on or not to begin
- // cb is callback function on click
- // tooltip is text for tooltip
- function toggle(div, id, gid, initState, cb, tooltip) {
- if (!divExists(div, 'toggle button')) return null;
-
- var sel = !!initState,
- togDiv = createDiv(div, 'toggleButton', id),
- cbFnc = fs.isF(cb) || noop;
-
- is.loadIcon(togDiv, gid, btnSize, true);
- togDiv.classed('selected', sel);
- if (tooltip) { tts.addTooltip(togDiv, tooltip); }
-
- function _toggle(b, nocb) {
- sel = (b === undefined) ? !sel : !!b;
- togDiv.classed('selected', sel);
- nocb || cbFnc(sel);
- }
-
- // toggle the button state without invoking the callback
- function toggleNoCb() {
- _toggle(undefined, true);
- }
-
- togDiv.on('click', _toggle);
-
- return {
- id: id,
- width: buttonWidth,
- selected: function () { return sel; },
- toggle: _toggle,
- toggleNoCb: toggleNoCb
- }
- }
-
-
- // === RADIO BUTTON SET =======================================
-
-
- // div is where to put the button (d3.selection of a DIV element)
- // id should be globally unique
- // rset is an array of button descriptors of the following form:
- // {
- // gid: glyphId,
- // tooltip: tooltipText,
- // cb: callbackFunction
- // }
- function radioSet(div, id, rset) {
- if (!divExists(div, 'radio button set')) return null;
-
- if (!fs.isA(rset) || !rset.length) {
- $log.warn('invalid array (radio button set)');
- return null;
- }
-
- var rDiv = createDiv(div, 'radioSet', id),
- rads = [],
- idxByKey = {},
- currIdx = 0;
-
- function rsetWidth() {
- return ((btnSize + btnPadding) * rads.length) + btnPadding;
- }
-
- function rbclick() {
- var id = d3.select(this).attr('id'),
- m = /^.*-(\d+)$/.exec(id),
- idx = Number(m[1]);
-
- if (idx !== currIdx) {
- rads[currIdx].el.classed('selected', false);
- currIdx = idx;
- rads[currIdx].el.classed('selected', true);
- invokeCurrent();
- }
- }
-
- // {
- // gid: gid,
- // tooltip: ..., (optional)
- // key: ..., (optional)
- // cb: cb
- // id: ... (added by us)
- // index: ... (added by us)
- // }
-
- rset.forEach(function (btn, index) {
-
- if (!fs.isO(btn)) {
- $log.warn('radio button descriptor at index ' + index +
- ' not an object');
- return;
- }
-
- var rid = id + '-' + index,
- initSel = (index === 0),
- rbdiv = createDiv(rDiv, 'radioButton', rid);
-
- rbdiv.classed('selected', initSel);
- rbdiv.on('click', rbclick);
- is.loadIcon(rbdiv, btn.gid, btnSize, true);
- if (btn.tooltip) { tts.addTooltip(rbdiv, btn.tooltip); }
- angular.extend(btn, {
- el: rbdiv,
- id: rid,
- cb: fs.isF(btn.cb) || noop,
- index: index
- });
-
- if (btn.key) {
- idxByKey[btn.key] = index;
- }
-
- rads.push(btn);
- });
-
-
- function invokeCurrent() {
- var curr = rads[currIdx];
- curr.cb(curr.index, curr.key);
- }
-
- function selected(x) {
- var curr = rads[currIdx],
- idx;
-
- if (x === undefined) {
- return curr.key || curr.index;
- } else {
- idx = idxByKey[x];
- if (idx === undefined) {
- $log.warn('no radio button with key:', x);
- } else {
- selectedIndex(idx);
- }
- }
- }
-
- function selectedIndex(x) {
- if (x === undefined) {
- return currIdx;
- } else {
- if (x >= 0 && x < rads.length) {
- if (currIdx !== x) {
- rads[currIdx].el.classed('selected', false);
- currIdx = x;
- rads[currIdx].el.classed('selected', true);
- invokeCurrent();
- } else {
- $log.warn('current index already selected:', x);
- }
- } else {
- $log.warn('invalid radio button index:', x);
- }
- }
- }
-
- return {
- width: rsetWidth,
- selected: selected,
- selectedIndex: selectedIndex
- }
- }
-
-
- angular.module('onosWidget')
- .factory('ButtonService',
- ['$log', 'FnService', 'IconService', 'TooltipService',
-
- function (_$log_, _fs_, _is_, _tts_) {
- $log = _$log_;
- fs = _fs_;
- is = _is_;
- tts = _tts_;
-
- return {
- button: button,
- toggle: toggle,
- radioSet: radioSet
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/table.css b/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/table.css
deleted file mode 100644
index 356ac0f7..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/table.css
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* ------ for summary-list tables ------ */
-
-div.summary-list {
- margin: 0 20px 16px 10px;
- font-size: 10pt;
- border-spacing: 0;
-}
-
-div.loading-wheel {
- display: inline-block;
- position: absolute;
- margin-top: 40px;
- left: 47%;
- animation: spin reverse 2s ease infinite;
- z-index: 1000;
-}
-
-@keyframes spin {
- to {
- transform: rotate(360deg);
- }
-}
-
-div.loading-wheel svg.embeddedIcon g.icon .glyph {
- opacity: .8;
-}
-.light div.loading-wheel svg.embeddedIcon g.icon .glyph {
- fill: #964949;
-}
-.dark div.loading-wheel svg.embeddedIcon g.icon .glyph {
- fill: whitesmoke;
-}
-
-div.summary-list table {
- border-collapse: collapse;
- table-layout: fixed;
- empty-cells: show;
- margin: 0;
-}
-
-div.summary-list div.table-body {
- overflow-y: scroll;
-}
-
-div.summary-list div.table-body::-webkit-scrollbar {
- display: none;
-}
-
-div.summary-list tr.no-data td {
- text-align: center;
- font-style: italic;
-}
-
-.light div.summary-list tr:nth-child(even) {
- background-color: #ddd;
-}
-.light div.summary-list tr:nth-child(odd) {
- background-color: #eee;
-}
-.dark div.summary-list tr:nth-child(even) {
- background-color: #333;
-}
-.dark div.summary-list tr:nth-child(odd) {
- background-color: #444;
-}
-
-.light div.summary-list tr.selected {
- background-color: deepskyblue !important;
-}
-
-.dark div.summary-list tr.selected {
- background-color: #304860;
-}
-
-/* highlighting */
-div.summary-list tr {
- transition: background-color 500ms;
-}
-.light div.summary-list tr.data-change {
- background-color: #FDFFDC;
-}
-.dark div.summary-list tr.data-change {
- background-color: #5A5600;
-}
-
-div.summary-list td {
- padding: 6px;
- text-align: left;
- word-wrap: break-word;
-}
-
-div.summary-list .table-header td {
- letter-spacing: 0.02em;
- cursor: pointer;
- font-weight: bold;
-}
-div.summary-list .table-header td:first-child {
- border-radius: 8px 0 0 0;
-}
-div.summary-list .table-header td:last-child {
- border-radius: 0 8px 0 0;
-}
-
-.light div.summary-list .table-header td {
- background-color: #bbb;
-}
-.dark div.summary-list .table-header td {
- background-color: #222;
- color: #ccc;
-}
-
-/* rows are selectable */
-div.summary-list .table-body td {
- cursor: pointer;
-}
-
-.dark div.summary-list td {
- color: #ccc;
-}
-
-/* Tabular view upper right control buttons */
-
-div.ctrl-btns {
- display: inline-block;
- float: right;
- height: 44px;
- margin-right: 24px;
- margin-top: 7px;
-}
-
-
-div.ctrl-btns div {
- display: inline-block;
- padding: 4px;
- cursor: pointer;
-}
-
-div.ctrl-btns div.separator {
- cursor: auto;
- width: 24px;
- border: none;
-}
-
-/* Inactive */
-.light .ctrl-btns div g.icon rect,
-.light .ctrl-btns div:hover g.icon rect {
- fill: #eee;
-}
-.dark .ctrl-btns div g.icon rect,
-.dark .ctrl-btns div:hover g.icon rect {
- fill: #222;
-}
-
-.light .ctrl-btns div g.icon use {
- fill: #ddd;
-}
-.dark .ctrl-btns div g.icon use {
- fill: #333;
-}
-
-/* Active hover */
-.light .ctrl-btns div.active:hover g.icon rect {
- fill: #800;
-}
-
-.dark .ctrl-btns div.active:hover g.icon rect {
- fill: #CE5650;
-}
-
-/* Active */
-.light .ctrl-btns div.active g.icon use {
- fill: #fff;
-}
-.dark .ctrl-btns div.active g.icon use {
- fill: #eee;
-}
-
-.light .ctrl-btns div.active g.icon rect {
- fill: #bbb;
-}
-.dark .ctrl-btns div.active g.icon rect {
- fill: #444;
-}
-
-/* Refresh button specific */
-.light .ctrl-btns div.refresh.active g.icon rect {
- fill: #964949;
-}
-
-.dark .ctrl-btns div.refresh.active g.icon rect {
- fill: #9B4641;
-}
-.light .ctrl-btns div.refresh:hover g.icon rect {
- fill: #964949;
-}
-
-.dark .ctrl-btns div.refresh:hover g.icon rect {
- fill: #9B4641;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/table.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/table.js
deleted file mode 100644
index 327aedb9..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/table.js
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Widget -- Table Service
- */
-(function () {
- 'use strict';
-
- // injected refs
- var $log, $window, fs, mast, is;
-
- // constants
- var tableIconTdSize = 33,
- pdg = 22,
- flashTime = 1500,
- colWidth = 'col-width',
- tableIcon = 'table-icon',
- asc = 'asc',
- desc = 'desc',
- none = 'none';
-
- // internal state
- var currCol = {},
- prevCol = {},
- cstmWidths = {},
- sortIconAPI;
-
- // Functions for resizing a tabular view to the window
-
- function _width(elem, width) {
- elem.style('width', width);
- }
-
- function findCstmWidths(table) {
- var headers = table.select('.table-header').selectAll('td');
-
- headers.each(function (d, i) {
- var h = d3.select(this),
- index = i.toString();
- if (h.classed(tableIcon)) {
- cstmWidths[index] = tableIconTdSize + 'px';
- }
- if (h.attr(colWidth)) {
- cstmWidths[index] = h.attr(colWidth);
- }
- });
- if (fs.debugOn('widget')) {
- $log.debug('Headers with custom widths: ', cstmWidths);
- }
- }
-
- function setTdWidths(elem, width) {
- var tds = elem.select('tr:first-child').selectAll('td');
- _width(elem, width + 'px');
-
- tds.each(function (d, i) {
- var td = d3.select(this),
- index = i.toString();
- if (cstmWidths.hasOwnProperty(index)) {
- _width(td, cstmWidths[index]);
- }
- });
- }
-
- function setHeight(thead, body, height) {
- var h = height - (mast.mastHeight() +
- fs.noPxStyle(d3.select('.tabular-header'), 'height') +
- fs.noPxStyle(thead, 'height') + pdg);
- body.style('height', h + 'px');
- }
-
- function adjustTable(haveItems, tableElems, width, height) {
- if (haveItems) {
- setTdWidths(tableElems.thead, width);
- setTdWidths(tableElems.tbody, width);
- setHeight(tableElems.thead, tableElems.table.select('.table-body'), height);
- } else {
- setTdWidths(tableElems.thead, width);
- _width(tableElems.tbody, width + 'px');
- }
- }
-
- // Functions for sorting table rows by header
-
- function updateSortDirection(thElem) {
- sortIconAPI.sortNone(thElem.select('div'));
- currCol.div = thElem.append('div');
- currCol.colId = thElem.attr('colId');
-
- if (currCol.colId === prevCol.colId) {
- (currCol.dir === desc) ? currCol.dir = asc : currCol.dir = desc;
- prevCol.dir = currCol.dir;
- } else {
- currCol.dir = asc;
- prevCol.dir = none;
- }
- (currCol.dir === asc) ?
- sortIconAPI.sortAsc(currCol.div) : sortIconAPI.sortDesc(currCol.div);
-
- if (prevCol.colId && prevCol.dir === none) {
- sortIconAPI.sortNone(prevCol.div);
- }
-
- prevCol.colId = currCol.colId;
- prevCol.div = currCol.div;
- }
-
- function sortRequestParams() {
- return {
- sortCol: currCol.colId,
- sortDir: currCol.dir
- };
- }
-
- function resetSort() {
- if (currCol.div) {
- sortIconAPI.sortNone(currCol.div);
- }
- if (prevCol.div) {
- sortIconAPI.sortNone(prevCol.div);
- }
- currCol = {};
- prevCol = {};
- }
-
- angular.module('onosWidget')
- .directive('onosTableResize', ['$log','$window',
- 'FnService', 'MastService',
-
- function (_$log_, _$window_, _fs_, _mast_) {
- return function (scope, element) {
- $log = _$log_;
- $window = _$window_;
- fs = _fs_;
- mast = _mast_;
-
- var table = d3.select(element[0]),
- tableElems = {
- table: table,
- thead: table.select('.table-header').select('table'),
- tbody: table.select('.table-body').select('table')
- },
- wsz;
-
- findCstmWidths(table);
-
- // adjust table on window resize
- scope.$watchCollection(function () {
- return {
- h: $window.innerHeight,
- w: $window.innerWidth
- };
- }, function () {
- wsz = fs.windowSize(0, 30);
- adjustTable(
- scope.tableData.length,
- tableElems,
- wsz.width, wsz.height
- );
- });
-
- // adjust table when data changes
- scope.$watchCollection('tableData', function () {
- adjustTable(
- scope.tableData.length,
- tableElems,
- wsz.width, wsz.height
- );
- });
-
- scope.$on('$destroy', function () {
- cstmWidths = {};
- });
- };
- }])
-
- .directive('onosSortableHeader', ['$log', 'IconService',
- function (_$log_, _is_) {
- return function (scope, element) {
- $log = _$log_;
- is = _is_;
- var header = d3.select(element[0]);
- sortIconAPI = is.sortIcons();
-
- header.selectAll('td').on('click', function () {
- var col = d3.select(this);
-
- if (col.attr('sortable') === '') {
- updateSortDirection(col);
- scope.sortParams = sortRequestParams();
- scope.sortCallback(scope.sortParams);
- }
- });
-
- scope.$on('$destroy', function () {
- resetSort();
- });
- };
- }])
-
- .directive('onosFlashChanges',
- ['$log', '$parse', '$timeout', 'FnService',
- function ($log, $parse, $timeout, fs) {
-
- return function (scope, element, attrs) {
- var idProp = attrs.idProp,
- table = d3.select(element[0]),
- trs, promise;
-
- function highlightRows() {
- var changedRows = [];
- function classRows(b) {
- if (changedRows.length) {
- angular.forEach(changedRows, function (tr) {
- tr.classed('data-change', b);
- });
- }
- }
- // timeout because 'row-id' was the un-interpolated value
- // "{{link.one}}" for example, instead of link.one evaluated
- // timeout executes on the next digest -- after evaluation
- $timeout(function () {
- if (scope.tableData.length) {
- trs = table.selectAll('tr');
- }
-
- if (trs && !trs.empty()) {
- trs.each(function () {
- var tr = d3.select(this);
- if (fs.find(tr.attr('row-id'),
- scope.changedData,
- idProp) > -1) {
- changedRows.push(tr);
- }
- });
- classRows(true);
- promise = $timeout(function () {
- classRows(false);
- }, flashTime);
- trs = undefined;
- }
- });
- }
-
- // new items added:
- scope.$on('ngRepeatComplete', highlightRows);
- // items changed in existing set:
- scope.$watchCollection('changedData', highlightRows);
-
- scope.$on('$destroy', function () {
- if (promise) {
- $timeout.cancel(promise);
- }
- });
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/tableBuilder.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/tableBuilder.js
deleted file mode 100644
index 6a5ffb1f..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/tableBuilder.js
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Widget -- Table Service
- */
-(function () {
- 'use strict';
-
- // injected refs
- var $log, $interval, $timeout, fs, wss;
-
- // constants
- var refreshInterval = 2000,
- loadingWait = 500;
-
- // example params to buildTable:
- // {
- // scope: $scope, <- controller scope
- // tag: 'device', <- table identifier
- // selCb: selCb, <- row selection callback (optional)
- // respCb: respCb, <- websocket response callback (optional)
- // query: params <- query parameters in URL (optional)
- // }
- // Note: selCb() is passed the row data model of the selected row,
- // or null when no row is selected.
- // Note: query is always an object (empty or containing properties)
- // it comes from $location.search()
-
- function buildTable(o) {
- var handlers = {},
- root = o.tag + 's',
- req = o.tag + 'DataRequest',
- resp = o.tag + 'DataResponse',
- onSel = fs.isF(o.selCb),
- onResp = fs.isF(o.respCb),
- idKey = o.idKey || 'id',
- oldTableData = [],
- loaded = false,
- refreshPromise, loadingPromise;
-
- o.scope.tableData = [];
- o.scope.changedData = [];
- o.scope.sortParams = {};
- o.scope.loading = true;
- o.scope.autoRefresh = true;
- o.scope.autoRefreshTip = 'Toggle auto refresh';
-
- // === websocket functions --------------------
- // response
- function respCb(data) {
- loaded = true;
- o.scope.loading = false;
- o.scope.tableData = data[root];
- onResp && onResp();
-
- // checks if data changed for row flashing
- if (!angular.equals(o.scope.tableData, oldTableData)) {
- o.scope.changedData = [];
- // only flash the row if the data already exists
- if (oldTableData.length) {
- angular.forEach(o.scope.tableData, function (item) {
- if (!fs.containsObj(oldTableData, item)) {
- o.scope.changedData.push(item);
- }
- });
- }
- angular.copy(o.scope.tableData, oldTableData);
- }
- o.scope.$apply();
- }
- handlers[resp] = respCb;
- wss.bindHandlers(handlers);
-
- // request
- function sortCb(params) {
- var p = angular.extend({}, params, o.query);
- wss.sendEvent(req, p);
- stillLoading();
- }
- o.scope.sortCallback = sortCb;
-
- // show loading wheel if it's taking a while for the server to respond
- function stillLoading() {
- loaded = false;
- loadingPromise = $timeout(function () {
- if (!loaded) {
- o.scope.loading = true;
- }
- }, loadingWait);
- }
-
- // === selecting a row functions ----------------
- function selCb($event, selRow) {
- var selId = selRow[idKey];
- o.scope.selId = (o.scope.selId === selId) ? null : selId;
- onSel && onSel($event, selRow);
- }
- o.scope.selectCallback = selCb;
-
- // === autoRefresh functions ------------------
- function startRefresh() {
- refreshPromise = $interval(function () {
- if (fs.debugOn('widget')) {
- $log.debug('Refreshing ' + root + ' page');
- }
- sortCb(o.scope.sortParams);
- }, refreshInterval);
- }
-
- function stopRefresh() {
- if (angular.isDefined(refreshPromise)) {
- $interval.cancel(refreshPromise);
- refreshPromise = undefined;
- }
- }
-
- function toggleRefresh() {
- o.scope.autoRefresh = !o.scope.autoRefresh;
- o.scope.autoRefresh ? startRefresh() : stopRefresh();
- }
- o.scope.toggleRefresh = toggleRefresh;
-
- // === Cleanup on destroyed scope -----------------
- o.scope.$on('$destroy', function () {
- wss.unbindHandlers(handlers);
- stopRefresh();
- if (angular.isDefined(loadingPromise)) {
- $timeout.cancel(loadingPromise);
- loadingPromise = undefined;
- }
- });
-
- sortCb();
- startRefresh();
- }
-
- angular.module('onosWidget')
- .factory('TableBuilderService',
- ['$log', '$interval', '$timeout', 'FnService', 'WebSocketService',
-
- function (_$log_, _$interval_, _$timeout_, _fs_, _wss_) {
- $log = _$log_;
- $interval = _$interval_;
- $timeout = _$timeout_;
- fs = _fs_;
- wss = _wss_;
-
- return {
- buildTable: buildTable
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/toolbar.css b/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/toolbar.css
deleted file mode 100644
index 36a5971b..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/toolbar.css
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Toolbar Service -- CSS file
- */
-
-.light .tbar-arrow svg.embeddedIcon .icon .glyph {
- fill: #838383;
-}
-.dark .tbar-arrow svg.embeddedIcon .icon .glyph {
- fill: #B2B2B2;
-}
-
-
-div.tbar-arrow {
- position: absolute;
- top: 53%;
- left: 96%;
- margin-right: -4%;
- transform: translate(-50%, -50%);
- cursor: pointer;
-}
-.safari div.tbar-arrow {
- top: 46%;
-}
-.firefox div.tbar-arrow {
- left: 97%;
- margin-right: -3%;
-}
-
-.tbar-arrow svg.embeddedIcon .icon rect {
- stroke: none;
-}
-.light .tbar-arrow svg.embeddedIcon .icon rect {
- fill: none;
-}
-.dark .tbar-arrow svg.embeddedIcon .icon rect {
- fill: none;
-}
-
-
-.toolbar {
- line-height: 125%;
-}
-.tbar-row {
- display: inline-block;
-}
-
-
-
-.separator {
- border: 1px solid;
- margin: 0 4px 0 4px;
- display: inline-block;
- height: 23px;
- width: 0;
-}
-.light .separator {
- border-color: #ddd;
-}
-.dark .separator {
- border-color: #1A1A1A;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/toolbar.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/toolbar.js
deleted file mode 100644
index 050afd0f..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/toolbar.js
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Widget -- Toolbar Service
- */
-// TODO: Augment service to allow toolbars to exist on right edge of screen
-// TODO: also - make toolbar more object aware (rows etc.)
-
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, fs, ps, bns, is;
-
- // configuration
- var arrowSize = 10,
- sepWidth = 6,
- defaultSettings = {
- edge: 'left',
- width: 20,
- margin: 0,
- hideMargin: -20,
- top: 'auto',
- bottom: '10px',
- fade: false,
- shown: false
- };
-
- // internal state
- var tbars = {};
-
-
- // === Helper functions --------------------------------------
-
- // translate uses 50 because the svg viewbox is 50
- function rotateArrowLeft(adiv) {
- adiv.select('g')
- .attr('transform', 'translate(0 50) rotate(-90)');
- }
- function rotateArrowRight(adiv) {
- adiv.select('g')
- .attr('transform', 'translate(50 0) rotate(90)');
- }
-
- function createArrow(panel) {
- var arrowDiv = panel.append('div')
- .classed('tbar-arrow', true);
- is.loadIcon(arrowDiv, 'triangleUp', arrowSize, true);
- return arrowDiv;
- }
-
- function warn(msg, id) {
- $log.warn('createToolbar: ' + msg + ': [' + id + ']');
- return null;
- }
-
- // ==================================
-
- function createToolbar(id, opts) {
- if (!id) return warn('no ID given');
- if (tbars[id]) return warn('duplicate ID given', id);
-
- var settings = angular.extend({}, defaultSettings, fs.isO(opts)),
- items = {},
- tbid = 'toolbar-' + id,
- panel = ps.createPanel(tbid, settings),
- arrowDiv = createArrow(panel),
- currentRow = panel.append('div').classed('tbar-row', true),
- rowButtonIds = [], // for removable buttons
- tbWidth = arrowSize + 2, // empty toolbar width
- maxWidth = panel.width();
-
- arrowDiv.on('click', toggle);
-
- // add a descriptor for this toolbar
- tbars[id] = {
- settings: settings,
- items: items,
- panel: panel,
- panelId: tbid
- };
-
- panel.classed('toolbar', true)
- .style('top', settings.top)
- .style('bottom', settings.bottom);
-
- // Helper functions
-
- function dupId(id, caller) {
- if (items[id]) {
- $log.warn(caller + ': duplicate ID:', id);
- return true;
- }
- return false;
- }
-
- function adjustWidth(btnWidth) {
- if (fs.noPxStyle(currentRow, 'width') >= maxWidth) {
- tbWidth += btnWidth;
- maxWidth = tbWidth;
- }
- panel.width(tbWidth);
- }
-
- // API functions
-
- function addButton(id, gid, cb, tooltip) {
- if (dupId(id, 'addButton')) return null;
-
- var bid = tbid + '-' + id,
- btn = bns.button(currentRow, bid, gid, cb, tooltip);
-
- items[id] = btn;
- adjustWidth(btn.width());
- return btn;
- }
-
- function addToggle(id, gid, initState, cb, tooltip) {
- if (dupId(id, 'addToggle')) return null;
-
- var tid = tbid + '-' + id,
- tog = bns.toggle(currentRow, tid, gid, initState, cb, tooltip);
-
- items[id] = tog;
- adjustWidth(tog.width());
- return tog;
- }
-
- function addRadioSet(id, rset) {
- if (dupId(id, 'addRadioSet')) return null;
-
- var rid = tbid + '-' + id,
- rad = bns.radioSet(currentRow, rid, rset);
-
- items[id] = rad;
- adjustWidth(rad.width());
- return rad;
- }
-
- function addSeparator() {
- currentRow.append('div')
- .classed('separator', true);
- tbWidth += sepWidth;
- }
-
- function addRow() {
- if (currentRow.select('div').empty()) {
- return null;
- } else {
- panel.append('br');
- currentRow = panel.append('div').classed('tbar-row', true);
-
- // return API to allow caller more access to the row
- return {
- clear: rowClear,
- setText: rowSetText,
- addButton: rowAddButton,
- classed: rowClassed
- };
- }
- }
-
- function rowClear() {
- currentRow.selectAll('*').remove();
- rowButtonIds.forEach(function (bid) {
- delete items[bid];
- });
- rowButtonIds = [];
- }
-
- // installs a div with text into the button row
- function rowSetText(text) {
- rowClear();
- currentRow.append('div').classed('tbar-row-text', true)
- .html(text);
- }
-
- function rowAddButton(id, gid, cb, tooltip) {
- var b = addButton(id, gid, cb, tooltip);
- if (b) {
- rowButtonIds.push(id);
- }
- }
-
- function rowClassed(classes, bool) {
- currentRow.classed(classes, bool);
- }
-
- function show(cb) {
- rotateArrowLeft(arrowDiv);
- panel.show(cb);
- }
-
- function hide(cb) {
- rotateArrowRight(arrowDiv);
- panel.hide(cb);
- }
-
- function toggle(cb) {
- if (panel.isVisible()) {
- hide(cb);
- } else {
- show(cb);
- }
- }
-
- return {
- addButton: addButton,
- addToggle: addToggle,
- addRadioSet: addRadioSet,
- addSeparator: addSeparator,
- addRow: addRow,
-
- show: show,
- hide: hide,
- toggle: toggle
- };
- }
-
- function destroyToolbar(id) {
- var tb = tbars[id];
- delete tbars[id];
-
- if (tb) {
- ps.destroyPanel(tb.panelId);
- }
- }
-
- // === Module Definition ===
-
- angular.module('onosWidget')
- .factory('ToolbarService',
- ['$log', 'FnService', 'PanelService', 'ButtonService', 'IconService',
-
- function (_$log_, _fs_, _ps_, _bns_, _is_) {
- $log = _$log_;
- fs = _fs_;
- ps = _ps_;
- bns = _bns_;
- is = _is_;
-
- // this function is only used in testing
- function init() {
- tbars = {};
- }
-
- return {
- init: init,
- createToolbar: createToolbar,
- destroyToolbar: destroyToolbar
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/tooltip.css b/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/tooltip.css
deleted file mode 100644
index f967793c..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/tooltip.css
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Tooltip Service -- CSS file
- */
-
-#tooltip {
- text-align: center;
- font-size: 80%;
- border: 1px solid;
- padding: 5px;
- position: absolute;
- z-index: 5000;
- display: none;
- pointer-events: none;
-}
-
-/* colors subject to change */
-
-.light #tooltip {
- background-color: #ddd;
- color: #444;
- border-color: #ccc;
-}
-
-.dark #tooltip {
- background-color: #151515;
- color: #B2B2B2;
- border-color: #252525;
-} \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/tooltip.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/tooltip.js
deleted file mode 100644
index dd8a6950..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/tooltip.js
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Widget -- Tooltip Service
- */
-
-(function () {
- 'use strict';
-
- // injected references
- var $log, $rootScope, fs;
-
- // constants
- var hoverHeight = 35,
- hoverDelay = 150,
- exitDelay = 150;
-
- // internal state
- var tooltip, currElemId;
-
- // === Helper functions ---------------------------------------------
-
- function init() {
- tooltip = d3.select('#tooltip');
- tooltip.html('');
- }
-
- function tipStyle(mouseX, mouseY) {
- var winWidth = fs.windowSize().width,
- winHeight = fs.windowSize().height,
- style = {
- display: 'inline-block',
- left: 'auto',
- right: 'auto'
- };
-
- if (mouseX <= (winWidth / 2)) {
- style.left = mouseX + 'px';
- } else {
- style.right = (winWidth - mouseX) + 'px';
- }
-
- if (mouseY <= (winHeight / 2)) {
- style.top = (mouseY + (hoverHeight - 10)) + 'px';
- } else {
- style.top = (mouseY - hoverHeight) + 'px';
- }
-
- return style;
- }
-
- // === API functions ------------------------------------------------
-
- function addTooltip(elem, tooltip) {
- elem.on('mouseover', function () { showTooltip(this, tooltip); });
- elem.on('mouseout', function () { cancelTooltip(this); });
- $rootScope.$on('$routeChangeStart', function () {
- cancelTooltip(elem.node());
- });
- }
-
- function showTooltip(el, msg) {
- // tooltips don't make sense on mobile devices
- if (!el || !msg || fs.isMobile()) {
- return;
- }
-
- var elem = d3.select(el),
- mouseX = d3.event.pageX,
- mouseY = d3.event.pageY,
- style = tipStyle(mouseX, mouseY);
- currElemId = elem.attr('id');
-
- tooltip.transition()
- .delay(hoverDelay)
- .each('start', function () {
- d3.select(this).style('display', 'none');
- })
- .each('end', function () {
- d3.select(this).style(style)
- .text(msg);
- });
- }
-
- function cancelTooltip(el) {
- if (!el) {
- return;
- }
- var elem = d3.select(el);
-
- if (elem.attr('id') === currElemId) {
- tooltip.transition()
- .delay(exitDelay)
- .style({
- display: 'none'
- })
- .text('');
- }
- }
-
- angular.module('onosWidget')
-
- .directive('tooltip', ['$rootScope', 'FnService',
- function (_$rootScope_, _fs_) {
- $rootScope = _$rootScope_;
- fs = _fs_;
-
- init();
-
- return {
- restrict: 'A',
- link: function (scope, elem, attrs) {
- addTooltip(d3.select(elem[0]), scope[attrs.ttMsg]);
- }
- };
- }])
-
- .factory('TooltipService', ['$log', '$rootScope', 'FnService',
- function (_$log_, _$rootScope_, _fs_) {
- $log = _$log_;
- $rootScope = _$rootScope_;
- fs = _fs_;
-
- init();
-
- return {
- addTooltip: addTooltip,
- showTooltip: showTooltip,
- cancelTooltip: cancelTooltip
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/widget.js b/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/widget.js
deleted file mode 100644
index d11c8287..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/fw/widget/widget.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Widgets Module
- */
-(function () {
- 'use strict';
-
- angular.module('onosWidget', []);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/onos.css b/framework/src/onos/web/gui/src/main/webapp/app/onos.css
deleted file mode 100644
index b42af35e..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/onos.css
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- core -- CSS file
- */
-
-html {
- font-family: sans-serif;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
- height: 100%;
-}
-
-/*
- overflow hidden is to ensure that the body does not expand to account
- for any flyout panes, that are positioned "off screen".
- */
-body {
- height: 100%;
- margin: 0;
- overflow: hidden;
-}
-
-body.light {
- background-color: white;
-}
-body.dark {
- background-color: #2b2b2b;
-}
-
-#view {
- padding: 6px;
- width: 100%;
- height: 100%;
-}
-
-#view h2 {
- padding-left: 12px;
-}
-
-.light #view h2 {
- color: #800;
-}
-.dark #view h2 {
- color: #CE5650;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/app/app.css b/framework/src/onos/web/gui/src/main/webapp/app/view/app/app.css
deleted file mode 100644
index 9413369a..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/app/app.css
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Host View -- CSS file
- */
-
-#ov-app h2 {
- display: inline-block;
-}
-
-#ov-app div.ctrl-btns {
- width: 290px;
-}
-
-#ov-app form#inputFileForm,
-#ov-app input#uploadFile {
- display: none;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/app/app.html b/framework/src/onos/web/gui/src/main/webapp/app/view/app/app.html
deleted file mode 100644
index 85b044fb..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/app/app.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!-- app partial HTML -->
-<div id="ov-app">
- <div class="tabular-header">
- <h2>Applications ({{tableData.length}} total)</h2>
- <div class="ctrl-btns">
- <div class="refresh" ng-class="{active: autoRefresh}"
- icon icon-size="36" icon-id="refresh"
- tooltip tt-msg="autoRefreshTip"
- ng-click="toggleRefresh()"></div>
- <div class="separator"></div>
-
- <form id="inputFileForm">
- <input id="uploadFile"
- type="file" size="50" accept=".oar"
- file-model="appFile">
- </form>
- <div icon icon-size="36" icon-id="plus"
- class="active" trigger-form
- tooltip tt-msg="uploadTip">
- </div>
- <div icon icon-size="36" icon-id="play"
- ng-click="appAction('activate')"
- tooltip tt-msg="activateTip"
- ng-class="{active: ctrlBtnState.installed}">
- </div>
- <div icon icon-size="36" icon-id="stop"
- ng-click="appAction('deactivate')"
- tooltip tt-msg="deactivateTip"
- ng-class="{active: ctrlBtnState.active}">
- </div>
- <div icon icon-size="36" icon-id="garbage"
- ng-click="appAction('uninstall')"
- tooltip tt-msg="uninstallTip"
- ng-class="{active: ctrlBtnState.selection}">
- </div>
- </div>
- </div>
-
- <div class="summary-list" onos-table-resize>
- <div ng-show="loading" class="loading-wheel"
- icon icon-id="loading" icon-size="75"></div>
-
- <div class="table-header" onos-sortable-header>
- <table>
- <tr>
- <td colId="state" class="table-icon" sortable></td>
- <td colId="id" sortable>App ID </td>
- <td colId="version" sortable>Version </td>
- <td colId="origin" sortable>Origin </td>
- <td colId="desc" col-width="475px">Description </td>
- </tr>
- </table>
- </div>
-
- <div class="table-body">
- <table onos-flash-changes id-prop="id">
- <tr ng-if="!tableData.length" class="no-data">
- <td colspan="5">
- No Applications found
- </td>
- </tr>
-
- <tr ng-repeat="app in tableData track by $index"
- ng-click="selectCallback($event, app)"
- ng-class="{selected: app.id === selId}"
- ng-repeat-complete row-id="{{app.id}}">
- <td class="table-icon">
- <div icon icon-id="{{app._iconid_state}}"></div>
- </td>
- <td>{{app.id}}</td>
- <td>{{app.version}}</td>
- <td>{{app.origin}}</td>
- <td>{{app.desc}}</td>
- </tr>
- </table>
- </div>
-
- </div>
-
-</div>
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/app/app.js b/framework/src/onos/web/gui/src/main/webapp/app/view/app/app.js
deleted file mode 100644
index 7cc081cb..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/app/app.js
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the 'License');
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an 'AS IS' BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- App View Module
- */
-
-(function () {
- 'use strict';
-
- // constants
- var INSTALLED = 'INSTALLED',
- ACTIVE = 'ACTIVE',
- APP_MGMENT_REQ = 'appManagementRequest',
- FILE_UPLOAD_URL = 'applications/upload';
-
- angular.module('ovApp', [])
- .controller('OvAppCtrl',
- ['$log', '$scope', '$http',
- 'FnService', 'TableBuilderService', 'WebSocketService', 'UrlFnService',
- 'KeyService',
-
- function ($log, $scope, $http, fs, tbs, wss, ufs, ks) {
- $scope.ctrlBtnState = {};
- $scope.uploadTip = 'Upload an application (.oar file)';
- $scope.activateTip = 'Activate selected application';
- $scope.deactivateTip = 'Deactivate selected application';
- $scope.uninstallTip = 'Uninstall selected application';
-
- function selCb($event, row) {
- // selId comes from tableBuilder
- $scope.ctrlBtnState.selection = !!$scope.selId;
- refreshCtrls();
- }
-
- function refreshCtrls() {
- var row, rowIdx;
- if ($scope.ctrlBtnState.selection) {
- rowIdx = fs.find($scope.selId, $scope.tableData);
- row = rowIdx >= 0 ? $scope.tableData[rowIdx] : null;
-
- $scope.ctrlBtnState.installed = row && row.state === INSTALLED;
- $scope.ctrlBtnState.active = row && row.state === ACTIVE;
- } else {
- $scope.ctrlBtnState.installed = false;
- $scope.ctrlBtnState.active = false;
- }
- }
-
- tbs.buildTable({
- scope: $scope,
- tag: 'app',
- selCb: selCb,
- respCb: refreshCtrls
- });
-
- // TODO: reexamine where keybindings should be - directive or controller?
- ks.keyBindings({
- esc: [$scope.selectCallback, 'Deselect app'],
- _helpFormat: ['esc']
- });
- ks.gestureNotes([
- ['click row', 'Select / deselect app'],
- ['scroll down', 'See more apps']
- ]);
-
- $scope.appAction = function (action) {
- if ($scope.ctrlBtnState.selection) {
- $log.debug('Initiating ' + action + ' of ' + $scope.selId);
- wss.sendEvent(APP_MGMENT_REQ, {
- action: action,
- name: $scope.selId,
- sortCol: $scope.sortParams.sortCol,
- sortDir: $scope.sortParams.sortDir
- });
- }
- };
-
- $scope.$on('FileChanged', function () {
- var formData = new FormData();
- if ($scope.appFile) {
- formData.append('file', $scope.appFile);
- $http.post(ufs.rsUrl(FILE_UPLOAD_URL), formData, {
- transformRequest: angular.identity,
- headers: {
- 'Content-Type': undefined
- }
- })
- .finally(function () {
- $scope.sortCallback($scope.sortParams);
- document.getElementById('inputFileForm').reset();
- });
- }
- });
-
- $scope.$on('$destroy', function () {
- ks.unbindKeys();
- });
-
- $log.log('OvAppCtrl has been created');
- }])
-
- // triggers the input form to appear when button is clicked
- .directive('triggerForm', function () {
- return {
- restrict: 'A',
- link: function (scope, elem) {
- elem.bind('click', function () {
- document.getElementById('uploadFile')
- .dispatchEvent(new MouseEvent('click'));
- });
- }
- };
- })
-
- // binds the model file to the scope in scope.appFile
- // sends upload request to the server
- .directive('fileModel', ['$parse',
- function ($parse) {
- return {
- restrict: 'A',
- link: function (scope, elem, attrs) {
- var model = $parse(attrs.fileModel),
- modelSetter = model.assign;
-
- elem.bind('change', function () {
- scope.$apply(function () {
- modelSetter(scope, elem[0].files[0]);
- });
- scope.$emit('FileChanged');
- });
- }
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/cluster/cluster.css b/framework/src/onos/web/gui/src/main/webapp/app/view/cluster/cluster.css
deleted file mode 100644
index 83ba8d87..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/cluster/cluster.css
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Cluster View -- CSS file
- */
-
-#ov-cluster h2 {
- display: inline-block;
-}
-
-#ov-cluster div.ctrl-btns {
- width: 45px;
-} \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/cluster/cluster.html b/framework/src/onos/web/gui/src/main/webapp/app/view/cluster/cluster.html
deleted file mode 100644
index c5048884..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/cluster/cluster.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<!-- Cluster partial HTML -->
-<div id="ov-cluster">
- <div class="tabular-header">
- <h2>Cluster Nodes ({{tableData.length}} total)</h2>
- <div class="ctrl-btns">
- <div class="refresh" ng-class="{active: autoRefresh}"
- icon icon-size="36" icon-id="refresh"
- tooltip tt-msg="autoRefreshTip"
- ng-click="toggleRefresh()"></div>
- </div>
- </div>
-
- <div class="summary-list" onos-table-resize>
- <div ng-show="loading" class="loading-wheel"
- icon icon-id="loading" icon-size="75"></div>
-
- <div class="table-header" onos-sortable-header>
- <table>
- <tr>
- <td colId="_iconid_state" class="table-icon" sortable></td>
- <td colId="id" sortable>ID </td>
- <td colId="ip" sortable>IP Address </td>
- <td colId="tcp" sortable>TCP Port </td>
- <td colId="updated" sortable>Last Updated </td>
- </tr>
- </table>
- </div>
-
- <div class="table-body">
- <table onos-flash-changes id-prop="id">
- <tr ng-if="!tableData.length" class="no-data">
- <td colspan="5">
- No Cluster Nodes found
- </td>
- </tr>
-
- <tr ng-repeat="node in tableData track by $index"
- ng-repeat-complete row-id="{{node.id}}">
- <td class="table-icon">
- <div icon icon-id="{{node._iconid_state}}"></div>
- </td>
- <td>{{node.id}}</td>
- <td>{{node.ip}}</td>
- <td>{{node.tcp}}</td>
- <td>{{node.updated}}</td>
- </tr>
- </table>
- </div>
-
- </div>
-
-</div>
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/cluster/cluster.js b/framework/src/onos/web/gui/src/main/webapp/app/view/cluster/cluster.js
deleted file mode 100644
index 006808c0..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/cluster/cluster.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Cluster View Module
- */
-
-(function () {
- 'use strict';
-
- angular.module('ovCluster', [])
- .controller('OvClusterCtrl',
- ['$log', '$scope', 'TableBuilderService',
-
- function ($log, $scope, tbs) {
- tbs.buildTable({
- scope: $scope,
- tag: 'cluster'
- });
-
- $log.log('OvClusterCtrl has been created');
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/device/device.css b/framework/src/onos/web/gui/src/main/webapp/app/view/device/device.css
deleted file mode 100644
index 8d8a582b..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/device/device.css
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Device View -- CSS file
- */
-
-#ov-device h2 {
- display: inline-block;
-}
-
-#ov-device div.ctrl-btns {
-}
-
-.light #ov-device .current-view use {
- fill: white;
-}
-.dark #ov-device .current-view use {
- fill: #304860;
-}
-
-.light #ov-device .current-view rect {
- fill: deepskyblue;
-}
-.dark #ov-device .current-view rect {
- fill: #eee;
-}
-
-/* More in generic panel.css */
-
-#device-details-panel.floatpanel {
- -moz-border-radius: 0;
- border-radius: 0;
- z-index: 0;
-}
-
-.light #device-details-panel.floatpanel {
- background-color: rgb(229, 234, 237);
-}
-.dark #device-details-panel.floatpanel {
- background-color: #3A4042;
-}
-
-#device-details-panel .container {
- padding: 0 12px;
-}
-
-#device-details-panel .close-btn {
- position: absolute;
- right: 10px;
- top: 0;
- cursor: pointer;
-}
-.light .close-btn svg.embeddedIcon .icon.plus .glyph {
- fill: #aaa;
-}
-.dark .close-btn svg.embeddedIcon .icon.plus .glyph {
- fill: #ccc;
-}
-
-#device-details-panel .dev-icon {
- display: inline-block;
- padding: 0 6px 0 0;
- vertical-align: middle;
-}
-.light .dev-icon svg.embeddedIcon .glyph {
- fill: rgb(0, 172, 229);
-}
-.dark .dev-icon svg.embeddedIcon .glyph {
- fill: #486D91;
-}
-
-#device-details-panel h2 {
- display: inline-block;
- margin: 8px 0;
-}
-
-#device-details-panel .editable {
- cursor: pointer;
- border-bottom: 1px dashed darkgreen;
-}
-
-#device-details-panel h2 input {
- font-size: 1.0em;
-}
-
-#device-details-panel .top div.left {
- float: left;
- padding: 0 18px 0 0;
-}
-#device-details-panel .top div.right {
- display: inline-block;
-}
-
-#device-details-panel td.label {
- font-style: italic;
- padding-right: 12px;
- /* works for both light and dark themes ... */
- color: #777;
-}
-
-#device-details-panel .actionBtns div {
- padding: 12px 6px;
-}
-
-#device-details-panel .top hr {
- width: 95%;
- margin: 0 auto;
-}
-
-.light #device-details-panel hr {
- opacity: .5;
- border-color: #FFF;
-}
-.dark #device-details-panel hr {
- border-color: #666;
-}
-
-#device-details-panel .bottom table {
- border-spacing: 0;
-}
-
-#device-details-panel .bottom th {
- letter-spacing: 0.02em;
-}
-
-.light #device-details-panel .bottom th {
- background-color: #CCC;
- /* default text color */
-}
-.dark #device-details-panel .bottom th {
- background-color: #131313;
- color: #ccc;
-}
-
-#device-details-panel .bottom th,
-#device-details-panel .bottom td {
- padding: 6px 12px;
- text-align: center;
-}
-
-.light #device-details-panel .bottom tr:nth-child(odd) {
- background-color: #f9f9f9;
-}
-.light #device-details-panel .bottom tr:nth-child(even) {
- background-color: #EBEDF2;
-}
-.dark #device-details-panel .bottom tr:nth-child(odd) {
- background-color: #333;
-}
-.dark #device-details-panel .bottom tr:nth-child(even) {
- background-color: #555;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/device/device.html b/framework/src/onos/web/gui/src/main/webapp/app/view/device/device.html
deleted file mode 100644
index 6f1813a0..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/device/device.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!-- Device partial HTML -->
-<div id="ov-device">
- <div class="tabular-header">
- <h2>Devices ({{tableData.length}} total)</h2>
- <div class="ctrl-btns">
- <div class="refresh" ng-class="{active: autoRefresh}"
- icon icon-id="refresh" icon-size="36"
- tooltip tt-msg="autoRefreshTip"
- ng-click="toggleRefresh()"></div>
- <div class="separator"></div>
-
- <div ng-class="{'current-view': !!selId}"
- icon icon-id="deviceTable" icon-size="36"></div>
-
- <div ng-class="{active: !!selId}"
- icon icon-id="flowTable" icon-size="36"
- tooltip tt-msg="flowTip"
- ng-click="nav('flow')"></div>
-
- <div ng-class="{active: !!selId}"
- icon icon-id="portTable" icon-size="36"
- tooltip tt-msg="portTip"
- ng-click="nav('port')"></div>
-
- <div ng-class="{active: !!selId}"
- icon icon-id="groupTable" icon-size="36"
- tooltip tt-msg="groupTip"
- ng-click="nav('group')"></div>
- </div>
- </div>
-
- <div class="summary-list" onos-table-resize>
- <div ng-show="loading" class="loading-wheel"
- icon icon-id="loading" icon-size="75"></div>
-
- <div class="table-header" onos-sortable-header>
- <table>
- <tr>
- <td colId="available" class="table-icon" sortable></td>
- <td colId="type" class="table-icon" sortable></td>
- <td colId="name" sortable>Friendly Name </td>
- <td colId="id" sortable>Device ID </td>
- <td colId="masterid" sortable>Master Instance </td>
- <td colId="num_ports" col-width="60px" sortable>Ports </td>
- <td colId="mfr" sortable>Vendor </td>
- <td colId="hw" sortable>H/W Version </td>
- <td colId="sw" sortable>S/W Version </td>
- <td colId="protocol" col-width="80px" sortable>Protocol </td>
- </tr>
- </table>
- </div>
-
- <div class="table-body">
- <table onos-flash-changes id-prop="id">
- <tr ng-if="!tableData.length" class="no-data">
- <td colspan="9">
- No Devices found
- </td>
- </tr>
-
- <tr ng-repeat="dev in tableData track by $index"
- ng-click="selectCallback($event, dev)"
- ng-class="{selected: dev.id === selId}"
- ng-repeat-complete row-id="{{dev.id}}">
- <td class="table-icon">
- <div icon icon-id="{{dev._iconid_available}}"></div>
- </td>
- <td class="table-icon">
- <div icon icon-id="{{dev._iconid_type}}"></div>
- </td>
- <td>{{dev.name}}</td>
- <td>{{dev.id}}</td>
- <td>{{dev.masterid}}</td>
- <td>{{dev.num_ports}}</td>
- <td>{{dev.mfr}}</td>
- <td>{{dev.hw}}</td>
- <td>{{dev.sw}}</td>
- <td>{{dev.protocol}}</td>
- </tr>
- </table>
- </div>
-
- </div>
-
- <device-details-panel></device-details-panel>
-
-</div>
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/device/device.js b/framework/src/onos/web/gui/src/main/webapp/app/view/device/device.js
deleted file mode 100644
index 5b7120fd..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/device/device.js
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Device View Module
- */
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, $scope, $loc, fs, mast, ps, wss, is, ns, ks;
-
- // internal state
- var detailsPanel,
- pStartY,
- pHeight,
- top,
- bottom,
- iconDiv,
- wSize,
- editingName = false;
-
- // constants
- var topPdg = 13,
- ctnrPdg = 24,
- scrollSize = 17,
- portsTblPdg = 50,
-
- pName = 'device-details-panel',
- detailsReq = 'deviceDetailsRequest',
- detailsResp = 'deviceDetailsResponse',
- nameChangeReq = 'deviceNameChangeRequest',
- nameChangeResp = 'deviceNameChangeResponse',
-
- propOrder = [
- 'id', 'type', 'masterid', 'chassisid',
- 'mfr', 'hw', 'sw', 'protocol', 'serial'
- ],
- friendlyProps = [
- 'URI', 'Type', 'Master ID', 'Chassis ID',
- 'Vendor', 'H/W Version', 'S/W Version', 'Protocol', 'Serial #'
- ],
- portCols = [
- 'enabled', 'id', 'speed', 'type', 'elinks_dest', 'name'
- ],
- friendlyPortCols = [
- 'Enabled', 'ID', 'Speed', 'Type', 'Egress Links', 'Name'
- ];
-
- function closePanel() {
- if (detailsPanel.isVisible()) {
- $scope.selId = null;
- detailsPanel.hide();
- return true;
- }
- return false;
- }
-
- function addCloseBtn(div) {
- is.loadEmbeddedIcon(div, 'plus', 30);
- div.select('g').attr('transform', 'translate(25, 0) rotate(45)');
- div.on('click', closePanel);
- }
-
- function exitEditMode(nameH2, name) {
- nameH2.html(name);
- nameH2.classed('editable', true);
- editingName = false;
- ks.enableGlobalKeys(true);
- }
-
- function editNameSave() {
- var nameH2 = top.select('h2'),
- id = $scope.panelData.id,
- val,
- newVal;
-
- if (editingName) {
- val = nameH2.select('input').property('value').trim();
- newVal = val || id;
-
- exitEditMode(nameH2, newVal);
- $scope.panelData.name = newVal;
- wss.sendEvent(nameChangeReq, { id: id, name: val });
- }
- }
-
- function editNameCancel() {
- if (editingName) {
- exitEditMode(top.select('h2'), $scope.panelData.name);
- return true;
- }
- return false;
- }
-
- function editName() {
- var nameH2 = top.select('h2'),
- tf, el;
-
- if (!editingName) {
- nameH2.classed('editable', false);
- nameH2.html('');
- tf = nameH2.append('input').classed('name-input', true)
- .attr('type', 'text')
- .attr('value', $scope.panelData.name);
- el = tf[0][0];
- el.focus();
- el.select();
- editingName = true;
- ks.enableGlobalKeys(false);
- }
- }
-
- function handleEscape() {
- return editNameCancel() || closePanel();
- }
-
- function setUpPanel() {
- var container, closeBtn, tblDiv;
- detailsPanel.empty();
-
- container = detailsPanel.append('div').classed('container', true);
-
- top = container.append('div').classed('top', true);
- closeBtn = top.append('div').classed('close-btn', true);
- addCloseBtn(closeBtn);
- iconDiv = top.append('div').classed('dev-icon', true);
- top.append('h2').classed('editable', true).on('click', editName);
-
- tblDiv = top.append('div').classed('top-tables', true);
- tblDiv.append('div').classed('left', true).append('table');
- tblDiv.append('div').classed('right', true).append('table');
-
- top.append('hr');
-
- bottom = container.append('div').classed('bottom', true);
- bottom.append('h2').classed('ports-title', true).html('Ports');
- bottom.append('table');
- }
-
- function addProp(tbody, index, value) {
- var tr = tbody.append('tr');
-
- function addCell(cls, txt) {
- tr.append('td').attr('class', cls).html(txt);
- }
- addCell('label', friendlyProps[index] + ' :');
- addCell('value', value);
- }
-
- function populateTop(tblDiv, details) {
- var leftTbl = tblDiv.select('.left')
- .select('table')
- .append('tbody'),
- rightTbl = tblDiv.select('.right')
- .select('table')
- .append('tbody');
-
- is.loadEmbeddedIcon(iconDiv, details._iconid_type, 40);
- top.select('h2').html(details.name);
-
- propOrder.forEach(function (prop, i) {
- // properties are split into two tables
- addProp(i < 4 ? leftTbl : rightTbl, i, details[prop]);
- });
- }
-
- function addPortRow(tbody, port) {
- var tr = tbody.append('tr');
-
- portCols.forEach(function (col) {
- tr.append('td').html(port[col]);
- });
- }
-
- function populateBottom(table, ports) {
- var theader = table.append('thead').append('tr'),
- tbody = table.append('tbody'),
- tbWidth, tbHeight;
-
- friendlyPortCols.forEach(function (col) {
- theader.append('th').html(col);
- });
- ports.forEach(function (port) {
- addPortRow(tbody, port);
- });
-
- tbWidth = fs.noPxStyle(tbody, 'width') + scrollSize;
- tbHeight = pHeight
- - (fs.noPxStyle(detailsPanel.el()
- .select('.top'), 'height')
- + fs.noPxStyle(detailsPanel.el()
- .select('.ports-title'), 'height')
- + portsTblPdg);
-
- table.style({
- height: tbHeight + 'px',
- width: tbWidth + 'px',
- overflow: 'auto',
- display: 'block'
- });
-
- detailsPanel.width(tbWidth + ctnrPdg);
- }
-
- function populateName(div, name) {
- var lab = div.select('.label'),
- val = div.select('.value');
- lab.html('Friendly Name:');
- val.html(name);
- }
-
- function populateDetails(details) {
- var nameDiv, topTbs, btmTbl, ports;
- setUpPanel();
-
- nameDiv = top.select('.name-div');
- topTbs = top.select('.top-tables');
- btmTbl = bottom.select('table');
- ports = details.ports;
-
- populateName(nameDiv, details.name);
- populateTop(topTbs, details);
- populateBottom(btmTbl, ports);
-
- detailsPanel.height(pHeight);
- }
-
- function respDetailsCb(data) {
- $scope.panelData = data.details;
- $scope.$apply();
- }
-
- function respNameCb(data) {
- if (data.warn) {
- $log.warn(data.warn, data.id);
- top.select('h2').html(data.id);
- }
- }
-
- function createDetailsPane() {
- detailsPanel = ps.createPanel(pName, {
- width: wSize.width,
- margin: 0,
- hideMargin: 0
- });
- detailsPanel.el().style({
- position: 'absolute',
- top: pStartY + 'px'
- });
- $scope.hidePanel = function () { detailsPanel.hide(); };
- detailsPanel.hide();
- }
-
- angular.module('ovDevice', [])
- .controller('OvDeviceCtrl',
- ['$log', '$scope', '$location', 'TableBuilderService', 'FnService',
- 'MastService', 'PanelService', 'WebSocketService', 'IconService',
- 'NavService', 'KeyService',
-
- function (_$log_, _$scope_, _$location_,
- tbs, _fs_, _mast_, _ps_, _wss_, _is_, _ns_, _ks_) {
- var params,
- handlers = {};
-
- $log = _$log_;
- $scope = _$scope_;
- $loc = _$location_;
- fs = _fs_;
- mast = _mast_;
- ps = _ps_;
- wss = _wss_;
- is = _is_;
- ns = _ns_;
- ks = _ks_;
-
- params = $loc.search();
-
- $scope.panelData = {};
- $scope.flowTip = 'Show flow view for selected device';
- $scope.portTip = 'Show port view for selected device';
- $scope.groupTip = 'Show group view for selected device';
-
- // details panel handlers
- handlers[detailsResp] = respDetailsCb;
- handlers[nameChangeResp] = respNameCb;
- wss.bindHandlers(handlers);
-
- // query for if a certain device needs to be highlighted
- if (params.hasOwnProperty('devId')) {
- $scope.selId = params['devId'];
- wss.sendEvent(detailsReq, { id: $scope.selId });
- }
-
- function selCb($event, row) {
- if ($scope.selId) {
- wss.sendEvent(detailsReq, { id: row.id });
- } else {
- $scope.hidePanel();
- }
- $log.debug('Got a click on:', row);
- }
-
- tbs.buildTable({
- scope: $scope,
- tag: 'device',
- selCb: selCb
- });
-
- $scope.nav = function (path) {
- if ($scope.selId) {
- ns.navTo(path, { devId: $scope.selId });
- }
- };
-
- $scope.$on('$destroy', function () {
- wss.unbindHandlers(handlers);
- });
-
- $log.log('OvDeviceCtrl has been created');
- }])
-
- .directive('deviceDetailsPanel',
- ['$rootScope', '$window', '$timeout', 'KeyService',
- function ($rootScope, $window, $timeout, ks) {
- return function (scope) {
- var unbindWatch;
-
- function heightCalc() {
- pStartY = fs.noPxStyle(d3.select('.tabular-header'), 'height')
- + mast.mastHeight() + topPdg;
- wSize = fs.windowSize(pStartY);
- pHeight = wSize.height;
- }
-
- function initPanel() {
- heightCalc();
- createDetailsPane();
- }
-
- // Safari has a bug where it renders the fixed-layout table wrong
- // if you ask for the window's size too early
- if (scope.onos.browser === 'safari') {
- $timeout(initPanel);
- } else {
- initPanel();
- }
- // create key bindings to handle panel
- ks.keyBindings({
- enter: editNameSave,
- esc: [handleEscape, 'Close the details panel'],
- _helpFormat: ['esc']
- });
- ks.gestureNotes([
- ['click', 'Select a row to show device details'],
- ['scroll down', 'See more devices']
- ]);
-
- // if the panelData changes
- scope.$watch('panelData', function () {
- if (!fs.isEmptyObject(scope.panelData)) {
- populateDetails(scope.panelData);
- detailsPanel.show();
- }
- });
-
- // if the window size changes
- unbindWatch = $rootScope.$watchCollection(
- function () {
- return {
- h: $window.innerHeight,
- w: $window.innerWidth
- };
- }, function () {
- if (!fs.isEmptyObject(scope.panelData)) {
- heightCalc();
- populateDetails(scope.panelData);
- }
- }
- );
-
- scope.$on('$destroy', function () {
- unbindWatch();
- ks.unbindKeys();
- ps.destroyPanel(pName);
- });
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/flow/flow.css b/framework/src/onos/web/gui/src/main/webapp/app/view/flow/flow.css
deleted file mode 100644
index 30226222..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/flow/flow.css
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Flow View -- CSS file
- */
-
-#ov-flow h2 {
- display: inline-block;
-}
-
-#ov-flow div.ctrl-btns {
-}
-
-.light #ov-flow .current-view use {
- fill: white;
-}
-.dark #ov-flow .current-view use {
- fill: #304860;
-}
-
-.light #ov-flow .current-view rect {
- fill: deepskyblue;
-}
-.dark #ov-flow .current-view rect {
- fill: #eee;
-}
-
-.light #ov-flow tr:nth-child(6n + 1),
-.light #ov-flow tr:nth-child(6n + 2),
-.light #ov-flow tr:nth-child(6n + 3) {
- background-color: #eee;
-}
-.light #ov-flow tr:nth-child(6n + 4),
-.light #ov-flow tr:nth-child(6n + 5),
-.light #ov-flow tr:nth-child(6n) {
- background-color: #ddd;
-}
-.dark #ov-flow tr:nth-child(6n + 1),
-.dark #ov-flow tr:nth-child(6n + 2),
-.dark #ov-flow tr:nth-child(6n + 3) {
- background-color: #444;
-}
-.dark #ov-flow tr:nth-child(6n + 4),
-.dark #ov-flow tr:nth-child(6n + 5),
-.dark #ov-flow tr:nth-child(6n) {
- background-color: #333;
-}
-
-/* highlighted color */
-.light #ov-flow tr:nth-child(6n + 1).data-change,
-.light #ov-flow tr:nth-child(6n + 2).data-change,
-.light #ov-flow tr:nth-child(6n + 3).data-change,
-.light #ov-flow tr:nth-child(6n + 4).data-change,
-.light #ov-flow tr:nth-child(6n + 5).data-change,
-.light #ov-flow tr:nth-child(6n).data-change {
- background-color: #FDFFDC;
-}
-.dark #ov-flow tr:nth-child(6n + 1).data-change,
-.dark #ov-flow tr:nth-child(6n + 2).data-change,
-.dark #ov-flow tr:nth-child(6n + 3).data-change,
-.dark #ov-flow tr:nth-child(6n + 4).data-change,
-.dark #ov-flow tr:nth-child(6n + 5).data-change,
-.dark #ov-flow tr:nth-child(6n).data-change {
- background-color: #5A5600;
-}
-
-#ov-flow td.selector,
-#ov-flow td.treatment {
- padding-left: 36px;
- opacity: 0.65;
-} \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/flow/flow.html b/framework/src/onos/web/gui/src/main/webapp/app/view/flow/flow.html
deleted file mode 100644
index 8fc1839e..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/flow/flow.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!-- Flow partial HTML -->
-<div id="ov-flow">
- <div class="tabular-header">
- <h2>
- Flows for Device {{devId || "(No device selected)"}}
- ({{tableData.length}} total)
- </h2>
- <div class="ctrl-btns">
- <div class="refresh" ng-class="{active: autoRefresh}"
- icon icon-size="36" icon-id="refresh"
- tooltip tt-msg="autoRefreshTip"
- ng-click="toggleRefresh()"></div>
-
- <div class="separator"></div>
-
- <div class="active"
- icon icon-id="deviceTable" icon-size="36"
- tooltip tt-msg="deviceTip"
- ng-click="nav('device')"></div>
-
- <div class="current-view"
- icon icon-id="flowTable" icon-size="36"></div>
-
- <div class="active"
- icon icon-id="portTable" icon-size="36"
- tooltip tt-msg="portTip"
- ng-click="nav('port')"></div>
-
- <div class="active"
- icon icon-id="groupTable" icon-size="36"
- tooltip tt-msg="groupTip"
- ng-click="nav('group')"></div>
- </div>
- </div>
-
- <div class="summary-list" onos-table-resize>
- <div ng-show="loading" class="loading-wheel"
- icon icon-id="loading" icon-size="75"></div>
-
- <div class="table-header" onos-sortable-header>
- <table>
- <tr>
- <td colId="id" col-width="180px" sortable>Flow ID </td>
- <td colId="appId" sortable>App ID </td>
- <td colId="groupId" sortable>Group ID </td>
- <td colId="tableId" sortable>Table ID </td>
- <td colId="priority" sortable>Priority </td>
- <td colId="timeout" sortable>Timeout </td>
- <td colId="permanent" sortable>Permanent </td>
- <td colId="state" sortable>State </td>
- <td colId="packets" sortable>Packets </td>
- <td colId="bytes" sortable>Bytes </td>
- </tr>
- </table>
- </div>
-
- <div class="table-body">
- <table onos-flash-changes id-prop="id">
- <tr ng-if="!tableData.length" class="no-data">
- <td colspan="10">
- No Flows found
- </td>
- </tr>
-
- <tr ng-repeat-start="flow in tableData track by $index"
- ng-repeat-complete row-id="{{flow.id}}">
- <td>{{flow.id}}</td>
- <td>{{flow.appId}}</td>
- <td>{{flow.groupId}}</td>
- <td>{{flow.tableId}}</td>
- <td>{{flow.priority}}</td>
- <td>{{flow.timeout}}</td>
- <td>{{flow.permanent}}</td>
- <td>{{flow.state}}</td>
- <td>{{flow.packets}}</td>
- <td>{{flow.bytes}}</td>
- </tr>
- <tr row-id="{{flow.id}}">
- <td class="selector" colspan="10">{{flow.selector}}</td>
- </tr>
- <tr row-id="{{flow.id}}" ng-repeat-end>
- <td class="treatment" colspan="10">{{flow.treatment}}</td>
- </tr>
- </table>
- </div>
-
- </div>
-
-</div>
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/flow/flow.js b/framework/src/onos/web/gui/src/main/webapp/app/view/flow/flow.js
deleted file mode 100644
index 7bb988a2..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/flow/flow.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Flow View Module
- */
-
-(function () {
- 'use strict';
-
- // injected references
- var $log, $scope, $location, fs, tbs, ns;
-
- angular.module('ovFlow', [])
- .controller('OvFlowCtrl',
- ['$log', '$scope', '$location',
- 'FnService', 'TableBuilderService', 'NavService',
-
- function (_$log_, _$scope_, _$location_, _fs_, _tbs_, _ns_) {
- var params;
- $log = _$log_;
- $scope = _$scope_;
- $location = _$location_;
- fs = _fs_;
- tbs = _tbs_;
- ns = _ns_;
- $scope.deviceTip = 'Show device table';
- $scope.portTip = 'Show port view for this device';
- $scope.groupTip = 'Show group view for this device';
-
- params = $location.search();
- if (params.hasOwnProperty('devId')) {
- $scope.devId = params['devId'];
- }
-
- tbs.buildTable({
- scope: $scope,
- tag: 'flow',
- query: params
- });
-
- $scope.nav = function (path) {
- if ($scope.devId) {
- ns.navTo(path, { devId: $scope.devId });
- }
- };
-
- $log.log('OvFlowCtrl has been created');
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/group/group.css b/framework/src/onos/web/gui/src/main/webapp/app/view/group/group.css
deleted file mode 100644
index 6773aa83..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/group/group.css
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Group View -- CSS file
- */
-
-#ov-group h2 {
- display: inline-block;
-}
-
-#ov-group div.ctrl-btns {
-}
-
-.light #ov-group .current-view use {
- fill: white;
-}
-.dark #ov-group .current-view use {
- fill: #304860;
-}
-
-.light #ov-group .current-view rect {
- fill: deepskyblue;
-}
-.dark #ov-group .current-view rect {
- fill: #eee;
-}
-
-.light #ov-group tr:nth-child(4n + 1),
-.light #ov-group tr:nth-child(4n + 2) {
- background-color: #eee;
-}
-.light #ov-group tr:nth-child(4n + 3),
-.light #ov-group tr:nth-child(4n) {
- background-color: #ddd;
-}
-.dark #ov-group tr:nth-child(4n + 1),
-.dark #ov-group tr:nth-child(4n + 2) {
- background-color: #444;
-}
-.dark #ov-group tr:nth-child(4n + 3),
-.dark #ov-group tr:nth-child(4n) {
- background-color: #333;
-}
-
-/* highlighted color */
-.light #ov-group tr:nth-child(4n + 1).data-change,
-.light #ov-group tr:nth-child(4n + 2).data-change,
-.light #ov-group tr:nth-child(4n + 3).data-change,
-.light #ov-group tr:nth-child(4n).data-change {
- background-color: #FDFFDC;
-}
-.dark #ov-group tr:nth-child(4n + 1).data-change,
-.dark #ov-group tr:nth-child(4n + 2).data-change,
-.dark #ov-group tr:nth-child(4n + 3).data-change,
-.dark #ov-group tr:nth-child(4n).data-change {
- background-color: #5A5600;
-}
-
-#ov-group td.buckets {
- padding-left: 36px;
- opacity: 0.65;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/group/group.html b/framework/src/onos/web/gui/src/main/webapp/app/view/group/group.html
deleted file mode 100644
index 93484dc8..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/group/group.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<!-- Group partial HTML -->
-<div id="ov-group">
- <div class="tabular-header">
- <h2>
- Groups for Device {{devId || "(No device selected)"}}
- ({{tableData.length}} total)
- </h2>
- <div class="ctrl-btns">
- <div class="refresh" ng-class="{active: autoRefresh}"
- icon icon-size="36" icon-id="refresh"
- tooltip tt-msg="autoRefreshTip"
- ng-click="toggleRefresh()"></div>
-
- <div class="separator"></div>
-
- <div class="active"
- icon icon-id="deviceTable" icon-size="36"
- tooltip tt-msg="deviceTip"
- ng-click="nav('device')"></div>
-
- <div class="active"
- icon icon-id="flowTable" icon-size="36"
- tooltip tt-msg="flowTip"
- ng-click="nav('flow')"></div>
-
- <div class="active"
- icon icon-id="portTable" icon-size="36"
- tooltip tt-msg="portTip"
- ng-click="nav('port')"></div>
-
- <div class="current-view"
- icon icon-id="groupTable" icon-size="36"></div>
- </div>
- </div>
-
- <div class="summary-list" onos-table-resize>
- <div ng-show="loading" class="loading-wheel"
- icon icon-id="loading" icon-size="75"></div>
-
- <div class="table-header" onos-sortable-header>
- <table>
- <tr>
- <td colId="id" sortable>Group ID </td>
- <td colId="app_id" sortable>App ID </td>
- <td colId="state" sortable>State </td>
- <td colId="type" sortable>Type </td>
- <td colId="packets" sortable>Packets </td>
- <td colId="bytes" sortable>Bytes </td>
- </tr>
- </table>
- </div>
-
- <div class="table-body">
- <table onos-flash-changes id-prop="id">
- <tr ng-if="!tableData.length" class="no-data">
- <td colspan="6">
- No Groups found
- </td>
- </tr>
-
- <tr ng-repeat-start="group in tableData track by $index"
- ng-repeat-complete row-id="{{group.id}}">
- <td>{{group.id}}</td>
- <td>{{group.app_id}}</td>
- <td>{{group.state}}</td>
- <td>{{group.type}}</td>
- <td>{{group.packets}}</td>
- <td>{{group.bytes}}</td>
- </tr>
- <tr row-id="{{group.id}}" ng-repeat-end>
- <td class="buckets" colspan="6"
- ng-bind-html="group.buckets"></td>
- </tr>
- </table>
- </div>
-
- </div>
-
-</div>
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/group/group.js b/framework/src/onos/web/gui/src/main/webapp/app/view/group/group.js
deleted file mode 100644
index 2cb1f0c4..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/group/group.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Group View Module
- */
-
-(function () {
- 'use strict';
-
- // injected references
- var $log, $scope, $location, fs, tbs, ns;
-
- angular.module('ovGroup', [])
- .controller('OvGroupCtrl',
- ['$log', '$scope', '$location', '$sce',
- 'FnService', 'TableBuilderService', 'NavService',
-
- function (_$log_, _$scope_, _$location_, $sce, _fs_, _tbs_, _ns_) {
- var params;
- $log = _$log_;
- $scope = _$scope_;
- $location = _$location_;
- fs = _fs_;
- tbs = _tbs_;
- ns = _ns_;
- $scope.deviceTip = 'Show device table';
- $scope.flowTip = 'Show flow view for this device';
- $scope.portTip = 'Show port view for this device';
-
- params = $location.search();
- if (params.hasOwnProperty('devId')) {
- $scope.devId = params['devId'];
- }
-
- tbs.buildTable({
- scope: $scope,
- tag: 'group',
- query: params
- });
-
- $scope.$watch('tableData', function () {
- if (!fs.isEmptyObject($scope.tableData)) {
- $scope.tableData.forEach(function (group) {
- group.buckets = $sce.trustAsHtml(group.buckets);
- });
- }
- });
-
- $scope.nav = function (path) {
- if ($scope.devId) {
- ns.navTo(path, { devId: $scope.devId });
- }
- };
-
- $log.log('OvGroupCtrl has been created');
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/host/host.css b/framework/src/onos/web/gui/src/main/webapp/app/view/host/host.css
deleted file mode 100644
index 60672759..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/host/host.css
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Host View -- CSS file
- */
-
-#ov-host h2 {
- display: inline-block;
-}
-
-#ov-host div.ctrl-btns {
- width: 45px;
-} \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/host/host.html b/framework/src/onos/web/gui/src/main/webapp/app/view/host/host.html
deleted file mode 100644
index 19a7ee1d..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/host/host.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!-- Host partial HTML -->
-<div id="ov-host">
- <div class="tabular-header">
- <h2>Hosts ({{tableData.length}} total)</h2>
- <div class="ctrl-btns">
- <div class="refresh" ng-class="{active: autoRefresh}"
- icon icon-size="36" icon-id="refresh"
- tooltip tt-msg="autoRefreshTip"
- ng-click="toggleRefresh()"></div>
- </div>
- </div>
-
- <div class="summary-list" onos-table-resize>
- <div ng-show="loading" class="loading-wheel"
- icon icon-id="loading" icon-size="75"></div>
-
- <div class="table-header" onos-sortable-header>
- <table>
- <tr>
- <td colId="type" class="table-icon" sortable></td>
- <td colId="id" sortable>Host ID </td>
- <td colId="mac" sortable>MAC Address </td>
- <td colId="vlan" sortable>VLAN ID </td>
- <td colId="ips" sortable>IP Addresses </td>
- <td colId="location" sortable>Location </td>
- </tr>
- </table>
- </div>
-
- <div class="table-body">
- <table onos-flash-changes id-prop="id">
- <tr ng-if="!tableData.length" class="no-data">
- <td colspan="6">
- No Hosts found
- </td>
- </tr>
-
- <tr ng-repeat="host in tableData track by $index"
- ng-repeat-complete row-id="{{host.id}}">
- <td class="table-icon">
- <div icon icon-id="{{host._iconid_type}}"></div>
- </td>
- <td>{{host.id}}</td>
- <td>{{host.mac}}</td>
- <td>{{host.vlan}}</td>
- <td>{{host.ips}}</td>
- <td>{{host.location}}</td>
- </tr>
- </table>
- </div>
-
- </div>
-
-</div>
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/host/host.js b/framework/src/onos/web/gui/src/main/webapp/app/view/host/host.js
deleted file mode 100644
index 1ccca401..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/host/host.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Host View Module
- */
-
-(function () {
- 'use strict';
-
- angular.module('ovHost', [])
- .controller('OvHostCtrl',
- ['$log', '$scope', 'TableBuilderService',
-
- function ($log, $scope, tbs) {
- tbs.buildTable({
- scope: $scope,
- tag: 'host'
- });
-
- $log.log('OvHostCtrl has been created');
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/intent/intent.css b/framework/src/onos/web/gui/src/main/webapp/app/view/intent/intent.css
deleted file mode 100644
index dfa50c37..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/intent/intent.css
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Intent View -- CSS file
- */
-
-#ov-intent h2 {
- display: inline-block;
-}
-
-#ov-intent div.ctrl-btns {
-}
-
-.light #ov-intent tr:nth-child(6n + 1),
-.light #ov-intent tr:nth-child(6n + 2),
-.light #ov-intent tr:nth-child(6n + 3) {
- background-color: #eee;
-}
-.light #ov-intent tr:nth-child(6n + 4),
-.light #ov-intent tr:nth-child(6n + 5),
-.light #ov-intent tr:nth-child(6n) {
- background-color: #ddd;
-}
-.dark #ov-intent tr:nth-child(6n + 1),
-.dark #ov-intent tr:nth-child(6n + 2),
-.dark #ov-intent tr:nth-child(6n + 3) {
- background-color: #444;
-}
-.dark #ov-intent tr:nth-child(6n + 4),
-.dark #ov-intent tr:nth-child(6n + 5),
-.dark #ov-intent tr:nth-child(6n) {
- background-color: #333;
-}
-
-.light #ov-intent tr:nth-child(6n + 1).data-change,
-.light #ov-intent tr:nth-child(6n + 2).data-change,
-.light #ov-intent tr:nth-child(6n + 3).data-change,
-.light #ov-intent tr:nth-child(6n + 4).data-change,
-.light #ov-intent tr:nth-child(6n + 5).data-change,
-.light #ov-intent tr:nth-child(6n).data-change {
- background-color: #FDFFDC;
-}
-.dark #ov-intent tr:nth-child(6n + 1).data-change,
-.dark #ov-intent tr:nth-child(6n + 2).data-change,
-.dark #ov-intent tr:nth-child(6n + 3).data-change,
-.dark #ov-intent tr:nth-child(6n + 4).data-change,
-.dark #ov-intent tr:nth-child(6n + 5).data-change,
-.dark #ov-intent tr:nth-child(6n).data-change {
- background-color: #5A5600;
-}
-
-#ov-intent td.resources,
-#ov-intent td.details {
- padding-left: 36px;
- opacity: 0.65;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/intent/intent.html b/framework/src/onos/web/gui/src/main/webapp/app/view/intent/intent.html
deleted file mode 100644
index 98aa5659..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/intent/intent.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!-- Intent partial HTML -->
-<div id="ov-intent">
- <div class="tabular-header">
- <h2>Intents ({{tableData.length}} total)</h2>
- <div class="ctrl-btns">
- <div ng-class="{active: !!selId}"
- icon icon-id="topo" icon-size="36"
- tooltip tt-msg="topoTip"
- ng-click="showIntent()"></div>
- <div class="separator"></div>
- <div class="refresh" ng-class="{active: autoRefresh}"
- icon icon-size="36" icon-id="refresh"
- tooltip tt-msg="autoRefreshTip"
- ng-click="toggleRefresh()"></div>
- </div>
- </div>
-
- <div class="summary-list" onos-table-resize>
- <div ng-show="loading" class="loading-wheel"
- icon icon-id="loading" icon-size="75"></div>
-
- <div class="table-header" onos-sortable-header>
- <table>
- <tr>
- <td colId="appId" sortable>Application ID </td>
- <td colId="key" sortable>Key </td>
- <td colId="type" sortable>Type </td>
- <td colId="priority" sortable>Priority </td>
- <td colId="state" sortable>State </td>
- </tr>
- </table>
- </div>
-
- <div class="table-body">
- <table onos-flash-changes id-prop="key">
- <tr ng-if="!tableData.length" class="no-data">
- <td colspan="5">
- No Intents found
- </td>
- </tr>
-
- <tr ng-repeat-start="intent in tableData track by $index"
- ng-click="selectCallback($event, intent)"
- ng-class="{selected: intent.key === selId}"
- ng-repeat-complete row-id="{{intent.key}}">
- <td>{{intent.appId}}</td>
- <td>{{intent.key}}</td>
- <td>{{intent.type}}</td>
- <td>{{intent.priority}}</td>
- <td>{{intent.state}}</td>
- </tr>
- <tr ng-click="selectCallback($event, intent)"
- ng-class="{selected: intent.key === selId}"
- row-id="{{intent.key}}">
- <td class="resources" colspan="5">{{intent.resources}}</td>
- </tr>
- <tr ng-click="selectCallback($event, intent)"
- ng-class="{selected: intent.key === selId}"
- row-id="{{intent.key}}" ng-repeat-end>
- <td class="details" colspan="5">{{intent.details}}</td>
- </tr>
- </table>
- </div>
-
- </div>
-
-</div>
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/intent/intent.js b/framework/src/onos/web/gui/src/main/webapp/app/view/intent/intent.js
deleted file mode 100644
index 19f2c076..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/intent/intent.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Intent View Module
- */
-
-(function () {
- 'use strict';
-
- angular.module('ovIntent', [])
- .controller('OvIntentCtrl',
- ['$log', '$scope', 'TableBuilderService', 'NavService',
-
- function ($log, $scope, tbs, ns) {
-
- function selCb($event, row) {
- $log.debug('Got a click on:', row);
- var m = /(\d+)\s:\s(.*)/.exec(row.appId),
- id = m ? m[1] : null,
- name = m ? m[2] : null;
-
- $scope.intentData = ($scope.selId && m) ? {
- intentAppId: id,
- intentAppName: name,
- intentKey: row.key
- } : null;
- }
-
- tbs.buildTable({
- scope: $scope,
- tag: 'intent',
- selCb: selCb,
- idKey: 'key'
- });
-
- $scope.topoTip = 'Show selected intent on topology view';
-
- $scope.showIntent = function () {
- var d = $scope.intentData;
- d && ns.navTo('topo', d);
- };
-
- $log.log('OvIntentCtrl has been created');
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/link/link.css b/framework/src/onos/web/gui/src/main/webapp/app/view/link/link.css
deleted file mode 100644
index 4f049cdb..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/link/link.css
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Link View -- CSS file
- */
-
-#ov-link h2 {
- display: inline-block;
-}
-
-#ov-link div.ctrl-btns {
- width: 45px;
-} \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/link/link.html b/framework/src/onos/web/gui/src/main/webapp/app/view/link/link.html
deleted file mode 100644
index 371d6b13..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/link/link.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<!-- Link partial HTML -->
-<div id="ov-link">
- <div class="tabular-header">
- <h2>Links ({{tableData.length}} total)</h2>
- <div class="ctrl-btns">
- <div class="refresh" ng-class="{active: autoRefresh}"
- icon icon-size="36" icon-id="refresh"
- tooltip tt-msg="autoRefreshTip"
- ng-click="toggleRefresh()"></div>
- </div>
- </div>
-
- <div class="summary-list" onos-table-resize>
- <div ng-show="loading" class="loading-wheel"
- icon icon-id="loading" icon-size="75"></div>
-
- <div class="table-header" onos-sortable-header>
- <table>
- <tr>
- <td colId="_iconid_state" class="table-icon" sortable></td>
- <td colId="one" sortable>Port 1 </td>
- <td colId="two" sortable>Port 2 </td>
- <td colId="type" sortable>Type </td>
- <td colId="direction" sortable>Direction </td>
- <td colId="durable" sortable>Durable </td>
- </tr>
- </table>
- </div>
-
- <div class="table-body">
- <table onos-flash-changes id-prop="one">
- <tr ng-if="!tableData.length" class="no-data">
- <td colspan="6">
- No Links found
- </td>
- </tr>
-
- <tr ng-repeat="link in tableData track by $index"
- ng-repeat-complete row-id="{{link.one}}">
- <td class="table-icon">
- <div icon icon-id="{{link._iconid_state}}"></div>
- </td>
- <td>{{link.one}}</td>
- <td>{{link.two}}</td>
- <td>{{link.type}}</td>
- <td ng-bind-html="link.direction"></td>
- <td>{{link.durable}}</td>
- </tr>
- </table>
- </div>
-
- </div>
-
-</div>
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/link/link.js b/framework/src/onos/web/gui/src/main/webapp/app/view/link/link.js
deleted file mode 100644
index fcf2a83e..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/link/link.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Host View Module
- */
-
-(function () {
- 'use strict';
-
- angular.module('ovLink', [])
- .controller('OvLinkCtrl',
- ['$log', '$scope', '$sce', 'FnService', 'TableBuilderService',
-
- function ($log, $scope, $sce, fs, tbs) {
- tbs.buildTable({
- scope: $scope,
- tag: 'link'
- });
-
- $scope.$watch('tableData', function () {
- if (!fs.isEmptyObject($scope.tableData)) {
- $scope.tableData.forEach(function (link) {
- link.direction = $sce.trustAsHtml(link.direction);
- });
- }
- });
-
- $log.log('OvLinkCtrl has been created');
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/port/port.css b/framework/src/onos/web/gui/src/main/webapp/app/view/port/port.css
deleted file mode 100644
index 2aaacfce..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/port/port.css
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Port View -- CSS file
- */
-
-#ov-port h2 {
- display: inline-block;
-}
-
-#ov-port div.ctrl-btns {
-}
-
-.light #ov-port .current-view use {
- fill: white;
-}
-.dark #ov-port .current-view use {
- fill: #304860;
-}
-
-.light #ov-port .current-view rect {
- fill: deepskyblue;
-}
-.dark #ov-port .current-view rect {
- fill: #eee;
-}
-
-#ov-port td {
- text-align: right;
-}
-
-#ov-port tr.no-data td {
- text-align: center;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/port/port.html b/framework/src/onos/web/gui/src/main/webapp/app/view/port/port.html
deleted file mode 100644
index fa79e5ea..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/port/port.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<!-- Port partial HTML -->
-<div id="ov-port">
- <div class="tabular-header">
- <h2>
- Port Statistics for Device {{devId || "(No device selected)"}}
- ({{tableData.length}} Ports total)
- </h2>
- <div class="ctrl-btns">
- <div class="refresh" ng-class="{active: autoRefresh}"
- icon icon-size="36" icon-id="refresh"
- tooltip tt-msg="autoRefreshTip"
- ng-click="toggleRefresh()"></div>
-
- <div class="separator"></div>
-
- <div class="active"
- icon icon-id="deviceTable" icon-size="36"
- tooltip tt-msg="deviceTip"
- ng-click="nav('device')"></div>
-
- <div class="active"
- icon icon-id="flowTable" icon-size="36"
- tooltip tt-msg="flowTip"
- ng-click="nav('flow')"></div>
-
- <div class="current-view"
- icon icon-id="portTable" icon-size="36"></div>
-
- <div class="active"
- icon icon-id="groupTable" icon-size="36"
- tooltip tt-msg="groupTip"
- ng-click="nav('group')"></div>
- </div>
- </div>
-
- <div class="summary-list" onos-table-resize>
- <div ng-show="loading" class="loading-wheel"
- icon icon-id="loading" icon-size="75"></div>
-
- <div class="table-header" onos-sortable-header>
- <table>
- <tr>
- <td colId="id" col-width="60px" sortable>Port ID </td>
- <td colId="pkt_rx" sortable>Pkts Received </td>
- <td colId="pkt_tx" sortable>Pkts Sent </td>
- <td colId="bytes_rx" sortable>Bytes Received </td>
- <td colId="bytes_tx" sortable>Bytes Sent </td>
- <td colId="pkt_rx_drp" sortable>Pkts Received Dropped </td>
- <td colId="pkt_tx_drp" sortable>Pkts Sent Dropped </td>
- <td colId="duration" sortable>Duration (sec) </td>
- </tr>
- </table>
- </div>
-
- <div class="table-body">
- <table onos-flash-changes id-prop="id">
- <tr ng-if="!tableData.length" class="no-data">
- <td colspan="8">
- No Ports found
- </td>
- </tr>
-
- <tr ng-repeat="port in tableData track by $index"
- ng-repeat-complete row-id="{{port.id}}">
- <td>{{port.id}}</td>
- <td>{{port.pkt_rx}}</td>
- <td>{{port.pkt_tx}}</td>
- <td>{{port.bytes_rx}}</td>
- <td>{{port.bytes_tx}}</td>
- <td>{{port.pkt_rx_drp}}</td>
- <td>{{port.pkt_tx_drp}}</td>
- <td>{{port.duration}}</td>
- </tr>
- </table>
- </div>
-
- </div>
-
-</div>
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/port/port.js b/framework/src/onos/web/gui/src/main/webapp/app/view/port/port.js
deleted file mode 100644
index 1e8585dd..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/port/port.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Port View Module
- */
-
-(function () {
- 'use strict';
-
- // injected references
- var $log, $scope, $location, fs, tbs, ns;
-
- angular.module('ovPort', [])
- .controller('OvPortCtrl',
- ['$log', '$scope', '$location',
- 'FnService', 'TableBuilderService', 'NavService',
-
- function (_$log_, _$scope_, _$location_, _fs_, _tbs_, _ns_) {
- var params;
- $log = _$log_;
- $scope = _$scope_;
- $location = _$location_;
- fs = _fs_;
- tbs = _tbs_;
- ns = _ns_;
- $scope.deviceTip = 'Show device table';
- $scope.flowTip = 'Show flow view for this device';
- $scope.groupTip = 'Show group view for this device';
-
- params = $location.search();
- if (params.hasOwnProperty('devId')) {
- $scope.devId = params['devId'];
- }
-
- tbs.buildTable({
- scope: $scope,
- tag: 'port',
- query: params
- });
-
- $scope.nav = function (path) {
- if ($scope.devId) {
- ns.navTo(path, { devId: $scope.devId });
- }
- };
-
- $log.log('OvPortCtrl has been created');
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/processor/processor.css b/framework/src/onos/web/gui/src/main/webapp/app/view/processor/processor.css
deleted file mode 100644
index 12cf6377..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/processor/processor.css
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Processor View -- CSS file
- */
-
-#ov-processor h2 {
- display: inline-block;
-}
-
-#ov-processor div.ctrl-btns {
- width: 40px;
-}
-
-.light #ov-processor .current-view use {
- fill: white;
-}
-.dark #ov-processor .current-view use {
- fill: #304860;
-}
-
-.light #ov-processor .current-view rect {
- fill: deepskyblue;
-}
-.dark #ov-processor .current-view rect {
- fill: #eee;
-}
-
-#ov-processor td.number {
- text-align: right;
-}
-
-#ov-processor tr.no-data td {
- text-align: center;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/processor/processor.html b/framework/src/onos/web/gui/src/main/webapp/app/view/processor/processor.html
deleted file mode 100644
index 1c615041..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/processor/processor.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!-- processor partial HTML -->
-<div id="ov-processor">
- <div class="tabular-header">
- <h2>
- Packet Processors ({{tableData.length}} Processors total)
- </h2>
- <div class="ctrl-btns">
- <div class="refresh" ng-class="{active: autoRefresh}"
- icon icon-size="36" icon-id="refresh"
- tooltip tt-msg="autoRefreshTip"
- ng-click="toggleRefresh()"></div>
- <!--
- <div class="separator"></div>
-
- <div class="current-view"
- icon icon-id="processorTable" icon-size="36"></div>
-
- <div class="active"
- icon icon-id="requestTable" icon-size="36"git sta
- tooltip tt-msg="requestTip"
- ng-click="nav('request')"></div>
- -->
- </div>
- </div>
-
- <div class="summary-list" onos-table-resize>
- <div ng-show="loading" class="loading-wheel"
- icon icon-id="loading" icon-size="75"></div>
-
- <div class="table-header" onos-sortable-header>
- <table>
- <tr>
- <td class="number" colId="priority" sortable col-width="80px">Priority </td>
- <td colId="type" sortable col-width="80px">Type </td>
- <td colId="processor" sortable col-width="500px">Class </td>
- <td class="number" colId="packets" sortable col-width="100px">Packets </td>
- <td class="number" colId="avgMillis" sortable col-width="100px">Average (ms) </td>
- </tr>
- </table>
- </div>
-
- <div class="table-body">
- <table onos-flash-changes id-prop="id">
- <tr ng-if="!tableData.length" class="no-data">
- <td colspan="5">
- No Processors found
- </td>
- </tr>
-
- <tr ng-repeat="processor in tableData track by $index"
- ng-repeat-complete row-id="{{processor.id}}">
- <td class="number">{{processor.priority}}</td>
- <td>{{processor.type}}</td>
- <td>{{processor.processor}}</td>
- <td class="number">{{processor.packets}}</td>
- <td class="number">{{processor.avgMillis}}</td>
- </tr>
- </table>
- </div>
-
- </div>
-
-</div>
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/processor/processor.js b/framework/src/onos/web/gui/src/main/webapp/app/view/processor/processor.js
deleted file mode 100644
index 89d717b6..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/processor/processor.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Packet Processor View Module
- */
-
-(function () {
- 'use strict';
-
- // injected references
- var $log, $scope, $location, fs, tbs, ns;
-
- angular.module('ovProcessor', [])
- .controller('OvProcessorCtrl',
- ['$log', '$scope', '$location',
- 'FnService', 'TableBuilderService', 'NavService',
-
- function (_$log_, _$scope_, _$location_, _fs_, _tbs_, _ns_) {
- var params;
- $log = _$log_;
- $scope = _$scope_;
- $location = _$location_;
- fs = _fs_;
- tbs = _tbs_;
- ns = _ns_;
- $scope.requestTip = 'Show packet requests';
-
- params = $location.search();
-
- tbs.buildTable({
- scope: $scope,
- tag: 'processor',
- query: params
- });
-
- $scope.nav = function (path) {
- if ($scope.devId) {
- ns.navTo(path);
- }
- };
-
- $log.log('OvProcessorCtrl has been created');
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/settings/settings.css b/framework/src/onos/web/gui/src/main/webapp/app/view/settings/settings.css
deleted file mode 100644
index e748c5ac..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/settings/settings.css
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Settings View -- CSS file
- */
-
-#ov-settings h2 {
- display: inline-block;
-}
-
-#ov-settings div.ctrl-btns {
- width: 45px;
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/settings/settings.html b/framework/src/onos/web/gui/src/main/webapp/app/view/settings/settings.html
deleted file mode 100644
index 61081017..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/settings/settings.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!-- settings partial HTML -->
-<div id="ov-settings">
- <div class="tabular-header">
- <h2>Component Settings ({{tableData.length}} total)</h2>
- <div class="ctrl-btns">
- <div class="refresh" ng-class="{active: autoRefresh}"
- icon icon-size="36" icon-id="refresh"
- tooltip tt-msg="autoRefreshTip"
- ng-click="toggleRefresh()"></div>
- </div>
- </div>
-
- <div class="summary-list" onos-table-resize>
- <div ng-show="loading" class="loading-wheel"
- icon icon-id="loading" icon-size="75"></div>
-
- <div class="table-header" onos-sortable-header>
- <table>
- <tr>
- <td colId="component" sortable col-width="300px">Component </td>
- <td colId="id" sortable>Property </td>
- <td colId="type" sortable col-width="70px">Type </td>
- <td colId="value" sortable>Value </td>
- <td colId="defValue" sortable>Default </td>
- <td colId="desc" col-width="400px">Description </td>
- </tr>
- </table>
- </div>
-
- <div class="table-body">
- <table onos-flash-changes id-prop="id">
- <tr ng-if="!tableData.length" class="no-data">
- <td colspan="6">
- No Settings found
- </td>
- </tr>
-
- <tr ng-repeat="prop in tableData track by $index"
- ng-repeat-complete row-id="{{prop.id}}">
- <td>{{prop.component}}</td>
- <td>{{prop.id}}</td>
- <td>{{prop.type}}</td>
- <td>{{prop.value}}</td>
- <td>{{prop.defValue}}</td>
- <td>{{prop.desc}}</td>
- </tr>
- </table>
- </div>
-
- </div>
-
-</div>
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/settings/settings.js b/framework/src/onos/web/gui/src/main/webapp/app/view/settings/settings.js
deleted file mode 100644
index cec0e70e..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/settings/settings.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Component Settings View Module
- */
-
-(function () {
- 'use strict';
-
- angular.module('ovSettings', [])
- .controller('OvSettingsCtrl',
- ['$log', '$scope', 'TableBuilderService',
-
- function ($log, $scope, tbs) {
- tbs.buildTable({
- scope: $scope,
- tag: 'setting'
- });
-
- $log.log('OvSettingsCtrl has been created');
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/README.txt b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/README.txt
deleted file mode 100644
index 61089bf6..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/README.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# ONOS Topology View
-
-Code and resources for implementing the client-side for the Topology View.
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topo.css b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topo.css
deleted file mode 100644
index 0319b9b7..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topo.css
+++ /dev/null
@@ -1,780 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology View -- CSS file
- */
-
-/* --- Base SVG Layer --- */
-
-#ov-topo svg {
- /* prevents the little cut/copy/paste square that would appear on iPad */
- -webkit-user-select: none;
-}
-.light #ov-topo svg {
- background-color: #fff;
-}
-.dark #ov-topo svg {
- background-color: #2b2b2b;
-}
-
-
-/* --- "No Devices" Layer --- */
-
-#ov-topo svg #topo-noDevsLayer {
- visibility: hidden;
-}
-
-.light #ov-topo svg .noDevsBird {
- fill: #ecd;
-}
-.dark #ov-topo svg .noDevsBird {
- fill: #683434;
-}
-
-#ov-topo svg #topo-noDevsLayer text {
- font-size: 60pt;
- font-style: italic;
-}
-.light #ov-topo svg #topo-noDevsLayer text {
- fill: #dde;
-}
-.dark #ov-topo svg #topo-noDevsLayer text {
- fill: #3b3b4f;
-}
-
-
-/* --- Topo Map --- */
-
-#ov-topo svg #topo-map {
- stroke-width: 2px;
- fill: transparent;
-}
-
-.light #ov-topo svg #topo-map {
- stroke: #ddd;
-}
-.dark #ov-topo svg #topo-map {
- stroke: #444;
-}
-
-
-/* --- Topo Summary Panel --- */
-
-#topo-p-summary {
- /* Base css from panel.css */
-}
-
-/* --- Topo Detail Panel --- */
-
-#topo-p-detail {
- /* Base css from panel.css */
- top: 338px;
-}
-html[data-platform='iPad'] #topo-p-detail {
- top: 354px;
-}
-
-#topo-p-detail .actionBtns .actionBtn {
- display: inline-block;
-}
-#topo-p-detail .actionBtns .actionBtn svg {
- width: 30px;
- height: 30px;
-}
-
-/* --- Topo Dialog Panel --- */
-
-#topo-p-dialog .dialog-button {
- display: inline-block;
- cursor: pointer;
- height: 20px;
- padding: 2px 6px;
- margin: 4px;
- float: right;
-}
-
-.light #topo-p-dialog .dialog-button {
- background-color: #fec;
-}
-.dark #topo-p-dialog .dialog-button {
- background-color: #369;
-}
-
-/* --- general topo-panel styling --- */
-
-.topo-p div.header div.icon {
- vertical-align: middle;
- display: inline-block;
-}
-.topo-p div.body {
- overflow-y: scroll;
-}
-
-.topo-p div.body::-webkit-scrollbar {
- display: none;
-}
-
-.topo-p svg {
- display: inline-block;
- width: 42px;
- height: 42px;
-}
-
-.light .topo-p svg .glyph {
- fill: #222;
-}
-
-.dark .topo-p svg .glyph.overlay {
- fill: #222;
-}
-
-.dark .topo-p svg .glyph {
- fill: #ddd;
-}
-.light .topo-p svg .glyph.overlay {
- fill: #fff;
-}
-
-
-.topo-p h2 {
- padding: 0 4px;
- margin: 0;
- word-wrap: break-word;
- display: inline-block;
- width: 210px;
- vertical-align: middle;
-}
-.light .topo-p h2 {
- color: black;
-}
-.dark .topo-p h2 {
- color: #ddd;
-}
-
-.topo-p h3 {
- padding: 0 4px;
- margin: 0;
- word-wrap: break-word;
- top: 20px;
- left: 50px;
-}
-.light .topo-p h3 {
- color: black;
-}
-.dark .topo-p h3 {
- color: #ddd;
-}
-
-.topo-p p, table {
- padding: 4px;
- margin: 0;
-}
-
-.topo-p td {
- word-wrap: break-word;
-}
-.topo-p td.label {
- font-style: italic;
- padding-right: 12px;
- /* works for both light and dark themes ... */
- color: #777;
-}
-.topo-p td.value {
-}
-
-.topo-p hr {
- height: 1px;
- border: 0;
-}
-.light .topo-p hr {
- background-color: #ccc;
- color: #ccc;
-}
-.dark .topo-p hr {
- background-color: #888;
- color: #888;
-}
-
-/* --- Topo Instance Panel --- */
-
-#topo-p-instance {
- height: 100px;
-}
-
-#topo-p-instance div.onosInst {
- display: inline-block;
- width: 170px;
- height: 85px;
- cursor: pointer;
-}
-
-#topo-p-instance svg rect {
- stroke-width: 3.5;
-}
-#topo-p-instance .online svg rect {
- opacity: 1;
-}
-.light #topo-p-instance svg rect {
- fill: #ccc;
- stroke: #aaa;
-}
-.light #topo-p-instance .online svg rect {
- fill: #9cf;
- stroke: #555;
-}
-.dark #topo-p-instance svg rect {
- fill: #666;
- stroke: #222;
-}
-.dark #topo-p-instance .online svg rect {
- fill: #9cf;
- stroke: #999;
-}
-
-
-#topo-p-instance svg .glyph {
- fill: #888;
- fill-rule: evenodd;
-}
-#topo-p-instance .online svg .glyph {
- fill: #000;
-}
-
-#topo-p-instance svg .badgeIcon {
- fill-rule: evenodd;
- opacity: 0.4;
-}
-.light #topo-p-instance svg .badgeIcon {
- fill: #777;
-}
-.dark #topo-p-instance svg .badgeIcon {
- fill: #555;
-}
-
-#topo-p-instance .online svg .badgeIcon {
- opacity: 1.0;
-}
-.light #topo-p-instance .online svg .badgeIcon {
- fill: #fff;
-}
-.dark #topo-p-instance .online svg .badgeIcon {
- fill: #fff;
-}
-
-#topo-p-instance svg text {
- text-anchor: middle;
- opacity: 0.3;
-}
-#topo-p-instance .online svg text {
- opacity: 1.0;
-}
-.light #topo-p-instance svg text {
- fill: #444;
-}
-.light #topo-p-instance .online svg text {
- fill: #eee;
-}
-.dark #topo-p-instance svg text {
- fill: #aaa;
-}
-.dark #topo-p-instance .online svg text {
- fill: #ccc;
-}
-
-#topo-p-instance svg text.instTitle {
- font-size: 11pt;
- font-weight: bold;
-}
-#topo-p-instance svg text.instLabel {
- font-size: 9pt;
- font-style: italic;
-}
-
-#topo-p-instance .onosInst.mastership {
- opacity: 0.3;
-}
-#topo-p-instance .onosInst.mastership.affinity {
- opacity: 1.0;
-}
-.light #topo-p-instance .onosInst.mastership.affinity svg rect {
- filter: url(#blue-glow);
-}
-.dark #topo-p-instance .onosInst.mastership.affinity svg rect {
- filter: url(#yellow-glow);
-}
-.light.firefox #topo-p-instance .onosInst.mastership.affinity svg rect {
- filter: url("data:image/svg+xml;utf8, <svg xmlns = \'http://www.w3.org/2000/svg\'><filter x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\" id=\"blue-glow\"><feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0 0 0 1 0 \"></feColorMatrix><feGaussianBlur stdDeviation=\"3\" result=\"coloredBlur\"></feGaussianBlur><feMerge><feMergeNode in=\"coloredBlur\"></feMergeNode><feMergeNode in=\"SourceGraphic\"></feMergeNode></feMerge></filter></svg>#blue-glow");
-}
-.dark.firefox #topo-p-instance .onosInst.mastership.affinity svg rect {
- filter: url("data:image/svg+xml;utf8, <svg xmlns = \'http://www.w3.org/2000/svg\'><filter x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\" id=\"yellow-glow\"><feColorMatrix type=\"matrix\" values=\"0 0 0 0 1.0 0 0 0 0 1.0 0 0 0 0 0.3 0 0 0 1 0 \"></feColorMatrix><feGaussianBlur stdDeviation=\"3\" result=\"coloredBlur\"></feGaussianBlur><feMerge><feMergeNode in=\"coloredBlur\"></feMergeNode><feMergeNode in=\"SourceGraphic\"></feMergeNode></feMerge></filter></svg>#yellow-glow");
-}
-
-
-/* --- Toolbar --- */
-
-#toolbar-topo-tbar .tbar-row.right {
- width: 100%;
-}
-
-#toolbar-topo-tbar .tbar-row-text {
- height: 21px;
- text-align: right;
- padding: 8px 60px 0 0;
- font-style: italic;
-}
-
-
-/* --- Topo Nodes --- */
-
-#ov-topo svg .suppressed {
- opacity: 0.5 !important;
-}
-
-#ov-topo svg .suppressedmax {
- opacity: 0.2 !important;
-}
-
-#ov-topo svg .node {
- cursor: pointer;
-}
-
-.light #ov-topo svg .node.selected rect,
-.light #ov-topo svg .node.selected circle {
- fill: #f90;
- filter: url(#blue-glow);
-}
-.dark #ov-topo svg .node.selected rect,
-.dark #ov-topo svg .node.selected circle {
- fill: #f90;
- filter: url(#yellow-glow);
-}
-.light.firefox #ov-topo svg .node.selected rect,
-.light.firefox #ov-topo svg .node.selected circle {
- filter: url("data:image/svg+xml;utf8, <svg xmlns = \'http://www.w3.org/2000/svg\'><filter x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\" id=\"blue-glow\"><feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0 0 0 1 0 \"></feColorMatrix><feGaussianBlur stdDeviation=\"3\" result=\"coloredBlur\"></feGaussianBlur><feMerge><feMergeNode in=\"coloredBlur\"></feMergeNode><feMergeNode in=\"SourceGraphic\"></feMergeNode></feMerge></filter></svg>#blue-glow");
-}
-.dark.firefox #ov-topo svg .node.selected rect,
-.dark.firefox #ov-topo svg .node.selected circle {
- filter: url("data:image/svg+xml;utf8, <svg xmlns = \'http://www.w3.org/2000/svg\'><filter x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\" id=\"yellow-glow\"><feColorMatrix type=\"matrix\" values=\"0 0 0 0 1.0 0 0 0 0 1.0 0 0 0 0 0.3 0 0 0 1 0 \"></feColorMatrix><feGaussianBlur stdDeviation=\"3\" result=\"coloredBlur\"></feGaussianBlur><feMerge><feMergeNode in=\"coloredBlur\"></feMergeNode><feMergeNode in=\"SourceGraphic\"></feMergeNode></feMerge></filter></svg>#yellow-glow");
-}
-
-#ov-topo svg .node text {
- pointer-events: none;
-}
-
-/* Device Nodes */
-
-#ov-topo svg .node.device {
-}
-
-#ov-topo svg .node.device rect {
- stroke-width: 1.5;
-}
-
-#ov-topo svg .node.device.fixed rect {
- stroke-width: 1.5;
-}
-.light #ov-topo svg .node.device.fixed rect {
- stroke: #aaa;
-}
-.dark #ov-topo svg .node.device.fixed rect {
- stroke: #999;
-}
-
-/* note: device is offline without the 'online' class */
-.light #ov-topo svg .node.device {
- fill: #777;
-}
-.dark #ov-topo svg .node.device {
- fill: #555;
-}
-
-.light #ov-topo svg .node.device rect {
- stroke: #666;
-}
-.light #ov-topo svg .node.device rect {
- stroke: #999;
-}
-
-.light #ov-topo svg .node.device.online {
- fill: #6e7fa3;
-}
-.dark #ov-topo svg .node.device.online {
- fill: #4E5C7F;
-}
-
-/* note: device is offline without the 'online' class */
-#ov-topo svg .node.device text {
- fill: #bbb;
- font: 10pt sans-serif;
-}
-
-#ov-topo svg .node.device.online text {
- fill: white;
-}
-
-#ov-topo svg .node.device .svgIcon rect {
- fill: #aaa;
-}
-#ov-topo svg .node.device .svgIcon use {
- fill: #777;
-}
-#ov-topo svg .node.device.selected .svgIcon rect {
- fill: #f90;
-}
-#ov-topo svg .node.device.online .svgIcon rect {
- fill: #ccc;
-}
-#ov-topo svg .node.device.online .svgIcon use {
- fill: #000;
-}
-#ov-topo svg .node.device.online.selected .svgIcon rect {
- fill: #f90;
-}
-
-/* Badges */
-/* (... works for both light and dark themes...) */
-#ov-topo svg .node .badge circle {
- stroke: #aaa;
-}
-
-#ov-topo svg .node .badge.badgeInfo circle {
- fill: #99d;
-}
-
-#ov-topo svg .node .badge.badgeWarn circle {
- fill: #da2;
-}
-
-#ov-topo svg .node .badge.badgeError circle {
- fill: #e44;
-}
-
-#ov-topo svg .node .badge use {
- fill: white !important;
-}
-
-#ov-topo svg .node .badge.badgeInfo use {
- fill: #448;
-}
-
-#ov-topo svg .node .badge text {
- fill: white !important;
-}
-
-#ov-topo svg .node .badge.badgeInfo text {
- fill: #448;
-}
-
-/* Host Nodes */
-
-#ov-topo svg .node.host {
-}
-
-#ov-topo svg .node.host text {
- stroke: none;
- font: 9pt sans-serif;
-}
-.light #ov-topo svg .node.host text {
- fill: #846;
-}
-.dark #ov-topo svg .node.host text {
- fill: #BB809D;
-}
-
-.light svg .node.host circle {
- stroke: #000;
- fill: #edb;
-}
-.dark svg .node.host circle {
- stroke: #eee;
- fill: #B2A180;
-}
-
-.light svg .node.host .svgIcon {
- fill: #444;
-}
-.dark svg .node.host .svgIcon {
- fill: #222;
-}
-
-/* --- Topo Links --- */
-
-#ov-topo svg .link {
- opacity: .9;
-}
-
-#ov-topo svg .link.selected,
-#ov-topo svg .link.enhanced {
- stroke-width: 4.5px;
-}
-.light #ov-topo svg .link.selected,
-.light #ov-topo svg .link.enhanced {
- filter: url(#blue-glow);
-}
-.dark #ov-topo svg .link.selected,
-.dark #ov-topo svg .link.enhanced {
- filter: url(#yellow-glow);
-}
-.light.firefox #ov-topo svg .link.selected,
-.light.firefox #ov-topo svg .link.enhanced {
- filter: url("data:image/svg+xml;utf8, <svg xmlns = \'http://www.w3.org/2000/svg\'><filter x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\" id=\"blue-glow\"><feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0 0 0 1 0 \"></feColorMatrix><feGaussianBlur stdDeviation=\"3\" result=\"coloredBlur\"></feGaussianBlur><feMerge><feMergeNode in=\"coloredBlur\"></feMergeNode><feMergeNode in=\"SourceGraphic\"></feMergeNode></feMerge></filter></svg>#blue-glow");
-}
-.dark.firefox #ov-topo svg .link.selected,
-.dark.firefox #ov-topo svg .link.enhanced {
- filter: url("data:image/svg+xml;utf8, <svg xmlns = \'http://www.w3.org/2000/svg\'><filter x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\" id=\"yellow-glow\"><feColorMatrix type=\"matrix\" values=\"0 0 0 0 1.0 0 0 0 0 1.0 0 0 0 0 0.3 0 0 0 1 0 \"></feColorMatrix><feGaussianBlur stdDeviation=\"3\" result=\"coloredBlur\"></feGaussianBlur><feMerge><feMergeNode in=\"coloredBlur\"></feMergeNode><feMergeNode in=\"SourceGraphic\"></feMergeNode></feMerge></filter></svg>#yellow-glow");
-
-}
-
-#ov-topo svg .link.inactive {
- opacity: .5;
- stroke-dasharray: 8 4;
-}
-
-#ov-topo svg .link.secondary {
- stroke-width: 3px;
-}
-.light #ov-topo svg .link.secondary {
- stroke: rgba(0,153,51,0.5);
-}
-.dark #ov-topo svg .link.secondary {
- stroke: rgba(121,231,158,0.5);
-}
-
-/* Port traffic color visualization for Kbps, Mbps, and Gbps */
-
-.light #ov-topo svg .link.secondary.port-traffic-Kbps {
- stroke: rgb(0,153,51);
- stroke-width: 5.0;
-}
-.dark #ov-topo svg .link.secondary.port-traffic-Kbps {
- stroke: rgb(98, 153, 118);
- stroke-width: 5.0;
-}
-
-.light #ov-topo svg .link.secondary.port-traffic-Mbps {
- stroke: rgb(128,145,27);
- stroke-width: 6.5;
-}
-.dark #ov-topo svg .link.secondary.port-traffic-Mbps {
- stroke: rgb(91, 109, 54);
- stroke-width: 6.5;
-}
-
-.light #ov-topo svg .link.secondary.port-traffic-Gbps {
- stroke: rgb(255, 137, 3);
- stroke-width: 8.0;
-}
-.dark #ov-topo svg .link.secondary.port-traffic-Gbps {
- stroke: rgb(174, 119, 55);
- stroke-width: 8.0;
-}
-
-.light #ov-topo svg .link.secondary.port-traffic-Gbps-choked {
- stroke: rgb(183, 30, 21);
- stroke-width: 8.0;
-}
-.dark #ov-topo svg .link.secondary.port-traffic-Gbps-choked {
- stroke: rgb(127, 40, 39);
- stroke-width: 8.0;
-}
-
-
-#ov-topo svg .link.animated {
- stroke-dasharray: 8 5;
- animation: ants 5s infinite linear;
- /* below line will be added via Javascript based on path */
- /*animation-direction: reverse;*/
-}
-@keyframes ants {
- from {
- stroke-dashoffset: 0;
- }
- to {
- stroke-dashoffset: 400;
- }
-}
-
-#ov-topo svg .link.primary {
- stroke-width: 4px;
-}
-.light #ov-topo svg .link.primary {
- stroke: #ffA300;
-}
-.dark #ov-topo svg .link.primary {
- stroke: #D58E0F;
-}
-
-#ov-topo svg .link.secondary.optical {
- stroke-width: 4px;
-}
-.light #ov-topo svg .link.secondary.optical {
- stroke: rgba(128,64,255,0.5);
-}
-.dark #ov-topo svg .link.secondary.optical {
- stroke: rgba(164,139,215,0.5);
-}
-
-#ov-topo svg .link.primary.optical {
- stroke-width: 6px;
-}
-.light #ov-topo svg .link.primary.optical {
- stroke: #74f;
-}
-.dark #ov-topo svg .link.primary.optical {
- stroke: #7352CD;
-}
-
-/* Link Labels */
-
-#ov-topo svg .linkLabel rect {
- stroke: none;
-}
-.light #ov-topo svg .linkLabel rect {
- fill: #eee;
-}
-.dark #ov-topo svg .linkLabel rect {
- fill: #555;
-}
-
-#ov-topo svg .linkLabel text {
- text-anchor: middle;
- stroke-width: 0.1;
- font-size: 9pt;
-}
-.light #ov-topo svg .linkLabel text {
- fill: #444;
-}
-.dark #ov-topo svg .linkLabel text {
- fill: #eee;
-}
-
-/* Port Labels */
-
-#ov-topo svg .portLabel rect {
- stroke: none;
-}
-.light #ov-topo svg .portLabel rect {
- fill: #eee;
-}
-.dark #ov-topo svg .portLabel rect {
- fill: #222;
-}
-
-#ov-topo svg .portLabel text {
- text-anchor: middle;
- stroke-width: 0.1;
- font-size: 11pt;
-}
-.light #ov-topo svg .portLabel text {
- fill: #444;
-}
-.dark #ov-topo svg .portLabel text {
- fill: #eee;
-}
-
-/* Number of Links Labels */
-#ov-topo line.numLinkHash {
- stroke-width: 3;
-}
-
-#ov-topo text.numLinkText {
- font-size: 15pt;
-}
-
-#ov-topo text.numLinkText {
- text-anchor: middle;
-}
-
-.light #ov-topo text.numLinkText {
- fill: #444;
-}
-.dark #ov-topo text.numLinkText {
- fill: #eee;
-}
-
-/* ------------------------------------------------- */
-/* Sprite Layer */
-
-#ov-topo svg #topo-sprites use {
- stroke-width: 2;
-}
-#ov-topo svg #topo-sprites text {
- text-anchor: middle;
- font-size: 20pt;
- font-style: italic;
-}
-
-.light #ov-topo svg #topo-sprites .gold1 use {
- stroke: #fda;
- fill: none;
-}
-.dark #ov-topo svg #topo-sprites .gold1 use {
- stroke: #541;
- fill: none;
-}
-.light #ov-topo svg #topo-sprites .gold1 text {
- fill: #eda;
-}
-.dark #ov-topo svg #topo-sprites .gold1 text {
- fill: #543;
-}
-
-.light #ov-topo svg #topo-sprites .blue1 use {
- stroke: #bbd;
- fill: none;
-}
-.dark #ov-topo svg #topo-sprites .blue1 use {
- stroke: #445;
- fill: none;
-}
-.light #ov-topo svg #topo-sprites .blue1 text {
- fill: #cce;
-}
-.dark #ov-topo svg #topo-sprites .blue1 text {
- fill: #446;
-}
-
-.light #ov-topo svg #topo-sprites .gray1 use {
- stroke: #ccc;
- fill: none;
-}
-.dark #ov-topo svg #topo-sprites .gray1 use {
- stroke: #333;
- fill: none;
-}
-.light #ov-topo svg #topo-sprites .gray1 text {
- fill: #ddd;
-}
-.dark #ov-topo svg #topo-sprites .gray1 text {
- fill: #444;
-}
-
-/* fills */
-.light #ov-topo svg #topo-sprites use.fill-gray2 {
- fill: #eee;
-}
-.dark #ov-topo svg #topo-sprites use.fill-gray2 {
- fill: #444;
-}
-
-.light #ov-topo svg #topo-sprites use.fill-blue2 {
- fill: #bce;
-}
-.dark #ov-topo svg #topo-sprites use.fill-blue2 {
- fill: #447;
-}
-
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topo.html b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topo.html
deleted file mode 100644
index 8a64abb5..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topo.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- Topology View partial HTML -->
-<div id="ov-topo">
- <svg viewBox="0 0 1000 1000"
- resize offset-height="56" offset-width="12"
- notifier="notifyResize()">
- </svg>
-</div>
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topo.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topo.js
deleted file mode 100644
index 3564eb33..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topo.js
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology View Module
- */
-
-(function () {
- 'use strict';
-
- var moduleDependencies = [
- 'ngCookies',
- 'onosUtil',
- 'onosSvg',
- 'onosRemote'
- ];
-
- // references to injected services etc.
- var $scope, $log, $cookies, fs, ks, zs, gs, ms, sus, flash, wss, ps,
- tds, tes, tfs, tps, tis, tss, tls, tts, tos, fltr, ttbs, ttip, tov;
-
- // DOM elements
- var ovtopo, svg, defs, zoomLayer, mapG, spriteG, forceG, noDevsLayer;
-
- // Internal state
- var zoomer, actionMap;
-
- // --- Short Cut Keys ------------------------------------------------
-
- function setUpKeys(overlayKeys) {
- // key bindings need to be made after the services have been injected
- // thus, deferred to here...
- actionMap = {
- I: [toggleInstances, 'Toggle ONOS instances panel'],
- O: [toggleSummary, 'Toggle ONOS summary panel'],
- D: [toggleUseDetailsFlag, 'Disable / enable details panel'],
-
- H: [toggleHosts, 'Toggle host visibility'],
- M: [toggleOffline, 'Toggle offline visibility'],
- P: [togglePorts, 'Toggle Port Highlighting'],
- dash: [tfs.showBadLinks, 'Show bad links'],
- B: [toggleMap, 'Toggle background map'],
- S: [toggleSprites, 'Toggle sprite layer'],
-
- //X: [toggleNodeLock, 'Lock / unlock node positions'],
- Z: [tos.toggleOblique, 'Toggle oblique view (Experimental)'],
- N: [fltr.clickAction, 'Cycle node layers'],
- L: [tfs.cycleDeviceLabels, 'Cycle device labels'],
- U: [tfs.unpin, 'Unpin node (hover mouse over)'],
- R: [resetZoom, 'Reset pan / zoom'],
- dot: [ttbs.toggleToolbar, 'Toggle Toolbar'],
-
- E: [equalizeMasters, 'Equalize mastership roles'],
-
- esc: handleEscape,
-
- _keyListener: ttbs.keyListener,
-
- _helpFormat: [
- ['I', 'O', 'D', 'H', 'M', 'P', 'dash', 'B', 'S' ],
- ['X', 'Z', 'N', 'L', 'U', 'R', '-', 'E', '-', 'dot'],
- [] // this column reserved for overlay actions
- ]
- };
-
- if (fs.isO(overlayKeys)) {
- mergeKeys(overlayKeys);
- }
-
- ks.keyBindings(actionMap);
-
- ks.gestureNotes([
- ['click', 'Select the item and show details'],
- ['shift-click', 'Toggle selection state'],
- ['drag', 'Reposition (and pin) device / host'],
- ['cmd-scroll', 'Zoom in / out'],
- ['cmd-drag', 'Pan']
- ]);
- }
-
- // when a topology overlay is activated, we need to bind their keystrokes
- // and include them in the quick-help panel
- function mergeKeys(extra) {
- var _hf = actionMap._helpFormat[2];
-
- ks.checkNotGlobal(extra);
-
- extra._keyOrder.forEach(function (k) {
- var d = extra[k],
- cb = d && d.cb,
- tt = d && d.tt;
- // NOTE: ignore keys that are already defined
- if (d && !actionMap[k]) {
- actionMap[k] = [cb, tt];
- _hf.push(k);
- }
- });
- }
-
- // --- Keystroke functions -------------------------------------------
-
- function toggleInstances(x) {
- updatePrefsState('insts', tis.toggle(x));
- tfs.updateDeviceColors();
- }
-
- function toggleSummary(x) {
- updatePrefsState('summary', tps.toggleSummary(x));
- }
-
- function toggleUseDetailsFlag(x) {
- updatePrefsState('detail', tps.toggleUseDetailsFlag(x));
- }
-
- function toggleHosts(x) {
- updatePrefsState('hosts', tfs.toggleHosts(x));
- }
-
- function toggleOffline(x) {
- updatePrefsState('offdev', tfs.toggleOffline(x));
- }
-
- function togglePorts(x) {
- updatePrefsState('porthl', tfs.togglePorts(x));
- }
-
- function _togSvgLayer(x, G, tag, what) {
- var on = (x === 'keyev') ? !sus.visible(G) : !!x,
- verb = on ? 'Show' : 'Hide';
- sus.visible(G, on);
- updatePrefsState(tag, on);
- flash.flash(verb + ' ' + what);
- }
-
- function toggleMap(x) {
- _togSvgLayer(x, mapG, 'bg', 'background map');
- }
-
- function toggleSprites(x) {
- _togSvgLayer(x, spriteG, 'spr', 'sprite layer');
- }
-
- function resetZoom() {
- zoomer.reset();
- flash.flash('Pan and zoom reset');
- }
-
- function equalizeMasters() {
- wss.sendEvent('equalizeMasters');
- flash.flash('Equalizing master roles');
- }
-
- function handleEscape() {
- if (tis.showMaster()) {
- // if an instance is selected, cancel the affinity mapping
- tis.cancelAffinity()
-
- } else if (tov.hooks.escape()) {
- // else if the overlay consumed the ESC event...
- // (work already done)
-
- } else if (tss.deselectAll()) {
- // else if we have node selections, deselect them all
- // (work already done)
-
- } else if (tls.deselectLink()) {
- // else if we have a link selected, deselect it
- // (work already done)
-
- } else if (tis.isVisible()) {
- // else if the Instance Panel is visible, hide it
- tis.hide();
- tfs.updateDeviceColors();
-
- } else if (tps.summaryVisible()) {
- // else if the Summary Panel is visible, hide it
- tps.hideSummaryPanel();
- }
- }
-
- // --- Toolbar Functions ---------------------------------------------
-
- function notValid(what) {
- $log.warn('topo.js getActionEntry(): Not a valid ' + what);
- }
-
- function getActionEntry(key) {
- var entry;
-
- if (!key) {
- notValid('key');
- return null;
- }
-
- entry = actionMap[key];
-
- if (!entry) {
- notValid('actionMap entry');
- return null;
- }
- return fs.isA(entry) || [entry, ''];
- }
-
- function setUpToolbar() {
- ttbs.init({
- getActionEntry: getActionEntry,
- setUpKeys: setUpKeys
- });
- ttbs.createToolbar();
- }
-
- // --- Glyphs, Icons, and the like -----------------------------------
-
- function setUpDefs() {
- defs = svg.append('defs');
- gs.loadDefs(defs);
- sus.loadGlowDefs(defs);
- }
-
-
- // --- Pan and Zoom --------------------------------------------------
-
- // zoom enabled predicate. ev is a D3 source event.
- function zoomEnabled(ev) {
- return fs.isMobile() || (ev.metaKey || ev.altKey);
- }
-
- function zoomCallback() {
- var sc = zoomer.scale(),
- tr = zoomer.translate();
-
- ps.setPrefs('topo_zoom', {tx:tr[0], ty:tr[1], sc:sc});
-
- // keep the map lines constant width while zooming
- mapG.style('stroke-width', (2.0 / sc) + 'px');
- }
-
- function setUpZoom() {
- zoomLayer = svg.append('g').attr('id', 'topo-zoomlayer');
- zoomer = zs.createZoomer({
- svg: svg,
- zoomLayer: zoomLayer,
- zoomEnabled: zoomEnabled,
- zoomCallback: zoomCallback
- });
- }
-
-
- // callback invoked when the SVG view has been resized..
- function svgResized(s) {
- tfs.newDim([s.width, s.height]);
- }
-
- // --- Background Map ------------------------------------------------
-
- function setUpNoDevs() {
- var g, box;
- noDevsLayer = svg.append('g').attr({
- id: 'topo-noDevsLayer',
- transform: sus.translate(500,500)
- });
- // Note, SVG viewbox is '0 0 1000 1000', defined in topo.html.
- // We are translating this layer to have its origin at the center
-
- g = noDevsLayer.append('g');
- gs.addGlyph(g, 'bird', 100).attr('class', 'noDevsBird');
- g.append('text').text('No devices are connected')
- .attr({ x: 120, y: 80});
-
- box = g.node().getBBox();
- box.x -= box.width/2;
- box.y -= box.height/2;
- g.attr('transform', sus.translate(box.x, box.y));
-
- showNoDevs(true);
- }
-
- function showNoDevs(b) {
- sus.visible(noDevsLayer, b);
- }
-
-
- var countryFilters = {
- world: function (c) {
- return c.properties.continent !== 'Antarctica';
- },
-
- // NOTE: for "usa" we are using our hand-crafted topojson file
-
- s_america: function (c) {
- return c.properties.continent === 'South America';
- },
-
- ns_america: function (c) {
- return c.properties.custom === 'US-cont' ||
- c.properties.subregion === 'Central America' ||
- c.properties.continent === 'South America';
- },
-
- japan: function (c) {
- return c.properties.geounit === 'Japan';
- },
-
- europe: function (c) {
- return c.properties.continent === 'Europe';
- },
-
- italy: function (c) {
- return c.properties.geounit === 'Italy';
- },
-
- uk: function (c) {
- // technically, Ireland is not part of the United Kingdom,
- // but the map looks weird without it showing.
- return c.properties.adm0_a3 === 'GBR' ||
- c.properties.adm0_a3 === 'IRL';
- },
-
- s_korea: function (c) {
- return c.properties.adm0_a3 === 'KOR';
- },
-
- australia: function (c) {
- return c.properties.adm0_a3 === 'AUS';
- }
- };
-
-
- function setUpMap($loc) {
- var s1 = $loc.search().mapid,
- s2 = ps.getPrefs('topo_mapid'),
- mapId = s1 || (s2 && s2.id) || 'usa',
- promise,
- cfilter,
- opts;
-
- mapG = zoomLayer.append('g').attr('id', 'topo-map');
- if (mapId === 'usa') {
- promise = ms.loadMapInto(mapG, '*continental_us');
- } else {
- ps.setPrefs('topo_mapid', {id:mapId});
- cfilter = countryFilters[mapId] || countryFilters.world;
- opts = { countryFilter: cfilter };
- promise = ms.loadMapRegionInto(mapG, opts);
- }
- return promise;
- }
-
- function opacifyMap(b) {
- mapG.transition()
- .duration(1000)
- .attr('opacity', b ? 1 : 0);
- }
-
- function setUpSprites($loc, tspr) {
- var s1 = $loc.search().sprites,
- s2 = ps.getPrefs('topo_sprites'),
- sprId = s1 || (s2 && s2.id);
-
- spriteG = zoomLayer.append ('g').attr('id', 'topo-sprites');
- if (sprId) {
- ps.setPrefs('topo_sprites', {id:sprId});
- tspr.loadSprites(spriteG, defs, sprId);
- }
- }
-
- // --- User Preferemces ----------------------------------------------
-
- var prefsState = {};
-
- function updatePrefsState(what, b) {
- prefsState[what] = b ? 1 : 0;
- ps.setPrefs('topo_prefs', prefsState);
- }
-
-
- function restoreConfigFromPrefs() {
- // NOTE: toolbar will have set this for us..
- prefsState = ps.asNumbers(ps.getPrefs('topo_prefs'));
-
- $log.debug('TOPO- Prefs State:', prefsState);
-
- flash.enable(false);
- toggleInstances(prefsState.insts);
- toggleSummary(prefsState.summary);
- toggleUseDetailsFlag(prefsState.detail);
- toggleHosts(prefsState.hosts);
- toggleOffline(prefsState.offdev);
- togglePorts(prefsState.porthl);
- toggleMap(prefsState.bg);
- toggleSprites(prefsState.spr);
- flash.enable(true);
- }
-
-
- // somewhat hackish, because summary update cannot happen until we
- // have opened the websocket to the server; hence this extra function
- // invoked after tes.start()
- function restoreSummaryFromPrefs() {
- prefsState = ps.asNumbers(ps.getPrefs('topo_prefs'));
- $log.debug('TOPO- Prefs SUMMARY State:', prefsState.summary);
-
- flash.enable(false);
- toggleSummary(prefsState.summary);
- flash.enable(true);
- }
-
- function topoStartDone() {
- var d = $scope.intentData;
- if (d) {
- tts.selectIntent(d);
- }
- }
-
- // --- Controller Definition -----------------------------------------
-
- angular.module('ovTopo', moduleDependencies)
- .controller('OvTopoCtrl', ['$scope', '$log', '$location', '$timeout',
- '$cookies', 'FnService', 'MastService', 'KeyService', 'ZoomService',
- 'GlyphService', 'MapService', 'SvgUtilService', 'FlashService',
- 'WebSocketService', 'PrefsService', 'TopoDialogService',
- 'TopoEventService', 'TopoForceService', 'TopoPanelService',
- 'TopoInstService', 'TopoSelectService', 'TopoLinkService',
- 'TopoTrafficService', 'TopoObliqueService', 'TopoFilterService',
- 'TopoToolbarService', 'TopoSpriteService', 'TooltipService',
- 'TopoOverlayService',
-
- function (_$scope_, _$log_, $loc, $timeout, _$cookies_, _fs_, mast, _ks_,
- _zs_, _gs_, _ms_, _sus_, _flash_, _wss_, _ps_, _tds_, _tes_,
- _tfs_, _tps_, _tis_, _tss_, _tls_, _tts_, _tos_, _fltr_,
- _ttbs_, tspr, _ttip_, _tov_) {
- var params = $loc.search(),
- projection,
- dim,
- uplink = {
- // provides function calls back into this space
- showNoDevs: showNoDevs,
- projection: function () { return projection; },
- zoomLayer: function () { return zoomLayer; },
- zoomer: function () { return zoomer; },
- opacifyMap: opacifyMap,
- topoStartDone: topoStartDone
- };
-
- $scope = _$scope_;
- $log = _$log_;
- $cookies = _$cookies_;
- fs = _fs_;
- ks = _ks_;
- zs = _zs_;
- gs = _gs_;
- ms = _ms_;
- sus = _sus_;
- flash = _flash_;
- wss = _wss_;
- ps = _ps_;
- tds = _tds_;
- tes = _tes_;
- tfs = _tfs_;
- // TODO: consider funnelling actions through TopoForceService...
- // rather than injecting references to these 'sub-modules',
- // just so we can invoke functions on them.
- tps = _tps_;
- tis = _tis_;
- tss = _tss_;
- tls = _tls_;
- tts = _tts_;
- tos = _tos_;
- fltr = _fltr_;
- ttbs = _ttbs_;
- ttip = _ttip_;
- tov = _tov_;
-
- if (params.intentKey && params.intentAppId && params.intentAppName) {
- $scope.intentData = {
- key: params.intentKey,
- appId: params.intentAppId,
- appName: params.intentAppName
- };
- }
-
- $scope.notifyResize = function () {
- svgResized(fs.windowSize(mast.mastHeight()));
- };
-
- // Cleanup on destroyed scope..
- $scope.$on('$destroy', function () {
- $log.log('OvTopoCtrl is saying Buh-Bye!');
- tes.stop();
- ks.unbindKeys();
- tps.destroyPanels();
- tds.closeDialog();
- tis.destroyInst();
- tfs.destroyForce();
- ttbs.destroyToolbar();
- });
-
- // svg layer and initialization of components
- ovtopo = d3.select('#ov-topo');
- svg = ovtopo.select('svg');
- // set the svg size to match that of the window, less the masthead
- svg.attr(fs.windowSize(mast.mastHeight()));
- dim = [svg.attr('width'), svg.attr('height')];
-
- setUpKeys();
- setUpToolbar();
- setUpDefs();
- setUpZoom();
- setUpNoDevs();
- setUpMap($loc).then(
- function (proj) {
- var z = ps.getPrefs('topo_zoom') || {tx:0, ty:0, sc:1};
- zoomer.panZoom([z.tx, z.ty], z.sc);
- $log.debug('** Zoom restored:', z);
-
- projection = proj;
- $log.debug('** We installed the projection:', proj);
- flash.enable(false);
- toggleMap(prefsState.bg);
- flash.enable(true);
-
- // now we have the map projection, we are ready for
- // the server to send us device/host data...
- tes.start();
- // need to do the following so we immediately get
- // the summary panel data back from the server
- restoreSummaryFromPrefs();
- }
- );
- setUpSprites($loc, tspr);
-
- forceG = zoomLayer.append('g').attr('id', 'topo-force');
- tfs.initForce(svg, forceG, uplink, dim);
- tis.initInst({ showMastership: tfs.showMastership });
- tps.initPanels();
-
- // temporary solution for persisting user settings
- restoreConfigFromPrefs();
- ttbs.setDefaultOverlay();
-
- $log.debug('registered overlays...', tov.list());
- $log.log('OvTopoCtrl has been created');
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoD3.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoD3.js
deleted file mode 100644
index 5bf2eb4f..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoD3.js
+++ /dev/null
@@ -1,641 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology D3 Module.
- Functions for manipulating the D3 visualizations of the Topology
- */
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, fs, sus, is, ts;
-
- // api to topoForce
- var api;
- /*
- node() // get ref to D3 selection of nodes
- link() // get ref to D3 selection of links
- linkLabel() // get ref to D3 selection of link labels
- instVisible() // true if instances panel is visible
- posNode() // position node
- showHosts() // true if hosts are to be shown
- restyleLinkElement() // update link styles based on backing data
- updateLinkLabelModel() // update backing data for link labels
- */
-
- // configuration
- var devCfg = {
- xoff: -20,
- yoff: -18
- },
- labelConfig = {
- imgPad: 16,
- padLR: 4,
- padTB: 3,
- marginLR: 3,
- marginTB: 2,
- port: {
- gap: 3,
- width: 18,
- height: 14
- }
- },
- badgeConfig = {
- radius: 12,
- yoff: 5,
- gdelta: 10
- },
- icfg;
-
- var status = {
- i: 'badgeInfo',
- w: 'badgeWarn',
- e: 'badgeError'
- };
-
- function badgeStatus(badge) {
- return status[badge.status] || status.i;
- }
-
- // internal state
- var deviceLabelIndex = 0,
- hostLabelIndex = 0;
-
-
- var dCol = {
- black: '#000',
- paleblue: '#acf',
- offwhite: '#ddd',
- darkgrey: '#444',
- midgrey: '#888',
- lightgrey: '#bbb',
- orange: '#f90'
- };
-
- // note: these are the device icon colors without affinity
- var dColTheme = {
- light: {
- rfill: dCol.offwhite,
- online: {
- glyph: dCol.darkgrey,
- rect: dCol.paleblue
- },
- offline: {
- glyph: dCol.midgrey,
- rect: dCol.lightgrey
- }
- },
- dark: {
- rfill: dCol.midgrey,
- online: {
- glyph: dCol.darkgrey,
- rect: dCol.paleblue
- },
- offline: {
- glyph: dCol.midgrey,
- rect: dCol.darkgrey
- }
- }
- };
-
- function devBaseColor(d) {
- var o = d.online ? 'online' : 'offline';
- return dColTheme[ts.theme()][o];
- }
-
- function setDeviceColor(d) {
- var o = d.online,
- s = d.el.classed('selected'),
- c = devBaseColor(d),
- a = instColor(d.master, o),
- icon = d.el.select('g.deviceIcon'),
- g, r;
-
- if (s) {
- g = c.glyph;
- r = dCol.orange;
- } else if (api.instVisible()) {
- g = o ? a : c.glyph;
- r = o ? c.rfill : a;
- } else {
- g = c.glyph;
- r = c.rect;
- }
-
- icon.select('use').style('fill', g);
- icon.select('rect').style('fill', r);
- }
-
- function instColor(id, online) {
- return sus.cat7().getColor(id, !online, ts.theme());
- }
-
- // ====
-
- function incDevLabIndex() {
- deviceLabelIndex = (deviceLabelIndex+1) % 3;
- switch(deviceLabelIndex) {
- case 0: return 'Hide device labels';
- case 1: return 'Show friendly device labels';
- case 2: return 'Show device ID labels';
- }
- }
-
- // Returns the newly computed bounding box of the rectangle
- function adjustRectToFitText(n) {
- var text = n.select('text'),
- box = text.node().getBBox(),
- lab = labelConfig;
-
- text.attr('text-anchor', 'middle')
- .attr('y', '-0.8em')
- .attr('x', lab.imgPad/2);
-
- // translate the bbox so that it is centered on [x,y]
- box.x = -box.width / 2;
- box.y = -box.height / 2;
-
- // add padding
- box.x -= (lab.padLR + lab.imgPad/2);
- box.width += lab.padLR * 2 + lab.imgPad;
- box.y -= lab.padTB;
- box.height += lab.padTB * 2;
-
- return box;
- }
-
- function hostLabel(d) {
- var idx = (hostLabelIndex < d.labels.length) ? hostLabelIndex : 0;
- return d.labels[idx];
- }
- function deviceLabel(d) {
- var idx = (deviceLabelIndex < d.labels.length) ? deviceLabelIndex : 0;
- return d.labels[idx];
- }
- function trimLabel(label) {
- return (label && label.trim()) || '';
- }
-
- function emptyBox() {
- return {
- x: -2,
- y: -2,
- width: 4,
- height: 4
- };
- }
-
- function updateDeviceRendering(d) {
- var label = trimLabel(deviceLabel(d)),
- noLabel = !label,
- node = d.el,
- dim = icfg.device.dim,
- box, dx, dy, bsel,
- bdg = d.badge,
- bcr = badgeConfig.radius,
- bcgd = badgeConfig.gdelta;
-
- node.select('text')
- .text(label)
- .style('opacity', 0)
- .transition()
- .style('opacity', 1);
-
- if (noLabel) {
- box = emptyBox();
- dx = -dim/2;
- dy = -dim/2;
- } else {
- box = adjustRectToFitText(node);
- dx = box.x + devCfg.xoff;
- dy = box.y + devCfg.yoff;
- }
-
- node.select('rect')
- .transition()
- .attr(box);
-
- node.select('g.deviceIcon')
- .transition()
- .attr('transform', sus.translate(dx, dy));
-
- // handle badge, if defined
- if (bdg) {
- renderBadge(node, bdg, { dx: dx + dim, dy: dy });
- }
- }
-
- function updateHostRendering(d) {
- var node = d.el,
- bdg = d.badge;
-
- updateHostLabel(d);
-
- // handle badge, if defined
- if (bdg) {
- renderBadge(node, bdg, icfg.host.badge);
- }
- }
-
- function renderBadge(node, bdg, boff) {
- var bsel,
- bcr = badgeConfig.radius,
- bcgd = badgeConfig.gdelta;
-
- node.select('g.badge').remove();
-
- bsel = node.append('g')
- .classed('badge', true)
- .classed(badgeStatus(bdg), true)
- .attr('transform', sus.translate(boff.dx, boff.dy));
-
- bsel.append('circle')
- .attr('r', bcr);
-
- if (bdg.txt) {
- bsel.append('text')
- .attr('dy', badgeConfig.yoff)
- .attr('text-anchor', 'middle')
- .text(bdg.txt);
- } else if (bdg.gid) {
- bsel.append('use')
- .attr({
- width: bcgd * 2,
- height: bcgd * 2,
- transform: sus.translate(-bcgd, -bcgd),
- 'xlink:href': '#' + bdg.gid
- });
- }
- }
-
- function updateHostLabel(d) {
- var label = trimLabel(hostLabel(d));
- d.el.select('text').text(label);
- }
-
- function updateDeviceColors(d) {
- if (d) {
- setDeviceColor(d);
- } else {
- api.node().filter('.device').each(function (d) {
- setDeviceColor(d);
- });
- }
- }
-
-
- // ==========================
- // updateNodes - subfunctions
-
- function deviceExisting(d) {
- var node = d.el;
- node.classed('online', d.online);
- updateDeviceRendering(d);
- api.posNode(d, true);
- }
-
- function hostExisting(d) {
- updateHostRendering(d);
- api.posNode(d, true);
- }
-
- function deviceEnter(d) {
- var node = d3.select(this),
- glyphId = d.type || 'unknown',
- label = trimLabel(deviceLabel(d)),
- //devCfg = deviceIconConfig,
- noLabel = !label,
- box, dx, dy, icon;
-
- d.el = node;
-
- node.append('rect').attr({ rx: 5, ry: 5 });
- node.append('text').text(label).attr('dy', '1.1em');
- box = adjustRectToFitText(node);
- node.select('rect').attr(box);
-
- icon = is.addDeviceIcon(node, glyphId);
-
- if (noLabel) {
- dx = -icon.dim/2;
- dy = -icon.dim/2;
- } else {
- box = adjustRectToFitText(node);
- dx = box.x + devCfg.xoff;
- dy = box.y + devCfg.yoff;
- }
-
- icon.attr('transform', sus.translate(dx, dy));
- }
-
- function hostEnter(d) {
- var node = d3.select(this),
- gid = d.type || 'unknown',
- rad = icfg.host.radius,
- r = d.type ? rad.withGlyph : rad.noGlyph,
- textDy = r + 10;
-
- d.el = node;
- sus.visible(node, api.showHosts());
-
- is.addHostIcon(node, r, gid);
-
- node.append('text')
- .text(hostLabel)
- .attr('dy', textDy)
- .attr('text-anchor', 'middle');
- }
-
- function hostExit(d) {
- var node = d.el;
- node.select('use')
- .style('opacity', 0.5)
- .transition()
- .duration(800)
- .style('opacity', 0);
-
- node.select('text')
- .style('opacity', 0.5)
- .transition()
- .duration(800)
- .style('opacity', 0);
-
- node.select('circle')
- .style('stroke-fill', '#555')
- .style('fill', '#888')
- .style('opacity', 0.5)
- .transition()
- .duration(1500)
- .attr('r', 0);
- }
-
- function deviceExit(d) {
- var node = d.el;
- node.select('use')
- .style('opacity', 0.5)
- .transition()
- .duration(800)
- .style('opacity', 0);
-
- node.selectAll('rect')
- .style('stroke-fill', '#555')
- .style('fill', '#888')
- .style('opacity', 0.5);
- }
-
-
- // ==========================
- // updateLinks - subfunctions
-
- function linkEntering(d) {
- var link = d3.select(this);
- d.el = link;
- api.restyleLinkElement(d);
- if (d.type() === 'hostLink') {
- sus.visible(link, api.showHosts());
- }
- }
-
- var linkLabelOffset = '0.3em';
-
- function applyLinkLabels() {
- var entering;
-
- api.updateLinkLabelModel();
-
- // for elements already existing, we need to update the text
- // and adjust the rectangle size to fit
- api.linkLabel().each(function (d) {
- var el = d3.select(this),
- rect = el.select('rect'),
- text = el.select('text');
- text.text(d.label);
- rect.attr(rectAroundText(el));
- });
-
- entering = api.linkLabel().enter().append('g')
- .classed('linkLabel', true)
- .attr('id', function (d) { return d.id; });
-
- entering.each(function (d) {
- var el = d3.select(this),
- rect,
- text;
-
- if (d.ldata.type() === 'hostLink') {
- el.classed('hostLinkLabel', true);
- sus.visible(el, api.showHosts());
- }
-
- d.el = el;
- rect = el.append('rect');
- text = el.append('text').text(d.label);
- rect.attr(rectAroundText(el));
- text.attr('dy', linkLabelOffset);
-
- el.attr('transform', transformLabel(d.ldata.position));
- });
-
- // Remove any labels that are no longer required.
- api.linkLabel().exit().remove();
- }
-
- function rectAroundText(el) {
- var text = el.select('text'),
- box = text.node().getBBox();
-
- // translate the bbox so that it is centered on [x,y]
- box.x = -box.width / 2;
- box.y = -box.height / 2;
-
- // add padding
- box.x -= 1;
- box.width += 2;
- return box;
- }
-
- function transformLabel(p) {
- var dx = p.x2 - p.x1,
- dy = p.y2 - p.y1,
- xMid = dx/2 + p.x1,
- yMid = dy/2 + p.y1;
- return sus.translate(xMid, yMid);
- }
-
- function applyPortLabels(data, portLabelG) {
- var entering = portLabelG.selectAll('.portLabel')
- .data(data).enter().append('g')
- .classed('portLabel', true)
- .attr('id', function (d) { return d.id; });
-
- entering.each(function (d) {
- var el = d3.select(this),
- rect = el.append('rect'),
- text = el.append('text').text(d.num);
-
- rect.attr(rectAroundText(el));
- text.attr('dy', linkLabelOffset);
- el.attr('transform', sus.translate(d.x, d.y));
- });
- }
-
- function labelPoint(linkPos) {
- var lengthUpLine = 1 / 3,
- dx = linkPos.x2 - linkPos.x1,
- dy = linkPos.y2 - linkPos.y1,
- movedX = dx * lengthUpLine,
- movedY = dy * lengthUpLine;
-
- return {
- x: movedX,
- y: movedY
- };
- }
-
- function calcGroupPos(linkPos) {
- var moved = labelPoint(linkPos);
- return sus.translate(linkPos.x1 + moved.x, linkPos.y1 + moved.y);
- }
-
- // calculates where on the link that the hash line for 5+ label appears
- function hashAttrs(linkPos) {
- var hashLength = 25,
- halfLength = hashLength / 2,
- dx = linkPos.x2 - linkPos.x1,
- dy = linkPos.y2 - linkPos.y1,
- length = Math.sqrt((dx * dx) + (dy * dy)),
- moveAmtX = (dx / length) * halfLength,
- moveAmtY = (dy / length) * halfLength,
- mid = labelPoint(linkPos),
- angle = Math.atan(dy / dx) + 45;
-
- return {
- x1: mid.x - moveAmtX,
- y1: mid.y - moveAmtY,
- x2: mid.x + moveAmtX,
- y2: mid.y + moveAmtY,
- stroke: api.linkConfig()[ts.theme()].baseColor,
- transform: 'rotate(' + angle + ',' + mid.x + ',' + mid.y + ')'
- };
- }
-
- function textLabelPos(linkPos) {
- var point = labelPoint(linkPos),
- dist = 20;
- return {
- x: point.x + dist,
- y: point.y + dist
- };
- }
-
- function applyNumLinkLabels(data, lblsG) {
- var labels = lblsG.selectAll('g.numLinkLabel')
- .data(data, function (d) { return 'pair-' + d.id; }),
- entering;
-
- // update existing labels
- labels.each(function (d) {
- var el = d3.select(this);
-
- el.attr({
- transform: function (d) { return calcGroupPos(d.linkCoords); }
- });
- el.select('line')
- .attr(hashAttrs(d.linkCoords));
- el.select('text')
- .attr(textLabelPos(d.linkCoords))
- .text(d.num);
- });
-
- // add new labels
- entering = labels
- .enter()
- .append('g')
- .attr({
- transform: function (d) { return calcGroupPos(d.linkCoords); },
- id: function (d) { return 'pair-' + d.id; }
- })
- .classed('numLinkLabel', true);
-
- entering.each(function (d) {
- var el = d3.select(this);
-
- el.append('line')
- .classed('numLinkHash', true)
- .attr(hashAttrs(d.linkCoords));
- el.append('text')
- .classed('numLinkText', true)
- .attr(textLabelPos(d.linkCoords))
- .text(d.num);
- });
-
- // remove old labels
- labels.exit().remove();
- }
-
- // ==========================
- // Module definition
-
- angular.module('ovTopo')
- .factory('TopoD3Service',
- ['$log', 'FnService', 'SvgUtilService', 'IconService', 'ThemeService',
-
- function (_$log_, _fs_, _sus_, _is_, _ts_) {
- $log = _$log_;
- fs = _fs_;
- sus = _sus_;
- is = _is_;
- ts = _ts_;
-
- icfg = is.iconConfig();
-
- function initD3(_api_) {
- api = _api_;
- }
-
- function destroyD3() { }
-
- return {
- initD3: initD3,
- destroyD3: destroyD3,
-
- incDevLabIndex: incDevLabIndex,
- adjustRectToFitText: adjustRectToFitText,
- hostLabel: hostLabel,
- deviceLabel: deviceLabel,
- trimLabel: trimLabel,
-
- updateDeviceLabel: updateDeviceRendering,
- updateHostLabel: updateHostLabel,
- updateDeviceColors: updateDeviceColors,
-
- deviceExisting: deviceExisting,
- hostExisting: hostExisting,
- deviceEnter: deviceEnter,
- hostEnter: hostEnter,
- hostExit: hostExit,
- deviceExit: deviceExit,
-
- linkEntering: linkEntering,
- applyLinkLabels: applyLinkLabels,
- transformLabel: transformLabel,
- applyPortLabels: applyPortLabels,
- applyNumLinkLabels: applyNumLinkLabels
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoDialog.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoDialog.js
deleted file mode 100644
index 0c47511b..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoDialog.js
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology Dialog Module.
- Defines functions for manipulating a dialog box.
- */
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, $window, $rootScope, fs, ps, bns;
-
- // constants
- var pCls = 'topo-p dialog',
- idDialog = 'topo-p-dialog',
- panelOpts = {
- width: 300,
- edge: 'left'
- };
-
- // internal state
- var pApi, panel, dApi;
-
- // TODO: ESC key invokes Cancel callback
- // TODO: Enter invokes OK callback
-
- // create the dialog; return its API
- function createDialog() {
- var header, body, footer,
- p = ps.createPanel(idDialog, panelOpts);
- p.classed(pCls, true);
- panel = p;
-
- function reset() {
- p.empty();
- p.append('div').classed('header', true);
- p.append('div').classed('body', true);
- p.append('div').classed('footer', true);
-
- header = p.el().select('.header');
- body = p.el().select('.body');
- footer = p.el().select('.footer');
- }
-
- function hAppend(x) {
- if (typeof x === 'string') {
- return header.append(x);
- }
- header.node().appendChild(x.node());
- return header;
- }
-
- function bAppend(x) {
- if (typeof x === 'string') {
- return body.append(x);
- }
- body.node().appendChild(x.node());
- return body;
- }
-
- function fAppend(x) {
- if (typeof x === 'string') {
- return footer.append(x);
- }
- footer.node().appendChild(x.node());
- return footer;
- }
-
- function destroy() {
- ps.destroyPanel(idDialog);
- }
-
- return {
- reset: reset,
- appendHeader: hAppend,
- appendBody: bAppend,
- appendFooter: fAppend,
- destroy: destroy
- };
- }
-
- function makeButton(text, callback) {
- var cb = fs.isF(callback);
-
- function invoke() {
- cb && cb();
- panel.hide();
- }
- return createDiv('dialog-button')
- .text(text)
- .on('click', invoke);
- }
-
- function setTitle(title) {
- if (pApi) {
- pApi.appendHeader('h2').text(title);
- }
- return dApi;
- }
-
- function addContent(content) {
- if (pApi) {
- pApi.appendBody(content);
- }
- return dApi;
- }
-
- function addButton(text, cb) {
- if (pApi) {
- pApi.appendFooter(makeButton(text, cb));
- }
- return dApi;
- }
-
- // opens the dialog (creates if necessary)
- function openDialog() {
- $log.debug('Open DIALOG');
- if (!pApi) {
- pApi = createDialog();
- }
- pApi.reset();
- panel.show();
-
- // return the dialog object API
- dApi = {
- setTitle: setTitle,
- addContent: addContent,
- addButton: addButton
- };
- return dApi;
- }
-
- // closes the dialog (destroying panel)
- function closeDialog() {
- $log.debug('Close DIALOG');
- if (pApi) {
- panel.hide();
- pApi.destroy();
- pApi = null;
- dApi = null;
- }
- }
-
- // creates a detached div, returning D3 selection
- // optional CSS class may be provided
- function createDiv(cls) {
- var div = d3.select(document.createElement('div'));
- if (cls) {
- div.classed(cls, true);
- }
- return div;
- }
-
- // ==========================
-
- angular.module('ovTopo')
- .factory('TopoDialogService',
- ['$log', '$window', '$rootScope', 'FnService', 'PanelService', 'ButtonService',
-
- function (_$log_, _$window_, _$rootScope_,
- _fs_, _ps_, _bns_) {
- $log = _$log_;
- $window = _$window_;
- $rootScope = _$rootScope_;
- fs = _fs_;
- ps = _ps_;
- bns = _bns_;
-
- return {
- openDialog: openDialog,
- closeDialog: closeDialog,
- createDiv: createDiv
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoEvent.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoEvent.js
deleted file mode 100644
index 9b07f878..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoEvent.js
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology Event Module.
-
- Defines the conduit between the client and the server:
- - provides a clean API for sending events to the server
- - dispatches incoming events from the server to the appropriate sub-module
-
- */
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, $interval, wss, tps, tis, tfs, tss, tov, tspr;
-
- // internal state
- var handlerMap,
- openListener,
- heartbeatTimer;
-
- var heartbeatPeriod = 9000; // 9 seconds
-
- // ==========================
-
- function createHandlerMap() {
- handlerMap = {
- showSummary: tps,
-
- showDetails: tss,
-
- showHighlights: tov,
-
- addInstance: tis,
- updateInstance: tis,
- removeInstance: tis,
-
- addDevice: tfs,
- updateDevice: tfs,
- removeDevice: tfs,
- addHost: tfs,
- updateHost: tfs,
- moveHost: tfs,
- removeHost: tfs,
- addLink: tfs,
- updateLink: tfs,
- removeLink: tfs,
-
- topoStartDone: tfs,
-
- spriteListResponse: tspr,
- spriteDataResponse: tspr
- };
- }
-
- function wsOpen(host, url) {
- $log.debug('TOPO: web socket open - cluster node:', host, 'URL:', url);
- // Request batch of initial data from the new server
- wss.sendEvent('topoStart');
- }
-
- function cancelHeartbeat() {
- if (heartbeatTimer) {
- $interval.cancel(heartbeatTimer);
- }
- heartbeatTimer = null;
- }
-
- function scheduleHeartbeat() {
- cancelHeartbeat();
- heartbeatTimer = $interval(function () {
- wss.sendEvent('topoHeartbeat');
- }, heartbeatPeriod);
- }
-
-
- angular.module('ovTopo')
- .factory('TopoEventService',
- ['$log', '$interval', 'WebSocketService',
- 'TopoPanelService', 'TopoInstService', 'TopoForceService',
- 'TopoSelectService', 'TopoOverlayService', 'TopoSpriteService',
-
- function (_$log_, _$interval_, _wss_,
- _tps_, _tis_, _tfs_, _tss_, _tov_, _tspr_) {
- $log = _$log_;
- $interval = _$interval_;
- wss = _wss_;
- tps = _tps_;
- tis = _tis_;
- tfs = _tfs_;
- tss = _tss_;
- tov = _tov_;
- tspr = _tspr_;
-
- createHandlerMap();
-
- function start() {
- openListener = wss.addOpenListener(wsOpen);
- wss.bindHandlers(handlerMap);
- wss.sendEvent('topoStart');
- scheduleHeartbeat();
- $log.debug('topo comms started');
- }
-
- function stop() {
- cancelHeartbeat();
- wss.sendEvent('topoStop');
- wss.unbindHandlers(handlerMap);
- wss.removeOpenListener(openListener);
- openListener = null;
- $log.debug('topo comms stopped');
- }
-
- return {
- start: start,
- stop: stop
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoFilter.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoFilter.js
deleted file mode 100644
index f9b96ae8..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoFilter.js
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology layer filtering Module.
- Provides functionality to visually differentiate between the packet and
- optical layers of the topology.
- */
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, fs, flash, tps, tts;
-
- // api to topoForce
- var api;
- /*
- node() // get ref to D3 selection of nodes
- link() // get ref to D3 selection of links
- */
-
- var smax = 'suppressedmax';
-
- // which "layer" a particular item "belongs to"
- var layerLookup = {
- host: {
- endstation: 'pkt', // default, if host event does not define type
- router: 'pkt',
- bgpSpeaker: 'pkt'
- },
- device: {
- switch: 'pkt',
- roadm: 'opt'
- },
- link: {
- hostLink: 'pkt',
- direct: 'pkt',
- indirect: '',
- tunnel: '',
- optical: 'opt'
- }
- },
- // order of layer cycling in button
- dispatch = [
- {
- type: 'all',
- action: function () { suppressLayers(false); },
- msg: 'All Layers Shown'
- },
- {
- type: 'pkt',
- action: function () { showLayer('pkt'); },
- msg: 'Packet Layer Shown'
- },
- {
- type: 'opt',
- action: function () { showLayer('opt'); },
- msg: 'Optical Layer Shown'
- }
- ],
- layer = 0;
-
- function clickAction() {
- layer = (layer + 1) % dispatch.length;
- dispatch[layer].action();
- flash.flash(dispatch[layer].msg);
- }
-
- function selected() {
- return dispatch[layer].type;
- }
-
- function inLayer(d, layer) {
- var type = d.class === 'link' ? d.type() : d.type,
- look = layerLookup[d.class],
- lyr = look && look[type];
- return lyr === layer;
- }
-
- function unsuppressLayer(which) {
- api.node().each(function (d) {
- var node = d.el;
- if (inLayer(d, which)) {
- node.classed(smax, false);
- }
- });
-
- api.link().each(function (d) {
- var link = d.el;
- if (inLayer(d, which)) {
- link.classed(smax, false);
- }
- });
- }
-
- function suppressLayers(b) {
- api.node().classed(smax, b);
- api.link().classed(smax, b);
- }
-
- function showLayer(which) {
- suppressLayers(true);
- unsuppressLayer(which);
- }
-
- // === -----------------------------------------------------
- // === MODULE DEFINITION ===
-
- angular.module('ovTopo')
- .factory('TopoFilterService',
- ['$log', 'FnService',
- 'FlashService',
- 'TopoPanelService',
- 'TopoTrafficService',
-
- function (_$log_, _fs_, _flash_, _tps_, _tts_) {
- $log = _$log_;
- fs = _fs_;
- flash = _flash_;
- tps = _tps_;
- tts = _tts_;
-
- function initFilter(_api_) {
- api = _api_;
- }
-
- return {
- initFilter: initFilter,
-
- clickAction: clickAction,
- selected: selected,
- inLayer: inLayer
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoForce.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoForce.js
deleted file mode 100644
index 175ee796..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoForce.js
+++ /dev/null
@@ -1,1182 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology Force Module.
- Visualization of the topology in an SVG layer, using a D3 Force Layout.
- */
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, $timeout, fs, sus, ts, flash, wss, tov,
- tis, tms, td3, tss, tts, tos, fltr, tls, uplink, svg;
-
- // configuration
- var linkConfig = {
- light: {
- baseColor: '#666',
- inColor: '#66f',
- outColor: '#f00'
- },
- dark: {
- baseColor: '#aaa',
- inColor: '#66f',
- outColor: '#f66'
- },
- inWidth: 12,
- outWidth: 10
- };
-
- // internal state
- var settings, // merged default settings and options
- force, // force layout object
- drag, // drag behavior handler
- network = {
- nodes: [],
- links: [],
- linksByDevice: {},
- lookup: {},
- revLinkToKey: {}
- },
- lu, // shorthand for lookup
- rlk, // shorthand for revLinktoKey
- showHosts = false, // whether hosts are displayed
- showOffline = true, // whether offline devices are displayed
- nodeLock = false, // whether nodes can be dragged or not (locked)
- fTimer, // timer for delayed force layout
- fNodesTimer, // timer for delayed nodes update
- fLinksTimer, // timer for delayed links update
- dim, // the dimensions of the force layout [w,h]
- linkNums = []; // array of link number labels
-
- // SVG elements;
- var linkG, linkLabelG, numLinkLblsG, portLabelG, nodeG;
-
- // D3 selections;
- var link, linkLabel, node;
-
- // default settings for force layout
- var defaultSettings = {
- gravity: 0.4,
- friction: 0.7,
- charge: {
- // note: key is node.class
- device: -8000,
- host: -5000,
- _def_: -12000
- },
- linkDistance: {
- // note: key is link.type
- direct: 100,
- optical: 120,
- hostLink: 3,
- _def_: 50
- },
- linkStrength: {
- // note: key is link.type
- // range: {0.0 ... 1.0}
- //direct: 1.0,
- //optical: 1.0,
- //hostLink: 1.0,
- _def_: 1.0
- }
- };
-
-
- // ==========================
- // === EVENT HANDLERS
-
- function addDevice(data) {
- var id = data.id,
- d;
-
- uplink.showNoDevs(false);
-
- // although this is an add device event, if we already have the
- // device, treat it as an update instead..
- if (lu[id]) {
- updateDevice(data);
- return;
- }
-
- d = tms.createDeviceNode(data);
- network.nodes.push(d);
- lu[id] = d;
- updateNodes();
- fStart();
- }
-
- function updateDevice(data) {
- var id = data.id,
- d = lu[id],
- wasOnline;
-
- if (d) {
- wasOnline = d.online;
- angular.extend(d, data);
- if (tms.positionNode(d, true)) {
- sendUpdateMeta(d);
- }
- updateNodes();
- if (wasOnline !== d.online) {
- tms.findAttachedLinks(d.id).forEach(restyleLinkElement);
- updateOfflineVisibility(d);
- }
- }
- }
-
- function removeDevice(data) {
- var id = data.id,
- d = lu[id];
- if (d) {
- removeDeviceElement(d);
- }
- }
-
- function addHost(data) {
- var id = data.id,
- d, lnk;
-
- // although this is an add host event, if we already have the
- // host, treat it as an update instead..
- if (lu[id]) {
- updateHost(data);
- return;
- }
-
- d = tms.createHostNode(data);
- network.nodes.push(d);
- lu[id] = d;
- updateNodes();
-
- lnk = tms.createHostLink(data);
- if (lnk) {
- d.linkData = lnk; // cache ref on its host
- network.links.push(lnk);
- lu[d.ingress] = lnk;
- lu[d.egress] = lnk;
- updateLinks();
- }
- fStart();
- }
-
- function updateHost(data) {
- var id = data.id,
- d = lu[id];
- if (d) {
- angular.extend(d, data);
- if (tms.positionNode(d, true)) {
- sendUpdateMeta(d);
- }
- updateNodes();
- }
- }
-
- function moveHost(data) {
- var id = data.id,
- d = lu[id],
- lnk;
- if (d) {
- // first remove the old host link
- removeLinkElement(d.linkData);
-
- // merge new data
- angular.extend(d, data);
- if (tms.positionNode(d, true)) {
- sendUpdateMeta(d);
- }
-
- // now create a new host link
- lnk = tms.createHostLink(data);
- if (lnk) {
- d.linkData = lnk;
- network.links.push(lnk);
- lu[d.ingress] = lnk;
- lu[d.egress] = lnk;
- }
-
- updateNodes();
- updateLinks();
- fResume();
- }
- }
-
- function removeHost(data) {
- var id = data.id,
- d = lu[id];
- if (d) {
- removeHostElement(d, true);
- }
- }
-
- function addLink(data) {
- var result = tms.findLink(data, 'add'),
- bad = result.badLogic,
- d = result.ldata;
-
- if (bad) {
- //logicError(bad + ': ' + link.id);
- return;
- }
-
- if (d) {
- // we already have a backing store link for src/dst nodes
- addLinkUpdate(d, data);
- return;
- }
-
- // no backing store link yet
- d = tms.createLink(data);
- if (d) {
- network.links.push(d);
- aggregateLink(d, data);
- lu[d.key] = d;
- updateLinks();
- fStart();
- }
- }
-
- function updateLink(data) {
- var result = tms.findLink(data, 'update'),
- bad = result.badLogic;
- if (bad) {
- //logicError(bad + ': ' + link.id);
- return;
- }
- result.updateWith(link);
- }
-
- function removeLink(data) {
- var result = tms.findLink(data, 'remove');
-
- if (!result.badLogic) {
- result.removeRawLink();
- }
- }
-
- function topoStartDone(data) {
- // called when the initial barrage of data has been sent from server
- uplink.topoStartDone();
- }
-
- // ========================
-
- function nodeById(id) {
- return lu[id];
- }
-
- function makeNodeKey(node1, node2) {
- return node1 + '-' + node2;
- }
-
- function findNodePair(key, keyRev) {
- if (network.linksByDevice[key]) {
- return key;
- } else if (network.linksByDevice[keyRev]) {
- return keyRev;
- } else {
- return false;
- }
- }
-
- function aggregateLink(ldata, link) {
- var key = makeNodeKey(link.src, link.dst),
- keyRev = makeNodeKey(link.dst, link.src),
- found = findNodePair(key, keyRev);
-
- if (found) {
- network.linksByDevice[found].push(ldata);
- ldata.devicePair = found;
- } else {
- network.linksByDevice[key] = [ ldata ];
- ldata.devicePair = key;
- }
- }
-
- function addLinkUpdate(ldata, link) {
- // add link event, but we already have the reverse link installed
- ldata.fromTarget = link;
- rlk[link.id] = ldata.key;
- // possible solution to el being undefined in restyleLinkElement:
- //_updateLinks();
- restyleLinkElement(ldata);
- }
-
-
- var widthRatio = 1.4,
- linkScale = d3.scale.linear()
- .domain([1, 12])
- .range([widthRatio, 12 * widthRatio])
- .clamp(true),
- allLinkTypes = 'direct indirect optical tunnel';
-
- function restyleLinkElement(ldata, immediate) {
- // this fn's job is to look at raw links and decide what svg classes
- // need to be applied to the line element in the DOM
- var th = ts.theme(),
- el = ldata.el,
- type = ldata.type(),
- lw = ldata.linkWidth(),
- online = ldata.online(),
- delay = immediate ? 0 : 1000;
-
- // FIXME: understand why el is sometimes undefined on addLink events...
- // Investigated:
- // el is undefined when it's a reverse link that is being added.
- // updateLinks (which sets ldata.el) isn't called before this is called.
- // Calling _updateLinks in addLinkUpdate fixes it, but there might be
- // a more efficient way to fix it.
- if (el && !el.empty()) {
- el.classed('link', true);
- el.classed('inactive', !online);
- el.classed(allLinkTypes, false);
- if (type) {
- el.classed(type, true);
- }
- el.transition()
- .duration(delay)
- .attr('stroke-width', linkScale(lw))
- .attr('stroke', linkConfig[th].baseColor);
- }
- }
-
- function removeLinkElement(d) {
- var idx = fs.find(d.key, network.links, 'key'),
- removed;
- if (idx >=0) {
- // remove from links array
- removed = network.links.splice(idx, 1);
- // remove from lookup cache
- delete lu[removed[0].key];
- updateLinks();
- fResume();
- }
- }
-
- function removeHostElement(d, upd) {
- // first, remove associated hostLink...
- removeLinkElement(d.linkData);
-
- // remove hostLink bindings
- delete lu[d.ingress];
- delete lu[d.egress];
-
- // remove from lookup cache
- delete lu[d.id];
- // remove from nodes array
- var idx = fs.find(d.id, network.nodes);
- network.nodes.splice(idx, 1);
-
- // remove from SVG
- // NOTE: upd is false if we were called from removeDeviceElement()
- if (upd) {
- updateNodes();
- fResume();
- }
- }
-
- function removeDeviceElement(d) {
- var id = d.id,
- idx;
- // first, remove associated hosts and links..
- tms.findAttachedHosts(id).forEach(removeHostElement);
- tms.findAttachedLinks(id).forEach(removeLinkElement);
-
- // remove from lookup cache
- delete lu[id];
- // remove from nodes array
- idx = fs.find(id, network.nodes);
- if (idx > -1) {
- network.nodes.splice(idx, 1);
- }
-
- if (!network.nodes.length) {
- uplink.showNoDevs(true);
- }
-
- // remove from SVG
- updateNodes();
- fResume();
- }
-
- function updateHostVisibility() {
- sus.visible(nodeG.selectAll('.host'), showHosts);
- sus.visible(linkG.selectAll('.hostLink'), showHosts);
- sus.visible(linkLabelG.selectAll('.hostLinkLabel'), showHosts);
- }
-
- function updateOfflineVisibility(dev) {
- function updDev(d, show) {
- var b;
- sus.visible(d.el, show);
-
- tms.findAttachedLinks(d.id).forEach(function (link) {
- b = show && ((link.type() !== 'hostLink') || showHosts);
- sus.visible(link.el, b);
- });
- tms.findAttachedHosts(d.id).forEach(function (host) {
- b = show && showHosts;
- sus.visible(host.el, b);
- });
- }
-
- if (dev) {
- // updating a specific device that just toggled off/on-line
- updDev(dev, dev.online || showOffline);
- } else {
- // updating all offline devices
- tms.findDevices(true).forEach(function (d) {
- updDev(d, showOffline);
- });
- }
- }
-
-
- function sendUpdateMeta(d, clearPos) {
- var metaUi = {},
- ll;
-
- // if we are not clearing the position data (unpinning),
- // attach the x, y, longitude, latitude...
- if (!clearPos) {
- ll = tms.lngLatFromCoord([d.x, d.y]);
- metaUi = {x: d.x, y: d.y, lng: ll[0], lat: ll[1]};
- }
- d.metaUi = metaUi;
- wss.sendEvent('updateMeta', {
- id: d.id,
- class: d.class,
- memento: metaUi
- });
- }
-
-
- function mkSvgClass(d) {
- return d.fixed ? d.svgClass + ' fixed' : d.svgClass;
- }
-
- function vis(b) {
- return b ? 'visible' : 'hidden';
- }
-
- function toggleHosts(x) {
- var kev = (x === 'keyev'),
- on = kev ? !showHosts : !!x;
-
- showHosts = on;
- updateHostVisibility();
- flash.flash('Hosts ' + vis(on));
- return on;
- }
-
- function toggleOffline(x) {
- var kev = (x === 'keyev'),
- on = kev ? !showOffline : !!x;
-
- showOffline = on;
- updateOfflineVisibility();
- flash.flash('Offline devices ' + vis(on));
- return on;
- }
-
- function cycleDeviceLabels() {
- flash.flash(td3.incDevLabIndex());
- tms.findDevices().forEach(function (d) {
- td3.updateDeviceLabel(d);
- });
- }
-
- function unpin() {
- var hov = tss.hovered();
- if (hov) {
- sendUpdateMeta(hov, true);
- hov.fixed = false;
- hov.el.classed('fixed', false);
- fResume();
- }
- }
-
- function showMastership(masterId) {
- if (!masterId) {
- restoreLayerState();
- } else {
- showMastershipFor(masterId);
- }
- }
-
- function restoreLayerState() {
- // NOTE: this level of indirection required, for when we have
- // the layer filter functionality re-implemented
- suppressLayers(false);
- }
-
- function showMastershipFor(id) {
- suppressLayers(true);
- node.each(function (n) {
- if (n.master === id) {
- n.el.classed('suppressedmax', false);
- }
- });
- }
-
- function supAmt(less) {
- return less ? "suppressed" : "suppressedmax";
- }
-
- function suppressLayers(b, less) {
- var cls = supAmt(less);
- node.classed(cls, b);
- link.classed(cls, b);
- }
-
- function unsuppressNode(id, less) {
- var cls = supAmt(less);
- node.each(function (n) {
- if (n.id === id) {
- n.el.classed(cls, false);
- }
- });
- }
-
- function unsuppressLink(key, less) {
- var cls = supAmt(less);
- link.each(function (n) {
- if (n.key === key) {
- n.el.classed(cls, false);
- }
- });
- }
-
- function showBadLinks() {
- var badLinks = tms.findBadLinks();
- flash.flash('Bad Links: ' + badLinks.length);
- $log.debug('Bad Link List (' + badLinks.length + '):');
- badLinks.forEach(function (d) {
- $log.debug('bad link: (' + d.bad + ') ' + d.key, d);
- if (d.el) {
- d.el.attr('stroke-width', linkScale(2.8))
- .attr('stroke', 'red');
- }
- });
- // back to normal after 2 seconds...
- $timeout(updateLinks, 2000);
- }
-
- // ==========================================
-
- function updateNodes() {
- if (fNodesTimer) {
- $timeout.cancel(fNodesTimer);
- }
- fNodesTimer = $timeout(_updateNodes, 150);
- }
-
- // IMPLEMENTATION NOTE: _updateNodes() should NOT stop, start, or resume
- // the force layout; that needs to be determined and implemented elsewhere
- function _updateNodes() {
- // select all the nodes in the layout:
- node = nodeG.selectAll('.node')
- .data(network.nodes, function (d) { return d.id; });
-
- // operate on existing nodes:
- node.filter('.device').each(td3.deviceExisting);
- node.filter('.host').each(td3.hostExisting);
-
- // operate on entering nodes:
- var entering = node.enter()
- .append('g')
- .attr({
- id: function (d) { return sus.safeId(d.id); },
- class: mkSvgClass,
- transform: function (d) {
- // Need to guard against NaN here ??
- return sus.translate(d.x, d.y);
- },
- opacity: 0
- })
- .call(drag)
- .on('mouseover', tss.nodeMouseOver)
- .on('mouseout', tss.nodeMouseOut)
- .transition()
- .attr('opacity', 1);
-
- // augment entering nodes:
- entering.filter('.device').each(td3.deviceEnter);
- entering.filter('.host').each(td3.hostEnter);
-
- // operate on both existing and new nodes:
- td3.updateDeviceColors();
-
- // operate on exiting nodes:
- // Note that the node is removed after 2 seconds.
- // Sub element animations should be shorter than 2 seconds.
- var exiting = node.exit()
- .transition()
- .duration(2000)
- .style('opacity', 0)
- .remove();
-
- // exiting node specifics:
- exiting.filter('.host').each(td3.hostExit);
- exiting.filter('.device').each(td3.deviceExit);
- }
-
- // ==========================
-
- function getDefaultPos(link) {
- return {
- x1: link.source.x,
- y1: link.source.y,
- x2: link.target.x,
- y2: link.target.y
- };
- }
-
- // returns amount of adjustment along the normal for given link
- function amt(numLinks, linkIdx) {
- var gap = 6;
- return (linkIdx - ((numLinks - 1) / 2)) * gap;
- }
-
- function calcMovement(d, amt, flipped) {
- var pos = getDefaultPos(d),
- mult = flipped ? -amt : amt,
- dx = pos.x2 - pos.x1,
- dy = pos.y2 - pos.y1,
- length = Math.sqrt((dx * dx) + (dy * dy));
-
- return {
- x1: pos.x1 + (mult * dy / length),
- y1: pos.y1 + (mult * -dx / length),
- x2: pos.x2 + (mult * dy / length),
- y2: pos.y2 + (mult * -dx / length)
- };
- }
-
- function calcPosition() {
- var lines = this,
- linkSrcId;
- linkNums = [];
- lines.each(function (d) {
- if (d.type() === 'hostLink') {
- d.position = getDefaultPos(d);
- }
- });
-
- function normalizeLinkSrc(link) {
- // ensure source device is consistent across set of links
- // temporary measure until link modeling is refactored
- if (!linkSrcId) {
- linkSrcId = link.source.id;
- return false;
- }
-
- return link.source.id !== linkSrcId;
- }
-
- angular.forEach(network.linksByDevice, function (linkArr, key) {
- var numLinks = linkArr.length,
- link;
-
- if (numLinks === 1) {
- link = linkArr[0];
- link.position = getDefaultPos(link);
- link.position.multiLink = false;
- } else if (numLinks >= 5) {
- // this code is inefficient, in the future the way links
- // are modeled will be changed
- angular.forEach(linkArr, function (link) {
- link.position = getDefaultPos(link);
- link.position.multiLink = true;
- });
- linkNums.push({
- id: key,
- num: numLinks,
- linkCoords: linkArr[0].position
- });
- } else {
- linkSrcId = null;
- angular.forEach(linkArr, function (link, index) {
- var offsetAmt = amt(numLinks, index),
- needToFlip = normalizeLinkSrc(link);
- link.position = calcMovement(link, offsetAmt, needToFlip);
- link.position.multiLink = false;
- });
- }
- });
- }
-
- function updateLinks() {
- if (fLinksTimer) {
- $timeout.cancel(fLinksTimer);
- }
- fLinksTimer = $timeout(_updateLinks, 150);
- }
-
- // IMPLEMENTATION NOTE: _updateLinks() should NOT stop, start, or resume
- // the force layout; that needs to be determined and implemented elsewhere
- function _updateLinks() {
- var th = ts.theme();
-
- link = linkG.selectAll('.link')
- .data(network.links, function (d) { return d.key; });
-
- // operate on existing links:
- link.each(function (d) {
- // this is supposed to be an existing link, but we have observed
- // occasions (where links are deleted and added rapidly?) where
- // the DOM element has not been defined. So protect against that...
- if (d.el) {
- restyleLinkElement(d, true);
- }
- });
-
- // operate on entering links:
- var entering = link.enter()
- .append('line')
- .call(calcPosition)
- .attr({
- x1: function (d) { return d.position.x1; },
- y1: function (d) { return d.position.y1; },
- x2: function (d) { return d.position.x2; },
- y2: function (d) { return d.position.y2; },
- stroke: linkConfig[th].inColor,
- 'stroke-width': linkConfig.inWidth
- });
-
- // augment links
- entering.each(td3.linkEntering);
-
- // operate on both existing and new links:
- //link.each(...)
-
- // add labels for how many links are in a thick line
- td3.applyNumLinkLabels(linkNums, numLinkLblsG);
-
- // apply or remove labels
- td3.applyLinkLabels();
-
- // operate on exiting links:
- link.exit()
- .attr('stroke-dasharray', '3 3')
- .attr('stroke', linkConfig[th].outColor)
- .style('opacity', 0.5)
- .transition()
- .duration(1500)
- .attr({
- 'stroke-dasharray': '3 12',
- 'stroke-width': linkConfig.outWidth
- })
- .style('opacity', 0.0)
- .remove();
- }
-
-
- // ==========================
- // force layout tick function
-
- function fResume() {
- if (!tos.isOblique()) {
- force.resume();
- }
- }
-
- function fStart() {
- if (!tos.isOblique()) {
- if (fTimer) {
- $timeout.cancel(fTimer);
- }
- fTimer = $timeout(function () {
- $log.debug("Starting force-layout");
- force.start();
- }, 200);
- }
- }
-
- var tickStuff = {
- nodeAttr: {
- transform: function (d) {
- var dx = isNaN(d.x) ? 0 : d.x,
- dy = isNaN(d.y) ? 0 : d.y;
- return sus.translate(dx, dy);
- }
- },
- linkAttr: {
- x1: function (d) { return d.position.x1; },
- y1: function (d) { return d.position.y1; },
- x2: function (d) { return d.position.x2; },
- y2: function (d) { return d.position.y2; }
- },
- linkLabelAttr: {
- transform: function (d) {
- var lnk = tms.findLinkById(d.key);
- if (lnk) {
- return td3.transformLabel(lnk.position);
- }
- }
- }
- };
-
- function tick() {
- // guard against null (which can happen when our view pages out)...
- if (node && node.size()) {
- node.attr(tickStuff.nodeAttr);
- }
- if (link && link.size()) {
- link.call(calcPosition)
- .attr(tickStuff.linkAttr);
- td3.applyNumLinkLabels(linkNums, numLinkLblsG);
- }
- if (linkLabel && linkLabel.size()) {
- linkLabel.attr(tickStuff.linkLabelAttr);
- }
- }
-
-
- // ==========================
- // === MOUSE GESTURE HANDLERS
-
- function zoomingOrPanning(ev) {
- return ev.metaKey || ev.altKey;
- }
-
- function atDragEnd(d) {
- // once we've finished moving, pin the node in position
- d.fixed = true;
- d3.select(this).classed('fixed', true);
- sendUpdateMeta(d);
- tss.clickConsumed(true);
- }
-
- // predicate that indicates when dragging is active
- function dragEnabled() {
- var ev = d3.event.sourceEvent;
- // nodeLock means we aren't allowing nodes to be dragged...
- return !nodeLock && !zoomingOrPanning(ev);
- }
-
- // predicate that indicates when clicking is active
- function clickEnabled() {
- return true;
- }
-
- // =============================================
- // function entry points for overlay module
-
- // TODO: find an automatic way of tracking via the "showHighlights" events
- var allTrafficClasses = 'primary secondary optical animated ' +
- 'port-traffic-Kbps port-traffic-Mbps port-traffic-Gbps ' +
- 'port-traffic-Gbps-choked';
-
- function clearLinkTrafficStyle() {
- link.style('stroke-width', null)
- .classed(allTrafficClasses, false);
- }
-
- function removeLinkLabels() {
- network.links.forEach(function (d) {
- d.label = '';
- });
- }
-
- function clearNodeDeco() {
- node.selectAll('g.badge').remove();
- }
-
- function removeNodeBadges() {
- network.nodes.forEach(function (d) {
- d.badge = null;
- });
- }
-
- function updateLinkLabelModel() {
- // create the backing data for showing labels..
- var data = [];
- link.each(function (d) {
- if (d.label) {
- data.push({
- id: 'lab-' + d.key,
- key: d.key,
- label: d.label,
- ldata: d
- });
- }
- });
-
- linkLabel = linkLabelG.selectAll('.linkLabel')
- .data(data, function (d) { return d.id; });
- }
-
- // ==========================
- // Module definition
-
- function mkModelApi(uplink) {
- return {
- projection: uplink.projection,
- network: network,
- restyleLinkElement: restyleLinkElement,
- removeLinkElement: removeLinkElement
- };
- }
-
- function mkD3Api() {
- return {
- node: function () { return node; },
- link: function () { return link; },
- linkLabel: function () { return linkLabel; },
- instVisible: function () { return tis.isVisible(); },
- posNode: tms.positionNode,
- showHosts: function () { return showHosts; },
- restyleLinkElement: restyleLinkElement,
- updateLinkLabelModel: updateLinkLabelModel,
- linkConfig: function () { return linkConfig; }
- };
- }
-
- function mkSelectApi() {
- return {
- node: function () { return node; },
- zoomingOrPanning: zoomingOrPanning,
- updateDeviceColors: td3.updateDeviceColors,
- deselectLink: tls.deselectLink
- };
- }
-
- function mkTrafficApi() {
- return {
- hovered: tss.hovered,
- somethingSelected: tss.somethingSelected,
- selectOrder: tss.selectOrder
- };
- }
-
- function mkOverlayApi() {
- return {
- clearNodeDeco: clearNodeDeco,
- removeNodeBadges: removeNodeBadges,
- clearLinkTrafficStyle: clearLinkTrafficStyle,
- removeLinkLabels: removeLinkLabels,
- findLinkById: tms.findLinkById,
- findNodeById: nodeById,
- updateLinks: updateLinks,
- updateNodes: updateNodes,
- supLayers: suppressLayers,
- unsupNode: unsuppressNode,
- unsupLink: unsuppressLink
- };
- }
-
- function mkObliqueApi(uplink, fltr) {
- return {
- force: function() { return force; },
- zoomLayer: uplink.zoomLayer,
- nodeGBBox: function() { return nodeG.node().getBBox(); },
- node: function () { return node; },
- link: function () { return link; },
- linkLabel: function () { return linkLabel; },
- nodes: function () { return network.nodes; },
- tickStuff: tickStuff,
- nodeLock: function (b) {
- var old = nodeLock;
- nodeLock = b;
- return old;
- },
- opacifyMap: uplink.opacifyMap,
- inLayer: fltr.inLayer,
- calcLinkPos: calcPosition,
- applyNumLinkLabels: function () {
- td3.applyNumLinkLabels(linkNums, numLinkLblsG);
- }
- };
- }
-
- function mkFilterApi() {
- return {
- node: function () { return node; },
- link: function () { return link; }
- };
- }
-
- function mkLinkApi(svg, uplink) {
- return {
- svg: svg,
- zoomer: uplink.zoomer(),
- network: network,
- portLabelG: function () { return portLabelG; },
- showHosts: function () { return showHosts; }
- };
- }
-
- angular.module('ovTopo')
- .factory('TopoForceService',
- ['$log', '$timeout', 'FnService', 'SvgUtilService',
- 'ThemeService', 'FlashService', 'WebSocketService',
- 'TopoOverlayService', 'TopoInstService', 'TopoModelService',
- 'TopoD3Service', 'TopoSelectService', 'TopoTrafficService',
- 'TopoObliqueService', 'TopoFilterService', 'TopoLinkService',
-
- function (_$log_, _$timeout_, _fs_, _sus_, _ts_, _flash_, _wss_, _tov_,
- _tis_, _tms_, _td3_, _tss_, _tts_, _tos_, _fltr_, _tls_) {
- $log = _$log_;
- $timeout = _$timeout_;
- fs = _fs_;
- sus = _sus_;
- ts = _ts_;
- flash = _flash_;
- wss = _wss_;
- tov = _tov_;
- tis = _tis_;
- tms = _tms_;
- td3 = _td3_;
- tss = _tss_;
- tts = _tts_;
- tos = _tos_;
- fltr = _fltr_;
- tls = _tls_;
-
- var themeListener = ts.addListener(function () {
- updateLinks();
- updateNodes();
- });
-
- // forceG is the SVG group to display the force layout in
- // uplink is the api from the main topo source file
- // dim is the initial dimensions of the SVG as [w,h]
- // opts are, well, optional :)
- function initForce(_svg_, forceG, _uplink_, _dim_, opts) {
- uplink = _uplink_;
- dim = _dim_;
- svg = _svg_;
-
- lu = network.lookup;
- rlk = network.revLinkToKey;
-
- $log.debug('initForce().. dim = ' + dim);
-
- tov.setApi(mkOverlayApi(), tss);
- tms.initModel(mkModelApi(uplink), dim);
- td3.initD3(mkD3Api());
- tss.initSelect(mkSelectApi());
- tts.initTraffic(mkTrafficApi());
- tos.initOblique(mkObliqueApi(uplink, fltr));
- fltr.initFilter(mkFilterApi());
- tls.initLink(mkLinkApi(svg, uplink), td3);
-
- settings = angular.extend({}, defaultSettings, opts);
-
- linkG = forceG.append('g').attr('id', 'topo-links');
- linkLabelG = forceG.append('g').attr('id', 'topo-linkLabels');
- numLinkLblsG = forceG.append('g').attr('id', 'topo-numLinkLabels');
- nodeG = forceG.append('g').attr('id', 'topo-nodes');
- portLabelG = forceG.append('g').attr('id', 'topo-portLabels');
-
- link = linkG.selectAll('.link');
- linkLabel = linkLabelG.selectAll('.linkLabel');
- node = nodeG.selectAll('.node');
-
- force = d3.layout.force()
- .size(dim)
- .nodes(network.nodes)
- .links(network.links)
- .gravity(settings.gravity)
- .friction(settings.friction)
- .charge(settings.charge._def_)
- .linkDistance(settings.linkDistance._def_)
- .linkStrength(settings.linkStrength._def_)
- .on('tick', tick);
-
- drag = sus.createDragBehavior(force,
- tss.selectObject, atDragEnd, dragEnabled, clickEnabled);
- }
-
- function newDim(_dim_) {
- dim = _dim_;
- force.size(dim);
- tms.newDim(dim);
- }
-
- function destroyForce() {
- force.stop();
-
- tls.destroyLink();
- tos.destroyOblique();
- tts.destroyTraffic();
- tss.destroySelect();
- td3.destroyD3();
- tms.destroyModel();
- // note: no need to destroy overlay service
- ts.removeListener(themeListener);
- themeListener = null;
-
- // clean up the DOM
- svg.selectAll('g').remove();
- svg.selectAll('defs').remove();
-
- // clean up internal state
- network.nodes = [];
- network.links = [];
- network.linksByDevice = {};
- network.lookup = {};
- network.revLinkToKey = {};
-
- linkNums = [];
-
- linkG = linkLabelG = numLinkLblsG = nodeG = portLabelG = null;
- link = linkLabel = node = null;
- force = drag = null;
-
- // clean up $timeout promises
- if (fTimer) {
- $timeout.cancel(fTimer);
- }
- if (fNodesTimer) {
- $timeout.cancel(fNodesTimer);
- }
- if (fLinksTimer) {
- $timeout.cancel(fLinksTimer);
- }
- }
-
- return {
- initForce: initForce,
- newDim: newDim,
- destroyForce: destroyForce,
-
- updateDeviceColors: td3.updateDeviceColors,
- toggleHosts: toggleHosts,
- togglePorts: tls.togglePorts,
- toggleOffline: toggleOffline,
- cycleDeviceLabels: cycleDeviceLabels,
- unpin: unpin,
- showMastership: showMastership,
- showBadLinks: showBadLinks,
-
- addDevice: addDevice,
- updateDevice: updateDevice,
- removeDevice: removeDevice,
- addHost: addHost,
- updateHost: updateHost,
- moveHost: moveHost,
- removeHost: removeHost,
- addLink: addLink,
- updateLink: updateLink,
- removeLink: removeLink,
- topoStartDone: topoStartDone
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoInst.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoInst.js
deleted file mode 100644
index 7e929977..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoInst.js
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology Instances Module.
- Defines modeling of ONOS instances.
- */
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, ps, sus, gs, ts, fs, flash;
-
- // api from topo
- var api;
- /*
- showMastership( id )
- */
-
- // configuration
- var instCfg = {
- rectPad: 8,
- nodeOx: 9,
- nodeOy: 9,
- nodeDim: 40,
- birdOx: 19,
- birdOy: 21,
- birdDim: 21,
- uiDy: 45,
- titleDy: 30,
- textYOff: 20,
- textYSpc: 15
- },
- showLogicErrors = true,
- idIns = 'topo-p-instance',
- instOpts = {
- edge: 'left',
- width: 20
- };
-
- // internal state
- var onosInstances,
- onosOrder,
- oiShowMaster,
- oiBox,
- themeListener;
-
-
- // ==========================
-
- function addInstance(data) {
- var id = data.id;
-
- if (onosInstances[id]) {
- updateInstance(data);
- return;
- }
- onosInstances[id] = data;
- onosOrder.push(data);
- updateInstances();
- }
-
- function updateInstance(data) {
- var id = data.id,
- d = onosInstances[id];
- if (d) {
- angular.extend(d, data);
- updateInstances();
- } else {
- logicError('updateInstance: lookup fail: ID = "' + id + '"');
- }
- }
-
- function removeInstance(data) {
- var id = data.id,
- d = onosInstances[id];
- if (d) {
- var idx = fs.find(id, onosOrder);
- if (idx >= 0) {
- onosOrder.splice(idx, 1);
- }
- delete onosInstances[id];
- updateInstances();
- } else {
- logicError('removeInstance lookup fail. ID = "' + id + '"');
- }
- }
-
- // ==========================
-
- function computeDim(self) {
- var css = window.getComputedStyle(self);
- return {
- w: sus.stripPx(css.width),
- h: sus.stripPx(css.height)
- };
- }
-
- function clickInst(d) {
- var el = d3.select(this),
- aff = el.classed('affinity');
- if (!aff) {
- setAffinity(el, d);
- } else {
- cancelAffinity();
- }
- }
-
- function setAffinity(el, d) {
- d3.selectAll('.onosInst')
- .classed('mastership', true)
- .classed('affinity', false);
- el.classed('affinity', true);
-
- // suppress all elements except nodes whose master is this instance
- api.showMastership(d.id);
- oiShowMaster = true;
- }
-
- function cancelAffinity() {
- d3.selectAll('.onosInst')
- .classed('mastership affinity', false);
-
- api.showMastership(null);
- oiShowMaster = false;
- }
-
- function instRectAttr(dim) {
- var pad = instCfg.rectPad;
- return {
- x: pad,
- y: pad,
- width: dim.w - pad*2,
- height: dim.h - pad*2,
- rx: 6
- };
- }
-
- function viewBox(dim) {
- return '0 0 ' + dim.w + ' ' + dim.h;
- }
-
- function attachUiBadge(svg) {
- gs.addGlyph(svg, 'uiAttached', 30, true, [12, instCfg.uiDy])
- .classed('badgeIcon uiBadge', true);
- }
-
- function instColor(id, online) {
- return sus.cat7().getColor(id, !online, ts.theme());
- }
-
- // ==============================
-
- function updateInstances() {
- var onoses = oiBox.el().selectAll('.onosInst')
- .data(onosOrder, function (d) { return d.id; }),
- instDim = {w:0,h:0},
- c = instCfg;
-
- function nSw(n) {
- return '# Switches: ' + n;
- }
-
- // operate on existing onos instances if necessary
- onoses.each(function (d) {
- var el = d3.select(this),
- svg = el.select('svg');
- instDim = computeDim(this);
-
- // update online state
- el.classed('online', d.online);
-
- // update ui-attached state
- svg.select('use.uiBadge').remove();
- if (d.uiAttached) {
- attachUiBadge(svg);
- }
-
- function updAttr(id, value) {
- svg.select('text.instLabel.'+id).text(value);
- }
-
- updAttr('ip', d.ip);
- updAttr('ns', nSw(d.switches));
- });
-
-
- // operate on new onos instances
- var entering = onoses.enter()
- .append('div')
- .attr('class', 'onosInst')
- .classed('online', function (d) { return d.online; })
- .on('click', clickInst);
-
- entering.each(function (d) {
- var el = d3.select(this),
- rectAttr,
- svg;
- instDim = computeDim(this);
- rectAttr = instRectAttr(instDim);
-
- svg = el.append('svg').attr({
- width: instDim.w,
- height: instDim.h,
- viewBox: viewBox(instDim)
- });
-
- svg.append('rect').attr(rectAttr);
-
- gs.addGlyph(svg, 'bird', 28, true, [14, 14])
- .classed('badgeIcon', true);
-
- if (d.uiAttached) {
- attachUiBadge(svg);
- }
-
- var left = c.nodeOx + c.nodeDim,
- len = rectAttr.width - left,
- hlen = len / 2,
- midline = hlen + left;
-
- // title
- svg.append('text')
- .attr({
- class: 'instTitle',
- x: midline,
- y: c.titleDy
- })
- .text(d.id);
-
- // a couple of attributes
- var ty = c.titleDy + c.textYOff;
-
- function addAttr(id, label) {
- svg.append('text').attr({
- class: 'instLabel ' + id,
- x: midline,
- y: ty
- }).text(label);
- ty += c.textYSpc;
- }
-
- addAttr('ip', d.ip);
- addAttr('ns', nSw(d.switches));
- });
-
- // operate on existing + new onoses here
- // set the affinity colors...
- onoses.each(function (d) {
- var el = d3.select(this),
- rect = el.select('svg').select('rect'),
- col = instColor(d.id, d.online);
- rect.style('fill', col);
- });
-
- // adjust the panel size appropriately...
- oiBox.width(instDim.w * onosOrder.length);
- oiBox.height(instDim.h);
-
- // remove any outgoing instances
- onoses.exit().remove();
- }
-
-
- // ==========================
-
- function logicError(msg) {
- if (showLogicErrors) {
- $log.warn('TopoInstService: ' + msg);
- }
- }
-
- function initInst(_api_) {
- api = _api_;
- oiBox = ps.createPanel(idIns, instOpts);
- oiBox.show();
-
- onosInstances = {};
- onosOrder = [];
- oiShowMaster = false;
-
- // we want to update the instances, each time the theme changes
- themeListener = ts.addListener(updateInstances);
- }
-
- function destroyInst() {
- ts.removeListener(themeListener);
- themeListener = null;
-
- ps.destroyPanel(idIns);
- oiBox = null;
-
- onosInstances = {};
- onosOrder = [];
- oiShowMaster = false;
- }
-
- function showInsts() {
- oiBox.show();
- }
-
- function hideInsts() {
- oiBox.hide();
- }
-
- function toggleInsts(x) {
- var kev = (x === 'keyev'),
- on,
- verb;
-
- if (kev) {
- on = oiBox.toggle();
- } else {
- on = !!x;
- if (on) {
- showInsts();
- } else {
- hideInsts();
- }
- }
- verb = on ? 'Show' : 'Hide';
- flash.flash(verb + ' instances panel');
- return on;
- }
-
- // ==========================
-
- angular.module('ovTopo')
- .factory('TopoInstService',
- ['$log', 'PanelService', 'SvgUtilService', 'GlyphService',
- 'ThemeService', 'FnService', 'FlashService',
-
- function (_$log_, _ps_, _sus_, _gs_, _ts_, _fs_, _flash_) {
- $log = _$log_;
- ps = _ps_;
- sus = _sus_;
- gs = _gs_;
- ts = _ts_;
- fs = _fs_;
- flash = _flash_;
-
- return {
- initInst: initInst,
- destroyInst: destroyInst,
-
- addInstance: addInstance,
- updateInstance: updateInstance,
- removeInstance: removeInstance,
-
- cancelAffinity: cancelAffinity,
-
- isVisible: function () { return oiBox.isVisible(); },
- show: showInsts,
- hide: hideInsts,
- toggle: toggleInsts,
- showMaster: function () { return oiShowMaster; }
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoLink.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoLink.js
deleted file mode 100644
index 38f3a6c3..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoLink.js
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology Link Module.
- Functions for highlighting/selecting links
- */
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, fs, sus, ts, flash, tss, tps;
-
- // internal state
- var api,
- td3,
- network,
- showPorts = true, // enable port highlighting by default
- enhancedLink = null, // the link over which the mouse is hovering
- selectedLink = null; // the link which is currently selected
-
- // SVG elements;
- var svg;
-
-
- // ======== ALGORITHM TO FIND LINK CLOSEST TO MOUSE ========
-
- function getLogicalMousePosition(container) {
- var m = d3.mouse(container),
- sc = api.zoomer.scale(),
- tr = api.zoomer.translate(),
- mx = (m[0] - tr[0]) / sc,
- my = (m[1] - tr[1]) / sc;
- return {x: mx, y: my};
- }
-
-
- function sq(x) { return x * x; }
-
- function mdist(p, m) {
- return Math.sqrt(sq(p.x - m.x) + sq(p.y - m.y));
- }
-
- function prox(dist) {
- return dist / api.zoomer.scale();
- }
-
- function computeNearestNode(mouse) {
- var proximity = prox(30),
- nearest = null,
- minDist;
-
- if (network.nodes.length) {
- minDist = proximity * 2;
-
- network.nodes.forEach(function (d) {
- var dist;
-
- if (!api.showHosts() && d.class === 'host') {
- return; // skip hidden hosts
- }
-
- dist = mdist({x: d.x, y: d.y}, mouse);
- if (dist < minDist && dist < proximity) {
- minDist = dist;
- nearest = d;
- }
- });
- }
- return nearest;
- }
-
-
- function computeNearestLink(mouse) {
- var proximity = prox(30),
- nearest = null,
- minDist;
-
- function pdrop(line, mouse) {
- var x1 = line.x1,
- y1 = line.y1,
- x2 = line.x2,
- y2 = line.y2,
- x3 = mouse.x,
- y3 = mouse.y,
- k = ((y2-y1) * (x3-x1) - (x2-x1) * (y3-y1)) /
- (sq(y2-y1) + sq(x2-x1)),
- x4 = x3 - k * (y2-y1),
- y4 = y3 + k * (x2-x1);
- return {x:x4, y:y4};
- }
-
- function lineHit(line, p, m) {
- if (p.x < line.x1 && p.x < line.x2) return false;
- if (p.x > line.x1 && p.x > line.x2) return false;
- if (p.y < line.y1 && p.y < line.y2) return false;
- if (p.y > line.y1 && p.y > line.y2) return false;
- // line intersects, but are we close enough?
- return mdist(p, m) <= proximity;
- }
-
- if (network.links.length) {
- minDist = proximity * 2;
-
- network.links.forEach(function (d) {
- if (!api.showHosts() && d.type() === 'hostLink') {
- return; // skip hidden host links
- }
-
- var line = d.position,
- point = pdrop(line, mouse),
- hit = lineHit(line, point, mouse),
- dist;
-
- if (hit) {
- dist = mdist(point, mouse);
- if (dist < minDist) {
- minDist = dist;
- nearest = d;
- }
- }
- });
- }
- return nearest;
- }
-
- function enhanceLink(ldata) {
- // if the new link is same as old link, do nothing
- if (enhancedLink && ldata && enhancedLink.key === ldata.key) return;
-
- // first, unenhance the currently enhanced link
- if (enhancedLink) {
- unenhance(enhancedLink);
- }
- enhancedLink = ldata;
- if (enhancedLink) {
- enhance(enhancedLink);
- }
- }
-
- function unenhance(d) {
- // guard against link element not set
- if (d.el) {
- d.el.classed('enhanced', false);
- }
- api.portLabelG().selectAll('.portLabel').remove();
- }
-
- function enhance(d) {
- var data = [],
- point;
-
- // guard against link element not set
- if (!d.el) return;
-
- d.el.classed('enhanced', true);
-
- // Define port label data objects.
- // NOTE: src port is absent in the case of host-links.
-
- point = locatePortLabel(d);
- angular.extend(point, {
- id: 'topo-port-tgt',
- num: d.tgtPort
- });
- data.push(point);
-
- if (d.srcPort) {
- point = locatePortLabel(d, 1);
- angular.extend(point, {
- id: 'topo-port-src',
- num: d.srcPort
- });
- data.push(point);
- }
-
- td3.applyPortLabels(data, api.portLabelG());
- }
-
- function locatePortLabel(link, src) {
- var offset = 32,
- pos = link.position,
- nearX = src ? pos.x1 : pos.x2,
- nearY = src ? pos.y1 : pos.y2,
- farX = src ? pos.x2 : pos.x1,
- farY = src ? pos.y2 : pos.y1;
-
- function dist(x, y) { return Math.sqrt(x*x + y*y); }
-
- var dx = farX - nearX,
- dy = farY - nearY,
- k = offset / dist(dx, dy);
-
- return {x: k * dx + nearX, y: k * dy + nearY};
- }
-
- function selectLink(ldata) {
- // if the new link is same as old link, do nothing
- if (selectedLink && ldata && selectedLink.key === ldata.key) return;
-
- // make sure no nodes are selected
- tss.deselectAll();
-
- // first, unenhance the currently enhanced link
- if (selectedLink) {
- unselLink(selectedLink);
- }
- selectedLink = ldata;
- if (selectedLink) {
- selLink(selectedLink);
- }
- }
-
- function unselLink(d) {
- // guard against link element not set
- if (d.el) {
- d.el.classed('selected', false);
- }
- }
-
- function selLink(d) {
- // guard against link element not set
- if (!d.el) return;
-
- d.el.classed('selected', true);
-
- tps.displayLink(d);
- tps.displaySomething();
- }
-
- // ====== MOUSE EVENT HANDLERS ======
-
- function mouseMoveHandler() {
- var mp = getLogicalMousePosition(this),
- link = computeNearestLink(mp);
- enhanceLink(link);
- }
-
- function mouseClickHandler() {
- var mp, link, node;
-
- if (!tss.clickConsumed()) {
- mp = getLogicalMousePosition(this);
- node = computeNearestNode(mp);
- if (node) {
- $log.debug('found nearest node:', node.labels[1]);
- tss.selectObject(node);
- } else {
- link = computeNearestLink(mp);
- selectLink(link);
- }
- }
- }
-
-
- // ======================
-
- function togglePorts(x) {
- var kev = (x === 'keyev'),
- on = kev ? !showPorts : !!x,
- what = on ? 'Enable' : 'Disable',
- handler = on ? mouseMoveHandler : null;
-
- showPorts = on;
-
- if (!on) {
- enhanceLink(null);
- }
- svg.on('mousemove', handler);
- flash.flash(what + ' port highlighting');
- return on;
- }
-
- function deselectLink() {
- if (selectedLink) {
- unselLink(selectedLink);
- selectedLink = null;
- return true;
- }
- return false;
- }
-
- // ==========================
- // Module definition
-
- angular.module('ovTopo')
- .factory('TopoLinkService',
- ['$log', 'FnService', 'SvgUtilService', 'ThemeService', 'FlashService',
- 'TopoSelectService', 'TopoPanelService',
-
- function (_$log_, _fs_, _sus_, _ts_, _flash_, _tss_, _tps_) {
- $log = _$log_;
- fs = _fs_;
- sus = _sus_;
- ts = _ts_;
- flash = _flash_;
- tss = _tss_;
- tps = _tps_;
-
- function initLink(_api_, _td3_) {
- api = _api_;
- td3 = _td3_;
- svg = api.svg;
- network = api.network;
- if (showPorts && !fs.isMobile()) {
- svg.on('mousemove', mouseMoveHandler);
- }
- svg.on('click', mouseClickHandler);
- }
-
- function destroyLink() {
- // unconditionally remove any event handlers
- svg.on('mousemove', null);
- svg.on('click', null);
- }
-
- return {
- initLink: initLink,
- destroyLink: destroyLink,
- togglePorts: togglePorts,
- deselectLink: deselectLink
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoModel.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoModel.js
deleted file mode 100644
index fb98fc2b..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoModel.js
+++ /dev/null
@@ -1,439 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology Model Module.
- Auxiliary functions for the model of the topology; that is, our internal
- representations of devices, hosts, links, etc.
- */
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, fs, rnd;
-
- // api to topoForce
- var api;
- /*
- projection()
- network {...}
- restyleLinkElement( ldata )
- removeLinkElement( ldata )
- */
-
- // shorthand
- var lu, rlk, nodes, links, linksByDevice;
-
- var dim; // dimensions of layout [w,h]
-
- // configuration 'constants'
- var defaultLinkType = 'direct',
- nearDist = 15;
-
-
- function coordFromLngLat(loc) {
- var p = api.projection();
- // suspected cause of ONOS-2109
- return p ? p([loc.lng, loc.lat]) : [0, 0];
- }
-
- function lngLatFromCoord(coord) {
- var p = api.projection();
- return p ? p.invert(coord) : [0, 0];
- }
-
- function positionNode(node, forUpdate) {
- var meta = node.metaUi,
- x = meta && meta.x,
- y = meta && meta.y,
- xy;
-
- // If we have [x,y] already, use that...
- if (x && y) {
- node.fixed = true;
- node.px = node.x = x;
- node.py = node.y = y;
- return;
- }
-
- var location = node.location,
- coord;
-
- if (location && location.type === 'latlng') {
- coord = coordFromLngLat(location);
- node.fixed = true;
- node.px = node.x = coord[0];
- node.py = node.y = coord[1];
- return true;
- }
-
- // if this is a node update (not a node add).. skip randomizer
- if (forUpdate) {
- return;
- }
-
- // Note: Placing incoming unpinned nodes at exactly the same point
- // (center of the view) causes them to explode outwards when
- // the force layout kicks in. So, we spread them out a bit
- // initially, to provide a more serene layout convergence.
- // Additionally, if the node is a host, we place it near
- // the device it is connected to.
-
- function rand() {
- return {
- x: rnd.randDim(dim[0]),
- y: rnd.randDim(dim[1])
- };
- }
-
- function near(node) {
- return {
- x: node.x + nearDist + rnd.spread(nearDist),
- y: node.y + nearDist + rnd.spread(nearDist)
- };
- }
-
- function getDevice(cp) {
- var d = lu[cp.device];
- return d || rand();
- }
-
- xy = (node.class === 'host') ? near(getDevice(node.cp)) : rand();
- angular.extend(node, xy);
- }
-
- function mkSvgCls(dh, t, on) {
- var ndh = 'node ' + dh,
- ndht = t ? ndh + ' ' + t : ndh;
- return on ? ndht + ' online' : ndht;
- }
-
- function createDeviceNode(device) {
- var node = device;
-
- // Augment as needed...
- node.class = 'device';
- node.svgClass = mkSvgCls('device', device.type, device.online);
- positionNode(node);
- return node;
- }
-
- function createHostNode(host) {
- var node = host;
-
- // Augment as needed...
- node.class = 'host';
- if (!node.type) {
- node.type = 'endstation';
- }
- node.svgClass = mkSvgCls('host', node.type);
- positionNode(node);
- return node;
- }
-
- function createHostLink(host) {
- var src = host.id,
- dst = host.cp.device,
- id = host.ingress,
- lnk = linkEndPoints(src, dst);
-
- if (!lnk) {
- return null;
- }
-
- // Synthesize link ...
- angular.extend(lnk, {
- key: id,
- class: 'link',
- // NOTE: srcPort left undefined (host end of the link)
- tgtPort: host.cp.port,
-
- type: function () { return 'hostLink'; },
- online: function () {
- // hostlink target is edge switch
- return lnk.target.online;
- },
- linkWidth: function () { return 1; }
- });
- return lnk;
- }
-
- function createLink(link) {
- var lnk = linkEndPoints(link.src, link.dst);
-
- if (!lnk) {
- return null;
- }
-
- angular.extend(lnk, {
- key: link.id,
- class: 'link',
- fromSource: link,
- srcPort: link.srcPort,
- tgtPort: link.dstPort,
- position: {
- x1: 0,
- y1: 0,
- x2: 0,
- y2: 0
- },
-
- // functions to aggregate dual link state
- type: function () {
- var s = lnk.fromSource,
- t = lnk.fromTarget;
- return (s && s.type) || (t && t.type) || defaultLinkType;
- },
- online: function () {
- var s = lnk.fromSource,
- t = lnk.fromTarget,
- both = lnk.source.online && lnk.target.online;
- return both && ((s && s.online) || (t && t.online));
- },
- linkWidth: function () {
- var s = lnk.fromSource,
- t = lnk.fromTarget,
- ws = (s && s.linkWidth) || 0,
- wt = (t && t.linkWidth) || 0;
- return lnk.position.multiLink ? 5 : Math.max(ws, wt);
- }
- });
- return lnk;
- }
-
-
- function linkEndPoints(srcId, dstId) {
- var srcNode = lu[srcId],
- dstNode = lu[dstId],
- sMiss = !srcNode ? missMsg('src', srcId) : '',
- dMiss = !dstNode ? missMsg('dst', dstId) : '';
-
- if (sMiss || dMiss) {
- $log.error('Node(s) not on map for link:' + sMiss + dMiss);
- //logicError('Node(s) not on map for link:\n' + sMiss + dMiss);
- return null;
- }
- return {
- source: srcNode,
- target: dstNode
- };
- }
-
- function missMsg(what, id) {
- return '\n[' + what + '] "' + id + '" missing';
- }
-
-
- function makeNodeKey(d, what) {
- var port = what + 'Port';
- return d[what] + '/' + d[port];
- }
-
- function makeLinkKey(d, flipped) {
- var one = flipped ? makeNodeKey(d, 'dst') : makeNodeKey(d, 'src'),
- two = flipped ? makeNodeKey(d, 'src') : makeNodeKey(d, 'dst');
- return one + '-' + two;
- }
-
- function findLinkById(id) {
- // check to see if this is a reverse lookup, else default to given id
- var key = rlk[id] || id;
- return key && lu[key];
- }
-
- function findLink(linkData, op) {
- var key = makeLinkKey(linkData),
- keyrev = makeLinkKey(linkData, 1),
- link = lu[key],
- linkRev = lu[keyrev],
- result = {},
- ldata = link || linkRev,
- rawLink;
-
- if (op === 'add') {
- if (link) {
- // trying to add a link that we already know about
- result.ldata = link;
- result.badLogic = 'addLink: link already added';
-
- } else if (linkRev) {
- // we found the reverse of the link to be added
- result.ldata = linkRev;
- if (linkRev.fromTarget) {
- result.badLogic = 'addLink: link already added';
- }
- }
- } else if (op === 'update') {
- if (!ldata) {
- result.badLogic = 'updateLink: link not found';
- } else {
- rawLink = link ? ldata.fromSource : ldata.fromTarget;
- result.updateWith = function (data) {
- angular.extend(rawLink, data);
- api.restyleLinkElement(ldata);
- }
- }
- } else if (op === 'remove') {
- if (!ldata) {
- result.badLogic = 'removeLink: link not found';
- } else {
- rawLink = link ? ldata.fromSource : ldata.fromTarget;
-
- if (!rawLink) {
- result.badLogic = 'removeLink: link not found';
-
- } else {
- result.removeRawLink = function () {
- // remove link out of aggregate linksByDevice list
- var linksForDevPair = linksByDevice[ldata.devicePair],
- rmvIdx = fs.find(ldata.key, linksForDevPair, 'key');
- if (rmvIdx >= 0) {
- linksForDevPair.splice(rmvIdx, 1);
- }
- ldata.position.multilink = linksForDevPair.length >= 5;
-
- if (link) {
- // remove fromSource
- ldata.fromSource = null;
- if (ldata.fromTarget) {
- // promote target into source position
- ldata.fromSource = ldata.fromTarget;
- ldata.fromTarget = null;
- ldata.key = keyrev;
- delete lu[key];
- lu[keyrev] = ldata;
- delete rlk[keyrev];
- }
- } else {
- // remove fromTarget
- ldata.fromTarget = null;
- delete rlk[keyrev];
- }
- if (ldata.fromSource) {
- api.restyleLinkElement(ldata);
- } else {
- api.removeLinkElement(ldata);
- }
- }
- }
- }
- }
- return result;
- }
-
- function findDevices(offlineOnly) {
- var a = [];
- nodes.forEach(function (d) {
- if (d.class === 'device' && !(offlineOnly && d.online)) {
- a.push(d);
- }
- });
- return a;
- }
-
- function findAttachedHosts(devId) {
- var hosts = [];
- nodes.forEach(function (d) {
- if (d.class === 'host' && d.cp.device === devId) {
- hosts.push(d);
- }
- });
- return hosts;
- }
-
- function findAttachedLinks(devId) {
- var lnks = [];
- links.forEach(function (d) {
- if (d.source.id === devId || d.target.id === devId) {
- lnks.push(d);
- }
- });
- return lnks;
- }
-
- // returns one-way links or where the internal link types differ
- function findBadLinks() {
- var lnks = [],
- src, tgt;
- links.forEach(function (d) {
- // NOTE: skip edge links, which are synthesized
- if (d.type() !== 'hostLink') {
- delete d.bad;
- src = d.fromSource;
- tgt = d.fromTarget;
- if (src && !tgt) {
- d.bad = 'missing link';
- } else if (src.type !== tgt.type) {
- d.bad = 'type mismatch';
- }
- if (d.bad) {
- lnks.push(d);
- }
- }
- });
- return lnks;
- }
-
- // ==========================
- // Module definition
-
- angular.module('ovTopo')
- .factory('TopoModelService',
- ['$log', 'FnService', 'RandomService',
-
- function (_$log_, _fs_, _rnd_) {
- $log = _$log_;
- fs = _fs_;
- rnd = _rnd_;
-
- function initModel(_api_, _dim_) {
- api = _api_;
- dim = _dim_;
- lu = api.network.lookup;
- rlk = api.network.revLinkToKey;
- nodes = api.network.nodes;
- links = api.network.links;
- linksByDevice = api.network.linksByDevice;
- }
-
- function newDim(_dim_) {
- dim = _dim_;
- }
-
- function destroyModel() { }
-
- return {
- initModel: initModel,
- newDim: newDim,
- destroyModel: destroyModel,
-
- positionNode: positionNode,
- createDeviceNode: createDeviceNode,
- createHostNode: createHostNode,
- createHostLink: createHostLink,
- createLink: createLink,
- coordFromLngLat: coordFromLngLat,
- lngLatFromCoord: lngLatFromCoord,
- findLink: findLink,
- findLinkById: findLinkById,
- findDevices: findDevices,
- findAttachedHosts: findAttachedHosts,
- findAttachedLinks: findAttachedLinks,
- findBadLinks: findBadLinks
- }
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoOblique.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoOblique.js
deleted file mode 100644
index e84b1173..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoOblique.js
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology Oblique View Module.
- Provides functionality to view the topology as two planes (packet & optical)
- from an oblique (side-on) perspective.
- */
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, fs, sus, flash;
-
- // api to topoForce
- var api;
- /*
- force() // get ref to force layout object
- zoomLayer() // get ref to zoom layer
- nodeGBBox() // get bounding box of node group layer
- node() // get ref to D3 selection of nodes
- link() // get ref to D3 selection of links
- nodes() // get ref to network nodes array
- tickStuff // ref to tick functions
- nodeLock(b) // test-and-set nodeLock state
- opacifyMap(b) // show or hide map layer
- inLayer(d, layer) // return true if d in layer {'pkt'|'opt'}
- calcLinkPos() // recomputes link pos based on node data
- */
-
- // configuration
- var xsky = -.7, // x skew y factor
- xsk = -35, // x skew angle
- ysc = .5, // y scale
- pad = 50,
- time = 1500,
- fill = {
- pkt: 'rgba(130,130,170,0.3)', // blue-ish
- opt: 'rgba(170,130,170,0.3)' // magenta-ish
- };
-
- // internal state
- var oblique = false,
- xffn = null,
- plane = {},
- oldNodeLock;
-
-
- function planeId(tag) {
- return 'topo-obview-' + tag + 'Plane';
- }
-
- function ytfn(h, dir) {
- return h * ysc * dir * 1.1;
- }
-
- function obXform(h, dir) {
- var yt = ytfn(h, dir);
- return sus.scale(1, ysc) + sus.translate(0, yt) + sus.skewX(xsk);
- }
-
- function noXform() {
- return sus.skewX(0) + sus.translate(0,0) + sus.scale(1,1);
- }
-
- function padBox(box, p) {
- box.x -= p;
- box.y -= p;
- box.width += p*2;
- box.height += p*2;
- }
-
- function toObliqueView() {
- var box = api.nodeGBBox(),
- ox, oy;
-
- padBox(box, pad);
-
- ox = box.x + box.width / 2;
- oy = box.y + box.height / 2;
-
- // remember node lock state, then lock the nodes down
- oldNodeLock = api.nodeLock(true);
- api.opacifyMap(false);
-
- insertPlanes(ox, oy);
-
- xffn = function (xy, dir) {
- var yt = ytfn(box.height, dir),
- ax = xy.x - ox,
- ay = xy.y - oy,
- x = ax + ay * xsky,
- y = (ay + yt) * ysc;
- return {x: ox + x, y: oy + y};
- };
-
- showPlane('pkt', box, -1);
- showPlane('opt', box, 1);
- obTransitionNodes();
- }
-
- function toNormalView() {
- xffn = null;
-
- hidePlane('pkt');
- hidePlane('opt');
- obTransitionNodes();
-
- removePlanes();
-
- // restore node lock state
- api.nodeLock(oldNodeLock);
- api.opacifyMap(true);
- }
-
- function obTransitionNodes() {
- // return the direction for the node
- // -1 for pkt layer, 1 for optical layer
- function dir(d) {
- return api.inLayer(d, 'pkt') ? -1 : 1;
- }
-
- if (xffn) {
- api.nodes().forEach(function (d) {
- var oldxy = {x: d.x, y: d.y},
- coords = xffn(oldxy, dir(d));
- d.oldxy = oldxy;
- d.px = d.x = coords.x;
- d.py = d.y = coords.y;
- });
- } else {
- api.nodes().forEach(function (d) {
- var old = d.oldxy || {x: d.x, y: d.y};
- d.px = d.x = old.x;
- d.py = d.y = old.y;
- delete d.oldxy;
- });
- }
-
- api.node().transition()
- .duration(time)
- .attr(api.tickStuff.nodeAttr);
- api.link().transition()
- .duration(time)
- .call(api.calcLinkPos)
- .attr(api.tickStuff.linkAttr)
- .call(api.applyNumLinkLabels);
- api.linkLabel().transition()
- .duration(time)
- .attr(api.tickStuff.linkLabelAttr);
- }
-
- function showPlane(tag, box, dir) {
- // set box origin at center..
- box.x = -box.width/2;
- box.y = -box.height/2;
-
- plane[tag].select('rect')
- .attr(box)
- .attr('opacity', 0)
- .transition()
- .duration(time)
- .attr('opacity', 1)
- .attr('transform', obXform(box.height, dir));
- }
-
- function hidePlane(tag) {
- plane[tag].select('rect')
- .transition()
- .duration(time)
- .attr('opacity', 0)
- .attr('transform', noXform());
- }
-
- function insertPlanes(ox, oy) {
- function ins(tag) {
- var id = planeId(tag),
- g = api.zoomLayer().insert('g', '#topo-G')
- .attr('id', id)
- .attr('transform', sus.translate(ox,oy));
- g.append('rect')
- .attr('fill', fill[tag])
- .attr('opacity', 0);
- plane[tag] = g;
- }
- ins('opt');
- ins('pkt');
- }
-
- function removePlanes() {
- function rem(tag) {
- var id = planeId(tag);
- api.zoomLayer().select('#'+id)
- .transition()
- .duration(time + 50)
- .remove();
- delete plane[tag];
- }
- rem('opt');
- rem('pkt');
- }
-
-
-// === -----------------------------------------------------
-// === MODULE DEFINITION ===
-
-angular.module('ovTopo')
- .factory('TopoObliqueService',
- ['$log', 'FnService', 'SvgUtilService', 'FlashService',
-
- function (_$log_, _fs_, _sus_, _flash_) {
- $log = _$log_;
- fs = _fs_;
- sus = _sus_;
- flash = _flash_;
-
- function initOblique(_api_) {
- api = _api_;
- }
-
- function destroyOblique() { }
-
- function toggleOblique() {
- oblique = !oblique;
- if (oblique) {
- api.force().stop();
- flash.flash('Oblique view');
- toObliqueView();
- } else {
- flash.flash('Normal view');
- toNormalView();
- }
- }
-
- return {
- initOblique: initOblique,
- destroyOblique: destroyOblique,
-
- isOblique: function () { return oblique; },
- toggleOblique: toggleOblique
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoOverlay.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoOverlay.js
deleted file mode 100644
index fb7921ad..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoOverlay.js
+++ /dev/null
@@ -1,412 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-/*
- ONOS GUI -- Topology Overlay Module.
-
- Provides overlay capabilities, allowing ONOS apps to provide additional
- custom data/behavior for the topology view.
-
- */
-
-(function () {
- 'use strict';
-
- // constants
- var tos = 'TopoOverlayService: ';
-
- // injected refs
- var $log, fs, gs, wss, ns, tss, tps, api;
-
- // internal state
- var overlays = {},
- current = null,
- reset = true;
-
- function error(fn, msg) {
- $log.error(tos + fn + '(): ' + msg);
- }
-
- function warn(fn, msg) {
- $log.warn(tos + fn + '(): ' + msg);
- }
-
- function mkGlyphId(oid, gid) {
- return (gid[0] === '*') ? oid + '-' + gid.slice(1) : gid;
- }
-
- function handleGlyphs(o) {
- var gdata = fs.isO(o.glyphs),
- oid = o.overlayId,
- gid = o.glyphId || 'unknown',
- data = {},
- note = [];
-
- o._glyphId = mkGlyphId(oid, gid);
-
- o.mkGid = function (g) {
- return mkGlyphId(oid, g);
- };
- o.mkId = function (s) {
- return oid + '-' + s;
- };
-
- // process glyphs if defined
- if (gdata) {
- angular.forEach(gdata, function (value, key) {
- var fullkey = oid + '-' + key;
- data['_' + fullkey] = value.vb;
- data[fullkey] = value.d;
- note.push('*' + key);
- });
- gs.registerGlyphs(data);
- $log.debug('registered overlay glyphs:', oid, note);
- }
- }
-
- function register(overlay) {
- var r = 'register',
- over = fs.isO(overlay),
- kb = over ? fs.isO(overlay.keyBindings) : null,
- id = over ? over.overlayId : '';
-
- if (!id) {
- return error(r, 'not a recognized overlay');
- }
- if (overlays[id]) {
- return warn(r, 'already registered: "' + id + '"');
- }
- overlays[id] = overlay;
- handleGlyphs(overlay);
-
- if (kb) {
- if (!fs.isA(kb._keyOrder)) {
- warn(r, 'no _keyOrder array defined on keyBindings');
- } else {
- kb._keyOrder.forEach(function (k) {
- if (k !== '-' && !kb[k]) {
- warn(r, 'no "' + k + '" property defined on keyBindings');
- }
- });
- }
- }
-
- $log.debug(tos + 'registered overlay: ' + id, overlay);
- }
-
- // returns the list of overlay identifiers
- function list() {
- return d3.map(overlays).keys();
- }
-
- // add a radio button for each registered overlay
- // return an overlay id to index map
- function augmentRbset(rset, switchFn) {
- var map = {},
- idx = 1;
-
- angular.forEach(overlays, function (ov) {
- rset.push({
- gid: ov._glyphId,
- tooltip: (ov.tooltip || '(no tooltip)'),
- cb: function () {
- tbSelection(ov.overlayId, switchFn);
- }
- });
- map[ov.overlayId] = idx++;
- });
- return map;
- }
-
- // an overlay was selected via toolbar radio button press from user
- function tbSelection(id, switchFn) {
- var same = current && current.overlayId === id,
- payload = {},
- actions;
-
- function doop(op) {
- var oid = current.overlayId;
- $log.debug('Overlay:', op, oid);
- current[op]();
- payload[op] = oid;
- }
-
- if (reset || !same) {
- reset = false;
- current && doop('deactivate');
- current = overlays[id];
- current && doop('activate');
- actions = current && fs.isO(current.keyBindings);
- switchFn(id, actions);
-
- wss.sendEvent('topoSelectOverlay', payload);
-
- // Ensure summary and details panels are updated immediately..
- wss.sendEvent('requestSummary');
- tss.updateDetail();
- }
- }
-
- var coreButtons = {
- showDeviceView: {
- gid: 'switch',
- tt: 'Show Device View',
- path: 'device'
- },
- showFlowView: {
- gid: 'flowTable',
- tt: 'Show Flow View for this Device',
- path: 'flow'
- },
- showPortView: {
- gid: 'portTable',
- tt: 'Show Port View for this Device',
- path: 'port'
- },
- showGroupView: {
- gid: 'groupTable',
- tt: 'Show Group View for this Device',
- path: 'group'
- }
- };
-
- // retrieves a button definition from the current overlay and generates
- // a button descriptor to be added to the panel, with the data baked in
- function _getButtonDef(id, data) {
- var btns = current && current.buttons,
- b = btns && btns[id],
- cb = fs.isF(b.cb),
- f = cb ? function () { cb(data); } : function () {};
-
- return b ? {
- id: current.mkId(id),
- gid: current.mkGid(b.gid),
- tt: b.tt,
- cb: f
- } : null;
- }
-
- // install core buttons, and include any additional from the current overlay
- function installButtons(buttons, data, devId) {
- buttons.forEach(function (id) {
- var btn = coreButtons[id],
- gid = btn && btn.gid,
- tt = btn && btn.tt,
- path = btn && btn.path;
-
- if (btn) {
- tps.addAction({
- id: 'core-' + id,
- gid: gid,
- tt: tt,
- cb: function () { ns.navTo(path, {devId: devId }); }
- });
- } else if (btn = _getButtonDef(id, data)) {
- tps.addAction(btn);
- }
- });
- }
-
- function addDetailButton(id) {
- var b = _getButtonDef(id);
- if (b) {
- tps.addAction({
- id: current.mkId(id),
- gid: current.mkGid(b.gid),
- cb: b.cb,
- tt: b.tt
- });
- }
- }
-
-
- // === -----------------------------------------------------
- // Hooks for overlays
-
- function _hook(x) {
- var h = current && current.hooks;
- return h && fs.isF(h[x]);
- }
-
- function escapeHook() {
- var eh = _hook('escape');
- return eh ? eh() : false;
- }
-
- function emptySelectHook() {
- var cb = _hook('empty');
- cb && cb();
- }
-
- function singleSelectHook(data) {
- var cb = _hook('single');
- cb && cb(data);
- }
-
- function multiSelectHook(selectOrder) {
- var cb = _hook('multi');
- cb && cb(selectOrder);
- }
-
- function mouseOverHook(what) {
- var cb = _hook('mouseover');
- cb && cb(what);
- }
-
- function mouseOutHook() {
- var cb = _hook('mouseout');
- cb && cb();
- }
-
- // === -----------------------------------------------------
- // Event (from server) Handlers
-
- function setApi(_api_, _tss_) {
- api = _api_;
- tss = _tss_;
- }
-
- function showHighlights(data) {
- var less;
-
- /*
- API to topoForce
- clearLinkTrafficStyle()
- removeLinkLabels()
- findLinkById( id )
- findNodeById( id )
- updateLinks()
- updateNodes()
- supLayers( bool, [less] )
- unsupNode( id, [less] )
- unsupLink( key, [less] )
- */
-
- api.clearNodeDeco();
- api.removeNodeBadges();
- api.clearLinkTrafficStyle();
- api.removeLinkLabels();
-
- // handle element suppression
- if (data.subdue) {
- less = data.subdue === 'min';
- api.supLayers(true, less);
-
- } else {
- api.supLayers(false);
- api.supLayers(false, true);
- }
-
- data.hosts.forEach(function (host) {
- var hdata = api.findNodeById(host.id),
- badgeData = host.badge || null;
-
- if (hdata && !hdata.el.empty()) {
- hdata.badge = badgeData;
- if (!host.subdue) {
- api.unsupNode(hdata.id, less);
- }
- // TODO: further highlighting?
- }
- });
-
- data.devices.forEach(function (device) {
- var ddata = api.findNodeById(device.id),
- badgeData = device.badge || null;
-
- if (ddata && !ddata.el.empty()) {
- ddata.badge = badgeData;
- if (!device.subdue) {
- api.unsupNode(ddata.id, less);
- }
- // TODO: further highlighting?
- }
- });
-
- data.links.forEach(function (link) {
- var ldata = api.findLinkById(link.id),
- lab = link.label,
- units, portcls, magnitude;
-
- if (ldata && !ldata.el.empty()) {
- if (!link.subdue) {
- api.unsupLink(ldata.key, less);
- }
- ldata.el.classed(link.css, true);
- ldata.label = lab;
-
- // TODO: this needs to be pulled out into traffic overlay
- // inject additional styling for port-based traffic
- if (fs.endsWith(lab, 'bps')) {
- units = lab.substring(lab.length-4);
- portcls = 'port-traffic-' + units;
-
- // for GBps
- if (units.substring(0,1) === 'G') {
- magnitude = fs.parseBitRate(lab);
- if (magnitude >= 9) {
- portcls += '-choked'
- }
- }
- ldata.el.classed(portcls, true);
- }
- }
- });
-
- api.updateNodes();
- api.updateLinks();
- }
-
- // ========================================================================
-
- angular.module('ovTopo')
- .factory('TopoOverlayService',
- ['$log', 'FnService', 'GlyphService', 'WebSocketService', 'NavService',
- 'TopoPanelService',
-
- function (_$log_, _fs_, _gs_, _wss_, _ns_, _tps_) {
- $log = _$log_;
- fs = _fs_;
- gs = _gs_;
- wss = _wss_;
- ns = _ns_;
- tps = _tps_;
-
- return {
- register: register,
- setApi: setApi,
- list: list,
- augmentRbset: augmentRbset,
- mkGlyphId: mkGlyphId,
- tbSelection: tbSelection,
- installButtons: installButtons,
- addDetailButton: addDetailButton,
- resetOnToolbarDestroy: function () { reset = true; },
- hooks: {
- escape: escapeHook,
- emptySelect: emptySelectHook,
- singleSelect: singleSelectHook,
- multiSelect: multiSelectHook,
- mouseOver: mouseOverHook,
- mouseOut: mouseOutHook
- },
-
- showHighlights: showHighlights
- }
- }]);
-
-}()); \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoPanel.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoPanel.js
deleted file mode 100644
index 1b8c2192..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoPanel.js
+++ /dev/null
@@ -1,539 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology Panel Module.
- Defines functions for manipulating the summary, detail, and instance panels.
- */
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, $window, $rootScope, fs, ps, gs, flash, wss, bns, mast, ns;
-
- // constants
- var pCls = 'topo-p',
- idSum = 'topo-p-summary',
- idDet = 'topo-p-detail',
- panelOpts = {
- width: 260
- },
- sumMax = 262,
- padTop = 20,
- devPath = 'device';
-
- // internal state
- var useDetails = true, // should we show details if we have 'em?
- haveDetails = false, // do we have details that we could show?
- sumFromTop, // summary panel distance from top of screen
- unbindWatch;
-
- // panels
- var summary, detail;
-
- // === -----------------------------------------------------
- // Panel API
- function createTopoPanel(id, opts) {
- var p = ps.createPanel(id, opts),
- pid = id,
- header, body, footer;
- p.classed(pCls, true);
-
- function panel() {
- return p;
- }
-
- function hAppend(x) {
- return header.append(x);
- }
-
- function bAppend(x) {
- return body.append(x);
- }
-
- function fAppend(x) {
- return footer.append(x);
- }
-
- function setup() {
- p.empty();
-
- p.append('div').classed('header', true);
- p.append('div').classed('body', true);
- p.append('div').classed('footer', true);
-
- header = p.el().select('.header');
- body = p.el().select('.body');
- footer = p.el().select('.footer');
- }
-
- function destroy() {
- ps.destroyPanel(pid);
- }
-
- // fromTop is how many pixels from the top of the page the panel is
- // max is the max height of the panel in pixels
- // only adjusts if the body content would be 10px or larger
- function adjustHeight(fromTop, max) {
- var totalPHeight, avSpace,
- overflow = 0,
- pdg = 30;
-
- if (!fromTop) {
- $log.warn('adjustHeight: height from top of page not given');
- return null;
- } else if (!body || !p) {
- $log.warn('adjustHeight: panel contents are not defined');
- return null;
- }
-
- p.el().style('height', null);
- body.style('height', null);
-
- totalPHeight = fromTop + p.height();
- avSpace = fs.windowSize(pdg).height;
-
- if (totalPHeight >= avSpace) {
- overflow = totalPHeight - avSpace;
- }
-
- function _adjustBody(height) {
- if (height < 10) {
- return false;
- } else {
- body.style('height', height + 'px');
- }
- return true;
- }
-
- if (!_adjustBody(fs.noPxStyle(body, 'height') - overflow)) {
- return;
- }
-
- if (max && p.height() > max) {
- _adjustBody(fs.noPxStyle(body, 'height') - (p.height() - max));
- }
- }
-
- return {
- panel: panel,
- setup: setup,
- destroy: destroy,
- appendHeader: hAppend,
- appendBody: bAppend,
- appendFooter: fAppend,
- adjustHeight: adjustHeight
- };
- }
-
- // === -----------------------------------------------------
- // Utility functions
-
- function addSep(tbody) {
- tbody.append('tr').append('td').attr('colspan', 2).append('hr');
- }
-
- function addBtnFooter() {
- detail.appendFooter('hr');
- detail.appendFooter('div').classed('actionBtns', true);
- }
-
- function addProp(tbody, label, value) {
- var tr = tbody.append('tr'),
- lab;
- if (typeof label === 'string') {
- lab = label.replace(/_/g, ' ');
- } else {
- lab = label;
- }
-
- function addCell(cls, txt) {
- tr.append('td').attr('class', cls).html(txt);
- }
- addCell('label', lab + ' :');
- addCell('value', value);
- }
-
- function listProps(tbody, data) {
- data.propOrder.forEach(function (p) {
- if (p === '-') {
- addSep(tbody);
- } else {
- addProp(tbody, p, data.props[p]);
- }
- });
- }
-
- function watchWindow() {
- unbindWatch = $rootScope.$watchCollection(
- function () {
- return {
- h: $window.innerHeight,
- w: $window.innerWidth
- };
- }, function () {
- summary.adjustHeight(sumFromTop, sumMax);
- detail.adjustHeight(detail.ypos.current);
- }
- );
- }
-
- // === -----------------------------------------------------
- // Functions for populating the summary panel
-
- function populateSummary(data) {
- summary.setup();
-
- var svg = summary.appendHeader('div')
- .classed('icon', true)
- .append('svg'),
- title = summary.appendHeader('h2'),
- table = summary.appendBody('table'),
- tbody = table.append('tbody'),
- glyphId = data.type || 'node';
-
- gs.addGlyph(svg, glyphId, 40);
-
- if (glyphId === 'node') {
- gs.addGlyph(svg, 'bird', 24, true, [8,12]);
- }
-
- title.text(data.title);
- listProps(tbody, data);
- }
-
- // === -----------------------------------------------------
- // Functions for populating the detail panel
-
- var isDevice = {
- switch: 1,
- roadm: 1
- };
-
- function displaySingle(data) {
- detail.setup();
-
- var svg = detail.appendHeader('div')
- .classed('icon clickable', true)
- .append('svg'),
- title = detail.appendHeader('h2')
- .classed('clickable', true),
- table = detail.appendBody('table'),
- tbody = table.append('tbody'),
- navFn;
-
- gs.addGlyph(svg, (data.type || 'unknown'), 40);
- title.text(data.title);
-
- // only add navigation when displaying a device
- if (isDevice[data.type]) {
- navFn = function () {
- ns.navTo(devPath, { devId: data.id });
- };
-
- svg.on('click', navFn);
- title.on('click', navFn);
- }
-
- listProps(tbody, data);
- addBtnFooter();
- }
-
- function displayMulti(ids) {
- detail.setup();
-
- var title = detail.appendHeader('h3'),
- table = detail.appendBody('table'),
- tbody = table.append('tbody');
-
- title.text('Selected Nodes');
- ids.forEach(function (d, i) {
- addProp(tbody, i+1, d);
- });
- addBtnFooter();
- }
-
- function addAction(o) {
- var btnDiv = d3.select('#' + idDet)
- .select('.actionBtns')
- .append('div')
- .classed('actionBtn', true);
- bns.button(btnDiv, idDet + '-' + o.id, o.gid, o.cb, o.tt);
- }
-
- var friendlyIndex = {
- device: 1,
- host: 0
- };
-
- function friendly(d) {
- var i = friendlyIndex[d.class] || 0;
- return (d.labels && d.labels[i]) || '';
- }
-
- function linkSummary(d) {
- var o = d && d.online ? 'online' : 'offline';
- return d ? d.type + ' / ' + o : '-';
- }
-
- // provided to change presentation of internal type name
- var linkTypePres = {
- hostLink: 'edge link'
- };
-
- function linkType(d) {
- return linkTypePres[d.type()] || d.type();
- }
-
- var coreOrder = [
- 'Type', '-',
- 'A_type', 'A_id', 'A_label', 'A_port', '-',
- 'B_type', 'B_id', 'B_label', 'B_port', '-'
- ],
- edgeOrder = [
- 'Type', '-',
- 'A_type', 'A_id', 'A_label', '-',
- 'B_type', 'B_id', 'B_label', 'B_port'
- ];
-
- function displayLink(data) {
- detail.setup();
-
- var svg = detail.appendHeader('div')
- .classed('icon', true)
- .append('svg'),
- title = detail.appendHeader('h2'),
- table = detail.appendBody('table'),
- tbody = table.append('tbody'),
- edgeLink = data.type() === 'hostLink',
- order = edgeLink ? edgeOrder : coreOrder;
-
- gs.addGlyph(svg, 'ports', 40);
- title.text('Link');
-
-
- listProps(tbody, {
- propOrder: order,
- props: {
- Type: linkType(data),
-
- A_type: data.source.class,
- A_id: data.source.id,
- A_label: friendly(data.source),
- A_port: data.srcPort,
-
- B_type: data.target.class,
- B_id: data.target.id,
- B_label: friendly(data.target),
- B_port: data.tgtPort
- }
- });
-
- if (!edgeLink) {
- addProp(tbody, 'A &rarr; B', linkSummary(data.fromSource));
- addProp(tbody, 'B &rarr; A', linkSummary(data.fromTarget));
- }
- }
-
- function displayNothing() {
- haveDetails = false;
- hideDetailPanel();
- }
-
- function displaySomething() {
- haveDetails = true;
- if (useDetails) {
- showDetailPanel();
- }
- }
-
- // === -----------------------------------------------------
- // Event Handlers
-
- function showSummary(data) {
- populateSummary(data);
- showSummaryPanel();
- }
-
- function toggleSummary(x) {
- var kev = (x === 'keyev'),
- on = kev ? !summary.panel().isVisible() : !!x,
- verb = on ? 'Show' : 'Hide';
-
- if (on) {
- // ask server to start sending summary data.
- wss.sendEvent('requestSummary');
- // note: the summary panel will appear, once data arrives
- } else {
- hideSummaryPanel();
- }
- flash.flash(verb + ' summary panel');
- return on;
- }
-
- // === -----------------------------------------------------
- // === LOGIC For showing/hiding summary and detail panels...
-
- function showSummaryPanel() {
- function _show() {
- summary.panel().show();
- summary.adjustHeight(sumFromTop, sumMax);
- }
- if (detail.panel().isVisible()) {
- detail.down(_show);
- } else {
- _show();
- }
- }
-
- function hideSummaryPanel() {
- // instruct server to stop sending summary data
- wss.sendEvent("cancelSummary");
- summary.panel().hide(detail.up);
- }
-
- function showDetailPanel() {
- if (summary.panel().isVisible()) {
- detail.down(detail.panel().show);
- } else {
- detail.up(detail.panel().show);
- }
- }
-
- function hideDetailPanel() {
- detail.panel().hide();
- }
-
- // ==========================
-
- function augmentDetailPanel() {
- var d = detail,
- downPos = sumFromTop + sumMax + 20;
- d.ypos = { up: sumFromTop, down: downPos, current: downPos};
-
- d._move = function (y, cb) {
- var yp = d.ypos,
- endCb;
-
- if (fs.isF(cb)) {
- endCb = function () {
- cb();
- d.adjustHeight(d.ypos.current);
- }
- } else {
- endCb = function () {
- d.adjustHeight(d.ypos.current);
- }
- }
- if (yp.current !== y) {
- yp.current = y;
- d.panel().el().transition().duration(300)
- .each('end', endCb)
- .style('top', yp.current + 'px');
- } else {
- endCb();
- }
- };
-
- d.down = function (cb) { d._move(d.ypos.down, cb); };
- d.up = function (cb) { d._move(d.ypos.up, cb); };
- }
-
- function toggleUseDetailsFlag(x) {
- var kev = (x === 'keyev'),
- verb;
-
- useDetails = kev ? !useDetails : !!x;
- verb = useDetails ? 'Enable' : 'Disable';
-
- if (useDetails) {
- if (haveDetails) {
- showDetailPanel();
- }
- } else {
- hideDetailPanel();
- }
- flash.flash(verb + ' details panel');
- return useDetails;
- }
-
- // ==========================
-
- function initPanels() {
- sumFromTop = mast.mastHeight() + padTop;
- summary = createTopoPanel(idSum, panelOpts);
- detail = createTopoPanel(idDet, panelOpts);
-
- augmentDetailPanel();
- watchWindow();
- }
-
- function destroyPanels() {
- summary.destroy();
- summary = null;
-
- detail.destroy();
- detail = null;
- haveDetails = false;
- unbindWatch();
- }
-
- // ==========================
-
- angular.module('ovTopo')
- .factory('TopoPanelService',
- ['$log', '$window', '$rootScope', 'FnService', 'PanelService', 'GlyphService',
- 'FlashService', 'WebSocketService', 'ButtonService', 'MastService',
- 'NavService',
-
- function (_$log_, _$window_, _$rootScope_,
- _fs_, _ps_, _gs_, _flash_, _wss_, _bns_, _mast_, _ns_) {
- $log = _$log_;
- $window = _$window_;
- $rootScope = _$rootScope_;
- fs = _fs_;
- ps = _ps_;
- gs = _gs_;
- flash = _flash_;
- wss = _wss_;
- bns = _bns_;
- mast = _mast_;
- ns = _ns_;
-
- return {
- initPanels: initPanels,
- destroyPanels: destroyPanels,
- createTopoPanel: createTopoPanel,
-
- showSummary: showSummary,
- toggleSummary: toggleSummary,
-
- toggleUseDetailsFlag: toggleUseDetailsFlag,
- displaySingle: displaySingle,
- displayMulti: displayMulti,
- displayLink: displayLink,
- displayNothing: displayNothing,
- displaySomething: displaySomething,
- addAction: addAction,
-
- hideSummaryPanel: hideSummaryPanel,
-
- detailVisible: function () { return detail.panel().isVisible(); },
- summaryVisible: function () { return summary.panel().isVisible(); }
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoSelect.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoSelect.js
deleted file mode 100644
index 4ad76903..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoSelect.js
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology Selection Module.
- Defines behavior when selecting nodes.
- */
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, fs, wss, tov, tps, tts, ns;
-
- // api to topoForce
- var api;
- /*
- node() // get ref to D3 selection of nodes
- zoomingOrPanning( ev )
- updateDeviceColors( [dev] )
- deselectLink()
- */
-
- // internal state
- var hovered, // the node over which the mouse is hovering
- selections = {}, // currently selected nodes (by id)
- selectOrder = [], // the order in which we made selections
- consumeClick = false; // used to coordinate with SVG click handler
-
- // ==========================
-
- function nSel() {
- return selectOrder.length;
- }
- function getSel(idx) {
- return selections[selectOrder[idx]];
- }
- function allSelectionsClass(cls) {
- for (var i=0, n=nSel(); i<n; i++) {
- if (getSel(i).obj.class !== cls) {
- return false;
- }
- }
- return true;
- }
-
- // ==========================
-
- function nodeMouseOver(m) {
- if (!m.dragStarted) {
- if (hovered != m) {
- hovered = m;
- tov.hooks.mouseOver({
- id: m.id,
- class: m.class,
- type: m.type
- });
- }
- }
- }
-
- function nodeMouseOut(m) {
- if (!m.dragStarted) {
- if (hovered) {
- hovered = null;
- tov.hooks.mouseOut();
- }
- }
- }
-
- // ==========================
-
- function selectObject(obj) {
- var el = this,
- nodeEv = el && el.tagName === 'g',
- ev = d3.event.sourceEvent || {},
- n;
-
- if (api.zoomingOrPanning(ev)) {
- return;
- }
-
- if (nodeEv) {
- n = d3.select(el);
- } else {
- api.node().each(function (d) {
- if (d == obj) {
- n = d3.select(el = this);
- }
- });
- }
- if (!n) return;
-
- if (nodeEv) {
- consumeClick = true;
- }
- api.deselectLink();
-
- if (ev.shiftKey && n.classed('selected')) {
- deselectObject(obj.id);
- updateDetail();
- return;
- }
-
- if (!ev.shiftKey) {
- deselectAll(true);
- }
-
- selections[obj.id] = { obj: obj, el: el };
- selectOrder.push(obj.id);
-
- n.classed('selected', true);
- api.updateDeviceColors(obj);
- updateDetail();
- }
-
- function deselectObject(id) {
- var obj = selections[id];
- if (obj) {
- d3.select(obj.el).classed('selected', false);
- delete selections[id];
- fs.removeFromArray(id, selectOrder);
- api.updateDeviceColors(obj.obj);
- }
- }
-
- function deselectAll(skipUpdate) {
- var something = (selectOrder.length > 0);
-
- // deselect all nodes in the network...
- api.node().classed('selected', false);
- selections = {};
- selectOrder = [];
- api.updateDeviceColors();
- if (!skipUpdate) {
- updateDetail();
- }
-
- // return true if something was selected
- return something;
- }
-
- // === -----------------------------------------------------
-
- function requestDetails(data) {
- wss.sendEvent('requestDetails', {
- id: data.id,
- class: data.class
- });
- }
-
- // === -----------------------------------------------------
-
- function updateDetail() {
- var nSel = selectOrder.length;
- if (!nSel) {
- emptySelect();
- } else if (nSel === 1) {
- singleSelect();
- } else {
- multiSelect();
- }
- }
-
- function emptySelect() {
- tov.hooks.emptySelect();
- tps.displayNothing();
- }
-
- function singleSelect() {
- var data = getSel(0).obj;
- requestDetails(data);
- // NOTE: detail panel is shown as a response to receiving
- // a 'showDetails' event from the server. See 'showDetails'
- // callback function below...
- }
-
- function multiSelect() {
- // display the selected nodes in the detail panel
- tps.displayMulti(selectOrder);
- addHostSelectionActions();
- tov.hooks.multiSelect(selectOrder);
- tps.displaySomething();
- }
-
- function addHostSelectionActions() {
- if (allSelectionsClass('host')) {
- if (nSel() === 2) {
- tps.addAction({
- id: 'host-flow-btn',
- gid: 'endstation',
- cb: tts.addHostIntent,
- tt: 'Create Host-to-Host Flow'
- });
- } else if (nSel() >= 2) {
- tps.addAction({
- id: 'mult-src-flow-btn',
- gid: 'flows',
- cb: tts.addMultiSourceIntent,
- tt: 'Create Multi-Source Flow'
- });
- }
- }
- }
-
-
- // === -----------------------------------------------------
- // Event Handlers
-
- // display the data for the single selected node
- function showDetails(data) {
- var buttons = fs.isA(data.buttons) || [];
- tps.displaySingle(data);
- tov.installButtons(buttons, data, data.props['URI']);
- tov.hooks.singleSelect(data);
- tps.displaySomething();
- }
-
- // returns true if one or more nodes are selected.
- function somethingSelected() {
- return nSel();
- }
-
- function clickConsumed(x) {
- var cc = consumeClick;
- consumeClick = !!x;
- return cc;
- }
-
- // returns a selection context, providing info about what is selected
- function selectionContext() {
- var devices = [],
- hosts = [],
- types = {};
-
- angular.forEach(selections, function (d) {
- var o = d.obj,
- c = o.class;
-
- if (c === 'device') {
- devices.push(o.id);
- types[o.id] = o.type;
- }
- if (c === 'host') {
- hosts.push(o.id);
- types[o.id] = o.type;
- }
- });
-
- return {
- devices: devices,
- hosts: hosts,
- types: types
- };
- }
-
- // === -----------------------------------------------------
- // === MODULE DEFINITION ===
-
- angular.module('ovTopo')
- .factory('TopoSelectService',
- ['$log', 'FnService', 'WebSocketService', 'TopoOverlayService',
- 'TopoPanelService', 'TopoTrafficService', 'NavService',
-
- function (_$log_, _fs_, _wss_, _tov_, _tps_, _tts_, _ns_) {
- $log = _$log_;
- fs = _fs_;
- wss = _wss_;
- tov = _tov_;
- tps = _tps_;
- tts = _tts_;
- ns = _ns_;
-
- function initSelect(_api_) {
- api = _api_;
- }
-
- function destroySelect() { }
-
- return {
- initSelect: initSelect,
- destroySelect: destroySelect,
-
- showDetails: showDetails,
-
- nodeMouseOver: nodeMouseOver,
- nodeMouseOut: nodeMouseOut,
- selectObject: selectObject,
- deselectObject: deselectObject,
- deselectAll: deselectAll,
- updateDetail: updateDetail,
-
- hovered: function () { return hovered; },
- selectOrder: function () { return selectOrder; },
- somethingSelected: somethingSelected,
-
- clickConsumed: clickConsumed,
- selectionContext: selectionContext
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoSprite.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoSprite.js
deleted file mode 100644
index 1c957412..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoSprite.js
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology Sprite Module.
- Defines behavior for loading sprites into the sprite layer.
- */
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, $http, fs, gs, sus, wss;
-
- // constants
- var tssid = 'TopoSpriteService: ',
- fontsize = 20; // default font size 20pt.
-
- // internal state
- var spriteLayer, defsElement;
-
-
- function registerPathsAsGlyphs(paths) {
- var custom = {},
- ids = [];
-
- function mkd(d) {
- return fs.isA(d) ? d.join('') : d;
- }
-
- paths.forEach(function (path) {
- var tag = 'spr_' + path.tag;
-
- if (path.glyph) {
- // assumption is that we are using a built-in glyph
- return;
- }
-
- custom['_' + tag] = path.viewbox || '0 0 1000 1000';
- custom[tag] = mkd(path.d);
- ids.push(tag);
- });
-
- gs.registerGlyphs(custom);
- gs.loadDefs(defsElement, ids, true);
- }
-
- function applyStrokeStyle(s, use) {
- var style;
- if (s) {
- style = {};
- angular.forEach(s, function (value, key) {
- style['stroke-' + key] = value;
- });
- use.style(style);
- }
- }
-
- function applyFillClass(f, use) {
- use.classed('fill-' + f, true);
- }
-
- function doSprite(spr, def, pathmeta) {
- var pmeta = pathmeta[def.path],
- c = spr.class || 'gray1',
- p = spr.pos || [0,0],
- lab = spr.label,
- dim = def.dim || [40,40],
- w = dim[0],
- h = dim[1],
- dy = def.labelyoff || 1,
- sc = def.scale,
- xfm = sus.translate(p),
- g, attr, use;
-
- if (sc) {
- xfm += sus.scale(sc, sc);
- }
-
- g = spriteLayer.append('g')
- .classed(c, true)
- .attr('transform', xfm);
-
- attr = {
- width: w,
- height: h,
- 'xlink:href': '#' + pmeta.u
- };
-
- use = g.append('use').attr(attr);
- applyStrokeStyle(pmeta.s, use);
- applyFillClass(def.fill, use);
-
-
- // add subpaths if they have been defined
- if (fs.isA(def.subpaths)) {
- def.subpaths.forEach(function (v) {
- pmeta = pathmeta[v.path];
- attr = {
- width: w,
- height: h,
- 'xlink:href': '#' + pmeta.u,
- transform: sus.translate(v.pos)
- };
- use = g.append('use').attr(attr);
- applyStrokeStyle(pmeta.s, use);
- applyFillClass(def.subpathfill, use);
- });
- }
-
- if (lab) {
- g.append('text')
- .text(lab)
- .attr({ x: w / 2, y: h * dy });
- }
- }
-
- function doLabel(label) {
- var c = label.class || 'gray1',
- p = label.pos || [0,0],
- sz = label.size || 1.0,
- g = spriteLayer.append('g')
- .classed(c, true)
- .attr('transform', sus.translate(p))
- .append('text')
- .text(label.text)
- .style('font-size', (fontsize * sz)+'pt');
- }
-
-
- // ==========================
- // event handlers
-
- // Handles response from 'spriteListRequest' which lists all the
- // registered sprite definitions on the server.
- // (see onos-upload-sprites)
- function inList(payload) {
- $log.debug(tssid + 'Registered sprite definitions:', payload.names);
- // Some day, we will make this list available to the user in
- // a dropdown selection box...
- }
-
- // Handles response from 'spriteDataRequest' which provides the
- // data for the requested sprite definition.
- function inData(payload) {
- var data = payload.data,
- name, desc, pfx, sprites, labels, alpha,
- paths, defn, load,
- pathmeta = {},
- defs = {},
- warn = [];
-
- if (!data) {
- $log.warn(tssid + 'No sprite data loaded.');
- return;
- }
- name = data.defn_name;
- desc = data.defn_desc;
- paths = data.paths;
- defn = data.defn;
- load = data.load;
- pfx = tssid + '[' + name + ']: ';
-
- $log.debug("Loading sprites...[" + name + "]", desc);
-
- function no(what) {
- warn.push(pfx + 'No ' + what + ' property defined');
- }
-
- if (!paths) no('paths');
- if (!defn) no('defn');
- if (!load) no('load');
-
- if (warn.length) {
- $log.error(warn.join('\n'));
- return;
- }
-
- // any custom paths need to be added to the glyph DB, and imported
- registerPathsAsGlyphs(paths);
-
- paths.forEach(function (p) {
- pathmeta[p.tag] = {
- s: p.stroke,
- u: p.glyph || 'spr_' + p.tag
- };
- });
-
- defn.forEach(function (d) {
- defs[d.id] = d;
- });
-
- // sprites, labels and alpha are each optional components of the load
- sprites = load.sprites;
- labels = load.labels;
- alpha = load.alpha;
-
- if (alpha) {
- spriteLayer.style('opacity', alpha);
- }
-
- if (sprites) {
- sprites.forEach(function (spr) {
- var def = defs[spr.id];
- doSprite(spr, def, pathmeta);
- });
- }
-
- if (labels) {
- labels.forEach(doLabel);
- }
- }
-
-
- function loadSprites(layer, defsElem, defname) {
- var name = defname || 'sprites';
- spriteLayer = layer;
- defsElement = defsElem;
-
- $log.info(tssid + 'Requesting sprite definition ['+name+']...');
-
- wss.sendEvent('spriteListRequest');
- wss.sendEvent('spriteDataRequest', {name: name});
- }
-
- // === -----------------------------------------------------
- // === MODULE DEFINITION ===
-
- angular.module('ovTopo')
- .factory('TopoSpriteService',
- ['$log', '$http', 'FnService', 'GlyphService',
- 'SvgUtilService', 'WebSocketService',
-
- function (_$log_, _$http_, _fs_, _gs_, _sus_, _wss_) {
- $log = _$log_;
- $http = _$http_;
- fs = _fs_;
- gs = _gs_;
- sus = _sus_;
- wss = _wss_;
-
- return {
- loadSprites: loadSprites,
- spriteListResponse: inList,
- spriteDataResponse: inData
- };
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoToolbar.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
deleted file mode 100644
index fbcdaf6d..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology Toolbar Module.
- Functions for creating and interacting with the toolbar.
- */
-
-(function () {
- 'use strict';
-
- // injected references
- var $log, fs, tbs, ps, tov, tds, api;
-
- // API:
- // getActionEntry
- // setUpKeys
-
- // internal state
- var toolbar, keyData, cachedState, thirdRow, ovRset, ovIndex;
-
- // constants
- var name = 'topo-tbar',
- cooktag = 'topo_prefs',
- soa = 'switchOverlayActions: ',
- selOver = 'Select overlay here &#x21e7;',
- defaultOverlay = 'traffic';
-
-
- // key to button mapping data
- var k2b = {
- O: { id: 'summary-tog', gid: 'summary', isel: true},
- I: { id: 'instance-tog', gid: 'uiAttached', isel: true },
- D: { id: 'details-tog', gid: 'details', isel: true },
- H: { id: 'hosts-tog', gid: 'endstation', isel: false },
- M: { id: 'offline-tog', gid: 'switch', isel: true },
- P: { id: 'ports-tog', gid: 'ports', isel: true },
- B: { id: 'bkgrnd-tog', gid: 'map', isel: false },
- S: { id: 'sprite-tog', gid: 'cloud', isel: false },
-
- //X: { id: 'nodelock-tog', gid: 'lock', isel: false },
- Z: { id: 'oblique-tog', gid: 'oblique', isel: false },
- N: { id: 'filters-btn', gid: 'filters' },
- L: { id: 'cycleLabels-btn', gid: 'cycleLabels' },
- R: { id: 'resetZoom-btn', gid: 'resetZoom' },
-
- E: { id: 'eqMaster-btn', gid: 'eqMaster' }
- };
-
- var prohibited = [
- 'T', 'backSlash', 'slash',
- 'X' // needed until we re-instate X above.
- ];
- prohibited = prohibited.concat(d3.map(k2b).keys());
-
-
- // initial toggle state: default settings and tag to key mapping
- var defaultPrefsState = {
- summary: 1,
- insts: 1,
- detail: 1,
- hosts: 0,
- offdev: 1,
- porthl: 1,
- bg: 0,
- spr: 0,
- toolbar: 0
- },
- prefsMap = {
- summary: 'O',
- insts: 'I',
- detail: 'D',
- hosts: 'H',
- offdev: 'M',
- porthl: 'P',
- bg: 'B',
- spr: 'S'
- // NOTE: toolbar state is handled separately
- };
-
- function init(_api_) {
- api = _api_;
-
- // retrieve initial toggle button settings from user prefs
- setInitToggleState();
- }
-
- function topoDefPrefs() {
- return angular.extend({}, defaultPrefsState);
- }
-
- function setInitToggleState() {
- cachedState = ps.asNumbers(ps.getPrefs(cooktag));
- $log.debug('TOOLBAR---- read prefs state:', cachedState);
-
- if (!cachedState) {
- cachedState = topoDefPrefs();
- ps.setPrefs(cooktag, cachedState);
- $log.debug('TOOLBAR---- Set default prefs state:', cachedState);
- }
-
- angular.forEach(prefsMap, function (v, k) {
- var cfg = k2b[v];
- cfg && (cfg.isel = !!cachedState[k]);
- });
- }
-
- function initKeyData() {
- // TODO: use angular forEach instead of d3.map
- keyData = d3.map(k2b);
- keyData.forEach(function(key, value) {
- var data = api.getActionEntry(key);
- value.cb = data[0]; // on-click callback
- value.tt = data[1] + ' (' + key + ')'; // tooltip
- });
- }
-
- function addButton(key) {
- var v = keyData.get(key);
- v.btn = toolbar.addButton(v.id, v.gid, v.cb, v.tt);
- }
-
- function addToggle(key, suppressIfMobile) {
- var v = keyData.get(key);
- if (suppressIfMobile && fs.isMobile()) { return; }
- v.tog = toolbar.addToggle(v.id, v.gid, v.isel, v.cb, v.tt);
- }
-
- function addFirstRow() {
- addToggle('I');
- addToggle('O');
- addToggle('D');
- toolbar.addSeparator();
-
- addToggle('H');
- addToggle('M');
- addToggle('P', true);
- addToggle('B');
- addToggle('S', true);
- }
-
- function addSecondRow() {
- //addToggle('X');
- addToggle('Z');
- addButton('N');
- addButton('L');
- addButton('R');
- toolbar.addSeparator();
- addButton('E');
- }
-
- function addOverlays() {
- toolbar.addSeparator();
-
- // generate radio button set for overlays; start with 'none'
- var rset = [{
- gid: 'unknown',
- tooltip: 'No Overlay',
- cb: function () {
- tov.tbSelection(null, switchOverlayActions);
- }
- }];
- ovIndex = tov.augmentRbset(rset, switchOverlayActions);
- ovRset = toolbar.addRadioSet('topo-overlays', rset);
- }
-
- // invoked by overlay service to switch out old buttons and switch in new
- function switchOverlayActions(oid, keyBindings) {
- var prohibits = [],
- kb = fs.isO(keyBindings) || {},
- order = fs.isA(kb._keyOrder) || [];
-
- if (keyBindings && !keyBindings._keyOrder) {
- $log.warn(soa + 'no _keyOrder property defined');
- } else {
- // sanity removal of reserved property names
- ['esc', '_keyListener', '_helpFormat'].forEach(function (k) {
- fs.removeFromArray(k, order);
- });
- }
-
- // ensure dialog has closed (if opened by outgoing overlay)
- tds.closeDialog();
- thirdRow.clear();
-
- if (!order.length) {
- thirdRow.setText(selOver);
- thirdRow.classed('right', true);
- api.setUpKeys(); // clear previous overlay key bindings
-
- } else {
- thirdRow.classed('right', false);
- angular.forEach(order, function (key) {
- var value, bid, gid, tt;
-
- if (prohibited.indexOf(key) > -1) {
- prohibits.push(key);
-
- } else {
- value = keyBindings[key];
- bid = oid + '-' + key;
- gid = tov.mkGlyphId(oid, value.gid);
- tt = value.tt + ' (' + key + ')';
- thirdRow.addButton(bid, gid, value.cb, tt);
- }
- });
- api.setUpKeys(keyBindings); // add overlay key bindings
- }
-
- if (prohibits.length) {
- $log.warn(soa + 'Prohibited key bindings ignored:', prohibits);
- }
- }
-
- function createToolbar() {
- initKeyData();
- toolbar = tbs.createToolbar(name);
- addFirstRow();
- toolbar.addRow();
- addSecondRow();
- addOverlays();
- thirdRow = toolbar.addRow();
- thirdRow.setText(selOver);
- thirdRow.classed('right', true);
-
- if (cachedState.toolbar) {
- toolbar.show();
- } else {
- toolbar.hide();
- }
- }
-
- function destroyToolbar() {
- tbs.destroyToolbar(name);
- tov.resetOnToolbarDestroy();
- }
-
- // allows us to ensure the button states track key strokes
- function keyListener(key) {
- var v = keyData.get(key);
-
- if (v) {
- // we have a valid button mapping
- if (v.tog) {
- // it's a toggle button
- v.tog.toggleNoCb();
- }
- }
- }
-
- function toggleToolbar() {
- toolbar.toggle();
- }
-
- function setDefaultOverlay() {
- var idx = ovIndex[defaultOverlay] || 0;
- ovRset.selectedIndex(idx);
- }
-
- angular.module('ovTopo')
- .factory('TopoToolbarService',
- ['$log', 'FnService', 'ToolbarService', 'PrefsService',
- 'TopoOverlayService', 'TopoDialogService',
-
- function (_$log_, _fs_, _tbs_, _ps_, _tov_, _tds_) {
- $log = _$log_;
- fs = _fs_;
- tbs = _tbs_;
- ps = _ps_;
- tov = _tov_;
- tds = _tds_;
-
- return {
- init: init,
- createToolbar: createToolbar,
- destroyToolbar: destroyToolbar,
- keyListener: keyListener,
- toggleToolbar: toggleToolbar,
- setDefaultOverlay: setDefaultOverlay
- };
- }]);
-}()); \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoTraffic.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoTraffic.js
deleted file mode 100644
index ff690c49..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoTraffic.js
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topology Traffic Module.
- Defines behavior for viewing different traffic modes.
- */
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, fs, flash, wss, api;
-
- /*
- API to topoForce
- hovered()
- somethingSelected()
- selectOrder()
- */
-
- // internal state
- var trafficMode = null,
- hoverMode = null;
-
-
- // === -----------------------------------------------------
- // Helper functions
-
- // invoked in response to change in selection and/or mouseover/out:
- function requestTrafficForMode(mouse) {
- if (trafficMode === 'flows') {
- requestDeviceLinkFlows();
- } else if (trafficMode === 'intents') {
- if (!mouse || hoverMode === 'intents') {
- requestRelatedIntents();
- }
- } else {
- // do nothing
- }
- }
-
- function requestDeviceLinkFlows() {
- // generates payload based on current hover-state
- var hov = api.hovered();
-
- function hoverValid() {
- return hoverMode === 'flows' &&
- hov && (hov.class === 'device');
- }
-
- if (api.somethingSelected()) {
- wss.sendEvent('requestDeviceLinkFlows', {
- ids: api.selectOrder(),
- hover: hoverValid() ? hov.id : ''
- });
- }
- }
-
- function requestRelatedIntents() {
- // generates payload based on current hover-state
- var hov = api.hovered();
-
- function hoverValid() {
- return hoverMode === 'intents' &&
- hov && (hov.class === 'host' || hov.class === 'device');
- }
-
- if (api.somethingSelected()) {
- wss.sendEvent('requestRelatedIntents', {
- ids: api.selectOrder(),
- hover: hoverValid() ? hov.id : ''
- });
- }
- }
-
-
- // === -------------------------------------------------------------
- // Traffic requests invoked from keystrokes or toolbar buttons...
-
- function cancelTraffic(forced) {
- if (!trafficMode || (!forced && trafficMode === 'allFlowPort')) {
- return false;
- }
-
- trafficMode = hoverMode = null;
- wss.sendEvent('cancelTraffic');
- flash.flash('Traffic monitoring canceled');
- return true;
- }
-
- function showAllFlowTraffic() {
- trafficMode = 'allFlowPort';
- hoverMode = null;
- wss.sendEvent('requestAllFlowTraffic');
- flash.flash('All Flow Traffic');
- }
-
- function showAllPortTraffic() {
- trafficMode = 'allFlowPort';
- hoverMode = null;
- wss.sendEvent('requestAllPortTraffic');
- flash.flash('All Port Traffic');
- }
-
- function showDeviceLinkFlows () {
- trafficMode = hoverMode = 'flows';
- requestDeviceLinkFlows();
- flash.flash('Device Flows');
- }
-
- function showRelatedIntents () {
- trafficMode = hoverMode = 'intents';
- requestRelatedIntents();
- flash.flash('Related Paths');
- }
-
- function showPrevIntent() {
- if (trafficMode === 'intents') {
- hoverMode = null;
- wss.sendEvent('requestPrevRelatedIntent');
- flash.flash('Previous related intent');
- }
- }
-
- function showNextIntent() {
- if (trafficMode === 'intents') {
- hoverMode = null;
- wss.sendEvent('requestNextRelatedIntent');
- flash.flash('Next related intent');
- }
- }
-
- function showSelectedIntentTraffic() {
- if (trafficMode === 'intents') {
- hoverMode = null;
- wss.sendEvent('requestSelectedIntentTraffic');
- flash.flash('Traffic on Selected Path');
- }
- }
-
- // force the system to create a single intent selection
- function selectIntent(data) {
- trafficMode = 'intents';
- hoverMode = null;
- wss.sendEvent('selectIntent', data);
- flash.flash('Selecting Intent ' + data.key);
- }
-
-
- // === ------------------------------------------------------
- // action buttons on detail panel (multiple selection)
-
- function addHostIntent () {
- var so = api.selectOrder();
- wss.sendEvent('addHostIntent', {
- one: so[0],
- two: so[1],
- ids: so
- });
- trafficMode = 'intents';
- hoverMode = null;
- flash.flash('Host-to-Host flow added');
- }
-
- function addMultiSourceIntent () {
- var so = api.selectOrder();
- wss.sendEvent('addMultiSourceIntent', {
- src: so.slice(0, so.length - 1),
- dst: so[so.length - 1],
- ids: so
- });
- trafficMode = 'intents';
- hoverMode = null;
- flash.flash('Multi-Source flow added');
- }
-
-
- // === -----------------------------------------------------
- // === MODULE DEFINITION ===
-
- angular.module('ovTopo')
- .factory('TopoTrafficService',
- ['$log', 'FnService', 'FlashService', 'WebSocketService',
-
- function (_$log_, _fs_, _flash_, _wss_) {
- $log = _$log_;
- fs = _fs_;
- flash = _flash_;
- wss = _wss_;
-
- return {
- initTraffic: function (_api_) { api = _api_; },
- destroyTraffic: function () { },
-
- // invoked from toolbar overlay buttons or keystrokes
- cancelTraffic: cancelTraffic,
- showAllFlowTraffic: showAllFlowTraffic,
- showAllPortTraffic: showAllPortTraffic,
- showDeviceLinkFlows: showDeviceLinkFlows,
- showRelatedIntents: showRelatedIntents,
- showPrevIntent: showPrevIntent,
- showNextIntent: showNextIntent,
- showSelectedIntentTraffic: showSelectedIntentTraffic,
- selectIntent: selectIntent,
-
- // invoked from mouseover/mouseout and selection change
- requestTrafficForMode: requestTrafficForMode,
-
- // TODO: these should move to new UI demo app
- // invoked from buttons on detail (multi-select) panel
- addHostIntent: addHostIntent,
- addMultiSourceIntent: addMultiSourceIntent
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoTrafficNew.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoTrafficNew.js
deleted file mode 100644
index cb4bc49a..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoTrafficNew.js
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-/*
- ONOS GUI -- Topology Traffic Overlay Module.
- Defines behavior for viewing different traffic modes.
- Installed as a Topology Overlay.
- */
-(function () {
- 'use strict';
-
- // injected refs
- var $log, tov, tts;
-
- // NOTE: no internal state here -- see TopoTrafficService for that
-
- // NOTE: providing button disabling requires too big a refactoring of
- // the button factory etc. Will have to be done another time.
-
-
- // traffic overlay definition
- var overlay = {
- overlayId: 'traffic',
- glyphId: 'allTraffic',
- tooltip: 'Traffic Overlay',
-
- // NOTE: Traffic glyphs already installed as part of the base ONOS set.
-
- activate: function () {
- $log.debug("Traffic overlay ACTIVATED");
- },
-
- deactivate: function () {
- tts.cancelTraffic(true);
- $log.debug("Traffic overlay DEACTIVATED");
- },
-
- // detail panel button definitions
- // (keys match button identifiers, also defined in TrafficOverlay.java)
- buttons: {
- showDeviceFlows: {
- gid: 'flows',
- tt: 'Show Device Flows',
- cb: function (data) { tts.showDeviceLinkFlows(); }
- },
-
- showRelatedTraffic: {
- gid: 'relatedIntents',
- tt: 'Show Related Traffic',
- cb: function (data) { tts.showRelatedIntents(); }
- }
- },
-
- // key bindings for traffic overlay toolbar buttons
- // NOTE: fully qual. button ID is derived from overlay-id and key-name
- keyBindings: {
- 0: {
- cb: function () { tts.cancelTraffic(true); },
- tt: 'Cancel traffic monitoring',
- gid: 'xMark'
- },
-
- A: {
- cb: function () { tts.showAllFlowTraffic(); },
- tt: 'Monitor all traffic using flow stats',
- gid: 'allTraffic'
- },
- Q: {
- cb: function () { tts.showAllPortTraffic(); },
- tt: 'Monitor all traffic using port stats',
- gid: 'allTraffic'
- },
- F: {
- cb: function () { tts.showDeviceLinkFlows(); },
- tt: 'Show device link flows',
- gid: 'flows'
- },
- V: {
- cb: function () { tts.showRelatedIntents(); },
- tt: 'Show all related intents',
- gid: 'relatedIntents'
- },
- leftArrow: {
- cb: function () { tts.showPrevIntent(); },
- tt: 'Show previous related intent',
- gid: 'prevIntent'
- },
- rightArrow: {
- cb: function () { tts.showNextIntent(); },
- tt: 'Show next related intent',
- gid: 'nextIntent'
- },
- W: {
- cb: function () { tts.showSelectedIntentTraffic(); },
- tt: 'Monitor traffic of selected intent',
- gid: 'intentTraffic'
- },
-
- _keyOrder: [
- '0', 'A', 'Q', 'F', 'V', 'leftArrow', 'rightArrow', 'W'
- ]
- },
-
- hooks: {
- // hook for handling escape key
- escape: function () {
- // Must return true to consume ESC, false otherwise.
- return tts.cancelTraffic(true);
- },
-
- // hooks for when the selection changes...
- empty: function () {
- tts.cancelTraffic();
- },
- single: function (data) {
- tts.requestTrafficForMode();
- },
- multi: function (selectOrder) {
- tts.requestTrafficForMode();
- tov.addDetailButton('showRelatedTraffic');
- },
-
- // mouse hooks
- mouseover: function (m) {
- // m has id, class, and type properties
- tts.requestTrafficForMode(true);
- },
- mouseout: function () {
- tts.requestTrafficForMode(true);
- }
- }
- };
-
- // invoke code to register with the overlay service
- angular.module('ovTopo')
- .run(['$log', 'TopoOverlayService', 'TopoTrafficService',
-
- function (_$log_, _tov_, _tts_) {
- $log = _$log_;
- tov = _tov_;
- tts = _tts_;
- tov.register(overlay);
- }]);
-
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/tunnel/tunnel.css b/framework/src/onos/web/gui/src/main/webapp/app/view/tunnel/tunnel.css
deleted file mode 100644
index da7d06da..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/tunnel/tunnel.css
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Link View -- CSS file
- */
-
-#ov-tunnel h2 {
- display: inline-block;
-}
-
-#ov-tunnel div.ctrl-btns {
- width: 45px;
-} \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/tunnel/tunnel.html b/framework/src/onos/web/gui/src/main/webapp/app/view/tunnel/tunnel.html
deleted file mode 100644
index 4909cc0e..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/tunnel/tunnel.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<!-- Tunnel partial HTML -->
-<div id="ov-tunnel">
- <div class="tabular-header">
- <h2>Tunnels ({{tableData.length}} total)</h2>
- <div class="ctrl-btns">
- <div class="refresh" ng-class="{active: autoRefresh}"
- icon icon-size="36" icon-id="refresh"
- tooltip tt-msg="autoRefreshTip"
- ng-click="toggleRefresh()"></div>
- </div>
- </div>
-
- <div class="summary-list" onos-table-resize>
- <div ng-show="loading" class="loading-wheel"
- icon icon-id="loading" icon-size="75"></div>
-
- <div class="table-header" onos-sortable-header>
- <table>
- <tr>
- <td colId="id" sortable>ID </td>
- <td colId="name" sortable>Name</td>
- <td colId="one" sortable>Port 1 </td>
- <td colId="two" sortable>Port 2 </td>
- <td colId="type" sortable>Type </td>
- <td colId="group_id" sortable>Group Id</td>
- <td colId="bandwidth" sortable>Bandwidth</td>
- <td colId="path" sortable>Path</td>
- </tr>
- </table>
- </div>
-
- <div class="table-body">
- <table onos-flash-changes id-prop="one">
- <tr ng-if="!tableData.length" class="no-data">
- <td colspan="6">
- No tunnels found
- </td>
- </tr>
-
- <tr ng-repeat="tunnel in tableData track by $index"
- ng-repeat-complete row-id="{{tunnel.id}}">
- <td>{{tunnel.id}}</td>
- <td>{{tunnel.name}}</td>
- <td>{{tunnel.one}}</td>
- <td>{{tunnel.two}}</td>
- <td>{{tunnel.type}}</td>
- <td>{{tunnel.group_id}}</td>
- <td>{{tunnel.bandwidth}}</td>
- <td>{{tunnel.path}}</td>
- </tr>
- </table>
- </div>
-
- </div>
-
-</div>
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/tunnel/tunnel.js b/framework/src/onos/web/gui/src/main/webapp/app/view/tunnel/tunnel.js
deleted file mode 100644
index 5cde0457..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/tunnel/tunnel.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Host View Module
- */
-
-(function () {
- 'use strict';
-
- angular.module('ovTunnel', [])
- .controller('OvTunnelCtrl',
- ['$log', '$scope', '$sce', 'FnService', 'TableBuilderService',
-
- function ($log, $scope, $sce, fs, tbs) {
- tbs.buildTable({
- scope: $scope,
- tag: 'tunnel'
- });
-
- $scope.$watch('tableData', function () {
- if (!fs.isEmptyObject($scope.tableData)) {
- $scope.tableData.forEach(function (tunnel) {
- //tunnel.direction = $sce.trustAsHtml(tunnel.direction);
- });
- }
- });
-
- $log.log('OvTunnelCtrl has been created');
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/data/img/apple-touch-icon.png b/framework/src/onos/web/gui/src/main/webapp/data/img/apple-touch-icon.png
deleted file mode 100644
index 3bf5eb6e..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/data/img/apple-touch-icon.png
+++ /dev/null
Binary files differ
diff --git a/framework/src/onos/web/gui/src/main/webapp/data/img/nav-menu.png b/framework/src/onos/web/gui/src/main/webapp/data/img/nav-menu.png
deleted file mode 100644
index 07bbcf1b..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/data/img/nav-menu.png
+++ /dev/null
Binary files differ
diff --git a/framework/src/onos/web/gui/src/main/webapp/data/img/onos-logo-fliprotate.png b/framework/src/onos/web/gui/src/main/webapp/data/img/onos-logo-fliprotate.png
deleted file mode 100644
index 7368017f..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/data/img/onos-logo-fliprotate.png
+++ /dev/null
Binary files differ
diff --git a/framework/src/onos/web/gui/src/main/webapp/data/img/onos-logo.lg.png b/framework/src/onos/web/gui/src/main/webapp/data/img/onos-logo.lg.png
deleted file mode 100644
index afbd438c..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/data/img/onos-logo.lg.png
+++ /dev/null
Binary files differ
diff --git a/framework/src/onos/web/gui/src/main/webapp/data/img/onos-logo.png b/framework/src/onos/web/gui/src/main/webapp/data/img/onos-logo.png
deleted file mode 100644
index 8688cd6b..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/data/img/onos-logo.png
+++ /dev/null
Binary files differ
diff --git a/framework/src/onos/web/gui/src/main/webapp/data/map/README.txt b/framework/src/onos/web/gui/src/main/webapp/data/map/README.txt
deleted file mode 100644
index 5cd26346..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/data/map/README.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-see: http://bost.ocks.org/mike/map/
-
-brew install gdal
-npm install -g topojson
-
-To generate continental US map:
-
- $ wget 'http://www.naturalearthdata.com/download/50m/cultural/ne_50m_admin_1_states_provinces_lakes.zip'
- $ unzip ne_50m_admin_1_states_provinces_lakes.zip
- $ ogr2ogr -f GeoJSON -where "sr_adm0_a3 IN ('USA')" states.json ne_50m_admin_1_states_provinces_lakes.shp
-
-edit states.json to remove data for Hawaii and Alaska
-
- $ topojson states.json > topology.json
-
-
-The .shp file above is incomplete (USA and part of Candada.)
-So it may be that each region requires a bit of research to generate.
-Ideally a source for public domain shp files can be found that covers all geographic regions.
-
-
-For Canada:
-
- # wget 'http://www12.statcan.gc.ca/census-recensement/2011/geo/bound-limit/files-fichiers/gpr_000b11a_e.zip'
- # unzip gpr_000b11a_e.zip
- # ogr2ogr -f "GeoJSON" -s_srs EPSG:21781 -t_srs EPSG:4326 canada.json gpr_000b11a_e.shp
- # topojson --id-property CFSAUID -p name=PRNAME -p name canada.json > topology.json
-
-
-This produces a very large (5MB) file and draws very slowly in Chrome.
-So some additional processing is required to simplify the geometry. (It is not checked in.)
-
-Also, the specification of object structure within the geojson is unclear.
-In the US map the geojson structure is
-
- json.objects.states
-
-but in the Canadian data it's
-
- json.objects.canada
-
-
-Lastly, the projection that is used may be tailored to the region.
-The preferred projection for the US is "albers" and d3 provides a "albersUSA" which can be used to
- project hawaii and alaska as well
-
-For Canada, apparantly a "Lambert" projection (called conicConformal in d3) is preferred
-
-see:
- https://github.com/mbostock/d3/wiki/Geo-Projections
- http://www.statcan.gc.ca/pub/92-195-x/2011001/other-autre/mapproj-projcarte/m-c-eng.htm
-
-
-Summary:
-- some additional work is required to fully generalize maps functionality.
-- it may be worthwhile for ON.LAB to provide the topo files for key regions since producing these
- files is non-trivial
-
-
-
-
diff --git a/framework/src/onos/web/gui/src/main/webapp/data/map/continental_us.topojson b/framework/src/onos/web/gui/src/main/webapp/data/map/continental_us.topojson
deleted file mode 100644
index 978fbdf5..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/data/map/continental_us.topojson
+++ /dev/null
@@ -1,25782 +0,0 @@
-{
- "type": "Topology",
- "objects": {
- "states": {
- "type": "GeometryCollection",
- "geometries": [
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 0
- ]
- ],
- [
- [
- 1,
- 2,
- 3,
- 4,
- 5
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 6,
- 7,
- 8,
- 9,
- 10,
- 11
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 12,
- 13,
- 14,
- 15,
- 16
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 17
- ]
- ],
- [
- [
- 18
- ]
- ],
- [
- [
- 19
- ]
- ],
- [
- [
- 20
- ]
- ],
- [
- [
- 21
- ]
- ],
- [
- [
- 22
- ]
- ],
- [
- [
- 23,
- 24,
- -15,
- 25
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 26,
- 27,
- 28,
- 29,
- 30,
- 31
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 32,
- 33,
- 34,
- 35
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 36,
- 37
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 38,
- 39,
- 40
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 41
- ]
- ],
- [
- [
- 42
- ]
- ],
- [
- [
- 43
- ]
- ],
- [
- [
- 44
- ]
- ],
- [
- [
- 45
- ]
- ],
- [
- [
- 46
- ]
- ],
- [
- [
- 47
- ]
- ],
- [
- [
- 48
- ]
- ],
- [
- [
- 49
- ]
- ],
- [
- [
- 50
- ]
- ],
- [
- [
- 51
- ]
- ],
- [
- [
- 52,
- -6,
- 53
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 54
- ]
- ],
- [
- [
- 55,
- -54,
- -5,
- 56,
- 57,
- 58
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 59,
- 60,
- 61,
- 62,
- 63,
- 64
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 65,
- 66,
- 67,
- 68,
- 69,
- 70,
- 71
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 72,
- 73,
- 74,
- 75,
- -60,
- 76
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 77,
- 78,
- -74,
- 79,
- 80
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 81,
- -27,
- 82,
- 83
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 84,
- 85
- ]
- ],
- [
- [
- 86,
- 87,
- 88,
- 89,
- -75,
- -79,
- 90
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 91
- ]
- ],
- [
- [
- 92
- ]
- ],
- [
- [
- 93
- ]
- ],
- [
- [
- 94
- ]
- ],
- [
- [
- 95,
- 96,
- -9,
- 97
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 98
- ]
- ],
- [
- [
- 99
- ]
- ],
- [
- [
- 100,
- -36,
- 101,
- 102,
- 103,
- 104
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 105,
- 106
- ]
- ],
- [
- [
- -40,
- 107,
- 108,
- 109,
- -38,
- 110,
- 111,
- 112
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 113
- ]
- ],
- [
- [
- 114
- ]
- ],
- [
- [
- 115,
- 116
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 117
- ]
- ],
- [
- [
- 118
- ]
- ],
- [
- [
- 119,
- -81,
- 120
- ]
- ],
- [
- [
- 121
- ]
- ],
- [
- [
- 122
- ]
- ],
- [
- [
- 123
- ]
- ],
- [
- [
- 124
- ]
- ],
- [
- [
- 125,
- 126
- ]
- ],
- [
- [
- 127
- ]
- ],
- [
- [
- 128
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 129,
- -64,
- 130,
- 131,
- 132
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- -76,
- -90,
- 133,
- -86,
- 134,
- -12,
- 135,
- -84,
- 136,
- -61
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 137
- ]
- ],
- [
- [
- 138,
- -98,
- -8,
- 139,
- -3
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 140,
- 141,
- -72,
- 142,
- 143
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 144
- ]
- ],
- [
- [
- 145
- ]
- ],
- [
- [
- 146
- ]
- ],
- [
- [
- 147
- ]
- ],
- [
- [
- 148
- ]
- ],
- [
- [
- 149,
- 150
- ]
- ],
- [
- [
- 151,
- -58,
- 152,
- 153,
- 154
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 155,
- -144,
- 156,
- -132
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- -62,
- -137,
- -83,
- -32,
- 157,
- 158
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 159,
- -104,
- 160,
- 161,
- -116
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 162
- ]
- ],
- [
- [
- 163,
- 164,
- 165
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 166,
- 167,
- -13,
- -29,
- 168
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- -16,
- -25,
- 169,
- -68,
- 170
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 171
- ]
- ],
- [
- [
- 172
- ]
- ],
- [
- [
- 173
- ]
- ],
- [
- [
- 174
- ]
- ],
- [
- [
- 175
- ]
- ],
- [
- [
- 176,
- -102,
- -35,
- 177,
- -165,
- 178,
- 179
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 180,
- -91,
- -78,
- -120,
- 181,
- 182
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- -11,
- 183,
- -169,
- -28,
- -82,
- -136
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 184,
- -69,
- -170,
- -24,
- 185
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- -164,
- 186,
- -41,
- -113,
- 187,
- -183,
- 188,
- -179
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 189
- ]
- ],
- [
- [
- 190
- ]
- ],
- [
- [
- 191,
- -33,
- -101
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 192,
- -59,
- -152
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- -131,
- -63,
- -159,
- 193,
- -141,
- -156
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 194,
- -153,
- -57,
- -4,
- -140,
- -7,
- -135,
- -85,
- -134,
- -89
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 195
- ]
- ],
- [
- [
- 196
- ]
- ],
- [
- [
- 197
- ]
- ],
- [
- [
- 198
- ]
- ],
- [
- [
- 199
- ]
- ],
- [
- [
- -10,
- -97,
- 200,
- -167,
- -184
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- 201,
- -30,
- -17,
- -171,
- -67
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- -109,
- 202
- ]
- ],
- [
- [
- -106,
- 203
- ]
- ],
- [
- [
- -111,
- -37,
- 204,
- -150,
- 205,
- -154,
- -195,
- -88,
- 206
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- -103,
- -177,
- 207,
- -161
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 208
- ]
- ],
- [
- [
- 209
- ]
- ],
- [
- [
- 210
- ]
- ],
- [
- [
- 211
- ]
- ],
- [
- [
- 212
- ]
- ],
- [
- [
- 213
- ]
- ],
- [
- [
- 214
- ]
- ],
- [
- [
- 215
- ]
- ],
- [
- [
- -185,
- 216,
- -70
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "arcs": [
- [
- [
- 217
- ]
- ],
- [
- [
- 218
- ]
- ],
- [
- [
- 219
- ]
- ],
- [
- [
- 220
- ]
- ],
- [
- [
- -126,
- 221,
- -77,
- -65,
- -130,
- 222
- ]
- ],
- [
- [
- 223
- ]
- ],
- [
- [
- 224
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- -112,
- -207,
- -87,
- -181,
- -188
- ]
- ]
- },
- {
- "type": "Polygon",
- "arcs": [
- [
- -158,
- -31,
- -202,
- -66,
- -142,
- -194
- ]
- ]
- }
- ]
- }
- },
- "arcs": [
- [
- [
- 6347,
- 2300
- ],
- [
- -16,
- -9
- ],
- [
- -22,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- 9,
- 6
- ],
- [
- 27,
- 7
- ],
- [
- 7,
- -8
- ]
- ],
- [
- [
- 6447,
- 2350
- ],
- [
- -4,
- -4
- ],
- [
- -19,
- -41
- ],
- [
- -66,
- -14
- ],
- [
- 4,
- 9
- ],
- [
- 14,
- 2
- ],
- [
- 19,
- 14
- ],
- [
- -4,
- 22
- ],
- [
- -7,
- 24
- ],
- [
- -7,
- 3
- ],
- [
- -5,
- 14
- ],
- [
- 0,
- 45
- ],
- [
- -4,
- 27
- ],
- [
- -11,
- 27
- ],
- [
- -4,
- -6
- ],
- [
- -8,
- -46
- ],
- [
- -6,
- -61
- ],
- [
- -3,
- -19
- ],
- [
- -20,
- -2
- ],
- [
- -18,
- 4
- ],
- [
- -8,
- -1
- ]
- ],
- [
- [
- 6290,
- 2347
- ],
- [
- -2,
- 83
- ],
- [
- -2,
- 76
- ],
- [
- -2,
- 75
- ],
- [
- -2,
- 76
- ],
- [
- -2,
- 76
- ],
- [
- -2,
- 75
- ],
- [
- -1,
- 76
- ],
- [
- -2,
- 75
- ],
- [
- 4,
- 75
- ],
- [
- 4,
- 74
- ],
- [
- 5,
- 75
- ],
- [
- 4,
- 74
- ],
- [
- 4,
- 74
- ],
- [
- 4,
- 75
- ],
- [
- 4,
- 74
- ],
- [
- 5,
- 75
- ],
- [
- 4,
- 74
- ],
- [
- 4,
- 74
- ],
- [
- 4,
- 75
- ],
- [
- 5,
- 74
- ],
- [
- 4,
- 75
- ],
- [
- 4,
- 74
- ],
- [
- 4,
- 74
- ],
- [
- 4,
- 75
- ],
- [
- 2,
- 19
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 10
- ],
- [
- -15,
- 26
- ]
- ],
- [
- [
- 6329,
- 4211
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 28,
- -1
- ],
- [
- 28,
- 0
- ],
- [
- 27,
- -1
- ],
- [
- 28,
- -1
- ],
- [
- 28,
- 0
- ],
- [
- 28,
- -1
- ],
- [
- 28,
- 0
- ],
- [
- 27,
- -1
- ],
- [
- 28,
- -1
- ],
- [
- 28,
- 0
- ],
- [
- 28,
- -1
- ],
- [
- 28,
- 0
- ],
- [
- 27,
- -1
- ],
- [
- 28,
- -1
- ],
- [
- 28,
- 0
- ],
- [
- 28,
- -1
- ]
- ],
- [
- [
- 6771,
- 4212
- ],
- [
- 4,
- -51
- ],
- [
- 5,
- -52
- ],
- [
- 4,
- -51
- ],
- [
- 5,
- -52
- ],
- [
- 5,
- -51
- ],
- [
- 4,
- -52
- ],
- [
- 5,
- -51
- ],
- [
- 4,
- -52
- ],
- [
- 5,
- -51
- ],
- [
- 4,
- -52
- ],
- [
- 5,
- -51
- ],
- [
- 5,
- -52
- ],
- [
- 4,
- -51
- ],
- [
- 5,
- -51
- ],
- [
- 4,
- -52
- ],
- [
- 5,
- -51
- ],
- [
- 4,
- -24
- ],
- [
- 4,
- -38
- ],
- [
- 24,
- -112
- ],
- [
- 7,
- -47
- ],
- [
- -2,
- -19
- ],
- [
- 3,
- -17
- ],
- [
- 8,
- -13
- ],
- [
- -1,
- -16
- ],
- [
- -11,
- -18
- ],
- [
- -7,
- -22
- ],
- [
- -5,
- -39
- ],
- [
- -11,
- -69
- ],
- [
- 0,
- -41
- ],
- [
- 10,
- -57
- ],
- [
- 2,
- -26
- ],
- [
- -6,
- -111
- ],
- [
- 4,
- -72
- ],
- [
- 10,
- -47
- ]
- ],
- [
- [
- 6877,
- 2601
- ],
- [
- -55,
- 0
- ],
- [
- -56,
- 0
- ],
- [
- -56,
- 0
- ],
- [
- -56,
- 0
- ],
- [
- -57,
- 0
- ],
- [
- -56,
- 0
- ],
- [
- -56,
- 0
- ],
- [
- -56,
- 0
- ],
- [
- -2,
- -29
- ],
- [
- 1,
- -27
- ],
- [
- 6,
- -27
- ],
- [
- 25,
- -49
- ],
- [
- 3,
- -13
- ],
- [
- -5,
- -38
- ],
- [
- 1,
- -28
- ],
- [
- -3,
- -14
- ],
- [
- -6,
- -12
- ],
- [
- -2,
- -14
- ]
- ],
- [
- [
- 6064,
- 4615
- ],
- [
- -1,
- -7
- ],
- [
- 3,
- -16
- ],
- [
- 0,
- -9
- ],
- [
- -2,
- -6
- ],
- [
- -6,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -7
- ],
- [
- -3,
- -9
- ],
- [
- -20,
- -22
- ],
- [
- -9,
- -29
- ],
- [
- 3,
- -35
- ],
- [
- -7,
- -36
- ],
- [
- -17,
- -35
- ],
- [
- -7,
- -41
- ],
- [
- 3,
- -44
- ],
- [
- -9,
- -36
- ],
- [
- -20,
- -28
- ],
- [
- -6,
- -16
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5962,
- 4212
- ],
- [
- 0,
- -12
- ],
- [
- 2,
- -10
- ],
- [
- -7,
- -19
- ],
- [
- -16,
- -19
- ],
- [
- -9,
- -19
- ],
- [
- -2,
- -18
- ],
- [
- -4,
- -9
- ],
- [
- -7,
- -4
- ],
- [
- -4,
- -27
- ],
- [
- -4,
- -63
- ],
- [
- -8,
- -36
- ],
- [
- -15,
- -9
- ],
- [
- -7,
- -14
- ],
- [
- -1,
- -20
- ],
- [
- -9,
- -22
- ],
- [
- -16,
- -26
- ],
- [
- -5,
- -24
- ],
- [
- 5,
- -23
- ],
- [
- -1,
- -9
- ],
- [
- -5,
- -8
- ],
- [
- -17,
- -11
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- 4,
- -12
- ],
- [
- 2,
- -18
- ],
- [
- -3,
- -29
- ],
- [
- -4,
- -13
- ],
- [
- -4,
- -12
- ],
- [
- -15,
- -21
- ],
- [
- -4,
- -16
- ],
- [
- 7,
- -11
- ],
- [
- -1,
- -12
- ],
- [
- -7,
- -14
- ],
- [
- 2,
- -14
- ],
- [
- 2,
- -10
- ],
- [
- 7,
- -9
- ],
- [
- 2,
- -25
- ],
- [
- -5,
- -32
- ],
- [
- 1,
- -26
- ],
- [
- 8,
- -22
- ],
- [
- 2,
- -9
- ],
- [
- -8,
- -71
- ],
- [
- 0,
- -10
- ]
- ],
- [
- [
- 5813,
- 3413
- ],
- [
- -34,
- -1
- ],
- [
- -31,
- 0
- ],
- [
- -31,
- 0
- ],
- [
- -31,
- 0
- ],
- [
- -31,
- 0
- ],
- [
- -31,
- 0
- ],
- [
- -31,
- 0
- ],
- [
- -31,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -31,
- 0
- ],
- [
- -31,
- 0
- ],
- [
- -31,
- -1
- ],
- [
- -31,
- 0
- ],
- [
- -31,
- 0
- ],
- [
- -31,
- 0
- ],
- [
- -31,
- 0
- ]
- ],
- [
- [
- 5313,
- 3411
- ],
- [
- -1,
- 55
- ],
- [
- 0,
- 54
- ],
- [
- 0,
- 55
- ],
- [
- 0,
- 55
- ],
- [
- -9,
- 9
- ],
- [
- -16,
- 4
- ],
- [
- -9,
- -3
- ],
- [
- -9,
- 3
- ],
- [
- -7,
- -9
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 8
- ],
- [
- -7,
- 6
- ],
- [
- -9,
- 19
- ]
- ],
- [
- [
- 5236,
- 3667
- ],
- [
- 0,
- 44
- ],
- [
- 1,
- 44
- ],
- [
- 0,
- 44
- ],
- [
- 1,
- 43
- ],
- [
- 0,
- 44
- ],
- [
- 1,
- 44
- ],
- [
- 0,
- 44
- ],
- [
- 1,
- 44
- ],
- [
- 0,
- 43
- ],
- [
- 1,
- 44
- ],
- [
- 0,
- 44
- ],
- [
- 1,
- 44
- ],
- [
- 0,
- 43
- ],
- [
- 1,
- 44
- ],
- [
- 0,
- 44
- ],
- [
- 1,
- 44
- ],
- [
- -4,
- 56
- ],
- [
- -4,
- 56
- ],
- [
- -4,
- 56
- ],
- [
- -4,
- 56
- ],
- [
- -4,
- 56
- ],
- [
- -4,
- 56
- ],
- [
- -4,
- 56
- ],
- [
- -3,
- 56
- ]
- ],
- [
- [
- 5213,
- 4816
- ],
- [
- 48,
- 0
- ],
- [
- 48,
- 0
- ],
- [
- 48,
- 0
- ],
- [
- 49,
- 0
- ],
- [
- 48,
- 0
- ],
- [
- 48,
- 0
- ],
- [
- 48,
- 0
- ],
- [
- 49,
- 0
- ],
- [
- 48,
- 0
- ],
- [
- 48,
- 0
- ],
- [
- 48,
- 0
- ],
- [
- 49,
- 0
- ],
- [
- 48,
- 0
- ],
- [
- 48,
- 0
- ],
- [
- 48,
- 0
- ],
- [
- 49,
- 0
- ],
- [
- 7,
- -31
- ],
- [
- 8,
- -21
- ],
- [
- 1,
- -15
- ],
- [
- -2,
- -15
- ],
- [
- -12,
- -33
- ],
- [
- -12,
- -15
- ],
- [
- -6,
- -16
- ],
- [
- -9,
- -15
- ],
- [
- -13,
- -43
- ],
- [
- 28,
- 0
- ],
- [
- 29,
- 1
- ],
- [
- 28,
- 1
- ],
- [
- 32,
- 1
- ]
- ],
- [
- [
- 2713,
- 5018
- ],
- [
- 0,
- -143
- ],
- [
- 0,
- -143
- ],
- [
- 0,
- -143
- ],
- [
- 0,
- -143
- ],
- [
- 0,
- -142
- ],
- [
- 0,
- -143
- ],
- [
- 0,
- -143
- ],
- [
- 0,
- -143
- ],
- [
- 0,
- -142
- ],
- [
- 0,
- -143
- ],
- [
- 0,
- -143
- ],
- [
- 0,
- -143
- ],
- [
- 0,
- -143
- ],
- [
- 0,
- -142
- ],
- [
- 0,
- -143
- ],
- [
- 0,
- -143
- ]
- ],
- [
- [
- 2713,
- 2733
- ],
- [
- -39,
- 0
- ],
- [
- -61,
- -1
- ],
- [
- -62,
- 0
- ],
- [
- -61,
- 0
- ],
- [
- -61,
- 0
- ],
- [
- -61,
- -1
- ],
- [
- -83,
- 60
- ],
- [
- -82,
- 60
- ],
- [
- -82,
- 59
- ],
- [
- -82,
- 60
- ],
- [
- -82,
- 59
- ],
- [
- -82,
- 60
- ],
- [
- -82,
- 60
- ],
- [
- -83,
- 59
- ],
- [
- 9,
- 23
- ],
- [
- 11,
- 61
- ]
- ],
- [
- [
- 1730,
- 3292
- ],
- [
- 0,
- 3
- ],
- [
- 24,
- 4
- ],
- [
- 12,
- 16
- ],
- [
- 7,
- 28
- ],
- [
- 1,
- 28
- ],
- [
- -4,
- 29
- ],
- [
- -10,
- 21
- ],
- [
- -17,
- 14
- ],
- [
- -10,
- 40
- ],
- [
- -2,
- 65
- ],
- [
- 3,
- 35
- ],
- [
- 8,
- 5
- ],
- [
- 9,
- 16
- ],
- [
- 8,
- 26
- ],
- [
- 6,
- 29
- ],
- [
- 4,
- 31
- ],
- [
- 0,
- 40
- ],
- [
- -2,
- 48
- ],
- [
- 16,
- 60
- ],
- [
- 15,
- 36
- ],
- [
- 29,
- 45
- ],
- [
- 6,
- 13
- ],
- [
- 1,
- 11
- ],
- [
- 0,
- 2
- ],
- [
- -6,
- 15
- ],
- [
- -26,
- 31
- ],
- [
- -11,
- 23
- ],
- [
- -1,
- 20
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 19
- ],
- [
- -27,
- 83
- ],
- [
- -10,
- 45
- ],
- [
- 0,
- 34
- ]
- ],
- [
- [
- 1749,
- 4208
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 143
- ],
- [
- -10,
- 49
- ],
- [
- -2,
- 28
- ],
- [
- 2,
- 35
- ],
- [
- 0,
- 21
- ],
- [
- -5,
- 19
- ],
- [
- -1,
- 33
- ],
- [
- -1,
- 42
- ],
- [
- -8,
- 27
- ],
- [
- -1,
- 12
- ],
- [
- 4,
- 29
- ],
- [
- 8,
- 15
- ],
- [
- 14,
- 10
- ],
- [
- 15,
- 3
- ],
- [
- 17,
- -3
- ],
- [
- 13,
- -13
- ],
- [
- 8,
- -22
- ],
- [
- 9,
- -12
- ],
- [
- 8,
- 0
- ],
- [
- 12,
- 18
- ],
- [
- 10,
- 40
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 173
- ],
- [
- 0,
- 158
- ]
- ],
- [
- [
- 1848,
- 5019
- ],
- [
- 54,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 55,
- 0
- ],
- [
- 54,
- -1
- ],
- [
- 54,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 54,
- 0
- ]
- ],
- [
- [
- 1102,
- 3337
- ],
- [
- -10,
- -4
- ],
- [
- -12,
- 8
- ],
- [
- -9,
- 39
- ],
- [
- -11,
- 31
- ],
- [
- 6,
- 8
- ],
- [
- 8,
- -29
- ],
- [
- 22,
- -44
- ],
- [
- 6,
- -9
- ]
- ],
- [
- [
- 913,
- 3494
- ],
- [
- -7,
- -1
- ],
- [
- -11,
- 4
- ],
- [
- -6,
- 21
- ],
- [
- 9,
- 2
- ],
- [
- 8,
- -3
- ],
- [
- 7,
- -17
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 1102,
- 3562
- ],
- [
- 9,
- -30
- ],
- [
- -13,
- 4
- ],
- [
- -13,
- -2
- ],
- [
- -4,
- 16
- ],
- [
- -4,
- 23
- ],
- [
- -3,
- 5
- ],
- [
- -9,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 11
- ],
- [
- 2,
- 5
- ],
- [
- 28,
- -25
- ],
- [
- 8,
- -11
- ]
- ],
- [
- [
- 808,
- 3776
- ],
- [
- -12,
- -5
- ],
- [
- -9,
- 5
- ],
- [
- -15,
- 39
- ],
- [
- 31,
- 5
- ],
- [
- 14,
- -17
- ],
- [
- 2,
- -5
- ],
- [
- -11,
- -22
- ]
- ],
- [
- [
- 763,
- 3819
- ],
- [
- -9,
- -1
- ],
- [
- -15,
- 4
- ],
- [
- 5,
- 10
- ],
- [
- 8,
- 7
- ],
- [
- 3,
- -6
- ],
- [
- 8,
- -14
- ]
- ],
- [
- [
- 836,
- 3841
- ],
- [
- 36,
- -21
- ],
- [
- 19,
- 10
- ],
- [
- 3,
- -10
- ],
- [
- -2,
- -8
- ],
- [
- -43,
- -16
- ],
- [
- -13,
- 11
- ],
- [
- -1,
- 15
- ],
- [
- -5,
- 14
- ],
- [
- 6,
- 5
- ]
- ],
- [
- [
- 83,
- 7031
- ],
- [
- 48,
- 0
- ],
- [
- 45,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 45,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 45,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 45,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 45,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 46,
- 0
- ]
- ],
- [
- [
- 816,
- 7031
- ],
- [
- 0,
- -75
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -75
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -75
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -75
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -75
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -75
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -75
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -75
- ],
- [
- 40,
- -66
- ],
- [
- 41,
- -66
- ],
- [
- 41,
- -66
- ],
- [
- 40,
- -66
- ],
- [
- 41,
- -65
- ],
- [
- 40,
- -66
- ],
- [
- 41,
- -66
- ],
- [
- 40,
- -66
- ],
- [
- 32,
- -55
- ],
- [
- 32,
- -56
- ],
- [
- 32,
- -55
- ],
- [
- 31,
- -56
- ],
- [
- 32,
- -55
- ],
- [
- 32,
- -56
- ],
- [
- 32,
- -55
- ],
- [
- 32,
- -56
- ],
- [
- 44,
- -80
- ],
- [
- 43,
- -80
- ],
- [
- 44,
- -79
- ],
- [
- 44,
- -80
- ],
- [
- 44,
- -80
- ],
- [
- 44,
- -80
- ],
- [
- 44,
- -80
- ],
- [
- 47,
- -85
- ]
- ],
- [
- [
- 1730,
- 3292
- ],
- [
- -20,
- -5
- ],
- [
- -50,
- -8
- ],
- [
- -49,
- -9
- ],
- [
- -50,
- -9
- ],
- [
- -49,
- -8
- ],
- [
- -50,
- -9
- ],
- [
- -50,
- -8
- ],
- [
- -49,
- -9
- ],
- [
- -50,
- -9
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 44
- ],
- [
- -8,
- 16
- ],
- [
- -11,
- -10
- ],
- [
- -4,
- 57
- ],
- [
- 2,
- 27
- ],
- [
- -1,
- 27
- ],
- [
- -10,
- 65
- ],
- [
- -25,
- 78
- ],
- [
- -56,
- 98
- ],
- [
- -28,
- 33
- ],
- [
- -23,
- 41
- ],
- [
- -14,
- 12
- ],
- [
- -17,
- 3
- ],
- [
- -6,
- -19
- ],
- [
- -20,
- 13
- ],
- [
- 3,
- 46
- ],
- [
- -19,
- 64
- ],
- [
- -16,
- 7
- ],
- [
- -41,
- -4
- ],
- [
- -54,
- 35
- ],
- [
- -16,
- 21
- ],
- [
- -5,
- 38
- ],
- [
- -26,
- 32
- ],
- [
- -33,
- 32
- ],
- [
- -18,
- -7
- ],
- [
- -25,
- 5
- ],
- [
- -34,
- 23
- ],
- [
- -20,
- 3
- ],
- [
- -40,
- -7
- ],
- [
- -14,
- 5
- ],
- [
- -14,
- 29
- ],
- [
- -15,
- 15
- ],
- [
- 3,
- 35
- ],
- [
- -2,
- 33
- ],
- [
- 3,
- 25
- ],
- [
- -7,
- 55
- ],
- [
- 5,
- 52
- ],
- [
- -4,
- 18
- ],
- [
- -9,
- 14
- ],
- [
- -26,
- 21
- ],
- [
- -4,
- 26
- ],
- [
- 4,
- 37
- ],
- [
- -7,
- 24
- ],
- [
- -21,
- 22
- ],
- [
- -20,
- 51
- ],
- [
- -26,
- 28
- ],
- [
- -10,
- 47
- ],
- [
- -15,
- 29
- ],
- [
- -6,
- 25
- ],
- [
- -34,
- 92
- ],
- [
- -37,
- 71
- ],
- [
- -6,
- 41
- ],
- [
- -1,
- 56
- ],
- [
- 14,
- 34
- ],
- [
- 8,
- 30
- ],
- [
- -1,
- 28
- ],
- [
- -2,
- 20
- ],
- [
- -13,
- 36
- ],
- [
- -49,
- 21
- ],
- [
- -40,
- 87
- ],
- [
- -2,
- 67
- ],
- [
- -16,
- 68
- ],
- [
- 0,
- 44
- ],
- [
- -3,
- 48
- ],
- [
- 12,
- 11
- ],
- [
- 11,
- -4
- ],
- [
- -1,
- -19
- ],
- [
- 3,
- -35
- ],
- [
- 13,
- -25
- ],
- [
- 12,
- -12
- ],
- [
- 11,
- -25
- ],
- [
- 8,
- -7
- ],
- [
- 8,
- -2
- ],
- [
- -4,
- 16
- ],
- [
- -5,
- 10
- ],
- [
- -6,
- 34
- ],
- [
- -11,
- 42
- ],
- [
- -13,
- 24
- ],
- [
- -6,
- 42
- ],
- [
- -6,
- 10
- ],
- [
- -3,
- 16
- ],
- [
- 12,
- 19
- ],
- [
- 17,
- 13
- ],
- [
- 22,
- 4
- ],
- [
- 64,
- -6
- ],
- [
- 14,
- 11
- ],
- [
- 11,
- -4
- ],
- [
- 9,
- 1
- ],
- [
- -18,
- 12
- ],
- [
- -10,
- -4
- ],
- [
- -11,
- 2
- ],
- [
- -23,
- -2
- ],
- [
- -9,
- 5
- ],
- [
- -10,
- 13
- ],
- [
- -7,
- 2
- ],
- [
- -21,
- -24
- ],
- [
- -10,
- 3
- ],
- [
- -22,
- 26
- ],
- [
- -10,
- 3
- ],
- [
- -15,
- -14
- ],
- [
- -2,
- -63
- ],
- [
- 5,
- -46
- ],
- [
- -10,
- -5
- ],
- [
- -11,
- 19
- ],
- [
- -16,
- 12
- ],
- [
- -14,
- 17
- ],
- [
- -20,
- 32
- ],
- [
- -10,
- 12
- ],
- [
- -12,
- -27
- ],
- [
- 0,
- 13
- ],
- [
- 6,
- 31
- ],
- [
- -2,
- 53
- ],
- [
- 18,
- -42
- ],
- [
- -6,
- 29
- ],
- [
- -13,
- 33
- ],
- [
- -11,
- 11
- ],
- [
- -13,
- 58
- ],
- [
- -29,
- 35
- ],
- [
- -23,
- 56
- ],
- [
- -48,
- 93
- ],
- [
- -3,
- 82
- ],
- [
- -18,
- 104
- ],
- [
- 7,
- 59
- ],
- [
- -1,
- 42
- ],
- [
- -8,
- 63
- ],
- [
- -9,
- 34
- ],
- [
- -39,
- 95
- ],
- [
- -37,
- 63
- ],
- [
- -6,
- 48
- ],
- [
- -2,
- 48
- ],
- [
- 8,
- 43
- ],
- [
- 7,
- 46
- ],
- [
- 5,
- 12
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -10
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- 20
- ],
- [
- 3,
- 10
- ],
- [
- -6,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 13
- ],
- [
- 12,
- 59
- ],
- [
- -1,
- 75
- ],
- [
- 12,
- 92
- ],
- [
- 0,
- 30
- ],
- [
- -8,
- 66
- ],
- [
- -8,
- 39
- ],
- [
- -14,
- 28
- ],
- [
- 6,
- 40
- ],
- [
- -1,
- 39
- ],
- [
- -3,
- 6
- ]
- ],
- [
- [
- 3930,
- 6226
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -75
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -75
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -75
- ],
- [
- 1,
- -76
- ],
- [
- 0,
- -75
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -75
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -75
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -75
- ],
- [
- 1,
- -76
- ],
- [
- 0,
- -75
- ]
- ],
- [
- [
- 3932,
- 5018
- ],
- [
- -43,
- 0
- ],
- [
- -43,
- 0
- ],
- [
- -43,
- 0
- ],
- [
- -42,
- 0
- ]
- ],
- [
- [
- 3761,
- 5018
- ],
- [
- -66,
- 0
- ],
- [
- -65,
- 0
- ],
- [
- -66,
- 0
- ],
- [
- -65,
- 0
- ],
- [
- -66,
- 0
- ],
- [
- -65,
- 0
- ],
- [
- -66,
- 0
- ],
- [
- -65,
- 0
- ],
- [
- -66,
- 0
- ],
- [
- -65,
- 0
- ],
- [
- -65,
- 0
- ],
- [
- -66,
- 0
- ],
- [
- -65,
- 0
- ],
- [
- -66,
- 0
- ],
- [
- -65,
- 0
- ],
- [
- -66,
- 0
- ]
- ],
- [
- [
- 2713,
- 5018
- ],
- [
- 0,
- 100
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 100
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 100
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 100
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 100
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 101
- ]
- ],
- [
- [
- 2713,
- 6629
- ],
- [
- 55,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 55,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 55,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 55,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 55,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 55,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 54,
- 0
- ],
- [
- 55,
- 0
- ]
- ],
- [
- [
- 3584,
- 6629
- ],
- [
- 43,
- 0
- ],
- [
- 43,
- 0
- ],
- [
- 43,
- 0
- ],
- [
- 44,
- -1
- ],
- [
- 43,
- 0
- ],
- [
- 43,
- 0
- ],
- [
- 43,
- 0
- ],
- [
- 44,
- 0
- ],
- [
- 0,
- -50
- ],
- [
- 0,
- -50
- ],
- [
- 0,
- -51
- ],
- [
- 0,
- -50
- ],
- [
- 0,
- -50
- ],
- [
- 0,
- -50
- ],
- [
- 0,
- -51
- ],
- [
- 0,
- -50
- ]
- ],
- [
- [
- 9165,
- 7036
- ],
- [
- 0,
- -22
- ],
- [
- 0,
- -30
- ],
- [
- 0,
- -22
- ],
- [
- 1,
- -31
- ],
- [
- 0,
- -34
- ],
- [
- 0,
- -32
- ],
- [
- 0,
- -27
- ],
- [
- -1,
- -17
- ],
- [
- -1,
- -25
- ],
- [
- -4,
- -10
- ],
- [
- -2,
- -23
- ]
- ],
- [
- [
- 9158,
- 6763
- ],
- [
- -15,
- 3
- ],
- [
- -25,
- -6
- ],
- [
- -33,
- -14
- ],
- [
- -19,
- 8
- ],
- [
- -18,
- -15
- ],
- [
- -64,
- -4
- ],
- [
- -14,
- 8
- ],
- [
- -17,
- -28
- ],
- [
- -27,
- -16
- ],
- [
- -70,
- -62
- ],
- [
- -8,
- -12
- ]
- ],
- [
- [
- 8848,
- 6625
- ],
- [
- -9,
- 25
- ],
- [
- -7,
- 20
- ],
- [
- 14,
- 16
- ],
- [
- 11,
- 12
- ],
- [
- 10,
- 11
- ],
- [
- 7,
- 7
- ],
- [
- -6,
- 16
- ],
- [
- -5,
- 15
- ],
- [
- 1,
- 39
- ],
- [
- 2,
- 38
- ],
- [
- 1,
- 38
- ],
- [
- 2,
- 38
- ],
- [
- 1,
- 39
- ],
- [
- 1,
- 38
- ],
- [
- 2,
- 38
- ],
- [
- 1,
- 38
- ]
- ],
- [
- [
- 8874,
- 7053
- ],
- [
- 15,
- -1
- ],
- [
- 14,
- -1
- ],
- [
- 15,
- -1
- ],
- [
- 14,
- -1
- ],
- [
- 15,
- -1
- ],
- [
- 15,
- -1
- ],
- [
- 14,
- -1
- ],
- [
- 15,
- -1
- ],
- [
- 0,
- -11
- ],
- [
- 7,
- 1
- ],
- [
- 1,
- 10
- ],
- [
- 21,
- -1
- ],
- [
- 21,
- 0
- ],
- [
- 20,
- -1
- ],
- [
- 21,
- -1
- ],
- [
- 21,
- 0
- ],
- [
- 21,
- -1
- ],
- [
- 20,
- 0
- ],
- [
- 21,
- -1
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 8259,
- 5778
- ],
- [
- -4,
- 11
- ],
- [
- -8,
- 8
- ],
- [
- -4,
- 3
- ]
- ],
- [
- [
- 8243,
- 5800
- ],
- [
- 14,
- 27
- ],
- [
- 9,
- -23
- ],
- [
- 10,
- -26
- ],
- [
- -15,
- -33
- ],
- [
- -2,
- 33
- ]
- ],
- [
- [
- 8538,
- 6151
- ],
- [
- -7,
- -14
- ],
- [
- -7,
- -25
- ],
- [
- -15,
- -31
- ],
- [
- 1,
- -21
- ],
- [
- 3,
- -15
- ],
- [
- -1,
- -30
- ],
- [
- 9,
- -30
- ],
- [
- 18,
- -49
- ],
- [
- 4,
- -76
- ],
- [
- 14,
- -51
- ],
- [
- 22,
- -59
- ],
- [
- 17,
- -17
- ],
- [
- 0,
- -22
- ],
- [
- -7,
- -36
- ],
- [
- -10,
- -17
- ],
- [
- 13,
- 3
- ],
- [
- 6,
- -8
- ],
- [
- 7,
- -30
- ],
- [
- -1,
- -20
- ]
- ],
- [
- [
- 8604,
- 5603
- ],
- [
- -18,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -39,
- 0
- ],
- [
- -17,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 64
- ],
- [
- -2,
- 64
- ],
- [
- -2,
- 64
- ],
- [
- -1,
- 63
- ],
- [
- -2,
- 64
- ],
- [
- -2,
- 64
- ],
- [
- -1,
- 64
- ],
- [
- -2,
- 64
- ]
- ],
- [
- [
- 8475,
- 6114
- ],
- [
- 13,
- 32
- ],
- [
- 6,
- 10
- ],
- [
- 7,
- 5
- ],
- [
- 22,
- 1
- ],
- [
- 15,
- -11
- ]
- ],
- [
- [
- 7436,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- 0,
- 6
- ],
- [
- 8,
- 8
- ],
- [
- 5,
- -1
- ],
- [
- -1,
- -8
- ],
- [
- -7,
- -4
- ]
- ],
- [
- [
- 7473,
- 23
- ],
- [
- -11,
- -4
- ],
- [
- 9,
- 16
- ],
- [
- 3,
- 24
- ],
- [
- 6,
- -19
- ],
- [
- -1,
- -11
- ],
- [
- -6,
- -6
- ]
- ],
- [
- [
- 7514,
- 44
- ],
- [
- -6,
- -9
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 12
- ],
- [
- -7,
- 27
- ],
- [
- 0,
- 7
- ],
- [
- 17,
- -27
- ],
- [
- 0,
- -7
- ],
- [
- -2,
- -6
- ]
- ],
- [
- [
- 7564,
- 70
- ],
- [
- -8,
- -9
- ],
- [
- -8,
- 7
- ],
- [
- 9,
- 9
- ],
- [
- 27,
- 10
- ],
- [
- -10,
- -12
- ],
- [
- -10,
- -5
- ]
- ],
- [
- [
- 7601,
- 105
- ],
- [
- -3,
- 0
- ],
- [
- 2,
- 6
- ],
- [
- 6,
- 11
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- -8,
- -7
- ]
- ],
- [
- [
- 7634,
- 145
- ],
- [
- -4,
- -2
- ],
- [
- 6,
- 18
- ],
- [
- 2,
- -2
- ],
- [
- -4,
- -14
- ]
- ],
- [
- [
- 7679,
- 242
- ],
- [
- -35,
- -76
- ],
- [
- 4,
- 19
- ],
- [
- 14,
- 40
- ],
- [
- 4,
- 19
- ],
- [
- 9,
- 13
- ],
- [
- 8,
- 21
- ],
- [
- 1,
- 26
- ],
- [
- 12,
- 18
- ],
- [
- 4,
- 2
- ],
- [
- -21,
- -82
- ]
- ],
- [
- [
- 7392,
- 770
- ],
- [
- -6,
- -11
- ],
- [
- -13,
- 8
- ],
- [
- -7,
- 14
- ],
- [
- -2,
- 27
- ],
- [
- 10,
- -29
- ],
- [
- 4,
- -6
- ],
- [
- 14,
- -3
- ]
- ],
- [
- [
- 7384,
- 810
- ],
- [
- 0,
- -24
- ],
- [
- -9,
- 39
- ],
- [
- -6,
- 44
- ],
- [
- 8,
- -14
- ],
- [
- 7,
- -45
- ]
- ],
- [
- [
- 7712,
- 1102
- ],
- [
- 3,
- -30
- ],
- [
- -16,
- 69
- ],
- [
- -19,
- 108
- ],
- [
- -11,
- 83
- ],
- [
- 7,
- -22
- ],
- [
- 7,
- -47
- ],
- [
- 29,
- -161
- ]
- ],
- [
- [
- 6895,
- 2054
- ],
- [
- -18,
- -14
- ],
- [
- -18,
- 10
- ],
- [
- 11,
- 2
- ],
- [
- 9,
- -4
- ],
- [
- 21,
- 21
- ],
- [
- 11,
- 15
- ],
- [
- 13,
- 6
- ],
- [
- -29,
- -36
- ]
- ],
- [
- [
- 7484,
- 2493
- ],
- [
- 8,
- -37
- ],
- [
- 13,
- -149
- ],
- [
- 8,
- -52
- ],
- [
- 15,
- -140
- ],
- [
- 26,
- -136
- ],
- [
- 35,
- -164
- ],
- [
- 58,
- -198
- ],
- [
- 7,
- -29
- ],
- [
- -8,
- -24
- ],
- [
- -2,
- -25
- ],
- [
- 0,
- -37
- ],
- [
- 2,
- -37
- ],
- [
- 6,
- -44
- ],
- [
- 14,
- -68
- ],
- [
- -8,
- 13
- ],
- [
- -19,
- 98
- ],
- [
- -2,
- 58
- ],
- [
- 3,
- 81
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -26
- ],
- [
- -2,
- -31
- ],
- [
- -5,
- -13
- ],
- [
- -7,
- 48
- ],
- [
- 1,
- 21
- ],
- [
- 7,
- 26
- ],
- [
- -2,
- 9
- ],
- [
- -12,
- 12
- ],
- [
- -2,
- 21
- ],
- [
- 1,
- 20
- ],
- [
- -6,
- 10
- ],
- [
- -5,
- 0
- ],
- [
- 3,
- -49
- ],
- [
- 5,
- -31
- ],
- [
- 7,
- -72
- ],
- [
- 11,
- -44
- ],
- [
- 6,
- -37
- ],
- [
- 74,
- -392
- ],
- [
- 17,
- -50
- ],
- [
- 6,
- -36
- ],
- [
- 7,
- -75
- ],
- [
- 2,
- -96
- ],
- [
- -12,
- -176
- ],
- [
- -3,
- -120
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 12
- ],
- [
- -3,
- 2
- ],
- [
- -10,
- -55
- ],
- [
- -14,
- -50
- ],
- [
- -5,
- -77
- ],
- [
- -7,
- -38
- ],
- [
- -20,
- -41
- ],
- [
- -13,
- 1
- ],
- [
- -31,
- -31
- ],
- [
- -22,
- 8
- ],
- [
- -25,
- -17
- ],
- [
- -18,
- 2
- ],
- [
- -9,
- 36
- ],
- [
- 1,
- 17
- ],
- [
- 4,
- 16
- ],
- [
- 7,
- 4
- ],
- [
- 23,
- -38
- ],
- [
- 4,
- 16
- ],
- [
- -7,
- 19
- ],
- [
- -13,
- 11
- ],
- [
- -10,
- 11
- ],
- [
- -20,
- 87
- ],
- [
- -20,
- 60
- ],
- [
- -4,
- 40
- ],
- [
- -35,
- 24
- ],
- [
- -25,
- 37
- ],
- [
- -17,
- 66
- ],
- [
- -9,
- 116
- ],
- [
- -12,
- 13
- ],
- [
- -4,
- 9
- ],
- [
- 10,
- 44
- ],
- [
- 12,
- 36
- ],
- [
- -9,
- -9
- ],
- [
- -7,
- -14
- ],
- [
- -8,
- -32
- ],
- [
- -7,
- -5
- ],
- [
- -5,
- 5
- ],
- [
- -7,
- 62
- ],
- [
- 2,
- 75
- ],
- [
- 9,
- 28
- ],
- [
- -14,
- 1
- ],
- [
- -15,
- -11
- ],
- [
- 2,
- -25
- ],
- [
- -2,
- -14
- ],
- [
- -11,
- 4
- ],
- [
- -8,
- 9
- ],
- [
- -11,
- 26
- ],
- [
- -15,
- 50
- ],
- [
- -31,
- 137
- ],
- [
- -6,
- 20
- ],
- [
- -10,
- 20
- ],
- [
- 4,
- 6
- ],
- [
- 9,
- 4
- ],
- [
- 20,
- 62
- ],
- [
- 16,
- 37
- ],
- [
- 5,
- 26
- ],
- [
- -1,
- 11
- ],
- [
- -7,
- 16
- ],
- [
- -9,
- -14
- ],
- [
- -4,
- 4
- ],
- [
- -10,
- 33
- ],
- [
- -10,
- 9
- ],
- [
- -7,
- -7
- ],
- [
- 8,
- -27
- ],
- [
- 6,
- -10
- ],
- [
- -2,
- -38
- ],
- [
- -3,
- -13
- ],
- [
- -6,
- -11
- ],
- [
- -10,
- 6
- ],
- [
- -4,
- -10
- ],
- [
- -6,
- 11
- ],
- [
- -5,
- 17
- ],
- [
- -7,
- 28
- ],
- [
- 17,
- 157
- ],
- [
- 15,
- 100
- ],
- [
- 2,
- 115
- ],
- [
- 1,
- 17
- ],
- [
- -1,
- 30
- ],
- [
- -21,
- 66
- ],
- [
- -90,
- 161
- ],
- [
- -70,
- 191
- ],
- [
- -61,
- 72
- ],
- [
- -46,
- -16
- ],
- [
- -8,
- -14
- ],
- [
- -3,
- -19
- ],
- [
- 3,
- -21
- ],
- [
- -4,
- -9
- ],
- [
- -13,
- 1
- ],
- [
- -16,
- -5
- ],
- [
- -44,
- -50
- ],
- [
- -15,
- 1
- ],
- [
- -14,
- -13
- ],
- [
- -10,
- -9
- ],
- [
- -28,
- -6
- ],
- [
- -23,
- -11
- ],
- [
- -9,
- 6
- ],
- [
- -7,
- 29
- ],
- [
- 0,
- 31
- ],
- [
- 5,
- -24
- ],
- [
- 8,
- -18
- ],
- [
- 4,
- 8
- ],
- [
- 2,
- 16
- ],
- [
- -9,
- 31
- ],
- [
- -26,
- 40
- ],
- [
- -29,
- 59
- ],
- [
- 9,
- -2
- ],
- [
- 2,
- 13
- ],
- [
- -9,
- 16
- ],
- [
- 4,
- 19
- ],
- [
- 6,
- 21
- ],
- [
- -12,
- -3
- ],
- [
- -12,
- -15
- ],
- [
- 0,
- -17
- ],
- [
- -2,
- -14
- ],
- [
- -6,
- 2
- ],
- [
- -11,
- 17
- ],
- [
- -56,
- 48
- ],
- [
- -48,
- 27
- ],
- [
- 37,
- 12
- ],
- [
- 20,
- -10
- ],
- [
- -2,
- 15
- ],
- [
- -5,
- 9
- ],
- [
- -16,
- 12
- ],
- [
- -20,
- -5
- ],
- [
- -13,
- 6
- ],
- [
- -13,
- -12
- ],
- [
- -14,
- -17
- ],
- [
- -13,
- -9
- ],
- [
- -50,
- -12
- ],
- [
- -41,
- -13
- ],
- [
- 7,
- 14
- ],
- [
- 7,
- 9
- ],
- [
- 24,
- 14
- ],
- [
- 3,
- 28
- ],
- [
- -5,
- 28
- ],
- [
- -7,
- -7
- ],
- [
- -6,
- -21
- ],
- [
- -8,
- 15
- ],
- [
- -9,
- 0
- ],
- [
- -3,
- -34
- ],
- [
- -11,
- -23
- ],
- [
- -5,
- -23
- ],
- [
- -34,
- -18
- ],
- [
- -4,
- 6
- ],
- [
- 9,
- 22
- ],
- [
- 0,
- 12
- ],
- [
- -8,
- -7
- ]
- ],
- [
- [
- 6877,
- 2601
- ],
- [
- 8,
- -31
- ],
- [
- 13,
- -66
- ],
- [
- 1,
- -16
- ],
- [
- 16,
- -2
- ],
- [
- 28,
- -4
- ],
- [
- 27,
- -3
- ],
- [
- 28,
- -4
- ],
- [
- 27,
- -4
- ],
- [
- 28,
- -4
- ],
- [
- 28,
- -4
- ],
- [
- 27,
- -3
- ],
- [
- 28,
- -4
- ],
- [
- 28,
- -4
- ],
- [
- 27,
- -4
- ],
- [
- 28,
- -3
- ],
- [
- 27,
- -4
- ],
- [
- 28,
- -4
- ],
- [
- 28,
- -4
- ],
- [
- 27,
- -3
- ],
- [
- 28,
- -4
- ],
- [
- 0,
- -13
- ],
- [
- 5,
- -21
- ],
- [
- 1,
- -24
- ],
- [
- 2,
- -12
- ],
- [
- 5,
- -7
- ],
- [
- 9,
- -1
- ],
- [
- 9,
- 13
- ],
- [
- 5,
- 29
- ],
- [
- 2,
- 34
- ],
- [
- -4,
- 37
- ],
- [
- 1,
- 32
- ],
- [
- 4,
- 18
- ],
- [
- 5,
- 5
- ],
- [
- 5,
- 10
- ],
- [
- 4,
- 2
- ],
- [
- 9,
- -5
- ],
- [
- 36,
- -27
- ],
- [
- 29,
- -3
- ]
- ],
- [
- [
- 7499,
- 2589
- ],
- [
- -8,
- -98
- ],
- [
- -3,
- 35
- ],
- [
- 0,
- 34
- ],
- [
- 6,
- 20
- ],
- [
- 5,
- 9
- ]
- ],
- [
- [
- 7594,
- 3015
- ],
- [
- -9,
- -34
- ],
- [
- -21,
- -21
- ],
- [
- -7,
- 1
- ],
- [
- -5,
- -6
- ],
- [
- 3,
- -16
- ],
- [
- 5,
- -11
- ],
- [
- 0,
- -10
- ],
- [
- -5,
- -14
- ],
- [
- -11,
- -4
- ],
- [
- -7,
- -16
- ],
- [
- 2,
- -15
- ],
- [
- 4,
- -8
- ],
- [
- -1,
- -14
- ],
- [
- -12,
- -15
- ],
- [
- -3,
- -14
- ],
- [
- 6,
- -4
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- -3
- ],
- [
- -7,
- -24
- ],
- [
- -7,
- -15
- ],
- [
- -6,
- -26
- ],
- [
- -15,
- -7
- ],
- [
- 0,
- -8
- ],
- [
- 9,
- -8
- ],
- [
- 7,
- -20
- ],
- [
- -14,
- -37
- ],
- [
- -8,
- 3
- ],
- [
- -5,
- 8
- ],
- [
- -3,
- -29
- ],
- [
- 1,
- -16
- ],
- [
- -3,
- -32
- ],
- [
- -5,
- -38
- ],
- [
- -4,
- -16
- ],
- [
- 1,
- -29
- ],
- [
- 2,
- -28
- ]
- ],
- [
- [
- 6771,
- 4212
- ],
- [
- 56,
- -1
- ],
- [
- 56,
- -1
- ],
- [
- 56,
- -2
- ],
- [
- 57,
- -1
- ]
- ],
- [
- [
- 6996,
- 4207
- ],
- [
- 52,
- 1
- ],
- [
- 52,
- 2
- ],
- [
- 53,
- 1
- ],
- [
- 52,
- 1
- ]
- ],
- [
- [
- 7205,
- 4212
- ],
- [
- -1,
- 0
- ],
- [
- -8,
- -27
- ],
- [
- -26,
- -52
- ],
- [
- -6,
- -39
- ],
- [
- 32,
- -44
- ],
- [
- 20,
- -35
- ],
- [
- 13,
- -14
- ],
- [
- 14,
- -4
- ],
- [
- 9,
- -12
- ],
- [
- 5,
- -29
- ],
- [
- 39,
- -140
- ],
- [
- 41,
- -72
- ],
- [
- 17,
- -36
- ],
- [
- 8,
- -34
- ],
- [
- 35,
- -57
- ],
- [
- 12,
- -31
- ],
- [
- 1,
- -23
- ],
- [
- 4,
- -16
- ],
- [
- 8,
- -10
- ],
- [
- 7,
- -20
- ],
- [
- 7,
- -32
- ],
- [
- 14,
- -28
- ],
- [
- 21,
- -23
- ],
- [
- 16,
- -54
- ],
- [
- 9,
- -83
- ],
- [
- 10,
- -49
- ],
- [
- 15,
- -20
- ],
- [
- 21,
- -71
- ],
- [
- 7,
- -43
- ],
- [
- -1,
- -37
- ],
- [
- 11,
- -29
- ],
- [
- 35,
- -33
- ]
- ],
- [
- [
- 5900,
- 7238
- ],
- [
- 10,
- -28
- ],
- [
- 19,
- -25
- ],
- [
- 10,
- -23
- ],
- [
- 2,
- -21
- ],
- [
- 12,
- -24
- ],
- [
- 19,
- -24
- ],
- [
- 12,
- -22
- ],
- [
- 3,
- -18
- ],
- [
- -1,
- -30
- ],
- [
- -4,
- -39
- ],
- [
- -7,
- -28
- ],
- [
- -10,
- -18
- ],
- [
- -8,
- -24
- ],
- [
- -5,
- -31
- ],
- [
- -15,
- -29
- ],
- [
- -26,
- -27
- ],
- [
- -29,
- -18
- ],
- [
- -32,
- -9
- ],
- [
- -19,
- -23
- ],
- [
- -6,
- -36
- ],
- [
- 3,
- -30
- ],
- [
- 11,
- -24
- ],
- [
- 7,
- -26
- ],
- [
- 1,
- -27
- ],
- [
- -8,
- -44
- ],
- [
- -17,
- -63
- ],
- [
- -20,
- -40
- ],
- [
- -21,
- -18
- ],
- [
- -10,
- -27
- ],
- [
- 2,
- -36
- ],
- [
- -1,
- -21
- ],
- [
- -9,
- -7
- ]
- ],
- [
- [
- 5763,
- 6378
- ],
- [
- -15,
- 22
- ],
- [
- -3,
- 14
- ],
- [
- -12,
- 16
- ],
- [
- -2,
- 9
- ],
- [
- -10,
- 9
- ],
- [
- -8,
- 29
- ],
- [
- -44,
- -1
- ],
- [
- -44,
- 0
- ],
- [
- -43,
- -1
- ],
- [
- -44,
- 0
- ],
- [
- -44,
- -1
- ],
- [
- -44,
- 0
- ],
- [
- -43,
- -1
- ],
- [
- -44,
- -1
- ],
- [
- -44,
- 0
- ],
- [
- -43,
- -1
- ],
- [
- -44,
- 0
- ],
- [
- -44,
- -1
- ],
- [
- -43,
- -1
- ],
- [
- -44,
- 0
- ],
- [
- -44,
- -1
- ],
- [
- -43,
- 0
- ]
- ],
- [
- [
- 5014,
- 6468
- ],
- [
- -11,
- 30
- ],
- [
- -5,
- 28
- ],
- [
- 3,
- 13
- ],
- [
- 1,
- 45
- ],
- [
- -2,
- 77
- ],
- [
- -4,
- 43
- ],
- [
- -7,
- 10
- ],
- [
- 0,
- 13
- ],
- [
- 4,
- 17
- ],
- [
- -1,
- 12
- ],
- [
- -8,
- 5
- ],
- [
- -2,
- 15
- ],
- [
- 3,
- 24
- ],
- [
- -2,
- 14
- ],
- [
- -7,
- 5
- ],
- [
- -2,
- 8
- ],
- [
- 1,
- 11
- ],
- [
- -4,
- 7
- ],
- [
- -8,
- 3
- ],
- [
- -3,
- 26
- ],
- [
- 1,
- 50
- ],
- [
- -3,
- 35
- ],
- [
- -7,
- 21
- ],
- [
- -4,
- 19
- ],
- [
- 0,
- 18
- ],
- [
- -9,
- 28
- ],
- [
- -16,
- 39
- ],
- [
- -10,
- 52
- ],
- [
- -5,
- 63
- ],
- [
- -12,
- 36
- ],
- [
- -5,
- 2
- ]
- ],
- [
- [
- 4890,
- 7237
- ],
- [
- -4,
- 33
- ],
- [
- -5,
- 15
- ],
- [
- -1,
- 11
- ],
- [
- -14,
- 29
- ],
- [
- -1,
- 11
- ],
- [
- 2,
- 14
- ],
- [
- 9,
- 27
- ],
- [
- 8,
- 44
- ],
- [
- 2,
- 30
- ],
- [
- 7,
- 23
- ],
- [
- 0,
- 12
- ],
- [
- -1,
- 16
- ],
- [
- -4,
- 14
- ],
- [
- -11,
- 11
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 17
- ],
- [
- 4,
- 10
- ],
- [
- 2,
- 12
- ],
- [
- -2,
- 14
- ],
- [
- -6,
- 25
- ],
- [
- -3,
- 25
- ],
- [
- 25,
- 2
- ]
- ],
- [
- [
- 4895,
- 7636
- ],
- [
- 56,
- 0
- ],
- [
- 56,
- 0
- ],
- [
- 57,
- 0
- ],
- [
- 56,
- 0
- ],
- [
- 56,
- 0
- ],
- [
- 57,
- 0
- ],
- [
- 56,
- 0
- ],
- [
- 56,
- 0
- ],
- [
- 57,
- 0
- ],
- [
- 56,
- 0
- ],
- [
- 56,
- 0
- ],
- [
- 57,
- 0
- ],
- [
- 56,
- 0
- ],
- [
- 56,
- 0
- ],
- [
- 57,
- 0
- ],
- [
- 57,
- 0
- ]
- ],
- [
- [
- 5797,
- 7636
- ],
- [
- 1,
- -25
- ],
- [
- 3,
- -18
- ],
- [
- 7,
- -15
- ],
- [
- 11,
- -11
- ],
- [
- 2,
- -21
- ],
- [
- -7,
- -32
- ],
- [
- -3,
- -39
- ],
- [
- 3,
- -47
- ],
- [
- 5,
- -42
- ],
- [
- 8,
- -37
- ],
- [
- 19,
- -28
- ],
- [
- 30,
- -17
- ],
- [
- 17,
- -27
- ],
- [
- 6,
- -36
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 2366,
- 8037
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -62
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -62
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ]
- ],
- [
- [
- 2366,
- 7031
- ],
- [
- -32,
- 0
- ],
- [
- -33,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -33,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -33,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -33,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -33,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -33,
- 0
- ],
- [
- -32,
- 0
- ]
- ],
- [
- [
- 1848,
- 7031
- ],
- [
- -65,
- 0
- ],
- [
- -64,
- 0
- ],
- [
- -64,
- 0
- ],
- [
- -65,
- 0
- ],
- [
- -64,
- 0
- ],
- [
- -65,
- 0
- ],
- [
- -64,
- 0
- ],
- [
- -64,
- 0
- ]
- ],
- [
- [
- 1333,
- 7031
- ],
- [
- 0,
- 90
- ],
- [
- 0,
- 90
- ],
- [
- -1,
- 90
- ],
- [
- 0,
- 90
- ],
- [
- 0,
- 90
- ],
- [
- 0,
- 89
- ],
- [
- 0,
- 90
- ],
- [
- 0,
- 99
- ],
- [
- 0,
- 2
- ],
- [
- 11,
- 61
- ],
- [
- 2,
- 30
- ],
- [
- -3,
- 16
- ],
- [
- 2,
- 16
- ],
- [
- 7,
- 16
- ],
- [
- 0,
- 17
- ],
- [
- -7,
- 18
- ],
- [
- -13,
- 12
- ],
- [
- -20,
- 6
- ],
- [
- -10,
- 22
- ],
- [
- 0,
- 37
- ],
- [
- 14,
- 57
- ],
- [
- 29,
- 78
- ],
- [
- 17,
- 54
- ],
- [
- 2,
- 32
- ],
- [
- 18,
- 74
- ],
- [
- 33,
- 116
- ],
- [
- 12,
- 74
- ],
- [
- -7,
- 33
- ],
- [
- -17,
- 31
- ],
- [
- -26,
- 30
- ],
- [
- -18,
- 34
- ],
- [
- -5,
- 18
- ]
- ],
- [
- [
- 1353,
- 8643
- ],
- [
- -5,
- 21
- ],
- [
- -3,
- 28
- ],
- [
- 4,
- 16
- ],
- [
- -4,
- 27
- ],
- [
- -11,
- 40
- ],
- [
- -5,
- 27
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 64
- ],
- [
- 0,
- 65
- ],
- [
- 0,
- 64
- ],
- [
- 0,
- 65
- ],
- [
- 0,
- 65
- ],
- [
- -1,
- 64
- ],
- [
- 0,
- 65
- ],
- [
- 0,
- 64
- ],
- [
- 0,
- 65
- ],
- [
- 0,
- 64
- ],
- [
- 0,
- 65
- ],
- [
- 0,
- 64
- ],
- [
- -1,
- 65
- ],
- [
- 0,
- 65
- ],
- [
- 0,
- 64
- ],
- [
- 0,
- 64
- ]
- ],
- [
- [
- 1329,
- 9847
- ],
- [
- 56,
- 0
- ],
- [
- 73,
- 0
- ],
- [
- 42,
- 0
- ]
- ],
- [
- [
- 1500,
- 9847
- ],
- [
- 0,
- -99
- ],
- [
- 0,
- -100
- ],
- [
- 0,
- -99
- ],
- [
- 0,
- -100
- ],
- [
- 19,
- -40
- ],
- [
- 14,
- -25
- ],
- [
- 8,
- -27
- ],
- [
- 14,
- -28
- ],
- [
- 3,
- -10
- ],
- [
- 4,
- -30
- ],
- [
- -3,
- -22
- ],
- [
- 7,
- -22
- ],
- [
- -1,
- -11
- ],
- [
- -6,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 19,
- -21
- ],
- [
- 19,
- -30
- ],
- [
- 23,
- -20
- ],
- [
- 8,
- -12
- ],
- [
- 31,
- -59
- ],
- [
- 16,
- -38
- ],
- [
- 17,
- -27
- ],
- [
- 9,
- -32
- ],
- [
- 17,
- -27
- ],
- [
- 4,
- -14
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 11,
- 7
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -11
- ],
- [
- 1,
- -16
- ],
- [
- 4,
- -7
- ],
- [
- 7,
- -4
- ],
- [
- 7,
- -1
- ],
- [
- 24,
- 8
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -15
- ],
- [
- -3,
- -20
- ],
- [
- -7,
- -21
- ],
- [
- 1,
- -19
- ],
- [
- -5,
- -44
- ],
- [
- -6,
- -29
- ],
- [
- 0,
- -29
- ],
- [
- -7,
- -16
- ],
- [
- 4,
- -20
- ],
- [
- -3,
- -30
- ],
- [
- 3,
- -7
- ],
- [
- 8,
- -14
- ],
- [
- 3,
- -37
- ],
- [
- -1,
- -7
- ],
- [
- -15,
- -14
- ],
- [
- -5,
- -10
- ],
- [
- -2,
- -13
- ],
- [
- 6,
- -39
- ],
- [
- -6,
- -21
- ],
- [
- -1,
- -18
- ],
- [
- 2,
- -5
- ],
- [
- 14,
- -10
- ],
- [
- 17,
- -22
- ],
- [
- 5,
- -4
- ],
- [
- 4,
- 1
- ],
- [
- 7,
- 7
- ],
- [
- 8,
- 15
- ],
- [
- 16,
- 14
- ],
- [
- 19,
- 32
- ],
- [
- 1,
- 9
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- -4
- ],
- [
- 12,
- -20
- ],
- [
- 11,
- -10
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -19
- ],
- [
- 6,
- -15
- ],
- [
- 1,
- -25
- ],
- [
- 6,
- -25
- ],
- [
- 5,
- -30
- ],
- [
- 15,
- -39
- ],
- [
- 9,
- -27
- ],
- [
- 9,
- -13
- ],
- [
- 6,
- -15
- ],
- [
- 4,
- -17
- ],
- [
- 2,
- -14
- ],
- [
- -6,
- -26
- ],
- [
- 2,
- -11
- ],
- [
- 5,
- -12
- ],
- [
- 16,
- -26
- ],
- [
- 3,
- -2
- ],
- [
- 15,
- 3
- ],
- [
- 8,
- -5
- ],
- [
- 8,
- -13
- ],
- [
- 8,
- -20
- ],
- [
- 6,
- -21
- ],
- [
- 1,
- -24
- ],
- [
- 8,
- -26
- ],
- [
- 2,
- -24
- ],
- [
- 5,
- -11
- ],
- [
- 10,
- -14
- ],
- [
- 10,
- -8
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 13
- ],
- [
- 4,
- 10
- ],
- [
- 13,
- 14
- ],
- [
- 11,
- 0
- ],
- [
- 45,
- -12
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 7,
- 21
- ],
- [
- 6,
- 9
- ],
- [
- 10,
- 2
- ],
- [
- 27,
- -5
- ],
- [
- 31,
- 3
- ],
- [
- 17,
- -6
- ],
- [
- 24,
- 8
- ],
- [
- 27,
- -6
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- -3,
- 8
- ],
- [
- 0,
- 16
- ],
- [
- 5,
- 19
- ],
- [
- 2,
- 16
- ],
- [
- 6,
- 9
- ],
- [
- 7,
- 5
- ],
- [
- 6,
- -1
- ],
- [
- 6,
- -8
- ],
- [
- 7,
- -15
- ],
- [
- 12,
- -39
- ],
- [
- 6,
- -14
- ],
- [
- 8,
- -12
- ],
- [
- 11,
- -11
- ]
- ],
- [
- [
- 6392,
- 7231
- ],
- [
- 0,
- -63
- ],
- [
- 2,
- -52
- ],
- [
- 5,
- -23
- ],
- [
- 6,
- -17
- ],
- [
- 7,
- -11
- ],
- [
- 7,
- -34
- ],
- [
- 9,
- -57
- ],
- [
- 8,
- -37
- ],
- [
- 6,
- -16
- ]
- ],
- [
- [
- 6442,
- 6921
- ],
- [
- 0,
- -107
- ],
- [
- 0,
- -121
- ],
- [
- -1,
- -121
- ],
- [
- 0,
- -120
- ],
- [
- 0,
- -121
- ],
- [
- -1,
- -121
- ],
- [
- 0,
- -121
- ],
- [
- 0,
- -114
- ],
- [
- 0,
- -1
- ],
- [
- -8,
- -13
- ],
- [
- -6,
- -21
- ],
- [
- 2,
- -23
- ],
- [
- -2,
- -16
- ],
- [
- -6,
- -10
- ],
- [
- 3,
- -25
- ],
- [
- 11,
- -40
- ],
- [
- 6,
- -40
- ],
- [
- 3,
- -39
- ],
- [
- -2,
- -28
- ],
- [
- -10,
- -25
- ],
- [
- -9,
- -56
- ],
- [
- -8,
- -22
- ],
- [
- -9,
- -7
- ],
- [
- -9,
- -20
- ],
- [
- -7,
- -34
- ],
- [
- -8,
- -16
- ],
- [
- -8,
- 1
- ],
- [
- -7,
- -6
- ],
- [
- -4,
- -14
- ],
- [
- 1,
- -14
- ],
- [
- 5,
- -14
- ],
- [
- -2,
- -14
- ],
- [
- -8,
- -12
- ],
- [
- 0,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -5,
- -6
- ],
- [
- -4,
- -19
- ],
- [
- 1,
- -31
- ],
- [
- -3,
- -15
- ],
- [
- -6,
- -1
- ],
- [
- 0,
- -8
- ],
- [
- 9,
- -35
- ]
- ],
- [
- [
- 6352,
- 5335
- ],
- [
- -6,
- -7
- ],
- [
- -9,
- -29
- ],
- [
- -2,
- -32
- ],
- [
- 5,
- -35
- ],
- [
- -14,
- -28
- ],
- [
- -34,
- -21
- ],
- [
- -19,
- -19
- ],
- [
- -2,
- -16
- ],
- [
- 3,
- -25
- ],
- [
- 7,
- -34
- ],
- [
- 1,
- -23
- ],
- [
- -5,
- -13
- ],
- [
- -24,
- 9
- ],
- [
- -45,
- 30
- ],
- [
- -30,
- -1
- ],
- [
- -15,
- -33
- ],
- [
- -6,
- -24
- ],
- [
- 2,
- -20
- ]
- ],
- [
- [
- 6159,
- 5014
- ],
- [
- -12,
- 24
- ],
- [
- -8,
- 11
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -9,
- 10
- ],
- [
- -11,
- 26
- ],
- [
- -13,
- 45
- ],
- [
- -2,
- 35
- ],
- [
- 7,
- 26
- ],
- [
- 0,
- 28
- ],
- [
- -7,
- 29
- ],
- [
- -4,
- 28
- ],
- [
- 0,
- 28
- ],
- [
- -17,
- 41
- ],
- [
- -35,
- 55
- ],
- [
- -25,
- 34
- ],
- [
- -16,
- 13
- ],
- [
- -19,
- 28
- ],
- [
- -22,
- 42
- ],
- [
- -12,
- 32
- ],
- [
- -1,
- 23
- ],
- [
- 10,
- 59
- ],
- [
- 28,
- 130
- ],
- [
- 4,
- 16
- ],
- [
- 1,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -13,
- 15
- ],
- [
- -23,
- 14
- ],
- [
- -21,
- 7
- ],
- [
- -17,
- -16
- ],
- [
- -15,
- 32
- ],
- [
- -13,
- 78
- ],
- [
- -32,
- 83
- ],
- [
- -50,
- 86
- ],
- [
- -29,
- 60
- ],
- [
- -8,
- 31
- ],
- [
- -7,
- 46
- ],
- [
- -7,
- 63
- ],
- [
- 1,
- 51
- ],
- [
- 10,
- 62
- ]
- ],
- [
- [
- 5900,
- 7238
- ],
- [
- 80,
- -2
- ],
- [
- 78,
- -1
- ],
- [
- 78,
- -1
- ],
- [
- 78,
- -1
- ],
- [
- 78,
- -1
- ],
- [
- 78,
- -1
- ],
- [
- 22,
- 0
- ]
- ],
- [
- [
- 6914,
- 6911
- ],
- [
- -1,
- -131
- ],
- [
- 0,
- -131
- ],
- [
- -1,
- -131
- ],
- [
- 0,
- -131
- ],
- [
- -1,
- -132
- ],
- [
- -1,
- -131
- ],
- [
- 0,
- -131
- ],
- [
- 0,
- -133
- ]
- ],
- [
- [
- 6910,
- 5860
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -17
- ],
- [
- 4,
- -18
- ],
- [
- 0,
- -14
- ],
- [
- -5,
- -11
- ],
- [
- 2,
- -8
- ],
- [
- 8,
- -6
- ],
- [
- 3,
- -12
- ],
- [
- -2,
- -20
- ],
- [
- -17,
- -20
- ],
- [
- -34,
- -23
- ],
- [
- -7,
- -6
- ],
- [
- -6,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -6,
- 9
- ],
- [
- -10,
- 4
- ],
- [
- -18,
- -3
- ],
- [
- -6,
- -19
- ],
- [
- 3,
- -35
- ],
- [
- -6,
- -26
- ],
- [
- -15,
- -19
- ],
- [
- -11,
- -25
- ],
- [
- -6,
- -30
- ],
- [
- -11,
- -19
- ],
- [
- -14,
- -6
- ],
- [
- -11,
- -28
- ],
- [
- -9,
- -50
- ],
- [
- -10,
- -31
- ],
- [
- -10,
- -12
- ],
- [
- -14,
- 3
- ],
- [
- -18,
- 18
- ],
- [
- -11,
- 18
- ],
- [
- -3,
- 19
- ],
- [
- -5,
- 14
- ],
- [
- -5,
- 6
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- -11,
- -2
- ],
- [
- -5,
- -8
- ],
- [
- 2,
- -13
- ],
- [
- -3,
- -10
- ],
- [
- -6,
- -6
- ],
- [
- -4,
- -13
- ],
- [
- 0,
- -21
- ],
- [
- -5,
- -18
- ],
- [
- -8,
- -17
- ],
- [
- -13,
- 5
- ],
- [
- -17,
- 29
- ],
- [
- -17,
- 6
- ],
- [
- -17,
- -15
- ],
- [
- -13,
- -21
- ],
- [
- -9,
- -26
- ],
- [
- -8,
- -6
- ],
- [
- -12,
- 20
- ],
- [
- -28,
- 27
- ],
- [
- -15,
- 6
- ],
- [
- -11,
- -7
- ],
- [
- -7,
- 3
- ],
- [
- -3,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -24
- ],
- [
- -2,
- -15
- ],
- [
- -5,
- -6
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 16
- ],
- [
- -6,
- 6
- ],
- [
- -10,
- -6
- ],
- [
- -10,
- 2
- ],
- [
- -8,
- 10
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- 1,
- -18
- ],
- [
- -2,
- -15
- ],
- [
- -4,
- -10
- ],
- [
- -7,
- -2
- ],
- [
- -8,
- 5
- ],
- [
- -3,
- -5
- ]
- ],
- [
- [
- 6442,
- 6921
- ],
- [
- 1,
- -3
- ],
- [
- 7,
- -10
- ],
- [
- 5,
- -6
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -8
- ],
- [
- 10,
- -6
- ],
- [
- 17,
- -2
- ],
- [
- 17,
- 4
- ],
- [
- 15,
- 9
- ],
- [
- 36,
- 37
- ]
- ],
- [
- [
- 6556,
- 6935
- ],
- [
- 43,
- -1
- ],
- [
- 52,
- 0
- ],
- [
- 53,
- 0
- ],
- [
- 52,
- 0
- ],
- [
- 53,
- 0
- ],
- [
- 52,
- 0
- ],
- [
- 53,
- 0
- ],
- [
- 0,
- -23
- ]
- ],
- [
- [
- 5213,
- 5018
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -41,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ]
- ],
- [
- [
- 3930,
- 6226
- ],
- [
- 36,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 37,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 37,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 37,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 37,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 37,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 37,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 37,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 37,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 37,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 36,
- 0
- ],
- [
- 31,
- 0
- ]
- ],
- [
- [
- 5086,
- 6226
- ],
- [
- 40,
- -52
- ],
- [
- 11,
- -1
- ],
- [
- 12,
- 9
- ],
- [
- 10,
- -12
- ],
- [
- 6,
- -32
- ],
- [
- -1,
- -17
- ],
- [
- -8,
- 0
- ],
- [
- -10,
- -20
- ],
- [
- -13,
- -38
- ],
- [
- 3,
- -35
- ],
- [
- 19,
- -34
- ],
- [
- 12,
- -33
- ],
- [
- 6,
- -34
- ],
- [
- 12,
- -26
- ],
- [
- 27,
- -28
- ],
- [
- 0,
- -16
- ],
- [
- 0,
- -52
- ],
- [
- 0,
- -53
- ],
- [
- 0,
- -52
- ],
- [
- 0,
- -53
- ],
- [
- 0,
- -52
- ],
- [
- 0,
- -53
- ],
- [
- 0,
- -52
- ],
- [
- 0,
- -53
- ],
- [
- 0,
- -52
- ],
- [
- 0,
- -53
- ],
- [
- 0,
- -52
- ],
- [
- 0,
- -52
- ],
- [
- 0,
- -53
- ],
- [
- 1,
- -52
- ],
- [
- 0,
- -53
- ],
- [
- 0,
- -52
- ]
- ],
- [
- [
- 6101,
- 4817
- ],
- [
- -12,
- -1
- ]
- ],
- [
- [
- 6089,
- 4816
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 11
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -11
- ],
- [
- 1,
- -10
- ]
- ],
- [
- [
- 7292,
- 5600
- ],
- [
- 4,
- -11
- ],
- [
- 2,
- -59
- ],
- [
- -1,
- -12
- ],
- [
- -6,
- -25
- ],
- [
- 0,
- -13
- ],
- [
- 5,
- -20
- ],
- [
- 19,
- -47
- ],
- [
- 2,
- -18
- ],
- [
- 7,
- -18
- ],
- [
- 6,
- -26
- ],
- [
- 20,
- -57
- ],
- [
- 30,
- -47
- ],
- [
- 24,
- -12
- ]
- ],
- [
- [
- 7404,
- 5235
- ],
- [
- -65,
- -98
- ],
- [
- -30,
- -36
- ],
- [
- -29,
- -28
- ],
- [
- -2,
- -5
- ],
- [
- -6,
- -31
- ],
- [
- -18,
- -28
- ],
- [
- -11,
- -29
- ],
- [
- -25,
- -25
- ],
- [
- -19,
- -33
- ],
- [
- -46,
- -33
- ],
- [
- -26,
- -12
- ],
- [
- -17,
- -19
- ]
- ],
- [
- [
- 7110,
- 4858
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -60,
- 4
- ],
- [
- -61,
- 4
- ],
- [
- -60,
- 4
- ],
- [
- -60,
- 4
- ],
- [
- -60,
- 3
- ],
- [
- -60,
- 4
- ],
- [
- -60,
- 4
- ],
- [
- -60,
- 4
- ],
- [
- -58,
- -2
- ],
- [
- -58,
- -2
- ],
- [
- -57,
- -2
- ],
- [
- -58,
- -2
- ],
- [
- -5,
- 12
- ],
- [
- -15,
- 3
- ],
- [
- -24,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 7,
- -42
- ],
- [
- 0,
- -36
- ],
- [
- -27,
- 0
- ],
- [
- -30,
- 0
- ],
- [
- -30,
- 0
- ],
- [
- -30,
- 0
- ],
- [
- -30,
- 0
- ],
- [
- -30,
- 0
- ],
- [
- -30,
- 0
- ],
- [
- -34,
- 0
- ]
- ],
- [
- [
- 6108,
- 4816
- ],
- [
- 9,
- 35
- ],
- [
- 8,
- 10
- ],
- [
- 4,
- 2
- ],
- [
- 8,
- -7
- ],
- [
- 4,
- -2
- ],
- [
- 10,
- 12
- ],
- [
- 8,
- 37
- ],
- [
- 4,
- 38
- ],
- [
- 2,
- 41
- ],
- [
- -6,
- 32
- ]
- ],
- [
- [
- 6910,
- 5860
- ],
- [
- 9,
- 13
- ],
- [
- 10,
- 2
- ],
- [
- 9,
- -14
- ],
- [
- 11,
- -4
- ],
- [
- 15,
- 7
- ],
- [
- 13,
- -5
- ],
- [
- 13,
- -16
- ],
- [
- 12,
- -30
- ],
- [
- 11,
- -45
- ],
- [
- 19,
- -26
- ],
- [
- 29,
- -10
- ],
- [
- 21,
- -18
- ],
- [
- 13,
- -24
- ],
- [
- 11,
- -8
- ],
- [
- 12,
- 13
- ],
- [
- 14,
- 7
- ],
- [
- 13,
- -8
- ],
- [
- 18,
- -21
- ],
- [
- 27,
- 4
- ],
- [
- 35,
- 31
- ],
- [
- 21,
- -2
- ],
- [
- 6,
- -33
- ],
- [
- 15,
- -35
- ],
- [
- 24,
- -37
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5702,
- 1997
- ],
- [
- -7,
- -6
- ],
- [
- -28,
- 35
- ],
- [
- -2,
- 15
- ],
- [
- 14,
- 14
- ],
- [
- 9,
- -2
- ],
- [
- 13,
- -17
- ],
- [
- 5,
- -5
- ],
- [
- 3,
- -7
- ],
- [
- -2,
- -12
- ],
- [
- -5,
- -15
- ]
- ],
- [
- [
- 6205,
- 2082
- ],
- [
- -9,
- -21
- ],
- [
- 0,
- 8
- ],
- [
- 7,
- 21
- ],
- [
- 5,
- 9
- ],
- [
- -3,
- -17
- ]
- ],
- [
- [
- 6216,
- 2121
- ],
- [
- -5,
- -13
- ],
- [
- 5,
- 61
- ],
- [
- -7,
- 52
- ],
- [
- 7,
- -23
- ],
- [
- 2,
- -27
- ],
- [
- -2,
- -50
- ]
- ],
- [
- [
- 6147,
- 2232
- ],
- [
- 1,
- -19
- ],
- [
- -9,
- 9
- ],
- [
- -12,
- 1
- ],
- [
- 5,
- 7
- ],
- [
- 4,
- 6
- ],
- [
- 2,
- 7
- ],
- [
- 16,
- 23
- ],
- [
- -5,
- -17
- ],
- [
- -2,
- -17
- ]
- ],
- [
- [
- 6096,
- 2276
- ],
- [
- -12,
- -11
- ],
- [
- -63,
- 41
- ],
- [
- -16,
- 34
- ],
- [
- -14,
- 7
- ],
- [
- -17,
- 4
- ],
- [
- -19,
- -41
- ],
- [
- -14,
- -55
- ],
- [
- 22,
- -31
- ],
- [
- 19,
- -14
- ],
- [
- 32,
- 12
- ],
- [
- 17,
- 27
- ],
- [
- 14,
- -1
- ],
- [
- 7,
- 5
- ],
- [
- 6,
- 14
- ],
- [
- 12,
- -11
- ],
- [
- 1,
- -11
- ],
- [
- -9,
- -15
- ],
- [
- -11,
- -14
- ],
- [
- -6,
- -15
- ],
- [
- 12,
- -31
- ],
- [
- 19,
- -11
- ],
- [
- 8,
- 5
- ],
- [
- 4,
- 35
- ],
- [
- 12,
- 22
- ],
- [
- 16,
- -4
- ],
- [
- -2,
- -15
- ],
- [
- 2,
- -13
- ],
- [
- 8,
- -23
- ],
- [
- -1,
- -32
- ],
- [
- 1,
- -8
- ],
- [
- -17,
- -15
- ],
- [
- -13,
- -5
- ],
- [
- -11,
- -19
- ],
- [
- 6,
- -11
- ],
- [
- -11,
- -9
- ],
- [
- -7,
- 4
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -12
- ],
- [
- -5,
- -10
- ],
- [
- 8,
- -33
- ],
- [
- 16,
- -21
- ],
- [
- 12,
- -27
- ],
- [
- 46,
- -35
- ],
- [
- 12,
- 1
- ],
- [
- 11,
- -35
- ],
- [
- 9,
- -12
- ],
- [
- 8,
- -6
- ],
- [
- -1,
- -24
- ],
- [
- -15,
- -18
- ],
- [
- -4,
- -21
- ],
- [
- -4,
- -12
- ],
- [
- -7,
- 15
- ],
- [
- -7,
- 11
- ],
- [
- -16,
- -33
- ],
- [
- -8,
- -7
- ],
- [
- 4,
- 36
- ],
- [
- -7,
- 14
- ],
- [
- -9,
- 35
- ],
- [
- -14,
- 23
- ],
- [
- -9,
- 7
- ],
- [
- -8,
- 14
- ],
- [
- -9,
- 6
- ],
- [
- -7,
- -2
- ],
- [
- -13,
- 8
- ],
- [
- -1,
- 20
- ],
- [
- -4,
- 14
- ],
- [
- -10,
- 17
- ],
- [
- -49,
- 32
- ],
- [
- 0,
- -14
- ],
- [
- 3,
- -9
- ],
- [
- 7,
- -7
- ],
- [
- 9,
- -13
- ],
- [
- -1,
- -38
- ],
- [
- -3,
- -16
- ],
- [
- -2,
- -23
- ],
- [
- -3,
- -23
- ],
- [
- -6,
- -19
- ],
- [
- -13,
- -12
- ],
- [
- -6,
- 10
- ],
- [
- -10,
- 50
- ],
- [
- -13,
- 16
- ],
- [
- -21,
- 2
- ],
- [
- -15,
- -11
- ],
- [
- -16,
- -49
- ],
- [
- -12,
- -8
- ],
- [
- -44,
- 25
- ],
- [
- -50,
- 39
- ],
- [
- 1,
- 12
- ],
- [
- 8,
- 5
- ],
- [
- 15,
- -6
- ],
- [
- -1,
- 14
- ],
- [
- -15,
- 42
- ],
- [
- -3,
- 20
- ],
- [
- 2,
- 24
- ],
- [
- -5,
- -1
- ],
- [
- -9,
- -20
- ],
- [
- -32,
- 17
- ],
- [
- -8,
- 20
- ],
- [
- -19,
- 57
- ],
- [
- -26,
- 2
- ],
- [
- -12,
- 34
- ],
- [
- -22,
- -14
- ],
- [
- -11,
- -16
- ],
- [
- -9,
- -25
- ],
- [
- 3,
- -13
- ],
- [
- 10,
- -20
- ],
- [
- -4,
- -10
- ],
- [
- -31,
- -14
- ],
- [
- -71,
- 16
- ],
- [
- -21,
- 15
- ],
- [
- -28,
- 32
- ],
- [
- -39,
- 26
- ],
- [
- -18,
- 4
- ],
- [
- -18,
- -5
- ],
- [
- -53,
- -3
- ],
- [
- -13,
- -7
- ],
- [
- -10,
- -11
- ],
- [
- -7,
- 13
- ],
- [
- -3,
- 22
- ],
- [
- 6,
- 3
- ],
- [
- 7,
- 13
- ],
- [
- 6,
- 25
- ],
- [
- 1,
- 16
- ],
- [
- -5,
- 10
- ]
- ],
- [
- [
- 5355,
- 2189
- ],
- [
- 12,
- 40
- ],
- [
- 3,
- 14
- ],
- [
- -2,
- 69
- ],
- [
- -5,
- 25
- ],
- [
- 1,
- 14
- ],
- [
- 5,
- 38
- ],
- [
- -1,
- 34
- ],
- [
- 10,
- 41
- ],
- [
- 7,
- 22
- ],
- [
- 8,
- 44
- ],
- [
- 1,
- 28
- ],
- [
- 4,
- 22
- ],
- [
- -3,
- 23
- ],
- [
- 6,
- 16
- ],
- [
- -4,
- 24
- ],
- [
- -1,
- 30
- ],
- [
- -6,
- 12
- ],
- [
- -12,
- 46
- ],
- [
- 0,
- 20
- ],
- [
- -13,
- 42
- ],
- [
- 0,
- 15
- ],
- [
- -12,
- 22
- ],
- [
- -2,
- 14
- ],
- [
- -1,
- 59
- ],
- [
- -4,
- 17
- ],
- [
- -10,
- 34
- ],
- [
- -24,
- 49
- ],
- [
- 0,
- 51
- ],
- [
- 0,
- 51
- ],
- [
- 0,
- 51
- ],
- [
- 0,
- 51
- ],
- [
- 0,
- 51
- ],
- [
- 0,
- 51
- ],
- [
- 1,
- 51
- ],
- [
- 0,
- 51
- ]
- ],
- [
- [
- 5813,
- 3413
- ],
- [
- 1,
- -20
- ],
- [
- 9,
- -12
- ],
- [
- 0,
- -21
- ],
- [
- -7,
- -31
- ],
- [
- 0,
- -21
- ],
- [
- 7,
- -12
- ],
- [
- 0,
- -13
- ],
- [
- -8,
- -13
- ],
- [
- -2,
- -15
- ],
- [
- 6,
- -15
- ],
- [
- 3,
- -18
- ],
- [
- -1,
- -21
- ],
- [
- 8,
- -27
- ],
- [
- 12,
- -17
- ],
- [
- 8,
- -20
- ],
- [
- 1,
- -11
- ],
- [
- 0,
- -11
- ],
- [
- -2,
- -15
- ],
- [
- -9,
- -22
- ],
- [
- -8,
- -16
- ],
- [
- -5,
- -6
- ],
- [
- -2,
- -11
- ],
- [
- -1,
- -23
- ],
- [
- -11,
- -30
- ],
- [
- -22,
- -35
- ],
- [
- -15,
- -45
- ],
- [
- -7,
- -53
- ],
- [
- -8,
- -35
- ],
- [
- -8,
- -14
- ],
- [
- -4,
- -28
- ],
- [
- 0,
- -42
- ],
- [
- -5,
- -23
- ],
- [
- -11,
- -5
- ],
- [
- -2,
- -24
- ],
- [
- 6,
- -43
- ],
- [
- -2,
- -18
- ],
- [
- -8,
- -14
- ],
- [
- 0,
- -12
- ],
- [
- 41,
- 0
- ],
- [
- 42,
- 0
- ],
- [
- 41,
- 0
- ],
- [
- 42,
- 0
- ],
- [
- 42,
- 0
- ],
- [
- 41,
- 0
- ],
- [
- 42,
- 0
- ],
- [
- 41,
- 0
- ],
- [
- -5,
- -46
- ],
- [
- -12,
- -63
- ],
- [
- 0,
- -16
- ],
- [
- 3,
- -20
- ],
- [
- 0,
- -12
- ],
- [
- 4,
- -17
- ],
- [
- 10,
- -17
- ],
- [
- 9,
- -26
- ],
- [
- 8,
- -45
- ],
- [
- 2,
- -22
- ],
- [
- 6,
- -29
- ],
- [
- 4,
- -6
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- -3
- ]
- ],
- [
- [
- 9481,
- 6735
- ],
- [
- -13,
- -6
- ],
- [
- -31,
- 15
- ],
- [
- 25,
- 12
- ],
- [
- 4,
- 4
- ],
- [
- 4,
- 19
- ],
- [
- 0,
- 9
- ],
- [
- 10,
- -40
- ],
- [
- 1,
- -13
- ]
- ],
- [
- [
- 9389,
- 6780
- ],
- [
- -48,
- -20
- ],
- [
- -8,
- 13
- ],
- [
- 12,
- 6
- ],
- [
- 15,
- 30
- ],
- [
- 10,
- 3
- ],
- [
- 16,
- -17
- ],
- [
- 3,
- -15
- ]
- ],
- [
- [
- 9263,
- 6913
- ],
- [
- -6,
- 18
- ],
- [
- -6,
- 9
- ],
- [
- -6,
- 10
- ],
- [
- 0,
- 15
- ],
- [
- 0,
- 22
- ],
- [
- -7,
- 5
- ],
- [
- -1,
- 28
- ],
- [
- 0,
- 18
- ],
- [
- -13,
- -1
- ],
- [
- -11,
- 0
- ],
- [
- -17,
- 0
- ],
- [
- -18,
- -1
- ],
- [
- -13,
- 0
- ]
- ],
- [
- [
- 8874,
- 7053
- ],
- [
- -4,
- 10
- ],
- [
- 5,
- 34
- ],
- [
- 6,
- 34
- ],
- [
- 5,
- 34
- ],
- [
- 6,
- 34
- ],
- [
- 5,
- 33
- ],
- [
- 6,
- 34
- ],
- [
- 5,
- 34
- ],
- [
- 6,
- 34
- ]
- ],
- [
- [
- 8914,
- 7334
- ],
- [
- 17,
- -1
- ],
- [
- 17,
- -1
- ],
- [
- 17,
- -1
- ],
- [
- 17,
- -2
- ],
- [
- 17,
- -1
- ],
- [
- 17,
- -1
- ],
- [
- 17,
- -1
- ],
- [
- 17,
- -1
- ]
- ],
- [
- [
- 9050,
- 7325
- ],
- [
- 24,
- -1
- ],
- [
- 25,
- -2
- ],
- [
- 25,
- -1
- ],
- [
- 24,
- -2
- ],
- [
- 25,
- -1
- ],
- [
- 25,
- -1
- ],
- [
- 24,
- -2
- ],
- [
- 25,
- -1
- ],
- [
- 15,
- 11
- ],
- [
- 18,
- 31
- ],
- [
- 11,
- 7
- ],
- [
- 17,
- 19
- ],
- [
- 9,
- 4
- ],
- [
- 20,
- -2
- ]
- ],
- [
- [
- 9337,
- 7384
- ],
- [
- -4,
- -21
- ],
- [
- 5,
- -20
- ],
- [
- 4,
- -22
- ],
- [
- 8,
- -21
- ],
- [
- 6,
- -1
- ],
- [
- 8,
- 3
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- -8
- ],
- [
- -1,
- -11
- ],
- [
- -8,
- -3
- ],
- [
- -16,
- -18
- ],
- [
- -14,
- -8
- ],
- [
- -7,
- -22
- ],
- [
- -10,
- -26
- ],
- [
- -20,
- -41
- ],
- [
- 8,
- -12
- ],
- [
- 31,
- -14
- ],
- [
- 14,
- -15
- ],
- [
- 21,
- -76
- ],
- [
- -5,
- -7
- ],
- [
- -2,
- -14
- ],
- [
- 19,
- -20
- ],
- [
- 6,
- -54
- ],
- [
- 15,
- -19
- ],
- [
- 23,
- -11
- ],
- [
- 28,
- 16
- ],
- [
- 23,
- 23
- ],
- [
- -1,
- 19
- ],
- [
- -15,
- 43
- ],
- [
- -3,
- 20
- ],
- [
- -11,
- 13
- ],
- [
- -4,
- -11
- ],
- [
- -7,
- 15
- ],
- [
- -1,
- 8
- ],
- [
- 7,
- 4
- ],
- [
- 7,
- -2
- ],
- [
- 9,
- -8
- ],
- [
- 23,
- -47
- ],
- [
- 6,
- -61
- ],
- [
- 2,
- -40
- ],
- [
- -3,
- -13
- ],
- [
- -7,
- 3
- ],
- [
- -12,
- -3
- ],
- [
- -60,
- -20
- ],
- [
- -13,
- -18
- ],
- [
- -31,
- -20
- ],
- [
- -2,
- 10
- ],
- [
- 3,
- 20
- ],
- [
- -2,
- 41
- ],
- [
- -6,
- 2
- ],
- [
- -48,
- -67
- ],
- [
- -18,
- -4
- ],
- [
- -15,
- -20
- ],
- [
- -4,
- 11
- ],
- [
- -3,
- 50
- ],
- [
- 10,
- 43
- ],
- [
- -5,
- -1
- ],
- [
- -10,
- -15
- ]
- ],
- [
- [
- 8572,
- 5436
- ],
- [
- -5,
- -1
- ]
- ],
- [
- [
- 8567,
- 5435
- ],
- [
- 5,
- 14
- ],
- [
- 15,
- 68
- ],
- [
- 7,
- 23
- ],
- [
- -7,
- -47
- ],
- [
- -11,
- -44
- ],
- [
- -4,
- -13
- ]
- ],
- [
- [
- 8604,
- 5603
- ],
- [
- 0,
- -11
- ],
- [
- -2,
- -18
- ],
- [
- -4,
- -7
- ],
- [
- 0,
- 18
- ],
- [
- -3,
- 6
- ],
- [
- -4,
- -7
- ],
- [
- -3,
- -9
- ],
- [
- -2,
- -35
- ],
- [
- -3,
- -17
- ],
- [
- -11,
- -5
- ],
- [
- -12,
- -46
- ],
- [
- -10,
- -26
- ],
- [
- -4,
- -16
- ]
- ],
- [
- [
- 8546,
- 5430
- ],
- [
- -16,
- -4
- ],
- [
- -26,
- -6
- ],
- [
- -7,
- -19
- ]
- ],
- [
- [
- 8497,
- 5401
- ],
- [
- -13,
- 8
- ],
- [
- -20,
- 0
- ],
- [
- 3,
- 24
- ],
- [
- 6,
- 22
- ],
- [
- -10,
- 21
- ],
- [
- -6,
- 3
- ],
- [
- -7,
- 9
- ],
- [
- 8,
- 18
- ],
- [
- 3,
- 19
- ],
- [
- -2,
- 23
- ],
- [
- 3,
- 18
- ],
- [
- -5,
- -3
- ],
- [
- -8,
- -18
- ],
- [
- -6,
- -8
- ],
- [
- -3,
- 17
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -11
- ],
- [
- -5,
- -6
- ],
- [
- -11,
- 15
- ],
- [
- -17,
- 17
- ],
- [
- -9,
- 31
- ],
- [
- -5,
- 23
- ],
- [
- 5,
- 43
- ],
- [
- 11,
- 7
- ],
- [
- 15,
- -7
- ],
- [
- 20,
- 0
- ],
- [
- -3,
- 10
- ],
- [
- -7,
- -2
- ],
- [
- -21,
- 35
- ],
- [
- -6,
- 20
- ],
- [
- -11,
- 6
- ],
- [
- -6,
- -20
- ],
- [
- -5,
- -5
- ],
- [
- 7,
- 43
- ],
- [
- 9,
- 2
- ],
- [
- 14,
- 12
- ],
- [
- -4,
- 26
- ],
- [
- -9,
- 11
- ],
- [
- -16,
- -14
- ],
- [
- 1,
- 18
- ],
- [
- 3,
- 22
- ],
- [
- 11,
- 0
- ],
- [
- 11,
- -7
- ],
- [
- 8,
- 37
- ],
- [
- 1,
- 16
- ],
- [
- -15,
- -24
- ],
- [
- -3,
- 52
- ],
- [
- 14,
- 50
- ],
- [
- 14,
- 21
- ],
- [
- 17,
- 0
- ],
- [
- 17,
- 3
- ],
- [
- -11,
- 9
- ],
- [
- -11,
- 5
- ],
- [
- 9,
- 20
- ],
- [
- 7,
- 3
- ],
- [
- 7,
- 17
- ],
- [
- -17,
- -2
- ],
- [
- 2,
- 32
- ],
- [
- -8,
- -6
- ],
- [
- -10,
- -3
- ],
- [
- -4,
- -14
- ],
- [
- 1,
- -23
- ],
- [
- -3,
- -15
- ],
- [
- -8,
- -12
- ],
- [
- -13,
- -9
- ],
- [
- -1,
- 16
- ],
- [
- -4,
- 7
- ],
- [
- -2,
- -34
- ],
- [
- -3,
- -12
- ],
- [
- -10,
- 32
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -9
- ],
- [
- -2,
- -17
- ],
- [
- -9,
- -8
- ],
- [
- 1,
- -20
- ],
- [
- -3,
- -12
- ],
- [
- -26,
- 18
- ],
- [
- -1,
- -6
- ],
- [
- 15,
- -38
- ],
- [
- 11,
- -14
- ],
- [
- 1,
- -21
- ],
- [
- -9,
- -17
- ],
- [
- -13,
- 15
- ],
- [
- -2,
- -1
- ],
- [
- 7,
- -26
- ],
- [
- 4,
- -22
- ],
- [
- -4,
- -19
- ],
- [
- 0,
- -23
- ],
- [
- -1,
- -22
- ],
- [
- -2,
- -18
- ],
- [
- 6,
- -85
- ],
- [
- 7,
- -23
- ],
- [
- 8,
- -22
- ],
- [
- 3,
- -20
- ],
- [
- -7,
- -3
- ],
- [
- -13,
- 17
- ],
- [
- -10,
- 12
- ],
- [
- -13,
- 42
- ],
- [
- -2,
- 16
- ],
- [
- -4,
- 13
- ],
- [
- 2,
- -30
- ],
- [
- 5,
- -33
- ],
- [
- 40,
- -75
- ],
- [
- 7,
- -29
- ],
- [
- 6,
- -22
- ],
- [
- -1,
- -22
- ],
- [
- -11,
- 15
- ],
- [
- -9,
- 20
- ],
- [
- -24,
- 22
- ],
- [
- -30,
- 14
- ],
- [
- -18,
- 51
- ],
- [
- 0,
- -21
- ],
- [
- -3,
- -18
- ],
- [
- -11,
- 22
- ],
- [
- -6,
- 19
- ],
- [
- -3,
- 20
- ],
- [
- -13,
- -1
- ],
- [
- -13,
- -18
- ],
- [
- -14,
- 4
- ],
- [
- -1,
- 35
- ],
- [
- 3,
- 19
- ],
- [
- 15,
- 44
- ],
- [
- 14,
- 22
- ],
- [
- 6,
- 29
- ],
- [
- -2,
- 45
- ]
- ],
- [
- [
- 8243,
- 5800
- ],
- [
- -11,
- 10
- ],
- [
- -20,
- 34
- ],
- [
- -31,
- 24
- ],
- [
- -4,
- 12
- ],
- [
- 0,
- 13
- ],
- [
- 5,
- 19
- ],
- [
- -10,
- 18
- ],
- [
- -23,
- 17
- ],
- [
- -10,
- 15
- ]
- ],
- [
- [
- 8139,
- 5962
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 19
- ],
- [
- -3,
- 12
- ],
- [
- -5,
- 5
- ],
- [
- -1,
- 8
- ],
- [
- 3,
- 10
- ],
- [
- -3,
- 12
- ],
- [
- -9,
- 13
- ],
- [
- -4,
- 11
- ],
- [
- 3,
- 9
- ],
- [
- -4,
- 5
- ],
- [
- -13,
- -1
- ],
- [
- -12,
- 9
- ],
- [
- -13,
- 19
- ],
- [
- -14,
- 3
- ],
- [
- -25,
- -19
- ],
- [
- -14,
- -4
- ],
- [
- -6,
- -11
- ],
- [
- -3,
- -18
- ],
- [
- -7,
- -9
- ],
- [
- -13,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -16,
- 6
- ],
- [
- -11,
- 11
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 10
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -6
- ],
- [
- -3,
- -17
- ],
- [
- -27,
- -47
- ],
- [
- -13,
- 10
- ],
- [
- -5,
- -1
- ],
- [
- -38,
- -66
- ],
- [
- -11,
- -10
- ],
- [
- -22,
- -30
- ],
- [
- 0,
- 51
- ],
- [
- 0,
- 52
- ],
- [
- 1,
- 51
- ],
- [
- 0,
- 52
- ]
- ],
- [
- [
- 7835,
- 6114
- ],
- [
- 40,
- 0
- ],
- [
- 40,
- 0
- ],
- [
- 40,
- 0
- ],
- [
- 40,
- 0
- ],
- [
- 40,
- 0
- ],
- [
- 40,
- 0
- ],
- [
- 40,
- 0
- ],
- [
- 40,
- 0
- ],
- [
- 40,
- 0
- ],
- [
- 40,
- 0
- ],
- [
- 40,
- 0
- ],
- [
- 40,
- 0
- ],
- [
- 40,
- 0
- ],
- [
- 40,
- 0
- ],
- [
- 40,
- 0
- ],
- [
- 40,
- 0
- ]
- ],
- [
- [
- 9716,
- 7915
- ],
- [
- -7,
- -8
- ],
- [
- -7,
- 3
- ],
- [
- 0,
- 20
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- -6
- ],
- [
- 6,
- -19
- ]
- ],
- [
- [
- 9791,
- 7970
- ],
- [
- -10,
- -8
- ],
- [
- -11,
- 4
- ],
- [
- 0,
- -21
- ],
- [
- -1,
- -8
- ],
- [
- -12,
- 11
- ],
- [
- -5,
- 7
- ],
- [
- 1,
- 28
- ],
- [
- 10,
- 27
- ],
- [
- 9,
- 10
- ],
- [
- 10,
- -7
- ],
- [
- 8,
- -30
- ],
- [
- 1,
- -13
- ]
- ],
- [
- [
- 9350,
- 7462
- ],
- [
- -14,
- 38
- ],
- [
- -3,
- 30
- ],
- [
- -15,
- 36
- ],
- [
- -6,
- 24
- ],
- [
- -3,
- 28
- ],
- [
- 1,
- 30
- ],
- [
- -1,
- 45
- ],
- [
- -1,
- 44
- ],
- [
- -2,
- 45
- ],
- [
- -1,
- 45
- ],
- [
- -1,
- 44
- ],
- [
- -2,
- 45
- ],
- [
- -1,
- 44
- ],
- [
- -1,
- 45
- ],
- [
- -2,
- 45
- ],
- [
- -1,
- 44
- ],
- [
- -1,
- 45
- ],
- [
- -2,
- 45
- ],
- [
- -1,
- 44
- ],
- [
- -1,
- 45
- ],
- [
- -2,
- 45
- ],
- [
- -1,
- 40
- ]
- ],
- [
- [
- 9289,
- 8358
- ],
- [
- 4,
- 6
- ],
- [
- 11,
- 11
- ],
- [
- 7,
- -2
- ],
- [
- 6,
- -17
- ],
- [
- 5,
- -11
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 16
- ],
- [
- 0,
- 23
- ],
- [
- 7,
- 15
- ],
- [
- 8,
- 3
- ],
- [
- 7,
- -1
- ],
- [
- 4,
- 8
- ],
- [
- -1,
- 11
- ],
- [
- -2,
- 17
- ],
- [
- 0,
- 21
- ],
- [
- 19,
- 38
- ],
- [
- 22,
- 25
- ],
- [
- 8,
- 12
- ],
- [
- 2,
- 26
- ],
- [
- 13,
- 27
- ],
- [
- 7,
- 15
- ],
- [
- 1,
- 13
- ],
- [
- -3,
- 17
- ],
- [
- 0,
- 31
- ],
- [
- 5,
- 37
- ],
- [
- 5,
- 41
- ],
- [
- 12,
- 37
- ],
- [
- 19,
- 40
- ],
- [
- 5,
- 52
- ],
- [
- 6,
- 55
- ],
- [
- 23,
- 54
- ],
- [
- 27,
- 62
- ],
- [
- 15,
- 34
- ],
- [
- 28,
- 64
- ],
- [
- 19,
- 45
- ],
- [
- 10,
- 21
- ],
- [
- 10,
- 24
- ],
- [
- 17,
- -7
- ],
- [
- 17,
- -8
- ],
- [
- -3,
- -35
- ],
- [
- 2,
- -18
- ],
- [
- 1,
- -8
- ],
- [
- 8,
- -15
- ],
- [
- 11,
- -10
- ],
- [
- 9,
- -4
- ],
- [
- 10,
- 1
- ],
- [
- 28,
- 20
- ],
- [
- 32,
- 13
- ],
- [
- 18,
- 12
- ],
- [
- 4,
- 11
- ],
- [
- 8,
- 4
- ],
- [
- 13,
- -3
- ],
- [
- 24,
- -29
- ],
- [
- 28,
- -43
- ],
- [
- 22,
- -34
- ],
- [
- 1,
- -59
- ],
- [
- 0,
- -63
- ],
- [
- 1,
- -66
- ],
- [
- 0,
- -47
- ],
- [
- 0,
- -65
- ],
- [
- 1,
- -52
- ],
- [
- 1,
- -67
- ],
- [
- 0,
- -36
- ],
- [
- 3,
- -11
- ],
- [
- -2,
- -14
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -8
- ],
- [
- -1,
- -9
- ],
- [
- -2,
- -9
- ],
- [
- -2,
- -11
- ],
- [
- 0,
- -6
- ],
- [
- -11,
- -6
- ],
- [
- 15,
- -28
- ],
- [
- 26,
- -27
- ],
- [
- 20,
- -5
- ],
- [
- 11,
- 7
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -15
- ],
- [
- -2,
- -14
- ],
- [
- -5,
- -7
- ],
- [
- -6,
- -5
- ],
- [
- -1,
- -11
- ],
- [
- 3,
- -11
- ],
- [
- 4,
- -10
- ],
- [
- 5,
- -18
- ],
- [
- -2,
- -15
- ],
- [
- -4,
- -13
- ],
- [
- -2,
- -13
- ],
- [
- 3,
- -11
- ],
- [
- 10,
- -15
- ],
- [
- 5,
- -15
- ],
- [
- 9,
- -8
- ],
- [
- 4,
- 6
- ],
- [
- 4,
- 7
- ],
- [
- 4,
- 6
- ],
- [
- 6,
- -3
- ],
- [
- 7,
- -5
- ],
- [
- 8,
- -5
- ],
- [
- -1,
- -12
- ],
- [
- 5,
- -21
- ],
- [
- 4,
- -39
- ],
- [
- -6,
- -18
- ],
- [
- 1,
- -24
- ],
- [
- 16,
- -7
- ],
- [
- 4,
- -7
- ],
- [
- 1,
- -9
- ],
- [
- -35,
- -62
- ],
- [
- -30,
- 9
- ],
- [
- -17,
- -16
- ],
- [
- -17,
- -5
- ],
- [
- -7,
- -27
- ],
- [
- -9,
- -6
- ],
- [
- -13,
- 2
- ],
- [
- -11,
- 7
- ],
- [
- -9,
- -4
- ],
- [
- -11,
- -49
- ],
- [
- -10,
- 4
- ],
- [
- -4,
- -17
- ],
- [
- -5,
- -8
- ],
- [
- -7,
- -7
- ],
- [
- -7,
- 22
- ],
- [
- -4,
- 21
- ],
- [
- -6,
- 5
- ],
- [
- -8,
- 5
- ],
- [
- -8,
- 0
- ],
- [
- -6,
- -3
- ],
- [
- -6,
- -14
- ],
- [
- -10,
- -11
- ],
- [
- -8,
- 9
- ],
- [
- -6,
- 16
- ],
- [
- -5,
- -25
- ],
- [
- -7,
- -26
- ],
- [
- 1,
- -31
- ],
- [
- -3,
- -18
- ],
- [
- -7,
- 4
- ],
- [
- -6,
- 16
- ],
- [
- -20,
- 13
- ],
- [
- -15,
- -1
- ],
- [
- 3,
- 17
- ],
- [
- 15,
- 25
- ],
- [
- -5,
- 4
- ],
- [
- -7,
- -3
- ],
- [
- -3,
- 3
- ],
- [
- 5,
- 23
- ],
- [
- 0,
- 24
- ],
- [
- -6,
- -8
- ],
- [
- -8,
- -26
- ],
- [
- -20,
- -21
- ],
- [
- 1,
- -34
- ],
- [
- -19,
- -71
- ],
- [
- -1,
- -30
- ],
- [
- -11,
- -24
- ],
- [
- -16,
- -21
- ],
- [
- -20,
- 6
- ],
- [
- -16,
- -18
- ],
- [
- -8,
- -21
- ],
- [
- -7,
- -3
- ],
- [
- -3,
- 26
- ],
- [
- -3,
- 8
- ],
- [
- -6,
- -38
- ],
- [
- -6,
- -3
- ],
- [
- -2,
- 28
- ],
- [
- -3,
- 18
- ],
- [
- -8,
- -16
- ],
- [
- -5,
- -41
- ],
- [
- -6,
- 3
- ],
- [
- -1,
- 16
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- -17
- ],
- [
- 2,
- -25
- ],
- [
- -3,
- -13
- ],
- [
- -5,
- 7
- ],
- [
- -6,
- 12
- ],
- [
- -9,
- -9
- ],
- [
- -8,
- -4
- ],
- [
- -1,
- 12
- ],
- [
- 2,
- 15
- ],
- [
- -17,
- -8
- ],
- [
- -20,
- -28
- ],
- [
- -16,
- -38
- ],
- [
- 6,
- -6
- ],
- [
- 6,
- -12
- ],
- [
- -27,
- -59
- ],
- [
- -28,
- -53
- ],
- [
- -21,
- -86
- ],
- [
- -9,
- -10
- ],
- [
- -7,
- -16
- ]
- ],
- [
- [
- 6710,
- 8280
- ],
- [
- -2,
- -5
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 6
- ],
- [
- -4,
- 17
- ],
- [
- 1,
- 4
- ],
- [
- 10,
- -2
- ],
- [
- 3,
- -8
- ],
- [
- 1,
- -12
- ]
- ],
- [
- [
- 6783,
- 8482
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- 5
- ],
- [
- 0,
- 18
- ],
- [
- 6,
- 33
- ],
- [
- 6,
- 15
- ],
- [
- 8,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -35
- ],
- [
- -2,
- -15
- ],
- [
- -8,
- -9
- ]
- ],
- [
- [
- 7146,
- 6928
- ],
- [
- -1,
- -2
- ],
- [
- -58,
- -4
- ],
- [
- -58,
- -4
- ],
- [
- -57,
- -3
- ],
- [
- -58,
- -4
- ]
- ],
- [
- [
- 6556,
- 6935
- ],
- [
- 11,
- 11
- ],
- [
- 19,
- 26
- ],
- [
- 10,
- 23
- ],
- [
- 10,
- 31
- ],
- [
- 9,
- 38
- ],
- [
- 20,
- 57
- ],
- [
- 9,
- 35
- ],
- [
- 10,
- 43
- ],
- [
- 7,
- 46
- ],
- [
- 4,
- 48
- ],
- [
- 2,
- 49
- ],
- [
- 0,
- 52
- ],
- [
- -5,
- 51
- ],
- [
- -9,
- 52
- ],
- [
- -5,
- 27
- ],
- [
- -1,
- 7
- ],
- [
- -17,
- 67
- ],
- [
- -18,
- 92
- ],
- [
- 0,
- 8
- ],
- [
- 17,
- 56
- ],
- [
- 1,
- 7
- ],
- [
- -2,
- 45
- ],
- [
- -4,
- 22
- ],
- [
- -9,
- 30
- ],
- [
- 1,
- 8
- ],
- [
- 18,
- 39
- ],
- [
- 10,
- 29
- ],
- [
- 10,
- 36
- ],
- [
- 7,
- 41
- ],
- [
- 3,
- 47
- ],
- [
- -1,
- 32
- ],
- [
- -3,
- 16
- ],
- [
- 1,
- 12
- ],
- [
- 3,
- 8
- ],
- [
- 20,
- 12
- ],
- [
- 6,
- 18
- ],
- [
- 2,
- 33
- ],
- [
- 4,
- 16
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 7
- ],
- [
- 6,
- 14
- ],
- [
- 7,
- 4
- ],
- [
- 9,
- -6
- ],
- [
- 13,
- 20
- ],
- [
- 16,
- 47
- ],
- [
- 13,
- 26
- ],
- [
- 9,
- 5
- ],
- [
- 1,
- -4
- ],
- [
- -5,
- -14
- ],
- [
- -2,
- -15
- ],
- [
- 2,
- -17
- ],
- [
- -1,
- -16
- ],
- [
- -5,
- -22
- ],
- [
- 3,
- -7
- ],
- [
- -7,
- -36
- ],
- [
- 0,
- -17
- ],
- [
- 4,
- -14
- ],
- [
- 5,
- 5
- ],
- [
- 6,
- 23
- ],
- [
- 2,
- 12
- ],
- [
- -3,
- 2
- ],
- [
- 1,
- 9
- ],
- [
- 4,
- 18
- ],
- [
- 4,
- 9
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -10
- ],
- [
- -1,
- -19
- ],
- [
- -10,
- -43
- ],
- [
- -2,
- -14
- ],
- [
- 3,
- -4
- ],
- [
- 11,
- 28
- ],
- [
- 9,
- 44
- ],
- [
- 7,
- 33
- ],
- [
- 2,
- 19
- ],
- [
- -3,
- 47
- ],
- [
- 1,
- 19
- ],
- [
- 3,
- 14
- ],
- [
- 9,
- 15
- ],
- [
- 17,
- 17
- ],
- [
- 17,
- 9
- ],
- [
- 16,
- 1
- ],
- [
- 11,
- 4
- ],
- [
- 7,
- 8
- ],
- [
- -2,
- 7
- ],
- [
- -11,
- 5
- ],
- [
- -9,
- 10
- ],
- [
- -5,
- 16
- ],
- [
- -2,
- 19
- ],
- [
- 2,
- 21
- ],
- [
- 7,
- 21
- ],
- [
- 12,
- 20
- ],
- [
- 3,
- 15
- ],
- [
- -4,
- 9
- ],
- [
- 5,
- 3
- ],
- [
- 15,
- -2
- ],
- [
- 10,
- 2
- ],
- [
- 6,
- 8
- ],
- [
- 14,
- -8
- ],
- [
- 22,
- -25
- ],
- [
- 21,
- -14
- ],
- [
- 20,
- -5
- ],
- [
- 15,
- -8
- ],
- [
- 9,
- -14
- ],
- [
- 7,
- -15
- ],
- [
- 4,
- -16
- ],
- [
- 9,
- -10
- ],
- [
- 15,
- -2
- ],
- [
- 12,
- -7
- ],
- [
- 9,
- -12
- ],
- [
- 47,
- -31
- ],
- [
- 20,
- -16
- ],
- [
- 11,
- -16
- ],
- [
- 3,
- -11
- ],
- [
- -1,
- -10
- ],
- [
- 2,
- -11
- ],
- [
- 8,
- -21
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -10
- ],
- [
- 0,
- -18
- ],
- [
- 3,
- -13
- ],
- [
- 4,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -14,
- 11
- ],
- [
- -9,
- -3
- ],
- [
- -3,
- -14
- ],
- [
- -1,
- -13
- ],
- [
- 3,
- -12
- ],
- [
- 18,
- -38
- ],
- [
- 5,
- -33
- ],
- [
- 1,
- -41
- ],
- [
- -2,
- -16
- ],
- [
- -2,
- -35
- ],
- [
- -2,
- -55
- ],
- [
- 0,
- -19
- ],
- [
- -6,
- -18
- ],
- [
- -17,
- -26
- ],
- [
- 0,
- 5
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- -4
- ],
- [
- -6,
- -22
- ],
- [
- -5,
- -41
- ],
- [
- -6,
- -22
- ],
- [
- -8,
- -4
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -9
- ],
- [
- -8,
- -5
- ],
- [
- -14,
- -3
- ],
- [
- -10,
- -13
- ],
- [
- -7,
- -35
- ],
- [
- 0,
- -16
- ],
- [
- -4,
- -21
- ],
- [
- 1,
- -18
- ],
- [
- 4,
- -15
- ],
- [
- 11,
- -15
- ],
- [
- 20,
- -15
- ],
- [
- 11,
- -2
- ],
- [
- 9,
- 6
- ],
- [
- 8,
- 24
- ],
- [
- 8,
- 10
- ],
- [
- 10,
- 4
- ],
- [
- 4,
- 11
- ],
- [
- 16,
- 49
- ],
- [
- 0,
- 11
- ],
- [
- -6,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 8,
- 2
- ],
- [
- 6,
- 6
- ],
- [
- 6,
- 11
- ],
- [
- 10,
- 9
- ],
- [
- 24,
- 13
- ],
- [
- 13,
- 14
- ],
- [
- 8,
- 2
- ],
- [
- 12,
- -7
- ],
- [
- 16,
- -18
- ],
- [
- 12,
- -26
- ],
- [
- 9,
- -34
- ],
- [
- 12,
- -89
- ],
- [
- 14,
- -143
- ],
- [
- 9,
- -80
- ],
- [
- 6,
- -17
- ],
- [
- 2,
- -8
- ],
- [
- -12,
- -112
- ],
- [
- -10,
- -46
- ],
- [
- -17,
- -27
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 27
- ],
- [
- -3,
- 10
- ],
- [
- -7,
- 5
- ],
- [
- -8,
- -3
- ],
- [
- -9,
- -10
- ],
- [
- -3,
- -11
- ],
- [
- 4,
- -10
- ],
- [
- -2,
- -10
- ],
- [
- -8,
- -8
- ],
- [
- -5,
- -20
- ],
- [
- -3,
- -31
- ],
- [
- -3,
- -19
- ],
- [
- -4,
- -8
- ],
- [
- -16,
- -11
- ],
- [
- -8,
- -10
- ],
- [
- -7,
- -15
- ],
- [
- -6,
- -23
- ],
- [
- -6,
- -33
- ],
- [
- -2,
- -25
- ],
- [
- 2,
- -14
- ],
- [
- -5,
- -9
- ],
- [
- -9,
- -17
- ],
- [
- -2,
- -6
- ],
- [
- 1,
- -10
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- -5
- ],
- [
- -8,
- -17
- ],
- [
- -13,
- -46
- ],
- [
- -3,
- -9
- ]
- ],
- [
- [
- 6955,
- 8570
- ],
- [
- 23,
- -6
- ],
- [
- 2,
- 3
- ],
- [
- 6,
- -11
- ],
- [
- 1,
- -9
- ],
- [
- -3,
- -7
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- -1
- ],
- [
- -8,
- 8
- ],
- [
- -14,
- 20
- ],
- [
- 1,
- 7
- ]
- ],
- [
- [
- 7138,
- 8647
- ],
- [
- 2,
- -9
- ],
- [
- -5,
- -13
- ],
- [
- -12,
- -7
- ],
- [
- -24,
- 1
- ],
- [
- -16,
- 5
- ],
- [
- -8,
- 9
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 11
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- -6
- ],
- [
- 8,
- 2
- ],
- [
- 10,
- 11
- ],
- [
- 6,
- 8
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 10
- ],
- [
- 3,
- 5
- ],
- [
- 13,
- -4
- ],
- [
- 5,
- -7
- ],
- [
- 9,
- -23
- ],
- [
- 4,
- -4
- ]
- ],
- [
- [
- 7031,
- 8741
- ],
- [
- -2,
- -2
- ],
- [
- -9,
- 15
- ],
- [
- -2,
- 10
- ],
- [
- 1,
- 8
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- -8
- ],
- [
- 3,
- -8
- ],
- [
- 1,
- -10
- ],
- [
- -1,
- -6
- ]
- ],
- [
- [
- 7029,
- 8788
- ],
- [
- 0,
- -9
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- 6
- ],
- [
- -3,
- 10
- ],
- [
- -5,
- 24
- ],
- [
- -7,
- 17
- ],
- [
- 11,
- 20
- ],
- [
- 6,
- 2
- ],
- [
- 6,
- -4
- ],
- [
- 1,
- -12
- ],
- [
- -5,
- -18
- ],
- [
- 1,
- -19
- ],
- [
- 5,
- -19
- ]
- ],
- [
- [
- 6427,
- 8283
- ],
- [
- -8,
- 5
- ],
- [
- -7,
- 16
- ],
- [
- -4,
- 16
- ],
- [
- -1,
- 17
- ],
- [
- 10,
- 41
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -5,
- 4
- ],
- [
- -13,
- -7
- ],
- [
- -13,
- -2
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 11
- ],
- [
- 2,
- 14
- ],
- [
- 8,
- 24
- ],
- [
- 0,
- 23
- ],
- [
- 4,
- 13
- ],
- [
- -4,
- 25
- ],
- [
- 1,
- 11
- ],
- [
- -5,
- 13
- ],
- [
- -15,
- 17
- ],
- [
- -33,
- 23
- ],
- [
- 3,
- 25
- ],
- [
- -1,
- 11
- ],
- [
- -8,
- 16
- ],
- [
- -35,
- 19
- ],
- [
- -24,
- 8
- ],
- [
- -24,
- 1
- ],
- [
- -17,
- 6
- ],
- [
- -19,
- 3
- ],
- [
- -12,
- 11
- ],
- [
- -12,
- 11
- ],
- [
- -13,
- 12
- ],
- [
- -12,
- 11
- ],
- [
- -21,
- 10
- ],
- [
- -22,
- 9
- ],
- [
- -22,
- 10
- ],
- [
- -21,
- 10
- ],
- [
- -22,
- 9
- ],
- [
- -22,
- 10
- ],
- [
- -21,
- 10
- ],
- [
- -22,
- 9
- ],
- [
- -5,
- 17
- ],
- [
- -5,
- 17
- ],
- [
- -4,
- 17
- ],
- [
- -5,
- 17
- ],
- [
- -10,
- 7
- ],
- [
- -6,
- 4
- ],
- [
- -3,
- 9
- ],
- [
- -9,
- -4
- ],
- [
- -4,
- 15
- ],
- [
- 1,
- 3
- ]
- ],
- [
- [
- 5942,
- 8881
- ],
- [
- 11,
- 4
- ],
- [
- 33,
- 20
- ],
- [
- 28,
- 26
- ],
- [
- 23,
- 30
- ],
- [
- 28,
- 19
- ],
- [
- 35,
- 6
- ],
- [
- 24,
- 11
- ],
- [
- 15,
- 15
- ],
- [
- 20,
- 28
- ],
- [
- 11,
- 8
- ],
- [
- 14,
- 3
- ],
- [
- 11,
- 11
- ],
- [
- 7,
- 19
- ],
- [
- 13,
- 22
- ],
- [
- 20,
- 25
- ],
- [
- 11,
- 10
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -8
- ],
- [
- -1,
- -13
- ],
- [
- 5,
- -10
- ],
- [
- 11,
- -8
- ],
- [
- 5,
- -11
- ],
- [
- -1,
- -13
- ],
- [
- 3,
- -11
- ],
- [
- 6,
- -9
- ],
- [
- 2,
- -20
- ],
- [
- -3,
- -31
- ],
- [
- 0,
- -20
- ],
- [
- 2,
- -9
- ],
- [
- 2,
- -5
- ],
- [
- 4,
- 5
- ],
- [
- 5,
- 11
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 29,
- 31
- ],
- [
- 5,
- 2
- ],
- [
- 10,
- -8
- ],
- [
- 43,
- -12
- ],
- [
- 18,
- -8
- ],
- [
- 18,
- -17
- ],
- [
- 6,
- -7
- ],
- [
- 22,
- -58
- ],
- [
- 10,
- -22
- ],
- [
- 6,
- -7
- ],
- [
- 4,
- -8
- ],
- [
- 3,
- -21
- ],
- [
- 3,
- -6
- ],
- [
- 33,
- -4
- ],
- [
- 14,
- 3
- ],
- [
- 9,
- 9
- ],
- [
- 10,
- -6
- ],
- [
- 11,
- -18
- ],
- [
- 11,
- -6
- ],
- [
- 11,
- 9
- ],
- [
- 10,
- -1
- ],
- [
- 9,
- -9
- ],
- [
- 4,
- -6
- ],
- [
- 3,
- 0
- ],
- [
- 19,
- 29
- ],
- [
- 22,
- 26
- ],
- [
- 29,
- 27
- ],
- [
- 18,
- 13
- ],
- [
- 4,
- -4
- ],
- [
- 28,
- 10
- ],
- [
- 24,
- 1
- ],
- [
- 33,
- -6
- ],
- [
- 30,
- 6
- ],
- [
- 28,
- 19
- ],
- [
- 25,
- 10
- ],
- [
- 21,
- 2
- ],
- [
- 8,
- -5
- ],
- [
- -5,
- -12
- ],
- [
- -3,
- -22
- ],
- [
- 0,
- -30
- ],
- [
- -2,
- -19
- ],
- [
- -3,
- -8
- ],
- [
- -1,
- -8
- ],
- [
- 3,
- -7
- ],
- [
- 21,
- -5
- ],
- [
- 11,
- -10
- ],
- [
- 12,
- 0
- ],
- [
- 14,
- 9
- ],
- [
- 11,
- -4
- ],
- [
- 7,
- -16
- ],
- [
- 11,
- -2
- ],
- [
- 11,
- 11
- ],
- [
- 7,
- 11
- ],
- [
- 7,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- -5
- ],
- [
- 4,
- -9
- ],
- [
- 9,
- -25
- ],
- [
- 4,
- -17
- ],
- [
- 3,
- -25
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -15
- ],
- [
- -6,
- -10
- ],
- [
- -2,
- -7
- ],
- [
- 4,
- -8
- ],
- [
- 20,
- -2
- ],
- [
- 9,
- -8
- ],
- [
- 4,
- -9
- ],
- [
- -2,
- -9
- ],
- [
- 1,
- -11
- ],
- [
- 5,
- -10
- ],
- [
- 16,
- -17
- ],
- [
- 4,
- -8
- ],
- [
- -1,
- -8
- ],
- [
- -5,
- -5
- ],
- [
- -8,
- -3
- ],
- [
- -63,
- 16
- ],
- [
- -19,
- 2
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 11
- ],
- [
- -6,
- 6
- ],
- [
- -8,
- 3
- ],
- [
- -8,
- -8
- ],
- [
- -9,
- -30
- ],
- [
- 2,
- -6
- ],
- [
- -2,
- -19
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- 1
- ],
- [
- -8,
- 4
- ],
- [
- -29,
- 46
- ],
- [
- -23,
- 24
- ],
- [
- -27,
- 16
- ],
- [
- -22,
- 9
- ],
- [
- -16,
- -1
- ],
- [
- -13,
- -12
- ],
- [
- -11,
- -23
- ],
- [
- -16,
- -13
- ],
- [
- -22,
- -3
- ],
- [
- -12,
- -7
- ],
- [
- -2,
- -9
- ],
- [
- -7,
- 0
- ],
- [
- -14,
- 9
- ],
- [
- -15,
- 2
- ],
- [
- -15,
- -3
- ],
- [
- -11,
- -10
- ],
- [
- -11,
- -28
- ],
- [
- -2,
- -14
- ],
- [
- -9,
- -12
- ],
- [
- -22,
- -20
- ],
- [
- -1,
- -7
- ],
- [
- -12,
- -21
- ],
- [
- -3,
- -12
- ],
- [
- 0,
- -12
- ],
- [
- -4,
- 1
- ],
- [
- -8,
- 13
- ],
- [
- 0,
- 18
- ],
- [
- 7,
- 22
- ],
- [
- 6,
- 11
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- 10
- ],
- [
- 1,
- 20
- ],
- [
- -2,
- 11
- ],
- [
- -11,
- -4
- ],
- [
- -6,
- -9
- ],
- [
- -7,
- -1
- ],
- [
- -9,
- 4
- ],
- [
- -8,
- -11
- ],
- [
- -7,
- -27
- ],
- [
- -8,
- -17
- ],
- [
- -9,
- -9
- ],
- [
- -6,
- 9
- ],
- [
- -3,
- 27
- ],
- [
- 0,
- 21
- ],
- [
- 3,
- 26
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- -9
- ],
- [
- -6,
- -21
- ],
- [
- -7,
- -46
- ],
- [
- -5,
- -15
- ],
- [
- -7,
- -6
- ],
- [
- -11,
- -28
- ],
- [
- -15,
- -50
- ],
- [
- -17,
- -48
- ],
- [
- -18,
- -47
- ],
- [
- -12,
- -25
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -9
- ],
- [
- -1,
- -19
- ]
- ],
- [
- [
- 6321,
- 9129
- ],
- [
- -4,
- -13
- ],
- [
- 1,
- -7
- ],
- [
- -21,
- -35
- ],
- [
- -8,
- -22
- ],
- [
- -6,
- -3
- ],
- [
- -5,
- 15
- ],
- [
- 0,
- 12
- ],
- [
- 5,
- 9
- ],
- [
- 5,
- 13
- ],
- [
- 1,
- 17
- ],
- [
- -2,
- 7
- ],
- [
- -7,
- -16
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- -24,
- 8
- ],
- [
- -8,
- 13
- ],
- [
- 2,
- 17
- ],
- [
- 8,
- 22
- ],
- [
- 29,
- 47
- ],
- [
- 13,
- 13
- ],
- [
- 36,
- 21
- ],
- [
- 20,
- 5
- ],
- [
- 20,
- 0
- ],
- [
- 15,
- -7
- ],
- [
- 9,
- -14
- ],
- [
- -9,
- -9
- ],
- [
- -40,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- 8,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- -7,
- -14
- ],
- [
- -35,
- -45
- ]
- ],
- [
- [
- 6194,
- 9418
- ],
- [
- -1,
- -7
- ],
- [
- 6,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -7,
- -6
- ],
- [
- -19,
- -13
- ],
- [
- -13,
- -4
- ],
- [
- -7,
- 5
- ],
- [
- -1,
- 8
- ],
- [
- 6,
- 12
- ],
- [
- 0,
- 6
- ],
- [
- -6,
- 0
- ],
- [
- 1,
- 5
- ],
- [
- 8,
- 9
- ],
- [
- 68,
- 61
- ],
- [
- 29,
- 22
- ],
- [
- 16,
- 7
- ],
- [
- 2,
- -3
- ],
- [
- -17,
- -23
- ],
- [
- -2,
- -9
- ],
- [
- 0,
- -7
- ],
- [
- -5,
- -12
- ],
- [
- -50,
- -42
- ],
- [
- -7,
- -4
- ]
- ],
- [
- [
- 5648,
- 8949
- ],
- [
- -4,
- 0
- ],
- [
- -12,
- -22
- ],
- [
- -5,
- -15
- ],
- [
- -11,
- -4
- ],
- [
- 0,
- -58
- ],
- [
- 0,
- -58
- ],
- [
- 0,
- -58
- ],
- [
- -1,
- -58
- ],
- [
- -5,
- -6
- ],
- [
- -7,
- -14
- ],
- [
- -10,
- -3
- ],
- [
- -47,
- -48
- ],
- [
- -8,
- -14
- ],
- [
- -8,
- -31
- ],
- [
- -15,
- -36
- ],
- [
- -4,
- -20
- ],
- [
- 1,
- -25
- ],
- [
- 23,
- -21
- ],
- [
- 9,
- -20
- ],
- [
- 4,
- -24
- ],
- [
- -1,
- -22
- ],
- [
- -11,
- -41
- ],
- [
- -3,
- -17
- ],
- [
- 2,
- -50
- ],
- [
- -6,
- -16
- ],
- [
- 5,
- -41
- ],
- [
- 0,
- -14
- ],
- [
- -4,
- -45
- ],
- [
- -2,
- -13
- ],
- [
- 4,
- -24
- ],
- [
- 1,
- -2
- ],
- [
- 22,
- -33
- ],
- [
- 18,
- -18
- ],
- [
- 17,
- -5
- ],
- [
- 13,
- -14
- ],
- [
- 9,
- -22
- ],
- [
- 13,
- -14
- ],
- [
- 15,
- -7
- ],
- [
- 17,
- -19
- ],
- [
- 24,
- -44
- ],
- [
- 13,
- -38
- ],
- [
- 21,
- -28
- ],
- [
- 35,
- -29
- ],
- [
- 23,
- -25
- ],
- [
- 11,
- -22
- ],
- [
- 7,
- -56
- ],
- [
- 6,
- -119
- ]
- ],
- [
- [
- 4895,
- 7636
- ],
- [
- 0,
- 90
- ],
- [
- 0,
- 90
- ],
- [
- 0,
- 91
- ],
- [
- 0,
- 90
- ],
- [
- 0,
- 91
- ],
- [
- 0,
- 90
- ],
- [
- 0,
- 90
- ],
- [
- 0,
- 91
- ],
- [
- -14,
- 30
- ],
- [
- -28,
- 24
- ],
- [
- -7,
- 15
- ],
- [
- -14,
- 36
- ],
- [
- -5,
- 15
- ],
- [
- -1,
- 12
- ],
- [
- 6,
- 14
- ],
- [
- 26,
- 38
- ],
- [
- 9,
- 18
- ],
- [
- 4,
- 18
- ],
- [
- 6,
- 40
- ]
- ],
- [
- [
- 4877,
- 8619
- ],
- [
- -3,
- 31
- ],
- [
- 2,
- 48
- ],
- [
- -5,
- 36
- ],
- [
- -1,
- 17
- ],
- [
- -4,
- 23
- ],
- [
- -19,
- 58
- ],
- [
- -5,
- 48
- ],
- [
- -5,
- 23
- ],
- [
- -2,
- 60
- ],
- [
- 1,
- 17
- ],
- [
- 4,
- 32
- ],
- [
- -8,
- 22
- ],
- [
- -2,
- 18
- ],
- [
- -4,
- 143
- ],
- [
- -2,
- 20
- ],
- [
- 1,
- 67
- ],
- [
- -16,
- 69
- ],
- [
- -7,
- 24
- ],
- [
- -4,
- 29
- ],
- [
- 1,
- 13
- ],
- [
- -13,
- 48
- ],
- [
- -8,
- 52
- ],
- [
- 1,
- 46
- ],
- [
- -3,
- 34
- ],
- [
- 1,
- 27
- ],
- [
- -2,
- 40
- ],
- [
- 3,
- 22
- ],
- [
- 0,
- 36
- ],
- [
- -17,
- 125
- ]
- ],
- [
- [
- 4761,
- 9847
- ],
- [
- 21,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 40,
- 0
- ],
- [
- 1,
- 85
- ],
- [
- 1,
- 67
- ],
- [
- 37,
- -8
- ],
- [
- 11,
- -12
- ],
- [
- 4,
- -6
- ],
- [
- -1,
- -19
- ],
- [
- 3,
- -56
- ],
- [
- 7,
- -47
- ],
- [
- 15,
- -56
- ],
- [
- 2,
- -22
- ],
- [
- 5,
- -14
- ],
- [
- 9,
- -13
- ],
- [
- 36,
- -15
- ],
- [
- 62,
- -18
- ],
- [
- 35,
- -21
- ],
- [
- 9,
- -24
- ],
- [
- 16,
- -9
- ],
- [
- 25,
- 5
- ],
- [
- 18,
- 9
- ],
- [
- 14,
- 23
- ],
- [
- 21,
- 5
- ],
- [
- 18,
- -2
- ],
- [
- 18,
- -2
- ],
- [
- 10,
- -3
- ],
- [
- 27,
- -18
- ],
- [
- 18,
- -14
- ],
- [
- 26,
- -27
- ],
- [
- 14,
- -12
- ],
- [
- 7,
- -28
- ],
- [
- 8,
- -36
- ],
- [
- 12,
- 0
- ],
- [
- 8,
- 21
- ],
- [
- 22,
- 4
- ],
- [
- 29,
- -15
- ],
- [
- 26,
- -42
- ],
- [
- 36,
- -37
- ],
- [
- 23,
- -19
- ],
- [
- 22,
- 0
- ],
- [
- 29,
- 19
- ],
- [
- 31,
- 35
- ],
- [
- 22,
- 7
- ],
- [
- 13,
- -4
- ],
- [
- 7,
- -28
- ],
- [
- 10,
- -10
- ],
- [
- 23,
- 3
- ],
- [
- 50,
- -6
- ],
- [
- 40,
- 8
- ],
- [
- 9,
- -16
- ],
- [
- 8,
- -25
- ],
- [
- 16,
- -8
- ],
- [
- 22,
- 8
- ],
- [
- 34,
- -6
- ],
- [
- -5,
- -4
- ],
- [
- -5,
- 1
- ],
- [
- -7,
- -6
- ],
- [
- -8,
- -13
- ],
- [
- -19,
- -19
- ],
- [
- -29,
- -24
- ],
- [
- -35,
- -22
- ],
- [
- -69,
- -39
- ],
- [
- -43,
- -42
- ],
- [
- -19,
- -24
- ],
- [
- -75,
- -125
- ],
- [
- -44,
- -66
- ],
- [
- -73,
- -93
- ],
- [
- -7,
- -12
- ],
- [
- 0,
- -11
- ]
- ],
- [
- [
- 6108,
- 4816
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ]
- ],
- [
- [
- 6089,
- 4816
- ],
- [
- 3,
- -30
- ],
- [
- -2,
- -21
- ],
- [
- -9,
- -9
- ],
- [
- -1,
- -12
- ],
- [
- 5,
- -14
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -11
- ],
- [
- 7,
- -21
- ],
- [
- -1,
- -25
- ],
- [
- -10,
- -30
- ],
- [
- -1,
- -12
- ]
- ],
- [
- [
- 5213,
- 4816
- ],
- [
- 0,
- 51
- ],
- [
- 0,
- 50
- ],
- [
- 0,
- 50
- ],
- [
- 0,
- 51
- ]
- ],
- [
- [
- 5086,
- 6226
- ],
- [
- -2,
- 4
- ],
- [
- -13,
- 34
- ],
- [
- -5,
- 41
- ],
- [
- -10,
- 27
- ],
- [
- -15,
- 12
- ],
- [
- -9,
- 28
- ],
- [
- -4,
- 41
- ],
- [
- -10,
- 42
- ],
- [
- -4,
- 13
- ]
- ],
- [
- [
- 6262,
- 2285
- ],
- [
- -2,
- -4
- ],
- [
- -15,
- 8
- ],
- [
- -9,
- 8
- ],
- [
- -2,
- 7
- ],
- [
- 26,
- -14
- ],
- [
- 2,
- -5
- ]
- ],
- [
- [
- 6290,
- 2347
- ],
- [
- -51,
- -6
- ],
- [
- -22,
- 21
- ],
- [
- -9,
- 4
- ],
- [
- -6,
- -1
- ],
- [
- -26,
- -19
- ],
- [
- -29,
- -14
- ],
- [
- -7,
- 4
- ],
- [
- -10,
- 1
- ],
- [
- -21,
- -49
- ],
- [
- -13,
- -12
- ]
- ],
- [
- [
- 5962,
- 4212
- ],
- [
- 44,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 46,
- -1
- ],
- [
- 47,
- 0
- ]
- ],
- [
- [
- 3586,
- 8619
- ],
- [
- 0,
- -94
- ],
- [
- 0,
- -93
- ],
- [
- 0,
- -94
- ],
- [
- 1,
- -93
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 3581,
- 8240
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -37,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- 0,
- -51
- ],
- [
- 0,
- -51
- ],
- [
- 0,
- -50
- ],
- [
- 0,
- -51
- ]
- ],
- [
- [
- 1500,
- 9847
- ],
- [
- 32,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 16,
- 0
- ],
- [
- 58,
- 0
- ],
- [
- 73,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 73,
- 0
- ],
- [
- 56,
- 0
- ],
- [
- 18,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 73,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 55,
- 0
- ]
- ],
- [
- [
- 3582,
- 9847
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -77
- ],
- [
- 0,
- -77
- ],
- [
- 1,
- -76
- ],
- [
- 0,
- -77
- ],
- [
- 0,
- -77
- ],
- [
- 0,
- -77
- ],
- [
- 1,
- -77
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -77
- ],
- [
- 0,
- -77
- ],
- [
- 1,
- -77
- ],
- [
- 0,
- -77
- ],
- [
- 0,
- -76
- ],
- [
- 0,
- -77
- ],
- [
- 1,
- -77
- ]
- ],
- [
- [
- 8343,
- 4073
- ],
- [
- -4,
- -1
- ],
- [
- -7,
- 4
- ],
- [
- -9,
- 9
- ],
- [
- -2,
- 6
- ],
- [
- 9,
- -2
- ],
- [
- 13,
- -16
- ]
- ],
- [
- [
- 8350,
- 4068
- ],
- [
- -4,
- -5
- ],
- [
- 16,
- 51
- ],
- [
- 31,
- 63
- ],
- [
- 9,
- 10
- ],
- [
- -26,
- -54
- ],
- [
- -26,
- -65
- ]
- ],
- [
- [
- 8476,
- 4288
- ],
- [
- -32,
- -28
- ],
- [
- -4,
- 1
- ],
- [
- 21,
- 21
- ],
- [
- 15,
- 6
- ]
- ],
- [
- [
- 8517,
- 4308
- ],
- [
- -24,
- -11
- ],
- [
- -2,
- 4
- ],
- [
- 27,
- 23
- ],
- [
- 8,
- 81
- ],
- [
- 2,
- 37
- ],
- [
- -4,
- 66
- ],
- [
- 0,
- 14
- ],
- [
- 4,
- -22
- ],
- [
- 4,
- -61
- ],
- [
- -2,
- -47
- ],
- [
- -7,
- -67
- ],
- [
- -6,
- -17
- ]
- ],
- [
- [
- 8501,
- 4556
- ],
- [
- -3,
- -8
- ],
- [
- -11,
- 45
- ],
- [
- 12,
- -15
- ],
- [
- 2,
- -12
- ],
- [
- 0,
- -10
- ]
- ],
- [
- [
- 8457,
- 4836
- ],
- [
- 5,
- 0
- ]
- ],
- [
- [
- 8462,
- 4836
- ],
- [
- 18,
- -129
- ],
- [
- 34,
- -141
- ],
- [
- 4,
- -24
- ],
- [
- -8,
- 21
- ],
- [
- -25,
- 93
- ],
- [
- -14,
- 68
- ],
- [
- -14,
- 112
- ]
- ],
- [
- [
- 7994,
- 3759
- ],
- [
- -25,
- 49
- ],
- [
- -24,
- 46
- ],
- [
- -23,
- 46
- ],
- [
- -24,
- 46
- ],
- [
- -23,
- 46
- ],
- [
- -23,
- 46
- ],
- [
- -24,
- 46
- ],
- [
- -23,
- 46
- ],
- [
- -25,
- 1
- ],
- [
- -24,
- 2
- ],
- [
- -25,
- 2
- ],
- [
- -24,
- 1
- ],
- [
- -25,
- 2
- ],
- [
- -24,
- 2
- ],
- [
- -24,
- 1
- ],
- [
- -25,
- 2
- ],
- [
- -1,
- 31
- ],
- [
- -1,
- 23
- ],
- [
- -15,
- 38
- ],
- [
- -9,
- 23
- ],
- [
- -19,
- -20
- ],
- [
- -1,
- 10
- ],
- [
- 1,
- 17
- ],
- [
- -2,
- 5
- ],
- [
- -6,
- 4
- ],
- [
- -27,
- 3
- ],
- [
- -27,
- 2
- ],
- [
- -28,
- 2
- ],
- [
- -27,
- 3
- ],
- [
- -28,
- 2
- ],
- [
- -27,
- 2
- ],
- [
- -28,
- 3
- ],
- [
- -27,
- 2
- ],
- [
- -7,
- 4
- ],
- [
- -12,
- -14
- ],
- [
- -32,
- -20
- ],
- [
- -16,
- -17
- ],
- [
- -6,
- 1
- ],
- [
- -28,
- -17
- ],
- [
- -28,
- -18
- ],
- [
- -3,
- 0
- ]
- ],
- [
- [
- 6996,
- 4207
- ],
- [
- 6,
- 86
- ],
- [
- 5,
- 19
- ],
- [
- 5,
- 5
- ],
- [
- 18,
- 0
- ],
- [
- 11,
- 10
- ],
- [
- 10,
- 52
- ],
- [
- 23,
- 40
- ],
- [
- 11,
- 10
- ],
- [
- 15,
- 8
- ],
- [
- 37,
- 10
- ],
- [
- 39,
- 39
- ],
- [
- 28,
- 38
- ],
- [
- 23,
- 10
- ],
- [
- 7,
- 14
- ],
- [
- 5,
- 18
- ],
- [
- 3,
- 24
- ],
- [
- 3,
- 5
- ],
- [
- 13,
- -2
- ],
- [
- 10,
- 21
- ],
- [
- 9,
- 12
- ],
- [
- 10,
- 7
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -18
- ],
- [
- 2,
- -6
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 4
- ],
- [
- 8,
- 12
- ],
- [
- 19,
- 36
- ],
- [
- 12,
- 13
- ],
- [
- 20,
- 8
- ],
- [
- 14,
- -19
- ],
- [
- 8,
- 7
- ],
- [
- 25,
- 74
- ],
- [
- 10,
- 13
- ],
- [
- 8,
- 6
- ],
- [
- 12,
- 1
- ],
- [
- 1,
- 20
- ],
- [
- 4,
- 31
- ],
- [
- 1,
- 21
- ],
- [
- 7,
- 30
- ]
- ],
- [
- [
- 7457,
- 4860
- ],
- [
- 3,
- -6
- ],
- [
- 63,
- -1
- ],
- [
- 63,
- -1
- ],
- [
- 62,
- -1
- ],
- [
- 63,
- -1
- ],
- [
- 63,
- -2
- ],
- [
- 62,
- -1
- ],
- [
- 63,
- -1
- ],
- [
- 63,
- -1
- ],
- [
- 63,
- -1
- ],
- [
- 62,
- -1
- ],
- [
- 63,
- -1
- ],
- [
- 63,
- -1
- ],
- [
- 62,
- -2
- ],
- [
- 63,
- -1
- ],
- [
- 63,
- -1
- ],
- [
- 43,
- 0
- ]
- ],
- [
- [
- 8444,
- 4837
- ],
- [
- -5,
- -32
- ],
- [
- 2,
- -18
- ],
- [
- 10,
- -18
- ],
- [
- 10,
- -47
- ],
- [
- 8,
- -62
- ],
- [
- -11,
- 25
- ],
- [
- -12,
- 14
- ],
- [
- -18,
- 10
- ],
- [
- -16,
- 18
- ],
- [
- 1,
- -26
- ],
- [
- -1,
- -28
- ],
- [
- -13,
- 9
- ],
- [
- -8,
- 9
- ],
- [
- 7,
- -30
- ],
- [
- -16,
- 9
- ],
- [
- -11,
- -2
- ],
- [
- -7,
- -26
- ],
- [
- -9,
- -16
- ],
- [
- -14,
- -5
- ],
- [
- -21,
- 24
- ],
- [
- -7,
- 29
- ],
- [
- -2,
- 33
- ],
- [
- -1,
- -39
- ],
- [
- 3,
- -40
- ],
- [
- -1,
- -31
- ],
- [
- 20,
- -5
- ],
- [
- 19,
- 5
- ],
- [
- 25,
- -1
- ],
- [
- 16,
- 5
- ],
- [
- 10,
- 10
- ],
- [
- 24,
- -8
- ],
- [
- 1,
- -37
- ],
- [
- -2,
- -37
- ],
- [
- -2,
- -39
- ],
- [
- 7,
- 0
- ],
- [
- 8,
- 13
- ],
- [
- 3,
- 70
- ],
- [
- 22,
- 25
- ],
- [
- 7,
- -1
- ],
- [
- 7,
- -23
- ],
- [
- 3,
- -23
- ],
- [
- 2,
- -31
- ],
- [
- -5,
- -48
- ],
- [
- -33,
- -56
- ],
- [
- -24,
- -51
- ],
- [
- -12,
- -11
- ],
- [
- -18,
- 6
- ],
- [
- -20,
- 13
- ],
- [
- -10,
- 3
- ],
- [
- -7,
- -4
- ],
- [
- -5,
- 16
- ],
- [
- -2,
- 29
- ],
- [
- -8,
- 9
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- -31
- ],
- [
- -19,
- -8
- ],
- [
- -25,
- 12
- ],
- [
- -26,
- 26
- ],
- [
- 11,
- -28
- ],
- [
- 66,
- -51
- ],
- [
- 7,
- -10
- ],
- [
- 7,
- -14
- ],
- [
- -9,
- -23
- ],
- [
- -7,
- -25
- ],
- [
- -2,
- -19
- ],
- [
- -2,
- -13
- ],
- [
- -26,
- -33
- ],
- [
- -14,
- 6
- ],
- [
- -37,
- 60
- ],
- [
- 17,
- -52
- ],
- [
- 13,
- -22
- ],
- [
- 27,
- -12
- ],
- [
- 50,
- 19
- ],
- [
- 16,
- -21
- ],
- [
- -13,
- -38
- ],
- [
- -14,
- -26
- ],
- [
- -17,
- -3
- ],
- [
- -16,
- -7
- ],
- [
- -4,
- -18
- ],
- [
- -11,
- -1
- ],
- [
- -17,
- -1
- ],
- [
- -27,
- -2
- ],
- [
- -15,
- 4
- ],
- [
- -20,
- -37
- ],
- [
- -8,
- -5
- ],
- [
- -11,
- 7
- ],
- [
- -4,
- 30
- ],
- [
- -5,
- 14
- ],
- [
- 0,
- -56
- ],
- [
- 2,
- -15
- ],
- [
- 4,
- -11
- ],
- [
- -24,
- -30
- ],
- [
- -23,
- -38
- ],
- [
- -8,
- -10
- ],
- [
- -10,
- -19
- ],
- [
- -19,
- -55
- ],
- [
- -4,
- -40
- ],
- [
- -7,
- -44
- ],
- [
- -1,
- 20
- ],
- [
- 1,
- 33
- ],
- [
- -5,
- 39
- ],
- [
- -3,
- -71
- ],
- [
- -7,
- -33
- ],
- [
- -68,
- 3
- ],
- [
- -27,
- -17
- ]
- ],
- [
- [
- 4877,
- 8619
- ],
- [
- -40,
- 0
- ],
- [
- -41,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -41,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -41,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -41,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -41,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -41,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -41,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -41,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -41,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -41,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -41,
- 0
- ],
- [
- -40,
- 0
- ],
- [
- -40,
- 0
- ]
- ],
- [
- [
- 3582,
- 9847
- ],
- [
- 18,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 73,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 73,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 53,
- 0
- ]
- ],
- [
- [
- 3584,
- 6629
- ],
- [
- 0,
- 100
- ],
- [
- -1,
- 101
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 100
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 101
- ],
- [
- -1,
- 100
- ]
- ],
- [
- [
- 3582,
- 7434
- ],
- [
- 60,
- 0
- ],
- [
- 60,
- 0
- ],
- [
- 60,
- 0
- ],
- [
- 60,
- 0
- ],
- [
- 60,
- 0
- ],
- [
- 60,
- 0
- ],
- [
- 60,
- 0
- ],
- [
- 60,
- 0
- ],
- [
- 60,
- 0
- ],
- [
- 60,
- 0
- ],
- [
- 60,
- 0
- ],
- [
- 60,
- 0
- ],
- [
- 60,
- 0
- ],
- [
- 60,
- 0
- ],
- [
- 60,
- 0
- ],
- [
- 68,
- 0
- ],
- [
- 52,
- -60
- ],
- [
- 31,
- -19
- ],
- [
- 14,
- 18
- ],
- [
- 32,
- 10
- ],
- [
- 49,
- 3
- ],
- [
- 31,
- -8
- ],
- [
- 13,
- -20
- ],
- [
- 25,
- -21
- ],
- [
- 37,
- -24
- ],
- [
- 22,
- -25
- ],
- [
- 8,
- -28
- ],
- [
- 13,
- -18
- ],
- [
- 13,
- -5
- ]
- ],
- [
- [
- 9350,
- 7462
- ],
- [
- -8,
- -52
- ],
- [
- -5,
- -26
- ]
- ],
- [
- [
- 9050,
- 7325
- ],
- [
- -3,
- 15
- ],
- [
- -10,
- 25
- ],
- [
- -2,
- 11
- ],
- [
- 0,
- 12
- ],
- [
- 6,
- 32
- ],
- [
- 4,
- 10
- ],
- [
- 4,
- 19
- ],
- [
- 6,
- 75
- ],
- [
- 5,
- 43
- ],
- [
- 4,
- 80
- ],
- [
- 4,
- 23
- ],
- [
- 4,
- 14
- ],
- [
- 7,
- 38
- ],
- [
- 13,
- 30
- ],
- [
- 9,
- 38
- ],
- [
- 10,
- 32
- ],
- [
- 1,
- 20
- ],
- [
- 8,
- 41
- ],
- [
- 5,
- 75
- ],
- [
- 5,
- 11
- ],
- [
- 24,
- 10
- ],
- [
- 7,
- 8
- ],
- [
- 25,
- 31
- ],
- [
- 7,
- 12
- ],
- [
- 5,
- 13
- ],
- [
- 4,
- 21
- ],
- [
- 3,
- 6
- ],
- [
- 0,
- 11
- ],
- [
- -8,
- 49
- ],
- [
- -1,
- 17
- ],
- [
- 19,
- 55
- ],
- [
- -4,
- 32
- ],
- [
- 3,
- 8
- ]
- ],
- [
- [
- 9214,
- 8242
- ],
- [
- 17,
- 78
- ],
- [
- 16,
- 36
- ],
- [
- 22,
- -12
- ],
- [
- 12,
- 1
- ],
- [
- 8,
- 13
- ]
- ],
- [
- [
- 8761,
- 6097
- ],
- [
- -20,
- -61
- ],
- [
- -1,
- 12
- ],
- [
- 26,
- 75
- ],
- [
- -5,
- -26
- ]
- ],
- [
- [
- 8598,
- 6219
- ],
- [
- 9,
- 13
- ],
- [
- 20,
- 25
- ],
- [
- 30,
- 31
- ],
- [
- -42,
- 101
- ],
- [
- -10,
- 6
- ],
- [
- -11,
- 49
- ],
- [
- -13,
- 14
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 38
- ],
- [
- 1,
- 22
- ],
- [
- 2,
- 13
- ],
- [
- 11,
- 10
- ],
- [
- 6,
- 22
- ],
- [
- 0,
- 12
- ],
- [
- -8,
- 35
- ],
- [
- 0,
- 11
- ],
- [
- 16,
- 21
- ],
- [
- 20,
- 42
- ],
- [
- 12,
- 45
- ],
- [
- 5,
- 14
- ],
- [
- 6,
- 9
- ],
- [
- 14,
- 13
- ]
- ],
- [
- [
- 8663,
- 6772
- ],
- [
- 17,
- -18
- ],
- [
- 17,
- -19
- ],
- [
- 18,
- -18
- ],
- [
- 17,
- -19
- ],
- [
- 17,
- -18
- ],
- [
- 17,
- -18
- ],
- [
- 17,
- -19
- ],
- [
- 17,
- -18
- ]
- ],
- [
- [
- 8800,
- 6625
- ],
- [
- -3,
- -31
- ],
- [
- -17,
- -64
- ],
- [
- -7,
- -15
- ],
- [
- -9,
- -13
- ],
- [
- -6,
- -5
- ],
- [
- -6,
- -11
- ],
- [
- -7,
- -16
- ],
- [
- -7,
- -32
- ],
- [
- 4,
- -29
- ],
- [
- 34,
- -10
- ],
- [
- 8,
- 9
- ],
- [
- 5,
- -21
- ],
- [
- 3,
- -29
- ],
- [
- -3,
- -32
- ],
- [
- -6,
- -32
- ],
- [
- -4,
- -39
- ],
- [
- -3,
- -61
- ],
- [
- -6,
- -54
- ],
- [
- 0,
- 17
- ],
- [
- 3,
- 66
- ],
- [
- -5,
- -7
- ],
- [
- -4,
- -15
- ],
- [
- -10,
- -86
- ],
- [
- -14,
- -45
- ],
- [
- -13,
- -31
- ],
- [
- -13,
- 5
- ],
- [
- 3,
- -25
- ],
- [
- -4,
- -13
- ],
- [
- -3,
- -27
- ],
- [
- -8,
- -18
- ],
- [
- -7,
- 1
- ],
- [
- -11,
- -12
- ],
- [
- -4,
- -9
- ],
- [
- -1,
- -19
- ],
- [
- -7,
- -16
- ],
- [
- -25,
- -83
- ],
- [
- -23,
- -24
- ],
- [
- -5,
- 4
- ],
- [
- 6,
- 39
- ],
- [
- 4,
- 39
- ],
- [
- -14,
- 18
- ],
- [
- -13,
- 9
- ],
- [
- -15,
- -2
- ],
- [
- -16,
- 31
- ],
- [
- -21,
- 23
- ],
- [
- -30,
- 60
- ],
- [
- 1,
- 17
- ],
- [
- -1,
- 28
- ],
- [
- 9,
- 45
- ],
- [
- 9,
- 31
- ],
- [
- 12,
- 16
- ],
- [
- 34,
- 16
- ],
- [
- 9,
- 25
- ],
- [
- 5,
- 21
- ]
- ],
- [
- [
- 3761,
- 4816
- ],
- [
- -8,
- 0
- ],
- [
- 0,
- -113
- ],
- [
- 0,
- -113
- ],
- [
- 0,
- -114
- ],
- [
- -1,
- -113
- ],
- [
- 0,
- -113
- ],
- [
- 0,
- -113
- ],
- [
- 0,
- -113
- ],
- [
- -1,
- -114
- ],
- [
- 0,
- -113
- ],
- [
- 0,
- -113
- ],
- [
- 0,
- -113
- ],
- [
- -1,
- -114
- ],
- [
- 0,
- -113
- ],
- [
- 0,
- -113
- ],
- [
- 0,
- -113
- ],
- [
- -1,
- -113
- ],
- [
- -39,
- 0
- ],
- [
- -39,
- 0
- ],
- [
- -38,
- 0
- ],
- [
- -39,
- -1
- ],
- [
- -39,
- 0
- ],
- [
- -39,
- 0
- ],
- [
- -39,
- 0
- ],
- [
- -39,
- 0
- ],
- [
- -39,
- 0
- ],
- [
- -39,
- 0
- ],
- [
- -39,
- 0
- ],
- [
- -39,
- 0
- ],
- [
- -39,
- 0
- ],
- [
- -39,
- 0
- ],
- [
- -39,
- 0
- ],
- [
- -39,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 18,
- -73
- ],
- [
- 21,
- -21
- ]
- ],
- [
- [
- 3164,
- 2910
- ],
- [
- -1,
- 1
- ],
- [
- -39,
- 0
- ],
- [
- -38,
- 1
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 1
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 1
- ],
- [
- -38,
- 0
- ],
- [
- -38,
- 1
- ],
- [
- 0,
- -46
- ],
- [
- 0,
- -45
- ],
- [
- 0,
- -45
- ],
- [
- -1,
- -46
- ],
- [
- -61,
- 0
- ],
- [
- -61,
- 0
- ],
- [
- -22,
- 0
- ]
- ],
- [
- [
- 3761,
- 5018
- ],
- [
- 0,
- -51
- ],
- [
- 0,
- -50
- ],
- [
- 0,
- -50
- ],
- [
- 0,
- -51
- ]
- ],
- [
- [
- 816,
- 7031
- ],
- [
- 64,
- 0
- ],
- [
- 65,
- 0
- ],
- [
- 65,
- 0
- ],
- [
- 64,
- 0
- ],
- [
- 65,
- 0
- ],
- [
- 64,
- 0
- ],
- [
- 65,
- 0
- ],
- [
- 65,
- 0
- ]
- ],
- [
- [
- 1848,
- 7031
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -62
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -62
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -62
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -62
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ],
- [
- 0,
- -63
- ]
- ],
- [
- [
- 8752,
- 6436
- ],
- [
- -9,
- -2
- ],
- [
- 9,
- 39
- ],
- [
- 15,
- 18
- ],
- [
- 5,
- -4
- ],
- [
- 1,
- -14
- ],
- [
- -3,
- -11
- ],
- [
- -10,
- -18
- ],
- [
- -8,
- -8
- ]
- ],
- [
- [
- 9042,
- 6623
- ],
- [
- -12,
- -26
- ],
- [
- 11,
- -3
- ],
- [
- 10,
- 8
- ],
- [
- 9,
- 15
- ],
- [
- 21,
- 21
- ],
- [
- 18,
- 9
- ],
- [
- 5,
- 2
- ],
- [
- 9,
- -15
- ],
- [
- 17,
- 12
- ],
- [
- 17,
- 7
- ],
- [
- -75,
- -67
- ],
- [
- -16,
- -8
- ],
- [
- -22,
- -20
- ],
- [
- -20,
- -14
- ],
- [
- -16,
- -5
- ],
- [
- -74,
- -50
- ],
- [
- -6,
- -1
- ],
- [
- -7,
- 5
- ],
- [
- -61,
- -26
- ],
- [
- -25,
- -3
- ],
- [
- -23,
- -9
- ],
- [
- 17,
- 21
- ],
- [
- 0,
- 8
- ],
- [
- -4,
- 6
- ],
- [
- -9,
- -2
- ],
- [
- -10,
- -21
- ],
- [
- -14,
- -7
- ],
- [
- -3,
- 23
- ],
- [
- 5,
- 18
- ],
- [
- 6,
- 17
- ],
- [
- 15,
- 26
- ],
- [
- 21,
- 17
- ],
- [
- 11,
- 15
- ],
- [
- 7,
- -13
- ],
- [
- 2,
- 17
- ],
- [
- 6,
- 10
- ],
- [
- 6,
- 6
- ],
- [
- 15,
- 0
- ],
- [
- 8,
- 3
- ],
- [
- 6,
- 5
- ],
- [
- 6,
- 2
- ],
- [
- 16,
- -8
- ],
- [
- 16,
- 2
- ],
- [
- 13,
- 11
- ],
- [
- 14,
- 3
- ],
- [
- 35,
- 3
- ],
- [
- 35,
- 8
- ],
- [
- 14,
- 14
- ],
- [
- 30,
- 40
- ],
- [
- 17,
- 11
- ],
- [
- -26,
- -46
- ],
- [
- -15,
- -21
- ]
- ],
- [
- [
- 7930,
- 7443
- ],
- [
- -5,
- -14
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 8
- ],
- [
- 1,
- 11
- ],
- [
- 4,
- 5
- ],
- [
- 13,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -8
- ]
- ],
- [
- [
- 8392,
- 7832
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 9
- ],
- [
- 3,
- 5
- ],
- [
- 5,
- 3
- ],
- [
- 0,
- -4
- ],
- [
- -6,
- -12
- ]
- ],
- [
- [
- 8418,
- 7948
- ],
- [
- -5,
- -3
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 6
- ],
- [
- 8,
- 0
- ],
- [
- -1,
- -5
- ],
- [
- -6,
- -7
- ]
- ],
- [
- [
- 8896,
- 8241
- ],
- [
- 2,
- -26
- ],
- [
- -4,
- -32
- ],
- [
- 3,
- -34
- ],
- [
- -4,
- -72
- ],
- [
- 11,
- -55
- ],
- [
- -3,
- -37
- ],
- [
- 1,
- -40
- ],
- [
- -2,
- -10
- ],
- [
- -9,
- -23
- ],
- [
- -5,
- -23
- ],
- [
- -2,
- -22
- ],
- [
- 0,
- -15
- ],
- [
- 7,
- -66
- ],
- [
- 1,
- -28
- ],
- [
- 0,
- -17
- ],
- [
- -6,
- -54
- ],
- [
- -1,
- -16
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 17
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- -4
- ],
- [
- 11,
- -26
- ],
- [
- -1,
- -45
- ],
- [
- 0,
- -33
- ],
- [
- -1,
- -37
- ],
- [
- 0,
- -56
- ],
- [
- -1,
- -40
- ],
- [
- 0,
- -37
- ],
- [
- -1,
- -29
- ],
- [
- -2,
- -21
- ],
- [
- 5,
- -24
- ]
- ],
- [
- [
- 8848,
- 6625
- ],
- [
- -7,
- -11
- ],
- [
- -19,
- -35
- ],
- [
- -12,
- -19
- ],
- [
- -10,
- -6
- ],
- [
- -7,
- -16
- ],
- [
- -7,
- -10
- ],
- [
- 7,
- 35
- ],
- [
- 7,
- 30
- ],
- [
- 6,
- 57
- ],
- [
- -1,
- 47
- ],
- [
- -8,
- 19
- ],
- [
- -8,
- 13
- ],
- [
- 9,
- -46
- ],
- [
- 2,
- -56
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 8663,
- 6772
- ],
- [
- -4,
- 15
- ],
- [
- -6,
- 12
- ],
- [
- -31,
- 20
- ],
- [
- -8,
- 14
- ],
- [
- -7,
- 18
- ],
- [
- -5,
- 22
- ],
- [
- -3,
- 24
- ],
- [
- 0,
- 18
- ],
- [
- 3,
- 21
- ],
- [
- -7,
- 14
- ],
- [
- -1,
- 13
- ],
- [
- -4,
- 9
- ],
- [
- -20,
- 16
- ],
- [
- -6,
- 21
- ],
- [
- -14,
- 21
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -23,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 1
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -23,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -23,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -23,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- -24,
- 0
- ],
- [
- 0,
- 55
- ],
- [
- 0,
- 54
- ],
- [
- 0,
- 2
- ]
- ],
- [
- [
- 7786,
- 7142
- ],
- [
- 10,
- 10
- ],
- [
- 33,
- 36
- ],
- [
- 17,
- 27
- ],
- [
- 17,
- 22
- ],
- [
- 19,
- 18
- ],
- [
- 14,
- 22
- ],
- [
- 11,
- 28
- ],
- [
- 12,
- 20
- ],
- [
- 13,
- 14
- ],
- [
- 7,
- 14
- ],
- [
- 1,
- 15
- ],
- [
- -2,
- 20
- ],
- [
- -6,
- 25
- ],
- [
- -1,
- 20
- ],
- [
- 4,
- 14
- ],
- [
- 1,
- 10
- ],
- [
- -2,
- 5
- ],
- [
- -27,
- 14
- ],
- [
- 1,
- 70
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 63,
- 31
- ],
- [
- 40,
- 11
- ],
- [
- 49,
- 3
- ],
- [
- 58,
- -16
- ],
- [
- 23,
- -13
- ],
- [
- 14,
- -18
- ],
- [
- 17,
- -5
- ],
- [
- 19,
- 9
- ],
- [
- 26,
- 2
- ],
- [
- 33,
- -2
- ],
- [
- 18,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 8
- ],
- [
- 9,
- 10
- ],
- [
- 25,
- 15
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- 7
- ],
- [
- 7,
- 18
- ],
- [
- 12,
- 19
- ],
- [
- 19,
- 22
- ],
- [
- 17,
- 11
- ],
- [
- 15,
- 1
- ],
- [
- 10,
- 5
- ],
- [
- 5,
- 10
- ],
- [
- 1,
- 9
- ],
- [
- -2,
- 7
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 35
- ],
- [
- -3,
- 16
- ],
- [
- -4,
- 13
- ],
- [
- -5,
- 7
- ],
- [
- 0,
- 9
- ],
- [
- 9,
- 10
- ],
- [
- 0,
- -10
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- 4
- ],
- [
- 10,
- 21
- ],
- [
- 1,
- 8
- ],
- [
- 7,
- 8
- ],
- [
- 5,
- 13
- ],
- [
- -6,
- 2
- ],
- [
- -13,
- -4
- ],
- [
- -3,
- 4
- ],
- [
- 7,
- 17
- ],
- [
- -1,
- 9
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- 2
- ],
- [
- -15,
- -15
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 8
- ],
- [
- -7,
- 17
- ],
- [
- 20,
- 31
- ],
- [
- 70,
- 86
- ],
- [
- 7,
- 14
- ],
- [
- 3,
- 11
- ],
- [
- -2,
- 10
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 67,
- 110
- ],
- [
- 39,
- 52
- ],
- [
- 32,
- 28
- ],
- [
- 24,
- 14
- ],
- [
- 16,
- -2
- ],
- [
- 9,
- 2
- ],
- [
- 8,
- 0
- ],
- [
- 41,
- 0
- ],
- [
- 72,
- 0
- ],
- [
- 72,
- 0
- ],
- [
- 42,
- 0
- ]
- ],
- [
- [
- 7655,
- 6486
- ],
- [
- -21,
- -18
- ],
- [
- -3,
- -16
- ],
- [
- 6,
- -21
- ],
- [
- 3,
- -26
- ],
- [
- 1,
- -33
- ],
- [
- -12,
- -72
- ],
- [
- -23,
- -111
- ],
- [
- -12,
- -70
- ],
- [
- -1,
- -29
- ],
- [
- -15,
- -37
- ],
- [
- -30,
- -47
- ],
- [
- -22,
- -28
- ],
- [
- -12,
- -9
- ],
- [
- -10,
- 1
- ],
- [
- -9,
- 11
- ],
- [
- -9,
- -8
- ],
- [
- -10,
- -26
- ],
- [
- -9,
- -14
- ],
- [
- -9,
- -1
- ],
- [
- -8,
- -17
- ],
- [
- -6,
- -33
- ],
- [
- -6,
- -19
- ],
- [
- -5,
- -6
- ],
- [
- -1,
- -17
- ],
- [
- 5,
- -28
- ],
- [
- -1,
- -11
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- -7
- ],
- [
- -6,
- -16
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 21
- ],
- [
- -6,
- 14
- ],
- [
- -9,
- 9
- ],
- [
- -12,
- -19
- ],
- [
- -16,
- -48
- ],
- [
- -7,
- -31
- ],
- [
- 3,
- -21
- ],
- [
- 1,
- -31
- ],
- [
- -4,
- -13
- ],
- [
- -8,
- -5
- ],
- [
- -7,
- -17
- ],
- [
- -5,
- -29
- ],
- [
- -12,
- -18
- ],
- [
- -19,
- -8
- ],
- [
- -20,
- 13
- ]
- ],
- [
- [
- 7146,
- 6928
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -7
- ],
- [
- 16,
- -4
- ],
- [
- 11,
- -9
- ],
- [
- 8,
- -12
- ],
- [
- 30,
- -25
- ],
- [
- 9,
- -15
- ],
- [
- 10,
- -9
- ],
- [
- 9,
- -1
- ],
- [
- 6,
- 5
- ],
- [
- 3,
- 11
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- -10
- ],
- [
- 17,
- -11
- ],
- [
- 0,
- -3
- ],
- [
- -47,
- -18
- ],
- [
- -10,
- -9
- ],
- [
- 12,
- -6
- ],
- [
- 12,
- 2
- ],
- [
- 12,
- 9
- ],
- [
- 14,
- -1
- ],
- [
- 12,
- -4
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 21,
- -24
- ],
- [
- 7,
- -3
- ],
- [
- 8,
- 2
- ],
- [
- 8,
- 9
- ],
- [
- 18,
- 12
- ],
- [
- 28,
- 15
- ],
- [
- 27,
- 6
- ],
- [
- 26,
- -3
- ],
- [
- 16,
- 4
- ],
- [
- 15,
- 15
- ],
- [
- 33,
- 50
- ],
- [
- 38,
- 39
- ],
- [
- 62,
- 50
- ],
- [
- 61,
- 39
- ]
- ],
- [
- [
- 7655,
- 7027
- ],
- [
- 0,
- -34
- ],
- [
- 0,
- -42
- ],
- [
- 0,
- -42
- ],
- [
- 0,
- -43
- ],
- [
- 0,
- -42
- ],
- [
- 0,
- -42
- ],
- [
- 0,
- -42
- ],
- [
- 0,
- -43
- ],
- [
- 0,
- -42
- ],
- [
- 0,
- -42
- ],
- [
- 0,
- -42
- ],
- [
- 0,
- -42
- ],
- [
- 0,
- -43
- ]
- ],
- [
- [
- 5236,
- 3667
- ],
- [
- -39,
- 21
- ],
- [
- -10,
- 13
- ],
- [
- -18,
- 15
- ],
- [
- -16,
- 30
- ],
- [
- -32,
- 37
- ],
- [
- -12,
- 9
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- -18
- ],
- [
- -17,
- -15
- ],
- [
- -10,
- 0
- ],
- [
- -16,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 11
- ],
- [
- -6,
- 8
- ],
- [
- -5,
- -6
- ],
- [
- -25,
- -16
- ],
- [
- -3,
- -11
- ],
- [
- -14,
- 0
- ],
- [
- -14,
- 8
- ],
- [
- -34,
- -25
- ],
- [
- -12,
- -19
- ],
- [
- -12,
- -7
- ],
- [
- -6,
- -18
- ],
- [
- -4,
- 2
- ],
- [
- -13,
- 23
- ],
- [
- -13,
- 7
- ],
- [
- -18,
- 23
- ],
- [
- -1,
- 20
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- -2
- ],
- [
- -8,
- -17
- ],
- [
- -4,
- -4
- ],
- [
- -5,
- 0
- ],
- [
- -18,
- 12
- ],
- [
- -7,
- 21
- ],
- [
- -4,
- 6
- ],
- [
- -4,
- 1
- ],
- [
- -7,
- -6
- ],
- [
- -4,
- -23
- ],
- [
- -4,
- -6
- ],
- [
- -7,
- -4
- ],
- [
- 0,
- -11
- ],
- [
- -6,
- -32
- ],
- [
- -4,
- -6
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- 8
- ],
- [
- -3,
- 11
- ],
- [
- -2,
- 10
- ],
- [
- 3,
- 25
- ],
- [
- -2,
- 8
- ],
- [
- -3,
- 3
- ],
- [
- -9,
- -12
- ],
- [
- -7,
- 0
- ],
- [
- -10,
- -11
- ],
- [
- -6,
- -4
- ],
- [
- -5,
- 3
- ],
- [
- -9,
- 19
- ],
- [
- -16,
- 12
- ],
- [
- -6,
- 23
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- -7
- ],
- [
- -18,
- -30
- ],
- [
- -8,
- -9
- ],
- [
- -7,
- -2
- ],
- [
- -7,
- 3
- ],
- [
- -4,
- 8
- ],
- [
- -1,
- 29
- ],
- [
- -4,
- 9
- ],
- [
- -16,
- 19
- ],
- [
- -4,
- 18
- ],
- [
- -1,
- 24
- ],
- [
- -20,
- -3
- ],
- [
- -25,
- 2
- ],
- [
- -11,
- -22
- ],
- [
- -6,
- -4
- ],
- [
- -7,
- 5
- ],
- [
- -20,
- 29
- ],
- [
- -21,
- -6
- ],
- [
- -12,
- 3
- ],
- [
- -29,
- 22
- ],
- [
- -23,
- 2
- ],
- [
- -10,
- 4
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- 33
- ],
- [
- -9,
- 28
- ],
- [
- -3,
- 8
- ],
- [
- -16,
- 20
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -22
- ],
- [
- -4,
- -1
- ],
- [
- -18,
- 6
- ],
- [
- -17,
- -7
- ],
- [
- -9,
- 11
- ],
- [
- -32,
- 52
- ],
- [
- -12,
- 13
- ],
- [
- -11,
- 4
- ],
- [
- 0,
- 48
- ],
- [
- 0,
- 49
- ],
- [
- 0,
- 48
- ],
- [
- 0,
- 48
- ],
- [
- 0,
- 48
- ],
- [
- 0,
- 48
- ],
- [
- 0,
- 49
- ],
- [
- 0,
- 48
- ],
- [
- 0,
- 48
- ],
- [
- 0,
- 48
- ],
- [
- 0,
- 48
- ],
- [
- 0,
- 48
- ],
- [
- 0,
- 49
- ],
- [
- 0,
- 48
- ],
- [
- 0,
- 48
- ],
- [
- 0,
- 48
- ],
- [
- -33,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -33,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -33,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -33,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -33,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -33,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -32,
- 0
- ],
- [
- -33,
- 0
- ],
- [
- -32,
- 0
- ]
- ],
- [
- [
- 258,
- 8704
- ],
- [
- 17,
- 10
- ],
- [
- 14,
- -8
- ],
- [
- 17,
- -18
- ],
- [
- 17,
- -55
- ],
- [
- 17,
- -92
- ],
- [
- 4,
- -30
- ],
- [
- 13,
- -19
- ],
- [
- 15,
- -1
- ],
- [
- 62,
- -14
- ],
- [
- 9,
- 1
- ],
- [
- 12,
- 4
- ],
- [
- 35,
- 35
- ],
- [
- 38,
- 11
- ],
- [
- 45,
- -2
- ],
- [
- 28,
- -10
- ],
- [
- 10,
- -18
- ],
- [
- 24,
- -1
- ],
- [
- 57,
- 20
- ],
- [
- 63,
- 14
- ],
- [
- 34,
- 15
- ],
- [
- 38,
- 31
- ],
- [
- 88,
- 38
- ],
- [
- 43,
- 5
- ],
- [
- 22,
- 14
- ],
- [
- 6,
- 8
- ],
- [
- 3,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 46,
- 1
- ],
- [
- 46,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 46,
- 0
- ],
- [
- 42,
- 0
- ]
- ],
- [
- [
- 83,
- 7031
- ],
- [
- -22,
- 49
- ],
- [
- -9,
- 74
- ],
- [
- -2,
- 30
- ],
- [
- 3,
- 82
- ],
- [
- -7,
- 35
- ],
- [
- -16,
- 57
- ],
- [
- 7,
- 50
- ],
- [
- 7,
- 31
- ],
- [
- 19,
- 132
- ],
- [
- 4,
- 11
- ],
- [
- 8,
- 0
- ],
- [
- 14,
- 22
- ],
- [
- -6,
- 5
- ],
- [
- -10,
- -10
- ],
- [
- 9,
- 52
- ],
- [
- 9,
- 45
- ],
- [
- 6,
- 16
- ],
- [
- 3,
- 147
- ],
- [
- 6,
- 112
- ],
- [
- 9,
- 37
- ],
- [
- -3,
- 38
- ],
- [
- 3,
- 51
- ],
- [
- -2,
- 53
- ],
- [
- 19,
- 251
- ],
- [
- -3,
- 30
- ],
- [
- 6,
- 41
- ],
- [
- -5,
- 107
- ],
- [
- 2,
- 120
- ],
- [
- -5,
- 15
- ],
- [
- -2,
- 16
- ],
- [
- 4,
- 3
- ],
- [
- 9,
- -18
- ],
- [
- 42,
- 0
- ],
- [
- 26,
- 17
- ],
- [
- 9,
- -6
- ],
- [
- 12,
- -22
- ],
- [
- 14,
- -4
- ],
- [
- 17,
- 4
- ]
- ],
- [
- [
- 8598,
- 6219
- ],
- [
- -17,
- -36
- ],
- [
- -26,
- -12
- ],
- [
- -13,
- -13
- ],
- [
- -4,
- -7
- ]
- ],
- [
- [
- 7835,
- 6114
- ],
- [
- -22,
- 0
- ],
- [
- -23,
- 0
- ],
- [
- -22,
- 0
- ],
- [
- -23,
- 0
- ],
- [
- -22,
- 0
- ],
- [
- -23,
- 0
- ],
- [
- -23,
- 0
- ],
- [
- -22,
- 0
- ],
- [
- 0,
- 46
- ],
- [
- 0,
- 47
- ],
- [
- 0,
- 46
- ],
- [
- 0,
- 47
- ],
- [
- 0,
- 47
- ],
- [
- 0,
- 46
- ],
- [
- 0,
- 47
- ],
- [
- 0,
- 46
- ]
- ],
- [
- [
- 7655,
- 7027
- ],
- [
- 32,
- 20
- ],
- [
- 14,
- 14
- ],
- [
- 15,
- 14
- ],
- [
- 7,
- 8
- ],
- [
- 9,
- 7
- ],
- [
- 54,
- 52
- ]
- ],
- [
- [
- 9241,
- 6824
- ],
- [
- -5,
- -8
- ],
- [
- -2,
- 20
- ],
- [
- 3,
- 22
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -11
- ],
- [
- -1,
- -23
- ]
- ],
- [
- [
- 9262,
- 6826
- ],
- [
- -9,
- -11
- ],
- [
- -9,
- 2
- ],
- [
- 5,
- 15
- ],
- [
- 2,
- 22
- ],
- [
- 4,
- 24
- ],
- [
- 3,
- 7
- ],
- [
- 6,
- 7
- ],
- [
- -2,
- -66
- ]
- ],
- [
- [
- 9263,
- 6913
- ],
- [
- -6,
- -10
- ],
- [
- -7,
- 15
- ],
- [
- -3,
- 17
- ],
- [
- -5,
- 10
- ],
- [
- -6,
- 4
- ],
- [
- 5,
- -38
- ],
- [
- -11,
- -28
- ],
- [
- -3,
- -72
- ],
- [
- -14,
- -30
- ],
- [
- -42,
- -20
- ],
- [
- -13,
- 2
- ]
- ],
- [
- [
- 7994,
- 3759
- ],
- [
- -3,
- -1
- ],
- [
- -45,
- -60
- ],
- [
- -14,
- -26
- ],
- [
- -38,
- -102
- ],
- [
- -10,
- -65
- ],
- [
- -7,
- 27
- ],
- [
- 2,
- 21
- ],
- [
- 0,
- 16
- ],
- [
- -10,
- -36
- ],
- [
- 9,
- -52
- ],
- [
- -8,
- -20
- ],
- [
- -25,
- -38
- ],
- [
- -13,
- -6
- ],
- [
- -16,
- -10
- ],
- [
- -4,
- -37
- ],
- [
- -21,
- -34
- ],
- [
- -12,
- -15
- ],
- [
- -23,
- 9
- ],
- [
- 7,
- -33
- ],
- [
- -8,
- -25
- ],
- [
- -14,
- -19
- ],
- [
- -17,
- -12
- ],
- [
- -10,
- 1
- ],
- [
- -9,
- -6
- ],
- [
- -7,
- -16
- ],
- [
- -16,
- -15
- ],
- [
- -17,
- 8
- ],
- [
- -19,
- 5
- ],
- [
- -11,
- -8
- ],
- [
- 18,
- -15
- ],
- [
- 10,
- -21
- ],
- [
- -2,
- -29
- ],
- [
- -5,
- -11
- ],
- [
- -12,
- -15
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 14
- ],
- [
- -3,
- 28
- ],
- [
- -6,
- -6
- ],
- [
- 0,
- -13
- ],
- [
- -5,
- -5
- ],
- [
- -16,
- 45
- ],
- [
- 1,
- -34
- ],
- [
- 5,
- -26
- ],
- [
- 6,
- -14
- ],
- [
- 5,
- -7
- ],
- [
- 2,
- -13
- ],
- [
- -11,
- -29
- ],
- [
- -6,
- -7
- ],
- [
- -10,
- -5
- ],
- [
- -6,
- -18
- ],
- [
- 2,
- -16
- ]
- ],
- [
- [
- 3582,
- 7434
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 100
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 101
- ],
- [
- -1,
- 100
- ],
- [
- 0,
- 101
- ],
- [
- 0,
- 101
- ]
- ],
- [
- [
- 7110,
- 4858
- ],
- [
- 39,
- 0
- ],
- [
- 84,
- -1
- ],
- [
- 59,
- -1
- ],
- [
- 49,
- 0
- ],
- [
- 29,
- 0
- ],
- [
- 37,
- -1
- ],
- [
- 8,
- 9
- ],
- [
- 18,
- -2
- ],
- [
- 24,
- -2
- ]
- ],
- [
- [
- 4770,
- 651
- ],
- [
- -2,
- -18
- ],
- [
- -14,
- 87
- ],
- [
- -24,
- 198
- ],
- [
- 0,
- 112
- ],
- [
- 3,
- 39
- ],
- [
- 6,
- -159
- ],
- [
- 26,
- -202
- ],
- [
- 5,
- -57
- ]
- ],
- [
- [
- 4739,
- 1111
- ],
- [
- -6,
- -24
- ],
- [
- 2,
- 35
- ],
- [
- 14,
- 78
- ],
- [
- 29,
- 104
- ],
- [
- 12,
- 17
- ],
- [
- -33,
- -113
- ],
- [
- -18,
- -97
- ]
- ],
- [
- [
- 4798,
- 1353
- ],
- [
- -4,
- -1
- ],
- [
- 8,
- 33
- ],
- [
- 2,
- 13
- ],
- [
- 13,
- 42
- ],
- [
- 8,
- 6
- ],
- [
- 3,
- -18
- ],
- [
- -14,
- -29
- ],
- [
- -16,
- -46
- ]
- ],
- [
- [
- 4841,
- 1454
- ],
- [
- -7,
- -2
- ],
- [
- 8,
- 22
- ],
- [
- 13,
- 11
- ],
- [
- 28,
- 42
- ],
- [
- 12,
- 3
- ],
- [
- 6,
- 14
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- -17
- ],
- [
- -23,
- -25
- ],
- [
- -38,
- -50
- ]
- ],
- [
- [
- 5140,
- 1854
- ],
- [
- -9,
- -4
- ],
- [
- 38,
- 62
- ],
- [
- 8,
- 21
- ],
- [
- 10,
- -1
- ],
- [
- -17,
- -35
- ],
- [
- -30,
- -43
- ]
- ],
- [
- [
- 5355,
- 2189
- ],
- [
- -8,
- 1
- ],
- [
- -18,
- -66
- ],
- [
- 10,
- -38
- ],
- [
- 0,
- -13
- ],
- [
- -37,
- -8
- ],
- [
- -82,
- -75
- ],
- [
- -32,
- -40
- ],
- [
- 2,
- 14
- ],
- [
- 39,
- 52
- ],
- [
- -14,
- 8
- ],
- [
- -22,
- -13
- ],
- [
- -8,
- 5
- ],
- [
- 9,
- 43
- ],
- [
- -3,
- 38
- ],
- [
- -15,
- 1
- ],
- [
- -10,
- -30
- ],
- [
- -7,
- 1
- ],
- [
- -9,
- 13
- ],
- [
- -7,
- -4
- ],
- [
- 5,
- -69
- ],
- [
- 10,
- -28
- ],
- [
- 8,
- -36
- ],
- [
- -23,
- -45
- ],
- [
- -21,
- -37
- ],
- [
- -2,
- -36
- ],
- [
- -21,
- -46
- ],
- [
- -20,
- -27
- ],
- [
- -46,
- -62
- ],
- [
- -13,
- -13
- ],
- [
- -21,
- -29
- ],
- [
- -29,
- -21
- ],
- [
- -28,
- -34
- ],
- [
- -9,
- -6
- ],
- [
- 17,
- 29
- ],
- [
- 21,
- 29
- ],
- [
- -18,
- -4
- ],
- [
- -27,
- 13
- ],
- [
- -17,
- 1
- ],
- [
- -1,
- -10
- ],
- [
- -12,
- -15
- ],
- [
- -14,
- 22
- ],
- [
- -6,
- 14
- ],
- [
- -2,
- 13
- ],
- [
- -6,
- 3
- ],
- [
- -6,
- -6
- ],
- [
- 20,
- -89
- ],
- [
- 9,
- -3
- ],
- [
- 9,
- -9
- ],
- [
- -11,
- -21
- ],
- [
- -13,
- -16
- ],
- [
- -20,
- -10
- ],
- [
- -17,
- 32
- ],
- [
- -3,
- -40
- ],
- [
- -3,
- -41
- ],
- [
- -5,
- -10
- ],
- [
- -9,
- -15
- ],
- [
- -5,
- 11
- ],
- [
- -2,
- 16
- ],
- [
- -6,
- -14
- ],
- [
- -9,
- -11
- ],
- [
- -14,
- -2
- ],
- [
- -10,
- -5
- ],
- [
- 0,
- -17
- ],
- [
- 3,
- -17
- ],
- [
- 18,
- 13
- ],
- [
- -7,
- -43
- ],
- [
- -17,
- -43
- ],
- [
- -14,
- -10
- ],
- [
- -21,
- 6
- ],
- [
- -5,
- -4
- ],
- [
- -5,
- -9
- ],
- [
- 25,
- -67
- ],
- [
- -16,
- -101
- ],
- [
- -10,
- -37
- ],
- [
- -7,
- -5
- ],
- [
- -8,
- -1
- ],
- [
- -27,
- 33
- ],
- [
- -15,
- 25
- ],
- [
- 13,
- -69
- ],
- [
- 36,
- -20
- ],
- [
- 2,
- -26
- ],
- [
- 0,
- -22
- ],
- [
- -7,
- -26
- ],
- [
- -7,
- -34
- ],
- [
- 5,
- -24
- ],
- [
- 5,
- -60
- ],
- [
- 5,
- -27
- ],
- [
- 6,
- -83
- ],
- [
- 5,
- -36
- ],
- [
- 33,
- -133
- ],
- [
- 11,
- -1
- ],
- [
- 2,
- -14
- ],
- [
- -1,
- -27
- ],
- [
- -24,
- -8
- ],
- [
- -10,
- -13
- ],
- [
- -2,
- -10
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- 0
- ],
- [
- -11,
- 8
- ],
- [
- -26,
- 38
- ],
- [
- -37,
- 23
- ],
- [
- -49,
- 9
- ],
- [
- -33,
- 19
- ],
- [
- -18,
- 29
- ],
- [
- -18,
- 17
- ],
- [
- -20,
- 5
- ],
- [
- -16,
- 15
- ],
- [
- -13,
- 26
- ],
- [
- -18,
- 17
- ],
- [
- -25,
- 7
- ],
- [
- -16,
- 19
- ],
- [
- -11,
- 47
- ],
- [
- 0,
- 1
- ],
- [
- -10,
- 79
- ],
- [
- -13,
- 49
- ],
- [
- -24,
- 62
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 10
- ],
- [
- 3,
- 35
- ],
- [
- -2,
- 26
- ],
- [
- -8,
- 21
- ],
- [
- -2,
- 22
- ],
- [
- 4,
- 23
- ],
- [
- 1,
- 28
- ],
- [
- -4,
- 33
- ],
- [
- -16,
- 35
- ],
- [
- -27,
- 38
- ],
- [
- -24,
- 55
- ],
- [
- -19,
- 73
- ],
- [
- -19,
- 50
- ],
- [
- -19,
- 28
- ],
- [
- -13,
- 35
- ],
- [
- -7,
- 40
- ],
- [
- -2,
- 23
- ],
- [
- 3,
- 7
- ],
- [
- -12,
- 45
- ],
- [
- -26,
- 83
- ],
- [
- -15,
- 61
- ],
- [
- -4,
- 39
- ],
- [
- -16,
- 46
- ],
- [
- -30,
- 53
- ],
- [
- -16,
- 35
- ],
- [
- -4,
- 24
- ],
- [
- -45,
- 70
- ],
- [
- -14,
- 43
- ],
- [
- -10,
- 14
- ],
- [
- -12,
- -1
- ],
- [
- -6,
- 4
- ],
- [
- -1,
- 10
- ],
- [
- -3,
- 0
- ],
- [
- -8,
- -9
- ],
- [
- -24,
- -2
- ],
- [
- -42,
- 6
- ],
- [
- -29,
- 12
- ],
- [
- -19,
- 18
- ],
- [
- -13,
- -2
- ],
- [
- -7,
- -24
- ],
- [
- -16,
- -15
- ],
- [
- -24,
- -7
- ],
- [
- -20,
- -43
- ],
- [
- -18,
- -81
- ],
- [
- -7,
- -52
- ],
- [
- 2,
- -23
- ],
- [
- -5,
- -17
- ],
- [
- -11,
- -10
- ],
- [
- -11,
- -23
- ],
- [
- -12,
- -37
- ],
- [
- -13,
- -17
- ],
- [
- -16,
- 1
- ],
- [
- -29,
- 28
- ],
- [
- -41,
- 55
- ],
- [
- -33,
- 34
- ],
- [
- -24,
- 12
- ],
- [
- -21,
- 26
- ],
- [
- -18,
- 38
- ],
- [
- -17,
- 25
- ],
- [
- -15,
- 12
- ],
- [
- -18,
- 42
- ],
- [
- -20,
- 71
- ],
- [
- -11,
- 55
- ],
- [
- 0,
- 58
- ],
- [
- -26,
- 126
- ],
- [
- -15,
- 55
- ],
- [
- -10,
- 25
- ],
- [
- -21,
- 30
- ],
- [
- -31,
- 35
- ],
- [
- -41,
- 70
- ],
- [
- -52,
- 105
- ],
- [
- -36,
- 63
- ],
- [
- -22,
- 21
- ],
- [
- -18,
- 38
- ],
- [
- -16,
- 54
- ],
- [
- -16,
- 35
- ],
- [
- -1,
- 1
- ]
- ],
- [
- [
- 2366,
- 7031
- ],
- [
- 0,
- -50
- ],
- [
- 0,
- -50
- ],
- [
- 0,
- -51
- ],
- [
- 0,
- -50
- ],
- [
- 0,
- -50
- ],
- [
- 0,
- -51
- ],
- [
- 0,
- -50
- ],
- [
- 0,
- -50
- ],
- [
- 44,
- 0
- ],
- [
- 43,
- 0
- ],
- [
- 43,
- 0
- ],
- [
- 44,
- 0
- ],
- [
- 43,
- 0
- ],
- [
- 44,
- 0
- ],
- [
- 43,
- 0
- ],
- [
- 43,
- 0
- ]
- ],
- [
- [
- 8546,
- 5430
- ],
- [
- -38,
- -159
- ],
- [
- 1,
- -29
- ],
- [
- -7,
- -9
- ],
- [
- -12,
- -8
- ],
- [
- -12,
- -17
- ],
- [
- -8,
- -20
- ],
- [
- -7,
- -51
- ],
- [
- -14,
- -59
- ],
- [
- -9,
- 25
- ],
- [
- -2,
- 20
- ],
- [
- 4,
- 55
- ],
- [
- 15,
- 89
- ],
- [
- 17,
- 55
- ],
- [
- 12,
- 26
- ],
- [
- 11,
- 53
- ]
- ],
- [
- [
- 8572,
- 5436
- ],
- [
- -19,
- -61
- ],
- [
- -8,
- -7
- ],
- [
- 22,
- 67
- ]
- ],
- [
- [
- 8259,
- 5778
- ],
- [
- -2,
- -46
- ],
- [
- -8,
- -22
- ],
- [
- -13,
- -18
- ],
- [
- -17,
- -30
- ],
- [
- -4,
- -29
- ],
- [
- -5,
- -53
- ],
- [
- 7,
- -18
- ],
- [
- 7,
- -5
- ],
- [
- 21,
- 12
- ],
- [
- 11,
- -5
- ],
- [
- 25,
- -65
- ],
- [
- 45,
- -25
- ],
- [
- 17,
- -16
- ],
- [
- 13,
- -34
- ],
- [
- 20,
- -19
- ],
- [
- 16,
- -28
- ],
- [
- 0,
- -18
- ],
- [
- -5,
- -22
- ],
- [
- -2,
- -29
- ],
- [
- -7,
- -19
- ],
- [
- -16,
- -2
- ],
- [
- -10,
- 5
- ],
- [
- -52,
- 103
- ],
- [
- -6,
- 9
- ],
- [
- -19,
- 54
- ],
- [
- -23,
- 29
- ],
- [
- -7,
- 0
- ],
- [
- 32,
- -54
- ],
- [
- 14,
- -37
- ],
- [
- 23,
- -52
- ],
- [
- 16,
- -23
- ],
- [
- 13,
- -34
- ],
- [
- 11,
- -17
- ],
- [
- 31,
- -23
- ],
- [
- -11,
- -16
- ],
- [
- 17,
- -14
- ],
- [
- 3,
- -26
- ],
- [
- -2,
- -30
- ],
- [
- -24,
- 12
- ],
- [
- 0,
- -22
- ],
- [
- 2,
- -13
- ],
- [
- -11,
- -11
- ],
- [
- -15,
- 15
- ],
- [
- -38,
- 79
- ],
- [
- 1,
- -11
- ],
- [
- 3,
- -12
- ],
- [
- 22,
- -51
- ],
- [
- 20,
- -30
- ],
- [
- 16,
- -14
- ],
- [
- 13,
- -26
- ],
- [
- 5,
- -15
- ],
- [
- 3,
- -24
- ],
- [
- -10,
- -15
- ],
- [
- -11,
- -9
- ],
- [
- -10,
- 16
- ],
- [
- -8,
- 16
- ],
- [
- -17,
- 29
- ],
- [
- -5,
- 32
- ],
- [
- -12,
- -2
- ],
- [
- -53,
- 40
- ],
- [
- -42,
- 5
- ],
- [
- 4,
- -8
- ],
- [
- 6,
- -6
- ],
- [
- 33,
- -10
- ],
- [
- 13,
- -18
- ],
- [
- 28,
- -17
- ],
- [
- 16,
- -4
- ],
- [
- 7,
- -51
- ],
- [
- 22,
- -34
- ],
- [
- 3,
- -26
- ],
- [
- 16,
- -3
- ],
- [
- 26,
- 25
- ],
- [
- 18,
- -9
- ],
- [
- 25,
- -7
- ],
- [
- 6,
- -20
- ],
- [
- 4,
- -39
- ],
- [
- 9,
- -44
- ],
- [
- 5,
- -43
- ]
- ],
- [
- [
- 8457,
- 4836
- ],
- [
- -13,
- 1
- ]
- ],
- [
- [
- 7404,
- 5235
- ],
- [
- 2,
- -13
- ],
- [
- -3,
- -14
- ],
- [
- 6,
- -17
- ],
- [
- 4,
- -25
- ],
- [
- 7,
- -16
- ],
- [
- 8,
- -13
- ],
- [
- 13,
- -11
- ],
- [
- 16,
- -19
- ],
- [
- 13,
- -6
- ],
- [
- 4,
- 1
- ],
- [
- 14,
- 19
- ],
- [
- 11,
- 10
- ],
- [
- 12,
- 21
- ],
- [
- 21,
- -29
- ],
- [
- 9,
- 0
- ],
- [
- 21,
- 13
- ],
- [
- 19,
- 3
- ],
- [
- 5,
- 4
- ],
- [
- 8,
- 11
- ],
- [
- 0,
- 24
- ],
- [
- 1,
- 6
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 8,
- -9
- ],
- [
- 9,
- 0
- ],
- [
- 37,
- 27
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -13
- ],
- [
- 17,
- 17
- ],
- [
- 9,
- 14
- ],
- [
- 4,
- 23
- ],
- [
- 8,
- 22
- ],
- [
- -1,
- 10
- ],
- [
- -6,
- 13
- ],
- [
- 7,
- 30
- ],
- [
- 10,
- 29
- ],
- [
- 38,
- 90
- ],
- [
- 12,
- 54
- ],
- [
- 15,
- 35
- ],
- [
- 5,
- 27
- ],
- [
- 12,
- 28
- ],
- [
- 8,
- 56
- ],
- [
- 5,
- 12
- ],
- [
- 8,
- 1
- ],
- [
- 7,
- -7
- ],
- [
- 5,
- -10
- ],
- [
- 4,
- -17
- ],
- [
- 18,
- -15
- ],
- [
- 16,
- -2
- ],
- [
- 11,
- 11
- ],
- [
- 7,
- 20
- ],
- [
- 9,
- 37
- ],
- [
- 8,
- 22
- ],
- [
- 5,
- 28
- ],
- [
- 6,
- 19
- ],
- [
- 8,
- 12
- ],
- [
- 22,
- -1
- ],
- [
- 11,
- 17
- ],
- [
- 8,
- 20
- ],
- [
- 5,
- 6
- ],
- [
- 6,
- -1
- ],
- [
- 20,
- 31
- ],
- [
- 25,
- 65
- ],
- [
- 5,
- 41
- ],
- [
- 7,
- 30
- ],
- [
- 2,
- 30
- ],
- [
- 5,
- 17
- ],
- [
- 23,
- -33
- ],
- [
- 13,
- -19
- ],
- [
- 29,
- -43
- ],
- [
- 20,
- -29
- ],
- [
- 7,
- 33
- ],
- [
- 12,
- 48
- ]
- ],
- [
- [
- 8896,
- 8241
- ],
- [
- 30,
- 0
- ],
- [
- 72,
- 1
- ],
- [
- 72,
- 0
- ],
- [
- 72,
- 0
- ],
- [
- 72,
- 0
- ]
- ],
- [
- [
- 322,
- 9127
- ],
- [
- -2,
- -8
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 16
- ],
- [
- -1,
- 11
- ],
- [
- 5,
- 8
- ],
- [
- 6,
- -23
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 401,
- 9204
- ],
- [
- -1,
- -9
- ],
- [
- -6,
- -7
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- 11
- ],
- [
- -2,
- 2
- ],
- [
- -7,
- -13
- ],
- [
- 1,
- 25
- ],
- [
- 3,
- 27
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- -18
- ],
- [
- 8,
- -20
- ]
- ],
- [
- [
- 383,
- 9284
- ],
- [
- -1,
- -8
- ],
- [
- -9,
- 10
- ],
- [
- -3,
- 8
- ],
- [
- 0,
- 19
- ],
- [
- 2,
- 13
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -36
- ]
- ],
- [
- [
- 370,
- 9510
- ],
- [
- 9,
- -52
- ],
- [
- 3,
- 22
- ],
- [
- 24,
- -38
- ],
- [
- 0,
- -19
- ],
- [
- -3,
- -7
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- 6
- ],
- [
- -5,
- 13
- ],
- [
- -5,
- 7
- ],
- [
- -11,
- 4
- ],
- [
- -6,
- 15
- ],
- [
- -2,
- 11
- ],
- [
- -1,
- 29
- ],
- [
- -2,
- 9
- ],
- [
- -6,
- 2
- ],
- [
- -6,
- 7
- ],
- [
- -9,
- 21
- ],
- [
- -1,
- 6
- ],
- [
- 4,
- 17
- ],
- [
- 10,
- 28
- ],
- [
- 7,
- 13
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- -9
- ],
- [
- 7,
- -15
- ],
- [
- -2,
- -11
- ],
- [
- -25,
- -22
- ],
- [
- -1,
- -5
- ],
- [
- 12,
- -6
- ],
- [
- 5,
- -5
- ],
- [
- 4,
- -18
- ]
- ],
- [
- [
- 327,
- 9621
- ],
- [
- -2,
- -4
- ],
- [
- -10,
- 5
- ],
- [
- -5,
- 9
- ],
- [
- -2,
- 12
- ],
- [
- 3,
- 21
- ],
- [
- 5,
- 6
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -19
- ],
- [
- 8,
- -19
- ],
- [
- -1,
- -9
- ]
- ],
- [
- [
- 294,
- 9649
- ],
- [
- 5,
- -13
- ],
- [
- -19,
- 8
- ],
- [
- -8,
- 8
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 25
- ],
- [
- 1,
- 8
- ],
- [
- 8,
- 2
- ],
- [
- 16,
- -30
- ],
- [
- 2,
- -15
- ]
- ],
- [
- [
- 334,
- 9718
- ],
- [
- 2,
- -8
- ],
- [
- -7,
- -9
- ],
- [
- -5,
- -1
- ],
- [
- -8,
- 13
- ],
- [
- -3,
- 2
- ],
- [
- 3,
- -21
- ],
- [
- -1,
- -7
- ],
- [
- -16,
- 13
- ],
- [
- -3,
- 10
- ],
- [
- 4,
- 11
- ],
- [
- 10,
- 11
- ],
- [
- 4,
- 1
- ],
- [
- 20,
- -15
- ]
- ],
- [
- [
- 288,
- 9847
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- 7,
- 0
- ]
- ],
- [
- [
- 258,
- 8704
- ],
- [
- -5,
- 5
- ],
- [
- -9,
- 2
- ],
- [
- -18,
- 20
- ],
- [
- -10,
- 20
- ],
- [
- -32,
- -1
- ],
- [
- -7,
- 13
- ],
- [
- -36,
- -13
- ],
- [
- -11,
- 13
- ],
- [
- -20,
- -9
- ],
- [
- 5,
- 38
- ],
- [
- -1,
- 47
- ],
- [
- 1,
- 47
- ],
- [
- 5,
- -34
- ],
- [
- 12,
- -36
- ],
- [
- 6,
- 41
- ],
- [
- 4,
- 51
- ],
- [
- -12,
- 19
- ],
- [
- -19,
- 15
- ],
- [
- -8,
- 47
- ],
- [
- 47,
- 41
- ],
- [
- -25,
- 8
- ],
- [
- -9,
- 19
- ],
- [
- -12,
- 2
- ],
- [
- -1,
- -14
- ],
- [
- -4,
- -19
- ],
- [
- -4,
- 25
- ],
- [
- -2,
- 29
- ],
- [
- -4,
- 49
- ],
- [
- -20,
- 79
- ],
- [
- -11,
- 102
- ],
- [
- -15,
- 50
- ],
- [
- -28,
- 49
- ],
- [
- -7,
- 28
- ],
- [
- -7,
- 71
- ],
- [
- 4,
- 55
- ],
- [
- -5,
- 38
- ],
- [
- 13,
- -3
- ],
- [
- 36,
- -29
- ],
- [
- 44,
- -24
- ],
- [
- 13,
- -17
- ],
- [
- 21,
- -13
- ],
- [
- 118,
- -19
- ],
- [
- 8,
- 1
- ],
- [
- 15,
- 13
- ],
- [
- 7,
- -2
- ],
- [
- 17,
- -28
- ],
- [
- 9,
- -3
- ],
- [
- 11,
- 1
- ],
- [
- 8,
- 6
- ],
- [
- 15,
- 19
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -18
- ],
- [
- 5,
- -25
- ],
- [
- 11,
- -33
- ],
- [
- 4,
- -20
- ],
- [
- -21,
- -58
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 19
- ],
- [
- -3,
- 4
- ],
- [
- -40,
- -97
- ],
- [
- -13,
- -46
- ],
- [
- -2,
- -21
- ],
- [
- 1,
- -12
- ],
- [
- 5,
- -3
- ],
- [
- 13,
- 5
- ],
- [
- 19,
- 19
- ],
- [
- 1,
- 4
- ],
- [
- -18,
- -7
- ],
- [
- -8,
- 0
- ],
- [
- 1,
- 21
- ],
- [
- 2,
- 11
- ],
- [
- 11,
- 32
- ],
- [
- 12,
- 19
- ],
- [
- 17,
- 21
- ],
- [
- 10,
- 17
- ],
- [
- 7,
- 25
- ],
- [
- 19,
- 29
- ],
- [
- 4,
- 8
- ],
- [
- -1,
- 25
- ],
- [
- 1,
- 4
- ],
- [
- 9,
- -3
- ],
- [
- 4,
- -42
- ],
- [
- -2,
- -19
- ],
- [
- -17,
- -22
- ],
- [
- -2,
- -8
- ],
- [
- 3,
- -31
- ],
- [
- -2,
- -3
- ],
- [
- -7,
- 3
- ],
- [
- -2,
- -2
- ],
- [
- 16,
- -34
- ],
- [
- 5,
- -26
- ],
- [
- 1,
- -23
- ],
- [
- -5,
- -45
- ],
- [
- -4,
- -8
- ],
- [
- -8,
- 3
- ],
- [
- -10,
- 14
- ],
- [
- -2,
- -4
- ],
- [
- -9,
- -35
- ],
- [
- -2,
- 3
- ],
- [
- -5,
- 41
- ],
- [
- -3,
- 3
- ],
- [
- -16,
- -19
- ],
- [
- -6,
- -18
- ],
- [
- -6,
- -29
- ],
- [
- -7,
- -13
- ],
- [
- 20,
- -3
- ],
- [
- 18,
- 5
- ],
- [
- 14,
- -13
- ],
- [
- 5,
- -1
- ],
- [
- 13,
- 14
- ],
- [
- 4,
- 9
- ],
- [
- 11,
- 44
- ],
- [
- 5,
- 7
- ],
- [
- 8,
- 1
- ],
- [
- 8,
- 6
- ],
- [
- 11,
- 24
- ],
- [
- 1,
- 10
- ],
- [
- -5,
- 53
- ],
- [
- 2,
- 31
- ],
- [
- -3,
- 9
- ],
- [
- -5,
- 10
- ],
- [
- 1,
- 10
- ],
- [
- 4,
- 16
- ],
- [
- 0,
- 15
- ],
- [
- -3,
- 12
- ],
- [
- 1,
- 15
- ],
- [
- 11,
- 32
- ],
- [
- 2,
- 13
- ],
- [
- 14,
- 32
- ],
- [
- -4,
- 12
- ],
- [
- -10,
- 16
- ],
- [
- -6,
- 13
- ],
- [
- -6,
- 21
- ],
- [
- -5,
- 7
- ],
- [
- -1,
- -3
- ],
- [
- 6,
- -34
- ],
- [
- -1,
- -3
- ],
- [
- -17,
- 19
- ],
- [
- -4,
- 12
- ],
- [
- -2,
- 16
- ],
- [
- 1,
- 12
- ],
- [
- 10,
- 11
- ],
- [
- 11,
- 5
- ],
- [
- -1,
- 10
- ],
- [
- -14,
- 32
- ],
- [
- -9,
- 15
- ],
- [
- -7,
- 7
- ],
- [
- -10,
- 2
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 8
- ],
- [
- 2,
- 10
- ],
- [
- 5,
- 3
- ],
- [
- 14,
- -4
- ],
- [
- 8,
- 7
- ],
- [
- 0,
- 13
- ],
- [
- -3,
- 7
- ],
- [
- 1,
- 46
- ],
- [
- -6,
- 37
- ],
- [
- -3,
- 7
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -5
- ],
- [
- -10,
- -1
- ],
- [
- -5,
- 12
- ],
- [
- -7,
- 24
- ],
- [
- -11,
- 56
- ],
- [
- 18,
- 0
- ],
- [
- 73,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 73,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 74,
- 0
- ],
- [
- 18,
- 0
- ]
- ],
- [
- [
- 6534,
- 8336
- ],
- [
- -4,
- -5
- ],
- [
- -5,
- 3
- ],
- [
- -2,
- -7
- ],
- [
- 1,
- -19
- ],
- [
- -2,
- -8
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- 5,
- -9
- ],
- [
- 0,
- -9
- ],
- [
- -3,
- -9
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- -11
- ],
- [
- -7,
- -24
- ],
- [
- -2,
- -13
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- -16,
- -35
- ],
- [
- -6,
- -4
- ],
- [
- -7,
- 5
- ],
- [
- -5,
- 10
- ],
- [
- -3,
- 16
- ],
- [
- -1,
- 12
- ],
- [
- 2,
- 9
- ],
- [
- 14,
- 31
- ],
- [
- 6,
- 20
- ],
- [
- 3,
- 23
- ],
- [
- 7,
- 14
- ],
- [
- 9,
- 6
- ],
- [
- 8,
- 15
- ],
- [
- 6,
- 22
- ],
- [
- 7,
- 9
- ],
- [
- 7,
- -3
- ],
- [
- 4,
- -8
- ],
- [
- -1,
- -14
- ]
- ],
- [
- [
- 6556,
- 8381
- ],
- [
- -5,
- -4
- ],
- [
- -10,
- 1
- ],
- [
- -3,
- 9
- ],
- [
- 5,
- 24
- ],
- [
- 2,
- -5
- ],
- [
- 8,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -17
- ]
- ],
- [
- [
- 5890,
- 8957
- ],
- [
- -10,
- -5
- ],
- [
- -5,
- 1
- ],
- [
- 2,
- 7
- ],
- [
- 5,
- 10
- ],
- [
- 23,
- 22
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -6
- ],
- [
- -12,
- -11
- ],
- [
- -4,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- -5,
- -6
- ]
- ],
- [
- [
- 5918,
- 9012
- ],
- [
- -6,
- -2
- ],
- [
- -12,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 13,
- 8
- ],
- [
- 6,
- 3
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -14
- ]
- ],
- [
- [
- 6427,
- 8283
- ],
- [
- 0,
- -11
- ],
- [
- -3,
- -20
- ],
- [
- -10,
- -16
- ],
- [
- -26,
- -20
- ],
- [
- -4,
- -14
- ],
- [
- 0,
- -11
- ],
- [
- -17,
- -47
- ],
- [
- -8,
- -29
- ],
- [
- -5,
- -30
- ],
- [
- 2,
- -19
- ],
- [
- 8,
- -7
- ],
- [
- 7,
- 3
- ],
- [
- 6,
- 13
- ],
- [
- 8,
- 13
- ],
- [
- 11,
- 11
- ],
- [
- 8,
- 16
- ],
- [
- 11,
- 40
- ],
- [
- 13,
- 22
- ],
- [
- 6,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 13,
- 10
- ],
- [
- 11,
- -3
- ],
- [
- 6,
- -15
- ],
- [
- 6,
- -11
- ],
- [
- 2,
- -10
- ],
- [
- -3,
- -22
- ],
- [
- -6,
- -24
- ],
- [
- -9,
- -25
- ],
- [
- -8,
- -37
- ],
- [
- -7,
- -49
- ],
- [
- -2,
- -38
- ],
- [
- 5,
- -25
- ],
- [
- -4,
- -22
- ],
- [
- -12,
- -20
- ],
- [
- -10,
- -27
- ],
- [
- -7,
- -33
- ],
- [
- -4,
- -28
- ],
- [
- -1,
- -23
- ],
- [
- 1,
- -16
- ],
- [
- 4,
- -23
- ],
- [
- 0,
- -12
- ],
- [
- -13,
- -50
- ],
- [
- -4,
- -25
- ],
- [
- -1,
- -19
- ],
- [
- -3,
- -19
- ],
- [
- -10,
- -39
- ],
- [
- -3,
- -21
- ],
- [
- -1,
- -20
- ],
- [
- 2,
- -32
- ],
- [
- -1,
- -11
- ],
- [
- 1,
- -8
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -10
- ],
- [
- -2,
- -15
- ],
- [
- 0,
- -11
- ],
- [
- 5,
- -9
- ],
- [
- 3,
- -15
- ],
- [
- 1,
- -23
- ],
- [
- 3,
- -20
- ],
- [
- 6,
- -15
- ],
- [
- 1,
- -23
- ],
- [
- -4,
- -29
- ],
- [
- -1,
- -55
- ],
- [
- 0,
- -19
- ]
- ],
- [
- [
- 5648,
- 8949
- ],
- [
- 6,
- -11
- ],
- [
- 14,
- -15
- ],
- [
- 12,
- -1
- ],
- [
- 15,
- 3
- ],
- [
- 58,
- 25
- ],
- [
- 25,
- 18
- ],
- [
- 24,
- 31
- ],
- [
- 2,
- 1
- ],
- [
- 10,
- -6
- ],
- [
- 3,
- -3
- ],
- [
- 32,
- 35
- ],
- [
- 10,
- 4
- ],
- [
- 8,
- 0
- ],
- [
- 10,
- -14
- ],
- [
- 3,
- -8
- ],
- [
- -4,
- -16
- ],
- [
- -9,
- -24
- ],
- [
- -4,
- -20
- ],
- [
- 0,
- -16
- ],
- [
- -4,
- -17
- ],
- [
- -10,
- -24
- ],
- [
- 4,
- -6
- ],
- [
- 26,
- 17
- ],
- [
- 4,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 21,
- -23
- ],
- [
- 14,
- -13
- ],
- [
- 11,
- -6
- ],
- [
- 11,
- 4
- ]
- ],
- [
- [
- 5890,
- 9015
- ],
- [
- -3,
- -3
- ],
- [
- -6,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -8
- ],
- [
- 1,
- -6
- ]
- ],
- [
- [
- 5939,
- 9055
- ],
- [
- -6,
- -6
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 12
- ],
- [
- 3,
- 7
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -8
- ],
- [
- -3,
- -7
- ]
- ]
- ],
- "transform": {
- "scale": [
- 0.005772872856602365,
- 0.0024829805705001468
- ],
- "translate": [
- -124.70997774915153,
- 24.542349340056283
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/data/map/countries.topojson b/framework/src/onos/web/gui/src/main/webapp/data/map/countries.topojson
deleted file mode 100644
index 778d51d8..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/data/map/countries.topojson
+++ /dev/null
@@ -1,9 +0,0 @@
-{"type":"Topology","objects":{"countries":{"type":"GeometryCollection","geometries":[{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Netherlands","sov_a3":"NL1","adm0_dif":1,"level":2,"type":"Country","admin":"Aruba","adm0_a3":"ABW","geou_dif":0,"geounit":"Aruba","gu_a3":"ABW","su_dif":0,"subunit":"Aruba","su_a3":"ABW","brk_diff":0,"name":"Aruba","name_long":"Aruba","brk_a3":"ABW","brk_name":"Aruba","brk_group":null,"abbrev":"Aruba","postal":"AW","formal_en":"Aruba","formal_fr":null,"note_adm0":"Neth.","note_brk":null,"name_sort":"Aruba","name_alt":null,"mapcolor7":4,"mapcolor8":2,"mapcolor9":2,"mapcolor13":9,"pop_est":103065,"gdp_md_est":2258,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"AW","iso_a3":"ABW","iso_n3":"533","un_a3":"533","wb_a2":"AW","wb_a3":"ABW","woe_id":-99,"adm0_a3_is":"ABW","adm0_a3_us":"ABW","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":5,"long_len":5,"abbrev_len":5,"tiny":4,"homepart":-99},"arcs":[[0]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Afghanistan","sov_a3":"AFG","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Afghanistan","adm0_a3":"AFG","geou_dif":0,"geounit":"Afghanistan","gu_a3":"AFG","su_dif":0,"subunit":"Afghanistan","su_a3":"AFG","brk_diff":0,"name":"Afghanistan","name_long":"Afghanistan","brk_a3":"AFG","brk_name":"Afghanistan","brk_group":null,"abbrev":"Afg.","postal":"AF","formal_en":"Islamic State of Afghanistan","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Afghanistan","name_alt":null,"mapcolor7":5,"mapcolor8":6,"mapcolor9":8,"mapcolor13":7,"pop_est":28400000,"gdp_md_est":22270,"pop_year":-99,"lastcensus":1979,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"AF","iso_a3":"AFG","iso_n3":"004","un_a3":"004","wb_a2":"AF","wb_a3":"AFG","woe_id":-99,"adm0_a3_is":"AFG","adm0_a3_us":"AFG","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Southern Asia","region_wb":"South Asia","name_len":11,"long_len":11,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1,2,3,4,5,6,7]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Angola","sov_a3":"AGO","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Angola","adm0_a3":"AGO","geou_dif":0,"geounit":"Angola","gu_a3":"AGO","su_dif":0,"subunit":"Angola","su_a3":"AGO","brk_diff":0,"name":"Angola","name_long":"Angola","brk_a3":"AGO","brk_name":"Angola","brk_group":null,"abbrev":"Ang.","postal":"AO","formal_en":"People's Republic of Angola","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Angola","name_alt":null,"mapcolor7":3,"mapcolor8":2,"mapcolor9":6,"mapcolor13":1,"pop_est":12799293,"gdp_md_est":110300,"pop_year":-99,"lastcensus":1970,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"AO","iso_a3":"AGO","iso_n3":"024","un_a3":"024","wb_a2":"AO","wb_a3":"AGO","woe_id":-99,"adm0_a3_is":"AGO","adm0_a3_us":"AGO","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Middle Africa","region_wb":"Sub-Saharan Africa","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[8,9,10,11]],[[12,13,14]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"United Kingdom","sov_a3":"GB1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Anguilla","adm0_a3":"AIA","geou_dif":0,"geounit":"Anguilla","gu_a3":"AIA","su_dif":0,"subunit":"Anguilla","su_a3":"AIA","brk_diff":0,"name":"Anguilla","name_long":"Anguilla","brk_a3":"AIA","brk_name":"Anguilla","brk_group":null,"abbrev":"Ang.","postal":"AI","formal_en":null,"formal_fr":null,"note_adm0":"U.K.","note_brk":null,"name_sort":"Anguilla","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":3,"pop_est":14436,"gdp_md_est":108.9,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"AI","iso_a3":"AIA","iso_n3":"660","un_a3":"660","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"AIA","adm0_a3_us":"AIA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":8,"long_len":8,"abbrev_len":4,"tiny":-99,"homepart":-99},"arcs":[[15]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Albania","sov_a3":"ALB","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Albania","adm0_a3":"ALB","geou_dif":0,"geounit":"Albania","gu_a3":"ALB","su_dif":0,"subunit":"Albania","su_a3":"ALB","brk_diff":0,"name":"Albania","name_long":"Albania","brk_a3":"ALB","brk_name":"Albania","brk_group":null,"abbrev":"Alb.","postal":"AL","formal_en":"Republic of Albania","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Albania","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":1,"mapcolor13":6,"pop_est":3639453,"gdp_md_est":21810,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"AL","iso_a3":"ALB","iso_n3":"008","un_a3":"008","wb_a2":"AL","wb_a3":"ALB","woe_id":-99,"adm0_a3_is":"ALB","adm0_a3_us":"ALB","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Southern Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[16,17,18,19,20]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Finland","sov_a3":"FI1","adm0_dif":1,"level":2,"type":"Country","admin":"Aland","adm0_a3":"ALD","geou_dif":0,"geounit":"Aland","gu_a3":"ALD","su_dif":0,"subunit":"Aland","su_a3":"ALD","brk_diff":0,"name":"Aland","name_long":"Aland Islands","brk_a3":"ALD","brk_name":"Aland","brk_group":null,"abbrev":"Aland","postal":"AI","formal_en":"Åland Islands","formal_fr":null,"note_adm0":"Fin.","note_brk":null,"name_sort":"Aland","name_alt":null,"mapcolor7":4,"mapcolor8":1,"mapcolor9":4,"mapcolor13":6,"pop_est":27153,"gdp_md_est":1563,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"AX","iso_a3":"ALA","iso_n3":"248","un_a3":"248","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"ALA","adm0_a3_us":"ALD","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Northern Europe","region_wb":"Europe & Central Asia","name_len":5,"long_len":13,"abbrev_len":5,"tiny":5,"homepart":-99},"arcs":[[[21]],[[22]],[[23]]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Andorra","sov_a3":"AND","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Andorra","adm0_a3":"AND","geou_dif":0,"geounit":"Andorra","gu_a3":"AND","su_dif":0,"subunit":"Andorra","su_a3":"AND","brk_diff":0,"name":"Andorra","name_long":"Andorra","brk_a3":"AND","brk_name":"Andorra","brk_group":null,"abbrev":"And.","postal":"AND","formal_en":"Principality of Andorra","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Andorra","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":1,"mapcolor13":8,"pop_est":83888,"gdp_md_est":3660,"pop_year":-99,"lastcensus":1989,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"AD","iso_a3":"AND","iso_n3":"020","un_a3":"020","wb_a2":"AD","wb_a3":"ADO","woe_id":-99,"adm0_a3_is":"AND","adm0_a3_us":"AND","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Southern Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":4,"tiny":5,"homepart":1},"arcs":[[24,25]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"United Arab Emirates","sov_a3":"ARE","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"United Arab Emirates","adm0_a3":"ARE","geou_dif":0,"geounit":"United Arab Emirates","gu_a3":"ARE","su_dif":0,"subunit":"United Arab Emirates","su_a3":"ARE","brk_diff":0,"name":"United Arab Emirates","name_long":"United Arab Emirates","brk_a3":"ARE","brk_name":"United Arab Emirates","brk_group":null,"abbrev":"U.A.E.","postal":"AE","formal_en":"United Arab Emirates","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"United Arab Emirates","name_alt":null,"mapcolor7":2,"mapcolor8":1,"mapcolor9":3,"mapcolor13":3,"pop_est":4798491,"gdp_md_est":184300,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"AE","iso_a3":"ARE","iso_n3":"784","un_a3":"784","wb_a2":"AE","wb_a3":"ARE","woe_id":-99,"adm0_a3_is":"ARE","adm0_a3_us":"ARE","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Middle East & North Africa","name_len":20,"long_len":20,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[[26]],[[27]],[[28]],[[29]],[[30,31,32,33,34],[35]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Argentina","sov_a3":"ARG","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Argentina","adm0_a3":"ARG","geou_dif":0,"geounit":"Argentina","gu_a3":"ARG","su_dif":0,"subunit":"Argentina","su_a3":"ARG","brk_diff":0,"name":"Argentina","name_long":"Argentina","brk_a3":"ARG","brk_name":"Argentina","brk_group":null,"abbrev":"Arg.","postal":"AR","formal_en":"Argentine Republic","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Argentina","name_alt":null,"mapcolor7":3,"mapcolor8":1,"mapcolor9":3,"mapcolor13":13,"pop_est":40913584,"gdp_md_est":573900,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"AR","iso_a3":"ARG","iso_n3":"032","un_a3":"032","wb_a2":"AR","wb_a3":"ARG","woe_id":-99,"adm0_a3_is":"ARG","adm0_a3_us":"ARG","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"South America","region_un":"Americas","subregion":"South America","region_wb":"Latin America & Caribbean","name_len":9,"long_len":9,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[36]],[[37,38]],[[39]],[[40,41,42,43,44,45]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Armenia","sov_a3":"ARM","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Armenia","adm0_a3":"ARM","geou_dif":0,"geounit":"Armenia","gu_a3":"ARM","su_dif":0,"subunit":"Armenia","su_a3":"ARM","brk_diff":0,"name":"Armenia","name_long":"Armenia","brk_a3":"ARM","brk_name":"Armenia","brk_group":null,"abbrev":"Arm.","postal":"ARM","formal_en":"Republic of Armenia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Armenia","name_alt":null,"mapcolor7":3,"mapcolor8":1,"mapcolor9":2,"mapcolor13":10,"pop_est":2967004,"gdp_md_est":18770,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"AM","iso_a3":"ARM","iso_n3":"051","un_a3":"051","wb_a2":"AM","wb_a3":"ARM","woe_id":-99,"adm0_a3_is":"ARM","adm0_a3_us":"ARM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[46]],[[47,48,49,50,51],[52]]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"United States of America","sov_a3":"US1","adm0_dif":1,"level":2,"type":"Dependency","admin":"American Samoa","adm0_a3":"ASM","geou_dif":0,"geounit":"American Samoa","gu_a3":"ASM","su_dif":0,"subunit":"American Samoa","su_a3":"ASM","brk_diff":0,"name":"American Samoa","name_long":"American Samoa","brk_a3":"ASM","brk_name":"American Samoa","brk_group":null,"abbrev":"Am. Samoa","postal":"AS","formal_en":"American Samoa","formal_fr":null,"note_adm0":"U.S.A.","note_brk":null,"name_sort":"American Samoa","name_alt":null,"mapcolor7":4,"mapcolor8":5,"mapcolor9":1,"mapcolor13":1,"pop_est":65628,"gdp_md_est":575.3,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"AS","iso_a3":"ASM","iso_n3":"016","un_a3":"016","wb_a2":"AS","wb_a3":"ASM","woe_id":-99,"adm0_a3_is":"ASM","adm0_a3_us":"ASM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Polynesia","region_wb":"East Asia & Pacific","name_len":14,"long_len":14,"abbrev_len":9,"tiny":3,"homepart":-99},"arcs":[[53]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Antarctica","sov_a3":"ATA","adm0_dif":0,"level":2,"type":"Indeterminate","admin":"Antarctica","adm0_a3":"ATA","geou_dif":0,"geounit":"Antarctica","gu_a3":"ATA","su_dif":0,"subunit":"Antarctica","su_a3":"ATA","brk_diff":0,"name":"Antarctica","name_long":"Antarctica","brk_a3":"ATA","brk_name":"Antarctica","brk_group":null,"abbrev":"Ant.","postal":"AQ","formal_en":null,"formal_fr":null,"note_adm0":null,"note_brk":"Multiple claims held in abeyance","name_sort":"Antarctica","name_alt":null,"mapcolor7":4,"mapcolor8":5,"mapcolor9":1,"mapcolor13":-99,"pop_est":3802,"gdp_md_est":760.4,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"AQ","iso_a3":"ATA","iso_n3":"010","un_a3":"-099","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"ATA","adm0_a3_us":"ATA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Antarctica","region_un":"Antarctica","subregion":"Antarctica","region_wb":"Antarctica","name_len":10,"long_len":10,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[54]],[[55]],[[56]],[[57]],[[58]],[[59]],[[60]],[[61]],[[62]],[[63]],[[64]],[[65]],[[66]],[[67]],[[68]],[[69]],[[70]],[[71]],[[72]],[[73]],[[74]],[[75]],[[76]],[[77]],[[78]],[[79]],[[80]],[[81]],[[82]],[[83]],[[84]],[[85]],[[86]],[[87]],[[88]],[[89]],[[90]],[[91]],[[92]],[[93]],[[94]],[[95]],[[96]],[[97]],[[98]],[[99]],[[100]],[[101]],[[102]],[[103]],[[104]],[[105]],[[106]],[[107]],[[108]],[[109]],[[110]],[[111]],[[112]],[[113]],[[114]],[[115]],[[116]],[[117]],[[118]],[[119]],[[120]],[[121]],[[122]],[[123]],[[124]],[[125]],[[126]],[[127]],[[128]],[[129]],[[130]],[[131]],[[132]],[[133]],[[134]],[[135]],[[136]],[[137]],[[138]],[[139]],[[140]],[[141]],[[142]],[[143]],[[144]],[[145]],[[146]],[[147]],[[148]],[[149]],[[150]],[[151]],[[152]],[[153]],[[154]],[[155]],[[156]],[[157]],[[158]],[[159]],[[160]],[[161]]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"France","sov_a3":"FR1","adm0_dif":1,"level":2,"type":"Dependency","admin":"French Southern and Antarctic Lands","adm0_a3":"ATF","geou_dif":0,"geounit":"French Southern and Antarctic Lands","gu_a3":"ATF","su_dif":0,"subunit":"French Southern and Antarctic Lands","su_a3":"ATF","brk_diff":0,"name":"Fr. S. Antarctic Lands","name_long":"French Southern and Antarctic Lands","brk_a3":"ATF","brk_name":"Fr. S. and Antarctic Lands","brk_group":null,"abbrev":"Fr. S.A.L.","postal":"TF","formal_en":"Territory of the French Southern and Antarctic Lands","formal_fr":null,"note_adm0":"Fr.","note_brk":null,"name_sort":"French Southern and Antarctic Lands","name_alt":null,"mapcolor7":7,"mapcolor8":5,"mapcolor9":9,"mapcolor13":11,"pop_est":140,"gdp_md_est":16,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"TF","iso_a3":"ATF","iso_n3":"260","un_a3":"-099","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"ATF","adm0_a3_us":"ATF","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Seven seas (open ocean)","region_un":"Seven seas (open ocean)","subregion":"Seven seas (open ocean)","region_wb":"Sub-Saharan Africa","name_len":22,"long_len":35,"abbrev_len":10,"tiny":2,"homepart":-99},"arcs":[[[162]],[[163]],[[164]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Antigua and Barbuda","sov_a3":"ATG","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Antigua and Barbuda","adm0_a3":"ATG","geou_dif":0,"geounit":"Antigua and Barbuda","gu_a3":"ATG","su_dif":0,"subunit":"Antigua and Barbuda","su_a3":"ATG","brk_diff":0,"name":"Antigua and Barb.","name_long":"Antigua and Barbuda","brk_a3":"ATG","brk_name":"Antigua and Barb.","brk_group":null,"abbrev":"Ant.B.","postal":"AG","formal_en":"Antigua and Barbuda","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Antigua and Barbuda","name_alt":null,"mapcolor7":2,"mapcolor8":2,"mapcolor9":5,"mapcolor13":5,"pop_est":85632,"gdp_md_est":1657,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"AG","iso_a3":"ATG","iso_n3":"028","un_a3":"028","wb_a2":"AG","wb_a3":"ATG","woe_id":-99,"adm0_a3_is":"ATG","adm0_a3_us":"ATG","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":17,"long_len":19,"abbrev_len":6,"tiny":4,"homepart":1},"arcs":[[[165]],[[166]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Australia","sov_a3":"AU1","adm0_dif":1,"level":2,"type":"Country","admin":"Australia","adm0_a3":"AUS","geou_dif":0,"geounit":"Australia","gu_a3":"AUS","su_dif":0,"subunit":"Australia","su_a3":"AUS","brk_diff":0,"name":"Australia","name_long":"Australia","brk_a3":"AUS","brk_name":"Australia","brk_group":null,"abbrev":"Auz.","postal":"AU","formal_en":"Commonwealth of Australia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Australia","name_alt":null,"mapcolor7":1,"mapcolor8":2,"mapcolor9":2,"mapcolor13":7,"pop_est":21262641,"gdp_md_est":800200,"pop_year":-99,"lastcensus":2006,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"AU","iso_a3":"AUS","iso_n3":"036","un_a3":"036","wb_a2":"AU","wb_a3":"AUS","woe_id":-99,"adm0_a3_is":"AUS","adm0_a3_us":"AUS","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Australia and New Zealand","region_wb":"East Asia & Pacific","name_len":9,"long_len":9,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[167]],[[168]],[[169]],[[170]],[[171]],[[172]],[[173]],[[174]],[[175]],[[176]],[[177]],[[178]],[[179]],[[180]],[[181]],[[182]],[[183]],[[184]],[[185]],[[186]],[[187]],[[188]],[[189]],[[190]],[[191]],[[192]],[[193]],[[194]],[[195]],[[196]],[[197]],[[198]],[[199]],[[200]],[[201]],[[202]],[[203]],[[204]],[[205]],[[206]],[[207]],[[208]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Austria","sov_a3":"AUT","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Austria","adm0_a3":"AUT","geou_dif":0,"geounit":"Austria","gu_a3":"AUT","su_dif":0,"subunit":"Austria","su_a3":"AUT","brk_diff":0,"name":"Austria","name_long":"Austria","brk_a3":"AUT","brk_name":"Austria","brk_group":null,"abbrev":"Aust.","postal":"A","formal_en":"Republic of Austria","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Austria","name_alt":null,"mapcolor7":3,"mapcolor8":1,"mapcolor9":3,"mapcolor13":4,"pop_est":8210281,"gdp_md_est":329500,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"AT","iso_a3":"AUT","iso_n3":"040","un_a3":"040","wb_a2":"AT","wb_a3":"AUT","woe_id":-99,"adm0_a3_is":"AUT","adm0_a3_us":"AUT","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Western Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[209,210,211,212,213,214,215,216,217]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Azerbaijan","sov_a3":"AZE","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Azerbaijan","adm0_a3":"AZE","geou_dif":0,"geounit":"Azerbaijan","gu_a3":"AZE","su_dif":0,"subunit":"Azerbaijan","su_a3":"AZE","brk_diff":0,"name":"Azerbaijan","name_long":"Azerbaijan","brk_a3":"AZE","brk_name":"Azerbaijan","brk_group":null,"abbrev":"Aze.","postal":"AZ","formal_en":"Republic of Azerbaijan","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Azerbaijan","name_alt":null,"mapcolor7":1,"mapcolor8":6,"mapcolor9":5,"mapcolor13":8,"pop_est":8238672,"gdp_md_est":77610,"pop_year":-99,"lastcensus":2009,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"AZ","iso_a3":"AZE","iso_n3":"031","un_a3":"031","wb_a2":"AZ","wb_a3":"AZE","woe_id":-99,"adm0_a3_is":"AZE","adm0_a3_us":"AZE","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Europe & Central Asia","name_len":10,"long_len":10,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[218,219,-49]],[[-53]],[[220,221,-52,222,223],[-47]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Burundi","sov_a3":"BDI","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Burundi","adm0_a3":"BDI","geou_dif":0,"geounit":"Burundi","gu_a3":"BDI","su_dif":0,"subunit":"Burundi","su_a3":"BDI","brk_diff":0,"name":"Burundi","name_long":"Burundi","brk_a3":"BDI","brk_name":"Burundi","brk_group":null,"abbrev":"Bur.","postal":"BI","formal_en":"Republic of Burundi","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Burundi","name_alt":null,"mapcolor7":2,"mapcolor8":2,"mapcolor9":5,"mapcolor13":8,"pop_est":8988091,"gdp_md_est":3102,"pop_year":-99,"lastcensus":2008,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"BI","iso_a3":"BDI","iso_n3":"108","un_a3":"108","wb_a2":"BI","wb_a3":"BDI","woe_id":-99,"adm0_a3_is":"BDI","adm0_a3_us":"BDI","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[224,225,226]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Belgium","sov_a3":"BEL","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Belgium","adm0_a3":"BEL","geou_dif":0,"geounit":"Belgium","gu_a3":"BEL","su_dif":0,"subunit":"Belgium","su_a3":"BEL","brk_diff":0,"name":"Belgium","name_long":"Belgium","brk_a3":"BEL","brk_name":"Belgium","brk_group":null,"abbrev":"Belg.","postal":"B","formal_en":"Kingdom of Belgium","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Belgium","name_alt":null,"mapcolor7":3,"mapcolor8":2,"mapcolor9":1,"mapcolor13":8,"pop_est":10414336,"gdp_md_est":389300,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"BE","iso_a3":"BEL","iso_n3":"056","un_a3":"056","wb_a2":"BE","wb_a3":"BEL","woe_id":-99,"adm0_a3_is":"BEL","adm0_a3_us":"BEL","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Western Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[227,228,229,230,231,232,233]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Benin","sov_a3":"BEN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Benin","adm0_a3":"BEN","geou_dif":0,"geounit":"Benin","gu_a3":"BEN","su_dif":0,"subunit":"Benin","su_a3":"BEN","brk_diff":0,"name":"Benin","name_long":"Benin","brk_a3":"BEN","brk_name":"Benin","brk_group":null,"abbrev":"Benin","postal":"BJ","formal_en":"Republic of Benin","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Benin","name_alt":null,"mapcolor7":1,"mapcolor8":2,"mapcolor9":2,"mapcolor13":12,"pop_est":8791832,"gdp_md_est":12830,"pop_year":-99,"lastcensus":2002,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"BJ","iso_a3":"BEN","iso_n3":"204","un_a3":"204","wb_a2":"BJ","wb_a3":"BEN","woe_id":-99,"adm0_a3_is":"BEN","adm0_a3_us":"BEN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[234,235,236,237,238]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Burkina Faso","sov_a3":"BFA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Burkina Faso","adm0_a3":"BFA","geou_dif":0,"geounit":"Burkina Faso","gu_a3":"BFA","su_dif":0,"subunit":"Burkina Faso","su_a3":"BFA","brk_diff":0,"name":"Burkina Faso","name_long":"Burkina Faso","brk_a3":"BFA","brk_name":"Burkina Faso","brk_group":null,"abbrev":"B.F.","postal":"BF","formal_en":"Burkina Faso","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Burkina Faso","name_alt":null,"mapcolor7":2,"mapcolor8":1,"mapcolor9":5,"mapcolor13":11,"pop_est":15746232,"gdp_md_est":17820,"pop_year":-99,"lastcensus":2006,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"BF","iso_a3":"BFA","iso_n3":"854","un_a3":"854","wb_a2":"BF","wb_a3":"BFA","woe_id":-99,"adm0_a3_is":"BFA","adm0_a3_us":"BFA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":12,"long_len":12,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[239,-238,240,241,242,243]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Bangladesh","sov_a3":"BGD","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Bangladesh","adm0_a3":"BGD","geou_dif":0,"geounit":"Bangladesh","gu_a3":"BGD","su_dif":0,"subunit":"Bangladesh","su_a3":"BGD","brk_diff":0,"name":"Bangladesh","name_long":"Bangladesh","brk_a3":"BGD","brk_name":"Bangladesh","brk_group":null,"abbrev":"Bang.","postal":"BD","formal_en":"People's Republic of Bangladesh","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Bangladesh","name_alt":null,"mapcolor7":3,"mapcolor8":4,"mapcolor9":7,"mapcolor13":7,"pop_est":156050883,"gdp_md_est":224000,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"BD","iso_a3":"BGD","iso_n3":"050","un_a3":"050","wb_a2":"BD","wb_a3":"BGD","woe_id":-99,"adm0_a3_is":"BGD","adm0_a3_us":"BGD","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Southern Asia","region_wb":"South Asia","name_len":10,"long_len":10,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[244]],[[245]],[[246]],[[247]],[[248]],[[249]],[[250,251,252]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Bulgaria","sov_a3":"BGR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Bulgaria","adm0_a3":"BGR","geou_dif":0,"geounit":"Bulgaria","gu_a3":"BGR","su_dif":0,"subunit":"Bulgaria","su_a3":"BGR","brk_diff":0,"name":"Bulgaria","name_long":"Bulgaria","brk_a3":"BGR","brk_name":"Bulgaria","brk_group":null,"abbrev":"Bulg.","postal":"BG","formal_en":"Republic of Bulgaria","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Bulgaria","name_alt":null,"mapcolor7":4,"mapcolor8":5,"mapcolor9":1,"mapcolor13":8,"pop_est":7204687,"gdp_md_est":93750,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"BG","iso_a3":"BGR","iso_n3":"100","un_a3":"100","wb_a2":"BG","wb_a3":"BGR","woe_id":-99,"adm0_a3_is":"BGR","adm0_a3_us":"BGR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Eastern Europe","region_wb":"Europe & Central Asia","name_len":8,"long_len":8,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[253,254,255,256,257,258]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Bahrain","sov_a3":"BHR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Bahrain","adm0_a3":"BHR","geou_dif":0,"geounit":"Bahrain","gu_a3":"BHR","su_dif":0,"subunit":"Bahrain","su_a3":"BHR","brk_diff":0,"name":"Bahrain","name_long":"Bahrain","brk_a3":"BHR","brk_name":"Bahrain","brk_group":null,"abbrev":"Bahr.","postal":"BH","formal_en":"Kingdom of Bahrain","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Bahrain","name_alt":null,"mapcolor7":1,"mapcolor8":1,"mapcolor9":1,"mapcolor13":9,"pop_est":727785,"gdp_md_est":26820,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"BH","iso_a3":"BHR","iso_n3":"048","un_a3":"048","wb_a2":"BH","wb_a3":"BHR","woe_id":-99,"adm0_a3_is":"BHR","adm0_a3_us":"BHR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Middle East & North Africa","name_len":7,"long_len":7,"abbrev_len":5,"tiny":2,"homepart":1},"arcs":[[259]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"The Bahamas","sov_a3":"BHS","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"The Bahamas","adm0_a3":"BHS","geou_dif":0,"geounit":"The Bahamas","gu_a3":"BHS","su_dif":0,"subunit":"The Bahamas","su_a3":"BHS","brk_diff":0,"name":"Bahamas","name_long":"Bahamas","brk_a3":"BHS","brk_name":"Bahamas","brk_group":null,"abbrev":"Bhs.","postal":"BS","formal_en":"Commonwealth of the Bahamas","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Bahamas, The","name_alt":null,"mapcolor7":1,"mapcolor8":1,"mapcolor9":2,"mapcolor13":5,"pop_est":309156,"gdp_md_est":9093,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"BS","iso_a3":"BHS","iso_n3":"044","un_a3":"044","wb_a2":"BS","wb_a3":"BHS","woe_id":-99,"adm0_a3_is":"BHS","adm0_a3_us":"BHS","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[260]],[[261]],[[262]],[[263]],[[264]],[[265]],[[266]],[[267]],[[268]],[[269]],[[270]],[[271]],[[272]],[[273]],[[274]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Bosnia and Herzegovina","sov_a3":"BIH","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Bosnia and Herzegovina","adm0_a3":"BIH","geou_dif":0,"geounit":"Bosnia and Herzegovina","gu_a3":"BIH","su_dif":0,"subunit":"Bosnia and Herzegovina","su_a3":"BIH","brk_diff":0,"name":"Bosnia and Herz.","name_long":"Bosnia and Herzegovina","brk_a3":"BIH","brk_name":"Bosnia and Herz.","brk_group":null,"abbrev":"B.H.","postal":"BiH","formal_en":"Bosnia and Herzegovina","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Bosnia and Herzegovina","name_alt":null,"mapcolor7":1,"mapcolor8":1,"mapcolor9":1,"mapcolor13":2,"pop_est":4613414,"gdp_md_est":29700,"pop_year":-99,"lastcensus":1991,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"BA","iso_a3":"BIH","iso_n3":"070","un_a3":"070","wb_a2":"BA","wb_a3":"BIH","woe_id":-99,"adm0_a3_is":"BIH","adm0_a3_us":"BIH","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Southern Europe","region_wb":"Europe & Central Asia","name_len":16,"long_len":22,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[275,276,277,278,279]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"France","sov_a3":"FR1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Saint Barthelemy","adm0_a3":"BLM","geou_dif":0,"geounit":"Saint Barthelemy","gu_a3":"BLM","su_dif":0,"subunit":"Saint Barthelemy","su_a3":"BLM","brk_diff":0,"name":"St-Barthélemy","name_long":"Saint-Barthélemy","brk_a3":"BLM","brk_name":"St-Barthélemy","brk_group":null,"abbrev":"St. B.","postal":"BL","formal_en":"Saint-Barthélemy","formal_fr":null,"note_adm0":"Fr.","note_brk":null,"name_sort":"St-Barthélemy","name_alt":null,"mapcolor7":7,"mapcolor8":5,"mapcolor9":9,"mapcolor13":11,"pop_est":7448,"gdp_md_est":255,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"BL","iso_a3":"BLM","iso_n3":"652","un_a3":"652","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"BLM","adm0_a3_us":"BLM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":13,"long_len":16,"abbrev_len":6,"tiny":4,"homepart":-99},"arcs":[[280]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Belarus","sov_a3":"BLR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Belarus","adm0_a3":"BLR","geou_dif":0,"geounit":"Belarus","gu_a3":"BLR","su_dif":0,"subunit":"Belarus","su_a3":"BLR","brk_diff":0,"name":"Belarus","name_long":"Belarus","brk_a3":"BLR","brk_name":"Belarus","brk_group":null,"abbrev":"Bela.","postal":"BY","formal_en":"Republic of Belarus","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Belarus","name_alt":null,"mapcolor7":1,"mapcolor8":1,"mapcolor9":5,"mapcolor13":11,"pop_est":9648533,"gdp_md_est":114100,"pop_year":-99,"lastcensus":2009,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"BY","iso_a3":"BLR","iso_n3":"112","un_a3":"112","wb_a2":"BY","wb_a3":"BLR","woe_id":-99,"adm0_a3_is":"BLR","adm0_a3_us":"BLR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Eastern Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[281,282,283,284,285]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Belize","sov_a3":"BLZ","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Belize","adm0_a3":"BLZ","geou_dif":0,"geounit":"Belize","gu_a3":"BLZ","su_dif":0,"subunit":"Belize","su_a3":"BLZ","brk_diff":0,"name":"Belize","name_long":"Belize","brk_a3":"BLZ","brk_name":"Belize","brk_group":null,"abbrev":"Belize","postal":"BZ","formal_en":"Belize","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Belize","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":5,"mapcolor13":7,"pop_est":307899,"gdp_md_est":2536,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"BZ","iso_a3":"BLZ","iso_n3":"084","un_a3":"084","wb_a2":"BZ","wb_a3":"BLZ","woe_id":-99,"adm0_a3_is":"BLZ","adm0_a3_us":"BLZ","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Central America","region_wb":"Latin America & Caribbean","name_len":6,"long_len":6,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[[286]],[[287]],[[288,289,290]]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"United Kingdom","sov_a3":"GB1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Bermuda","adm0_a3":"BMU","geou_dif":0,"geounit":"Bermuda","gu_a3":"BMU","su_dif":0,"subunit":"Bermuda","su_a3":"BMU","brk_diff":0,"name":"Bermuda","name_long":"Bermuda","brk_a3":"BMU","brk_name":"Bermuda","brk_group":null,"abbrev":"Berm.","postal":"BM","formal_en":"The Bermudas or Somers Isles","formal_fr":null,"note_adm0":"U.K.","note_brk":null,"name_sort":"Bermuda","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":3,"pop_est":67837,"gdp_md_est":4500,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"BM","iso_a3":"BMU","iso_n3":"060","un_a3":"060","wb_a2":"BM","wb_a3":"BMU","woe_id":-99,"adm0_a3_is":"BMU","adm0_a3_us":"BMU","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Northern America","region_wb":"North America","name_len":7,"long_len":7,"abbrev_len":5,"tiny":4,"homepart":-99},"arcs":[[291]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Bolivia","sov_a3":"BOL","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Bolivia","adm0_a3":"BOL","geou_dif":0,"geounit":"Bolivia","gu_a3":"BOL","su_dif":0,"subunit":"Bolivia","su_a3":"BOL","brk_diff":0,"name":"Bolivia","name_long":"Bolivia","brk_a3":"BOL","brk_name":"Bolivia","brk_group":null,"abbrev":"Bolivia","postal":"BO","formal_en":"Plurinational State of Bolivia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Bolivia","name_alt":null,"mapcolor7":1,"mapcolor8":5,"mapcolor9":2,"mapcolor13":3,"pop_est":9775246,"gdp_md_est":43270,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"BO","iso_a3":"BOL","iso_n3":"068","un_a3":"068","wb_a2":"BO","wb_a3":"BOL","woe_id":-99,"adm0_a3_is":"BOL","adm0_a3_us":"BOL","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"South America","region_un":"Americas","subregion":"South America","region_wb":"Latin America & Caribbean","name_len":7,"long_len":7,"abbrev_len":7,"tiny":-99,"homepart":1},"arcs":[[292,-46,293,294,295]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Brazil","sov_a3":"BRA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Brazil","adm0_a3":"BRA","geou_dif":0,"geounit":"Brazil","gu_a3":"BRA","su_dif":0,"subunit":"Brazil","su_a3":"BRA","brk_diff":0,"name":"Brazil","name_long":"Brazil","brk_a3":"BRA","brk_name":"Brazil","brk_group":null,"abbrev":"Brazil","postal":"BR","formal_en":"Federative Republic of Brazil","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Brazil","name_alt":null,"mapcolor7":5,"mapcolor8":6,"mapcolor9":5,"mapcolor13":7,"pop_est":198739269,"gdp_md_est":1993000,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"3. Emerging region: BRIC","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"BR","iso_a3":"BRA","iso_n3":"076","un_a3":"076","wb_a2":"BR","wb_a3":"BRA","woe_id":-99,"adm0_a3_is":"BRA","adm0_a3_us":"BRA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"South America","region_un":"Americas","subregion":"South America","region_wb":"Latin America & Caribbean","name_len":6,"long_len":6,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[[296]],[[297]],[[298]],[[299]],[[300]],[[301]],[[302]],[[303]],[[304]],[[305]],[[306]],[[307]],[[308]],[[309]],[[310]],[[311]],[[312,313,314,315,-42,316,-296,317,318,319,320]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Barbados","sov_a3":"BRB","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Barbados","adm0_a3":"BRB","geou_dif":0,"geounit":"Barbados","gu_a3":"BRB","su_dif":0,"subunit":"Barbados","su_a3":"BRB","brk_diff":0,"name":"Barbados","name_long":"Barbados","brk_a3":"BRB","brk_name":"Barbados","brk_group":null,"abbrev":"Barb.","postal":"BB","formal_en":"Barbados","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Barbados","name_alt":null,"mapcolor7":4,"mapcolor8":1,"mapcolor9":5,"mapcolor13":3,"pop_est":284589,"gdp_md_est":5425,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"BB","iso_a3":"BRB","iso_n3":"052","un_a3":"052","wb_a2":"BB","wb_a3":"BRB","woe_id":-99,"adm0_a3_is":"BRB","adm0_a3_us":"BRB","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":8,"long_len":8,"abbrev_len":5,"tiny":3,"homepart":1},"arcs":[[321]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Brunei","sov_a3":"BRN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Brunei","adm0_a3":"BRN","geou_dif":0,"geounit":"Brunei","gu_a3":"BRN","su_dif":0,"subunit":"Brunei","su_a3":"BRN","brk_diff":0,"name":"Brunei","name_long":"Brunei Darussalam","brk_a3":"BRN","brk_name":"Brunei","brk_group":null,"abbrev":"Brunei","postal":"BN","formal_en":"Negara Brunei Darussalam","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Brunei","name_alt":null,"mapcolor7":4,"mapcolor8":6,"mapcolor9":6,"mapcolor13":12,"pop_est":388190,"gdp_md_est":20250,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"BN","iso_a3":"BRN","iso_n3":"096","un_a3":"096","wb_a2":"BN","wb_a3":"BRN","woe_id":-99,"adm0_a3_is":"BRN","adm0_a3_us":"BRN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"South-Eastern Asia","region_wb":"East Asia & Pacific","name_len":6,"long_len":17,"abbrev_len":6,"tiny":2,"homepart":1},"arcs":[[[322,323]],[[324,325]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Bhutan","sov_a3":"BTN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Bhutan","adm0_a3":"BTN","geou_dif":0,"geounit":"Bhutan","gu_a3":"BTN","su_dif":0,"subunit":"Bhutan","su_a3":"BTN","brk_diff":0,"name":"Bhutan","name_long":"Bhutan","brk_a3":"BTN","brk_name":"Bhutan","brk_group":null,"abbrev":"Bhutan","postal":"BT","formal_en":"Kingdom of Bhutan","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Bhutan","name_alt":null,"mapcolor7":5,"mapcolor8":6,"mapcolor9":1,"mapcolor13":8,"pop_est":691141,"gdp_md_est":3524,"pop_year":-99,"lastcensus":2005,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"BT","iso_a3":"BTN","iso_n3":"064","un_a3":"064","wb_a2":"BT","wb_a3":"BTN","woe_id":-99,"adm0_a3_is":"BTN","adm0_a3_us":"BTN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Southern Asia","region_wb":"South Asia","name_len":6,"long_len":6,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[326,327]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Botswana","sov_a3":"BWA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Botswana","adm0_a3":"BWA","geou_dif":0,"geounit":"Botswana","gu_a3":"BWA","su_dif":0,"subunit":"Botswana","su_a3":"BWA","brk_diff":0,"name":"Botswana","name_long":"Botswana","brk_a3":"BWA","brk_name":"Botswana","brk_group":null,"abbrev":"Bwa.","postal":"BW","formal_en":"Republic of Botswana","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Botswana","name_alt":null,"mapcolor7":6,"mapcolor8":5,"mapcolor9":7,"mapcolor13":3,"pop_est":1990876,"gdp_md_est":27060,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"BW","iso_a3":"BWA","iso_n3":"072","un_a3":"072","wb_a2":"BW","wb_a3":"BWA","woe_id":-99,"adm0_a3_is":"BWA","adm0_a3_us":"BWA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Southern Africa","region_wb":"Sub-Saharan Africa","name_len":8,"long_len":8,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[328,329,330]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Central African Republic","sov_a3":"CAF","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Central African Republic","adm0_a3":"CAF","geou_dif":0,"geounit":"Central African Republic","gu_a3":"CAF","su_dif":0,"subunit":"Central African Republic","su_a3":"CAF","brk_diff":0,"name":"Central African Rep.","name_long":"Central African Republic","brk_a3":"CAF","brk_name":"Central African Rep.","brk_group":null,"abbrev":"C.A.R.","postal":"CF","formal_en":"Central African Republic","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Central African Republic","name_alt":null,"mapcolor7":5,"mapcolor8":6,"mapcolor9":6,"mapcolor13":9,"pop_est":4511488,"gdp_md_est":3198,"pop_year":-99,"lastcensus":2003,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"CF","iso_a3":"CAF","iso_n3":"140","un_a3":"140","wb_a2":"CF","wb_a3":"CAF","woe_id":-99,"adm0_a3_is":"CAF","adm0_a3_us":"CAF","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Middle Africa","region_wb":"Sub-Saharan Africa","name_len":20,"long_len":24,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[331,332,333,334,335,336]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Canada","sov_a3":"CAN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Canada","adm0_a3":"CAN","geou_dif":0,"geounit":"Canada","gu_a3":"CAN","su_dif":0,"subunit":"Canada","su_a3":"CAN","brk_diff":0,"name":"Canada","name_long":"Canada","brk_a3":"CAN","brk_name":"Canada","brk_group":null,"abbrev":"Can.","postal":"CA","formal_en":"Canada","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Canada","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":2,"mapcolor13":2,"pop_est":33487208,"gdp_md_est":1300000,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"1. Developed region: G7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"CA","iso_a3":"CAN","iso_n3":"124","un_a3":"124","wb_a2":"CA","wb_a3":"CAN","woe_id":-99,"adm0_a3_is":"CAN","adm0_a3_us":"CAN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Northern America","region_wb":"North America","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[337]],[[338]],[[339]],[[340]],[[341]],[[342]],[[343]],[[344]],[[345]],[[346]],[[347]],[[348]],[[349]],[[350]],[[351]],[[352,353]],[[354]],[[355]],[[356]],[[357]],[[358]],[[359]],[[360]],[[361]],[[362]],[[363]],[[364]],[[365]],[[366]],[[367]],[[368]],[[369]],[[370]],[[371]],[[372]],[[373]],[[374]],[[375]],[[376]],[[377]],[[378]],[[379]],[[380]],[[381,382]],[[383]],[[384]],[[385]],[[386]],[[387]],[[388]],[[389]],[[390]],[[391]],[[392]],[[393]],[[394]],[[395]],[[396]],[[397]],[[398]],[[399]],[[400]],[[401]],[[402]],[[403]],[[404]],[[405]],[[406]],[[407]],[[408]],[[409]],[[410]],[[411]],[[412]],[[413]],[[414]],[[415]],[[416]],[[417]],[[418]],[[419]],[[420]],[[421]],[[422]],[[423]],[[424]],[[425]],[[426]],[[427]],[[428]],[[429]],[[430]],[[431]],[[432]],[[433]],[[434]],[[435]],[[436]],[[437]],[[438]],[[439,440,441,442]],[[443]],[[444]],[[445]],[[446]],[[447]],[[448]],[[449]],[[450]],[[451]],[[452]],[[453]],[[454]],[[455]],[[456]],[[457]],[[458]],[[459]],[[460]],[[461]],[[462]],[[463]],[[464]],[[465]],[[466]],[[467]],[[468]],[[469]],[[470]],[[471]],[[472]],[[473]],[[474]],[[475]],[[476]],[[477]],[[478]],[[479]],[[480]],[[481]],[[482]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Switzerland","sov_a3":"CHE","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Switzerland","adm0_a3":"CHE","geou_dif":0,"geounit":"Switzerland","gu_a3":"CHE","su_dif":0,"subunit":"Switzerland","su_a3":"CHE","brk_diff":0,"name":"Switzerland","name_long":"Switzerland","brk_a3":"CHE","brk_name":"Switzerland","brk_group":null,"abbrev":"Switz.","postal":"CH","formal_en":"Swiss Confederation","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Switzerland","name_alt":null,"mapcolor7":5,"mapcolor8":2,"mapcolor9":7,"mapcolor13":3,"pop_est":7604467,"gdp_md_est":316700,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"CH","iso_a3":"CHE","iso_n3":"756","un_a3":"756","wb_a2":"CH","wb_a3":"CHE","woe_id":-99,"adm0_a3_is":"CHE","adm0_a3_us":"CHE","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Western Europe","region_wb":"Europe & Central Asia","name_len":11,"long_len":11,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[-216,483,-214,484,485,486]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Chile","sov_a3":"CHL","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Chile","adm0_a3":"CHL","geou_dif":0,"geounit":"Chile","gu_a3":"CHL","su_dif":0,"subunit":"Chile","su_a3":"CHL","brk_diff":0,"name":"Chile","name_long":"Chile","brk_a3":"CHL","brk_name":"Chile","brk_group":null,"abbrev":"Chile","postal":"CL","formal_en":"Republic of Chile","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Chile","name_alt":null,"mapcolor7":5,"mapcolor8":1,"mapcolor9":5,"mapcolor13":9,"pop_est":16601707,"gdp_md_est":244500,"pop_year":-99,"lastcensus":2002,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"CL","iso_a3":"CHL","iso_n3":"152","un_a3":"152","wb_a2":"CL","wb_a3":"CHL","woe_id":-99,"adm0_a3_is":"CHL","adm0_a3_us":"CHL","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"South America","region_un":"Americas","subregion":"South America","region_wb":"Latin America & Caribbean","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[487]],[[488]],[[489]],[[490]],[[491]],[[492]],[[493]],[[494]],[[495]],[[-38,496]],[[497]],[[498]],[[499]],[[500]],[[501]],[[502]],[[503]],[[504]],[[505]],[[506]],[[507]],[[508]],[[509]],[[510]],[[511]],[[512]],[[513]],[[514]],[[515]],[[516]],[[-45,517,518,-294]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"China","sov_a3":"CH1","adm0_dif":1,"level":2,"type":"Country","admin":"China","adm0_a3":"CHN","geou_dif":0,"geounit":"China","gu_a3":"CHN","su_dif":0,"subunit":"China","su_a3":"CHN","brk_diff":0,"name":"China","name_long":"China","brk_a3":"CHN","brk_name":"China","brk_group":null,"abbrev":"China","postal":"CN","formal_en":"People's Republic of China","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"China","name_alt":null,"mapcolor7":4,"mapcolor8":4,"mapcolor9":4,"mapcolor13":3,"pop_est":1338612970,"gdp_md_est":7973000,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"3. Emerging region: BRIC","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"CN","iso_a3":"CHN","iso_n3":"156","un_a3":"156","wb_a2":"CN","wb_a3":"CHN","woe_id":-99,"adm0_a3_is":"CHN","adm0_a3_us":"CHN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Eastern Asia","region_wb":"East Asia & Pacific","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[519]],[[520]],[[521]],[[522]],[[523]],[[524]],[[525]],[[526]],[[527]],[[528]],[[529]],[[530]],[[531,532,533,534,535,536,537,538,539,540,-328,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,-2,557,558,559,560,561,562]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Ivory Coast","sov_a3":"CIV","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Ivory Coast","adm0_a3":"CIV","geou_dif":0,"geounit":"Ivory Coast","gu_a3":"CIV","su_dif":0,"subunit":"Ivory Coast","su_a3":"CIV","brk_diff":0,"name":"Côte d'Ivoire","name_long":"Côte d'Ivoire","brk_a3":"CIV","brk_name":"Côte d'Ivoire","brk_group":null,"abbrev":"I.C.","postal":"CI","formal_en":"Republic of Ivory Coast","formal_fr":"Republic of Cote D'Ivoire","note_adm0":null,"note_brk":null,"name_sort":"Côte d'Ivoire","name_alt":null,"mapcolor7":4,"mapcolor8":6,"mapcolor9":3,"mapcolor13":3,"pop_est":20617068,"gdp_md_est":33850,"pop_year":-99,"lastcensus":1998,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"CI","iso_a3":"CIV","iso_n3":"384","un_a3":"384","wb_a2":"CI","wb_a3":"CIV","woe_id":-99,"adm0_a3_is":"CIV","adm0_a3_us":"CIV","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":13,"long_len":13,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[563,564]],[[-243,565,566,567,568,569]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Cameroon","sov_a3":"CMR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Cameroon","adm0_a3":"CMR","geou_dif":0,"geounit":"Cameroon","gu_a3":"CMR","su_dif":0,"subunit":"Cameroon","su_a3":"CMR","brk_diff":0,"name":"Cameroon","name_long":"Cameroon","brk_a3":"CMR","brk_name":"Cameroon","brk_group":null,"abbrev":"Cam.","postal":"CM","formal_en":"Republic of Cameroon","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Cameroon","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":1,"mapcolor13":3,"pop_est":18879301,"gdp_md_est":42750,"pop_year":-99,"lastcensus":2005,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"CM","iso_a3":"CMR","iso_n3":"120","un_a3":"120","wb_a2":"CM","wb_a3":"CMR","woe_id":-99,"adm0_a3_is":"CMR","adm0_a3_us":"CMR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Middle Africa","region_wb":"Sub-Saharan Africa","name_len":8,"long_len":8,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-336,570,571,572,573,574,575]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Democratic Republic of the Congo","sov_a3":"COD","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Democratic Republic of the Congo","adm0_a3":"COD","geou_dif":0,"geounit":"Democratic Republic of the Congo","gu_a3":"COD","su_dif":0,"subunit":"Democratic Republic of the Congo","su_a3":"COD","brk_diff":0,"name":"Dem. Rep. Congo","name_long":"Democratic Republic of the Congo","brk_a3":"COD","brk_name":"Democratic Republic of the Congo","brk_group":null,"abbrev":"D.R.C.","postal":"DRC","formal_en":"Democratic Republic of the Congo","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Congo, Dem. Rep.","name_alt":null,"mapcolor7":4,"mapcolor8":4,"mapcolor9":4,"mapcolor13":7,"pop_est":68692542,"gdp_md_est":20640,"pop_year":-99,"lastcensus":1984,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"CD","iso_a3":"COD","iso_n3":"180","un_a3":"180","wb_a2":"ZR","wb_a3":"ZAR","woe_id":-99,"adm0_a3_is":"COD","adm0_a3_us":"COD","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Middle Africa","region_wb":"Sub-Saharan Africa","name_len":15,"long_len":32,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[576,577,578,-226,579,580,-12,581,-15,582,-334]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Republic of Congo","sov_a3":"COG","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Republic of Congo","adm0_a3":"COG","geou_dif":0,"geounit":"Republic of Congo","gu_a3":"COG","su_dif":0,"subunit":"Republic of Congo","su_a3":"COG","brk_diff":0,"name":"Congo","name_long":"Republic of Congo","brk_a3":"COG","brk_name":"Republic of Congo","brk_group":null,"abbrev":"Rep. Congo","postal":"CG","formal_en":"Republic of Congo","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Congo, Rep.","name_alt":null,"mapcolor7":2,"mapcolor8":1,"mapcolor9":3,"mapcolor13":10,"pop_est":4012809,"gdp_md_est":15350,"pop_year":-99,"lastcensus":2007,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"CG","iso_a3":"COG","iso_n3":"178","un_a3":"178","wb_a2":"CG","wb_a3":"COG","woe_id":-99,"adm0_a3_is":"COG","adm0_a3_us":"COG","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Middle Africa","region_wb":"Sub-Saharan Africa","name_len":5,"long_len":17,"abbrev_len":10,"tiny":-99,"homepart":1},"arcs":[[-583,-14,583,584,-571,-335]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"New Zealand","sov_a3":"NZ1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Cook Islands","adm0_a3":"COK","geou_dif":0,"geounit":"Cook Islands","gu_a3":"COK","su_dif":0,"subunit":"Cook Islands","su_a3":"COK","brk_diff":0,"name":"Cook Is.","name_long":"Cook Islands","brk_a3":"COK","brk_name":"Cook Is.","brk_group":null,"abbrev":"Cook Is.","postal":"CK","formal_en":null,"formal_fr":null,"note_adm0":"Assoc. with N.Z.","note_brk":null,"name_sort":"Cook Islands","name_alt":null,"mapcolor7":3,"mapcolor8":3,"mapcolor9":4,"mapcolor13":4,"pop_est":11870,"gdp_md_est":183.2,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"CK","iso_a3":"COK","iso_n3":"184","un_a3":"184","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"COK","adm0_a3_us":"COK","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Polynesia","region_wb":"East Asia & Pacific","name_len":8,"long_len":12,"abbrev_len":8,"tiny":3,"homepart":-99},"arcs":[[585]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Colombia","sov_a3":"COL","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Colombia","adm0_a3":"COL","geou_dif":0,"geounit":"Colombia","gu_a3":"COL","su_dif":0,"subunit":"Colombia","su_a3":"COL","brk_diff":0,"name":"Colombia","name_long":"Colombia","brk_a3":"COL","brk_name":"Colombia","brk_group":null,"abbrev":"Col.","postal":"CO","formal_en":"Republic of Colombia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Colombia","name_alt":null,"mapcolor7":2,"mapcolor8":1,"mapcolor9":3,"mapcolor13":1,"pop_est":45644023,"gdp_md_est":395400,"pop_year":-99,"lastcensus":2006,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"CO","iso_a3":"COL","iso_n3":"170","un_a3":"170","wb_a2":"CO","wb_a3":"COL","woe_id":-99,"adm0_a3_is":"COL","adm0_a3_us":"COL","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"South America","region_un":"Americas","subregion":"South America","region_wb":"Latin America & Caribbean","name_len":8,"long_len":8,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[586]],[[587,-319,588,589,590,591,592]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Comoros","sov_a3":"COM","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Comoros","adm0_a3":"COM","geou_dif":0,"geounit":"Comoros","gu_a3":"COM","su_dif":0,"subunit":"Comoros","su_a3":"COM","brk_diff":0,"name":"Comoros","name_long":"Comoros","brk_a3":"COM","brk_name":"Comoros","brk_group":null,"abbrev":"Com.","postal":"KM","formal_en":"Union of the Comoros","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Comoros","name_alt":null,"mapcolor7":2,"mapcolor8":1,"mapcolor9":4,"mapcolor13":10,"pop_est":752438,"gdp_md_est":751.2,"pop_year":-99,"lastcensus":2003,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"KM","iso_a3":"COM","iso_n3":"174","un_a3":"174","wb_a2":"KM","wb_a3":"COM","woe_id":-99,"adm0_a3_is":"COM","adm0_a3_us":"COM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":7,"long_len":7,"abbrev_len":4,"tiny":2,"homepart":1},"arcs":[[[593]],[[594]],[[595]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Cape Verde","sov_a3":"CPV","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Cape Verde","adm0_a3":"CPV","geou_dif":0,"geounit":"Cape Verde","gu_a3":"CPV","su_dif":0,"subunit":"Cape Verde","su_a3":"CPV","brk_diff":0,"name":"Cape Verde","name_long":"Cape Verde","brk_a3":"CPV","brk_name":"Cape Verde","brk_group":null,"abbrev":"C.Vd.","postal":"CV","formal_en":"Republic of Cape Verde","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Cape Verde","name_alt":null,"mapcolor7":1,"mapcolor8":1,"mapcolor9":4,"mapcolor13":11,"pop_est":429474,"gdp_md_est":1626,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"CV","iso_a3":"CPV","iso_n3":"132","un_a3":"132","wb_a2":"CV","wb_a3":"CPV","woe_id":-99,"adm0_a3_is":"CPV","adm0_a3_us":"CPV","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":10,"long_len":10,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[596]],[[597]],[[598]],[[599]],[[600]],[[601]],[[602]],[[603]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Costa Rica","sov_a3":"CRI","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Costa Rica","adm0_a3":"CRI","geou_dif":0,"geounit":"Costa Rica","gu_a3":"CRI","su_dif":0,"subunit":"Costa Rica","su_a3":"CRI","brk_diff":0,"name":"Costa Rica","name_long":"Costa Rica","brk_a3":"CRI","brk_name":"Costa Rica","brk_group":null,"abbrev":"C.R.","postal":"CR","formal_en":"Republic of Costa Rica","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Costa Rica","name_alt":null,"mapcolor7":3,"mapcolor8":2,"mapcolor9":4,"mapcolor13":2,"pop_est":4253877,"gdp_md_est":48320,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"CR","iso_a3":"CRI","iso_n3":"188","un_a3":"188","wb_a2":"CR","wb_a3":"CRI","woe_id":-99,"adm0_a3_is":"CRI","adm0_a3_us":"CRI","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Central America","region_wb":"Latin America & Caribbean","name_len":10,"long_len":10,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[604,605,606,607]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Cuba","sov_a3":"CUB","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Cuba","adm0_a3":"CUB","geou_dif":0,"geounit":"Cuba","gu_a3":"CUB","su_dif":0,"subunit":"Cuba","su_a3":"CUB","brk_diff":0,"name":"Cuba","name_long":"Cuba","brk_a3":"CUB","brk_name":"Cuba","brk_group":null,"abbrev":"Cuba","postal":"CU","formal_en":"Republic of Cuba","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Cuba","name_alt":null,"mapcolor7":3,"mapcolor8":5,"mapcolor9":3,"mapcolor13":4,"pop_est":11451652,"gdp_md_est":108200,"pop_year":-99,"lastcensus":2002,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"CU","iso_a3":"CUB","iso_n3":"192","un_a3":"192","wb_a2":"CU","wb_a3":"CUB","woe_id":-99,"adm0_a3_is":"CUB","adm0_a3_us":"CUB","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":4,"long_len":4,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[608]],[[609]],[[610]],[[611]],[[612]],[[613]],[[614]]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Netherlands","sov_a3":"NL1","adm0_dif":1,"level":2,"type":"Country","admin":"Curaçao","adm0_a3":"CUW","geou_dif":0,"geounit":"Curaçao","gu_a3":"CUW","su_dif":0,"subunit":"Curaçao","su_a3":"CUW","brk_diff":0,"name":"Curaçao","name_long":"Curaçao","brk_a3":"CUW","brk_name":"Curaçao","brk_group":null,"abbrev":"Cur.","postal":"CW","formal_en":"Curaçao","formal_fr":null,"note_adm0":"Neth.","note_brk":null,"name_sort":"Curaçao","name_alt":null,"mapcolor7":4,"mapcolor8":2,"mapcolor9":2,"mapcolor13":9,"pop_est":141766,"gdp_md_est":2838,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"CW","iso_a3":"CUW","iso_n3":"531","un_a3":"531","wb_a2":"CW","wb_a3":"CUW","woe_id":-99,"adm0_a3_is":"CUW","adm0_a3_us":"CUW","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":7,"long_len":7,"abbrev_len":4,"tiny":4,"homepart":-99},"arcs":[[615]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"United Kingdom","sov_a3":"GB1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Cayman Islands","adm0_a3":"CYM","geou_dif":0,"geounit":"Cayman Islands","gu_a3":"CYM","su_dif":0,"subunit":"Cayman Islands","su_a3":"CYM","brk_diff":0,"name":"Cayman Is.","name_long":"Cayman Islands","brk_a3":"CYM","brk_name":"Cayman Is.","brk_group":null,"abbrev":"Cym. Is.","postal":"KY","formal_en":"Cayman Islands","formal_fr":null,"note_adm0":"U.K.","note_brk":null,"name_sort":"Cayman Islands","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":3,"pop_est":49035,"gdp_md_est":1939,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"KY","iso_a3":"CYM","iso_n3":"136","un_a3":"136","wb_a2":"KY","wb_a3":"CYM","woe_id":-99,"adm0_a3_is":"CYM","adm0_a3_us":"CYM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":10,"long_len":14,"abbrev_len":8,"tiny":2,"homepart":-99},"arcs":[[[616]],[[617]],[[618]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Northern Cyprus","sov_a3":"CYN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Northern Cyprus","adm0_a3":"CYN","geou_dif":0,"geounit":"Northern Cyprus","gu_a3":"CYN","su_dif":0,"subunit":"Northern Cyprus","su_a3":"CYN","brk_diff":1,"name":"N. Cyprus","name_long":"Northern Cyprus","brk_a3":"B20","brk_name":"N. Cyprus","brk_group":null,"abbrev":"N. Cy.","postal":"CN","formal_en":"Turkish Republic of Northern Cyprus","formal_fr":null,"note_adm0":"Self admin.","note_brk":"Self admin.; Claimed by Cyprus","name_sort":"Cyprus, Northern","name_alt":null,"mapcolor7":3,"mapcolor8":1,"mapcolor9":4,"mapcolor13":8,"pop_est":265100,"gdp_md_est":3600,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"-99","iso_a3":"-99","iso_n3":"-99","un_a3":"-099","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"CYP","adm0_a3_us":"CYP","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Europe & Central Asia","name_len":9,"long_len":15,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[619,620]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Cyprus","sov_a3":"CYP","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Cyprus","adm0_a3":"CYP","geou_dif":0,"geounit":"Cyprus","gu_a3":"CYP","su_dif":0,"subunit":"Cyprus","su_a3":"CYP","brk_diff":0,"name":"Cyprus","name_long":"Cyprus","brk_a3":"CYP","brk_name":"Cyprus","brk_group":null,"abbrev":"Cyp.","postal":"CY","formal_en":"Republic of Cyprus","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Cyprus","name_alt":null,"mapcolor7":1,"mapcolor8":2,"mapcolor9":3,"mapcolor13":7,"pop_est":531640,"gdp_md_est":22700,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"CY","iso_a3":"CYP","iso_n3":"196","un_a3":"196","wb_a2":"CY","wb_a3":"CYP","woe_id":-99,"adm0_a3_is":"CYP","adm0_a3_us":"CYP","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Europe & Central Asia","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-620,621]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Czech Republic","sov_a3":"CZE","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Czech Republic","adm0_a3":"CZE","geou_dif":0,"geounit":"Czech Republic","gu_a3":"CZE","su_dif":0,"subunit":"Czech Republic","su_a3":"CZE","brk_diff":0,"name":"Czech Rep.","name_long":"Czech Republic","brk_a3":"CZE","brk_name":"Czech Rep.","brk_group":null,"abbrev":"Cz. Rep.","postal":"CZ","formal_en":"Czech Republic","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Czech Republic","name_alt":null,"mapcolor7":1,"mapcolor8":1,"mapcolor9":2,"mapcolor13":6,"pop_est":10211904,"gdp_md_est":265200,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"CZ","iso_a3":"CZE","iso_n3":"203","un_a3":"203","wb_a2":"CZ","wb_a3":"CZE","woe_id":-99,"adm0_a3_is":"CZE","adm0_a3_us":"CZE","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Eastern Europe","region_wb":"Europe & Central Asia","name_len":10,"long_len":14,"abbrev_len":8,"tiny":-99,"homepart":1},"arcs":[[622,623,-218,624]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Germany","sov_a3":"DEU","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Germany","adm0_a3":"DEU","geou_dif":0,"geounit":"Germany","gu_a3":"DEU","su_dif":0,"subunit":"Germany","su_a3":"DEU","brk_diff":0,"name":"Germany","name_long":"Germany","brk_a3":"DEU","brk_name":"Germany","brk_group":null,"abbrev":"Ger.","postal":"D","formal_en":"Federal Republic of Germany","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Germany","name_alt":null,"mapcolor7":2,"mapcolor8":5,"mapcolor9":5,"mapcolor13":1,"pop_est":82329758,"gdp_md_est":2918000,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"1. Developed region: G7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"DE","iso_a3":"DEU","iso_n3":"276","un_a3":"276","wb_a2":"DE","wb_a3":"DEU","woe_id":-99,"adm0_a3_is":"DEU","adm0_a3_us":"DEU","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Western Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[625,626]],[[627]],[[628]],[[629]],[[630,631,-625,-217,-487,632,633,-229,634,635,636]],[[637]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Djibouti","sov_a3":"DJI","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Djibouti","adm0_a3":"DJI","geou_dif":0,"geounit":"Djibouti","gu_a3":"DJI","su_dif":0,"subunit":"Djibouti","su_a3":"DJI","brk_diff":0,"name":"Djibouti","name_long":"Djibouti","brk_a3":"DJI","brk_name":"Djibouti","brk_group":null,"abbrev":"Dji.","postal":"DJ","formal_en":"Republic of Djibouti","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Djibouti","name_alt":null,"mapcolor7":1,"mapcolor8":2,"mapcolor9":4,"mapcolor13":8,"pop_est":516055,"gdp_md_est":1885,"pop_year":-99,"lastcensus":2009,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"DJ","iso_a3":"DJI","iso_n3":"262","un_a3":"262","wb_a2":"DJ","wb_a3":"DJI","woe_id":-99,"adm0_a3_is":"DJI","adm0_a3_us":"DJI","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Middle East & North Africa","name_len":8,"long_len":8,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[638,639,640,641]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Dominica","sov_a3":"DMA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Dominica","adm0_a3":"DMA","geou_dif":0,"geounit":"Dominica","gu_a3":"DMA","su_dif":0,"subunit":"Dominica","su_a3":"DMA","brk_diff":0,"name":"Dominica","name_long":"Dominica","brk_a3":"DMA","brk_name":"Dominica","brk_group":null,"abbrev":"D'inca","postal":"DM","formal_en":"Commonwealth of Dominica","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Dominica","name_alt":null,"mapcolor7":4,"mapcolor8":5,"mapcolor9":2,"mapcolor13":12,"pop_est":72660,"gdp_md_est":719.6,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"DM","iso_a3":"DMA","iso_n3":"212","un_a3":"212","wb_a2":"DM","wb_a3":"DMA","woe_id":-99,"adm0_a3_is":"DMA","adm0_a3_us":"DMA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":8,"long_len":8,"abbrev_len":6,"tiny":4,"homepart":1},"arcs":[[642]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Denmark","sov_a3":"DN1","adm0_dif":1,"level":2,"type":"Country","admin":"Denmark","adm0_a3":"DNK","geou_dif":0,"geounit":"Denmark","gu_a3":"DNK","su_dif":0,"subunit":"Denmark","su_a3":"DNK","brk_diff":0,"name":"Denmark","name_long":"Denmark","brk_a3":"DNK","brk_name":"Denmark","brk_group":null,"abbrev":"Den.","postal":"DK","formal_en":"Kingdom of Denmark","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Denmark","name_alt":null,"mapcolor7":4,"mapcolor8":1,"mapcolor9":3,"mapcolor13":12,"pop_est":5500510,"gdp_md_est":203600,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"DK","iso_a3":"DNK","iso_n3":"208","un_a3":"208","wb_a2":"DK","wb_a3":"DNK","woe_id":-99,"adm0_a3_is":"DNK","adm0_a3_us":"DNK","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Northern Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[643]],[[644]],[[645]],[[646]],[[647]],[[648]],[[649]],[[650]],[[651]],[[652]],[[653]],[[-637,654]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Dominican Republic","sov_a3":"DOM","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Dominican Republic","adm0_a3":"DOM","geou_dif":0,"geounit":"Dominican Republic","gu_a3":"DOM","su_dif":0,"subunit":"Dominican Republic","su_a3":"DOM","brk_diff":0,"name":"Dominican Rep.","name_long":"Dominican Republic","brk_a3":"DOM","brk_name":"Dominican Rep.","brk_group":null,"abbrev":"Dom. Rep.","postal":"DO","formal_en":"Dominican Republic","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Dominican Republic","name_alt":null,"mapcolor7":5,"mapcolor8":2,"mapcolor9":5,"mapcolor13":7,"pop_est":9650054,"gdp_md_est":78000,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"DO","iso_a3":"DOM","iso_n3":"214","un_a3":"214","wb_a2":"DO","wb_a3":"DOM","woe_id":-99,"adm0_a3_is":"DOM","adm0_a3_us":"DOM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":14,"long_len":18,"abbrev_len":9,"tiny":-99,"homepart":1},"arcs":[[655,656]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Algeria","sov_a3":"DZA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Algeria","adm0_a3":"DZA","geou_dif":0,"geounit":"Algeria","gu_a3":"DZA","su_dif":0,"subunit":"Algeria","su_a3":"DZA","brk_diff":0,"name":"Algeria","name_long":"Algeria","brk_a3":"DZA","brk_name":"Algeria","brk_group":null,"abbrev":"Alg.","postal":"DZ","formal_en":"People's Democratic Republic of Algeria","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Algeria","name_alt":null,"mapcolor7":5,"mapcolor8":1,"mapcolor9":6,"mapcolor13":3,"pop_est":34178188,"gdp_md_est":232900,"pop_year":-99,"lastcensus":2008,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"DZ","iso_a3":"DZA","iso_n3":"012","un_a3":"012","wb_a2":"DZ","wb_a3":"DZA","woe_id":-99,"adm0_a3_is":"DZA","adm0_a3_us":"DZA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Northern Africa","region_wb":"Middle East & North Africa","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[657,658,659,660,661,662,663,664]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Ecuador","sov_a3":"ECU","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Ecuador","adm0_a3":"ECU","geou_dif":0,"geounit":"Ecuador","gu_a3":"ECU","su_dif":0,"subunit":"Ecuador","su_a3":"ECU","brk_diff":0,"name":"Ecuador","name_long":"Ecuador","brk_a3":"ECU","brk_name":"Ecuador","brk_group":null,"abbrev":"Ecu.","postal":"EC","formal_en":"Republic of Ecuador","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Ecuador","name_alt":null,"mapcolor7":1,"mapcolor8":5,"mapcolor9":2,"mapcolor13":12,"pop_est":14573101,"gdp_md_est":107700,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"EC","iso_a3":"ECU","iso_n3":"218","un_a3":"218","wb_a2":"EC","wb_a3":"ECU","woe_id":-99,"adm0_a3_is":"ECU","adm0_a3_us":"ECU","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"South America","region_un":"Americas","subregion":"South America","region_wb":"Latin America & Caribbean","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[665]],[[666]],[[667]],[[668]],[[669]],[[670]],[[671]],[[672]],[[673,674,-590]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Egypt","sov_a3":"EGY","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Egypt","adm0_a3":"EGY","geou_dif":0,"geounit":"Egypt","gu_a3":"EGY","su_dif":0,"subunit":"Egypt","su_a3":"EGY","brk_diff":0,"name":"Egypt","name_long":"Egypt","brk_a3":"EGY","brk_name":"Egypt","brk_group":null,"abbrev":"Egypt","postal":"EG","formal_en":"Arab Republic of Egypt","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Egypt, Arab Rep.","name_alt":null,"mapcolor7":4,"mapcolor8":6,"mapcolor9":7,"mapcolor13":2,"pop_est":83082869,"gdp_md_est":443700,"pop_year":-99,"lastcensus":2006,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"EG","iso_a3":"EGY","iso_n3":"818","un_a3":"818","wb_a2":"EG","wb_a3":"EGY","woe_id":-99,"adm0_a3_is":"EGY","adm0_a3_us":"EGY","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Northern Africa","region_wb":"Middle East & North Africa","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[675,676,677,678,679,680]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Eritrea","sov_a3":"ERI","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Eritrea","adm0_a3":"ERI","geou_dif":0,"geounit":"Eritrea","gu_a3":"ERI","su_dif":0,"subunit":"Eritrea","su_a3":"ERI","brk_diff":0,"name":"Eritrea","name_long":"Eritrea","brk_a3":"ERI","brk_name":"Eritrea","brk_group":null,"abbrev":"Erit.","postal":"ER","formal_en":"State of Eritrea","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Eritrea","name_alt":null,"mapcolor7":3,"mapcolor8":1,"mapcolor9":2,"mapcolor13":12,"pop_est":5647168,"gdp_md_est":3945,"pop_year":-99,"lastcensus":1984,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"ER","iso_a3":"ERI","iso_n3":"232","un_a3":"232","wb_a2":"ER","wb_a3":"ERI","woe_id":-99,"adm0_a3_is":"ERI","adm0_a3_us":"ERI","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":7,"long_len":7,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[681]],[[682]],[[683,-641,684,685]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Spain","sov_a3":"ESP","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Spain","adm0_a3":"ESP","geou_dif":0,"geounit":"Spain","gu_a3":"ESP","su_dif":0,"subunit":"Spain","su_a3":"ESP","brk_diff":0,"name":"Spain","name_long":"Spain","brk_a3":"ESP","brk_name":"Spain","brk_group":null,"abbrev":"Sp.","postal":"E","formal_en":"Kingdom of Spain","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Spain","name_alt":null,"mapcolor7":4,"mapcolor8":5,"mapcolor9":5,"mapcolor13":5,"pop_est":40525002,"gdp_md_est":1403000,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"ES","iso_a3":"ESP","iso_n3":"724","un_a3":"724","wb_a2":"ES","wb_a3":"ESP","woe_id":-99,"adm0_a3_is":"ESP","adm0_a3_us":"ESP","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Southern Europe","region_wb":"Europe & Central Asia","name_len":5,"long_len":5,"abbrev_len":3,"tiny":-99,"homepart":1},"arcs":[[[686]],[[687]],[[688]],[[689]],[[690]],[[691]],[[692]],[[693]],[[694]],[[695]],[[696]],[[697,-25,698,699,700,701]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Estonia","sov_a3":"EST","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Estonia","adm0_a3":"EST","geou_dif":0,"geounit":"Estonia","gu_a3":"EST","su_dif":0,"subunit":"Estonia","su_a3":"EST","brk_diff":0,"name":"Estonia","name_long":"Estonia","brk_a3":"EST","brk_name":"Estonia","brk_group":null,"abbrev":"Est.","postal":"EST","formal_en":"Republic of Estonia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Estonia","name_alt":null,"mapcolor7":3,"mapcolor8":2,"mapcolor9":1,"mapcolor13":10,"pop_est":1299371,"gdp_md_est":27410,"pop_year":-99,"lastcensus":2000,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"EE","iso_a3":"EST","iso_n3":"233","un_a3":"233","wb_a2":"EE","wb_a3":"EST","woe_id":-99,"adm0_a3_is":"EST","adm0_a3_us":"EST","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Northern Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[702]],[[703]],[[704]],[[705,706,707]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Ethiopia","sov_a3":"ETH","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Ethiopia","adm0_a3":"ETH","geou_dif":0,"geounit":"Ethiopia","gu_a3":"ETH","su_dif":0,"subunit":"Ethiopia","su_a3":"ETH","brk_diff":0,"name":"Ethiopia","name_long":"Ethiopia","brk_a3":"ETH","brk_name":"Ethiopia","brk_group":null,"abbrev":"Eth.","postal":"ET","formal_en":"Federal Democratic Republic of Ethiopia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Ethiopia","name_alt":null,"mapcolor7":4,"mapcolor8":4,"mapcolor9":1,"mapcolor13":13,"pop_est":85237338,"gdp_md_est":68770,"pop_year":-99,"lastcensus":2007,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"ET","iso_a3":"ETH","iso_n3":"231","un_a3":"231","wb_a2":"ET","wb_a3":"ETH","woe_id":-99,"adm0_a3_is":"ETH","adm0_a3_us":"ETH","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":8,"long_len":8,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-640,708,709,710,711,712,-685]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Finland","sov_a3":"FI1","adm0_dif":1,"level":2,"type":"Country","admin":"Finland","adm0_a3":"FIN","geou_dif":0,"geounit":"Finland","gu_a3":"FIN","su_dif":0,"subunit":"Finland","su_a3":"FIN","brk_diff":0,"name":"Finland","name_long":"Finland","brk_a3":"FIN","brk_name":"Finland","brk_group":null,"abbrev":"Fin.","postal":"FIN","formal_en":"Republic of Finland","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Finland","name_alt":null,"mapcolor7":4,"mapcolor8":1,"mapcolor9":4,"mapcolor13":6,"pop_est":5250275,"gdp_md_est":193500,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"FI","iso_a3":"FIN","iso_n3":"246","un_a3":"246","wb_a2":"FI","wb_a3":"FIN","woe_id":-99,"adm0_a3_is":"FIN","adm0_a3_us":"FIN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Northern Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[713]],[[714]],[[715]],[[716]],[[717]],[[718]],[[719]],[[720,721,722,723]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Fiji","sov_a3":"FJI","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Fiji","adm0_a3":"FJI","geou_dif":0,"geounit":"Fiji","gu_a3":"FJI","su_dif":0,"subunit":"Fiji","su_a3":"FJI","brk_diff":0,"name":"Fiji","name_long":"Fiji","brk_a3":"FJI","brk_name":"Fiji","brk_group":null,"abbrev":"Fiji","postal":"FJ","formal_en":"Republic of Fiji","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Fiji","name_alt":null,"mapcolor7":5,"mapcolor8":1,"mapcolor9":2,"mapcolor13":2,"pop_est":944720,"gdp_md_est":3579,"pop_year":-99,"lastcensus":2007,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"FJ","iso_a3":"FJI","iso_n3":"242","un_a3":"242","wb_a2":"FJ","wb_a3":"FJI","woe_id":-99,"adm0_a3_is":"FJI","adm0_a3_us":"FJI","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Melanesia","region_wb":"East Asia & Pacific","name_len":4,"long_len":4,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[724]],[[725]],[[726]],[[727]],[[728]],[[729]],[[730]],[[731]],[[732]],[[733]],[[734]],[[735]],[[736]],[[737]],[[738]],[[739]],[[740]],[[741]],[[742]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"United Kingdom","sov_a3":"GB1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Falkland Islands","adm0_a3":"FLK","geou_dif":0,"geounit":"Falkland Islands","gu_a3":"FLK","su_dif":0,"subunit":"Falkland Islands","su_a3":"FLK","brk_diff":1,"name":"Falkland Is.","name_long":"Falkland Islands","brk_a3":"B12","brk_name":"Falkland Is.","brk_group":null,"abbrev":"Flk. Is.","postal":"FK","formal_en":"Falkland Islands","formal_fr":null,"note_adm0":"U.K.","note_brk":"Admin. by U.K.; Claimed by Argentina","name_sort":"Falkland Islands","name_alt":"Islas Malvinas","mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":3,"pop_est":3140,"gdp_md_est":105.1,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"FK","iso_a3":"FLK","iso_n3":"238","un_a3":"238","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"FLK","adm0_a3_us":"FLK","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"South America","region_un":"Americas","subregion":"South America","region_wb":"Latin America & Caribbean","name_len":12,"long_len":16,"abbrev_len":8,"tiny":-99,"homepart":-99},"arcs":[[[743]],[[744]],[[745]],[[746]],[[747]],[[748]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"France","sov_a3":"FR1","adm0_dif":1,"level":2,"type":"Country","admin":"France","adm0_a3":"FRA","geou_dif":0,"geounit":"France","gu_a3":"FRA","su_dif":0,"subunit":"France","su_a3":"FRA","brk_diff":0,"name":"France","name_long":"France","brk_a3":"FRA","brk_name":"France","brk_group":null,"abbrev":"Fr.","postal":"F","formal_en":"French Republic","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"France","name_alt":null,"mapcolor7":7,"mapcolor8":5,"mapcolor9":9,"mapcolor13":11,"pop_est":64057792,"gdp_md_est":2128000,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"1. Developed region: G7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"FR","iso_a3":"FRA","iso_n3":"250","un_a3":"250","wb_a2":"FR","wb_a3":"FRA","woe_id":-99,"adm0_a3_is":"FRA","adm0_a3_us":"FRA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Western Europe","region_wb":"Europe & Central Asia","name_len":6,"long_len":6,"abbrev_len":3,"tiny":-99,"homepart":1},"arcs":[[[749]],[[750]],[[-314,751,752]],[[753]],[[754]],[[755]],[[756]],[[757]],[[758]],[[759,-633,-486,760,761,762,763,-699,-26,-698,764,-231]]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Denmark","sov_a3":"DN1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Faroe Islands","adm0_a3":"FRO","geou_dif":0,"geounit":"Faroe Islands","gu_a3":"FRO","su_dif":0,"subunit":"Faroe Islands","su_a3":"FRO","brk_diff":0,"name":"Faeroe Is.","name_long":"Faeroe Islands","brk_a3":"FRO","brk_name":"Faeroe Islands","brk_group":null,"abbrev":"Faeroe Is.","postal":"FO","formal_en":"Føroyar Is. (Faeroe Is.)","formal_fr":null,"note_adm0":"Den.","note_brk":null,"name_sort":"Faeroe Islands","name_alt":null,"mapcolor7":4,"mapcolor8":1,"mapcolor9":3,"mapcolor13":12,"pop_est":48856,"gdp_md_est":1000,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"FO","iso_a3":"FRO","iso_n3":"234","un_a3":"234","wb_a2":"FO","wb_a3":"FRO","woe_id":-99,"adm0_a3_is":"FRO","adm0_a3_us":"FRO","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Northern Europe","region_wb":"Europe & Central Asia","name_len":10,"long_len":14,"abbrev_len":10,"tiny":3,"homepart":-99},"arcs":[[[765]],[[766]],[[767]],[[768]],[[769]]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Federated States of Micronesia","sov_a3":"FSM","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Federated States of Micronesia","adm0_a3":"FSM","geou_dif":0,"geounit":"Federated States of Micronesia","gu_a3":"FSM","su_dif":0,"subunit":"Federated States of Micronesia","su_a3":"FSM","brk_diff":0,"name":"Micronesia","name_long":"Federated States of Micronesia","brk_a3":"FSM","brk_name":"Micronesia","brk_group":null,"abbrev":"F.S.M.","postal":"FSM","formal_en":"Federated States of Micronesia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Micronesia, Federated States of","name_alt":null,"mapcolor7":5,"mapcolor8":2,"mapcolor9":4,"mapcolor13":13,"pop_est":107434,"gdp_md_est":238.1,"pop_year":-99,"lastcensus":2000,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"FM","iso_a3":"FSM","iso_n3":"583","un_a3":"583","wb_a2":"FM","wb_a3":"FSM","woe_id":-99,"adm0_a3_is":"FSM","adm0_a3_us":"FSM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Micronesia","region_wb":"East Asia & Pacific","name_len":10,"long_len":30,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[[770]],[[771]],[[772]],[[773]],[[774]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Gabon","sov_a3":"GAB","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Gabon","adm0_a3":"GAB","geou_dif":0,"geounit":"Gabon","gu_a3":"GAB","su_dif":0,"subunit":"Gabon","su_a3":"GAB","brk_diff":0,"name":"Gabon","name_long":"Gabon","brk_a3":"GAB","brk_name":"Gabon","brk_group":null,"abbrev":"Gabon","postal":"GA","formal_en":"Gabonese Republic","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Gabon","name_alt":null,"mapcolor7":6,"mapcolor8":2,"mapcolor9":5,"mapcolor13":5,"pop_est":1514993,"gdp_md_est":21110,"pop_year":-99,"lastcensus":2003,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"GA","iso_a3":"GAB","iso_n3":"266","un_a3":"266","wb_a2":"GA","wb_a3":"GAB","woe_id":-99,"adm0_a3_is":"GAB","adm0_a3_us":"GAB","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Middle Africa","region_wb":"Sub-Saharan Africa","name_len":5,"long_len":5,"abbrev_len":5,"tiny":3,"homepart":1},"arcs":[[-585,775,776,-572]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"United Kingdom","sov_a3":"GB1","adm0_dif":1,"level":2,"type":"Country","admin":"United Kingdom","adm0_a3":"GBR","geou_dif":0,"geounit":"United Kingdom","gu_a3":"GBR","su_dif":0,"subunit":"United Kingdom","su_a3":"GBR","brk_diff":0,"name":"United Kingdom","name_long":"United Kingdom","brk_a3":"GBR","brk_name":"United Kingdom","brk_group":null,"abbrev":"U.K.","postal":"GB","formal_en":"United Kingdom of Great Britain and Northern Ireland","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"United Kingdom","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":3,"pop_est":62262000,"gdp_md_est":1977704,"pop_year":0,"lastcensus":2011,"gdp_year":2009,"economy":"1. Developed region: G7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"GB","iso_a3":"GBR","iso_n3":"826","un_a3":"826","wb_a2":"GB","wb_a3":"GBR","woe_id":-99,"adm0_a3_is":"GBR","adm0_a3_us":"GBR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Northern Europe","region_wb":"Europe & Central Asia","name_len":14,"long_len":14,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[777]],[[778]],[[779,780]],[[781]],[[782]],[[783]],[[784]],[[785]],[[786]],[[787]],[[788]],[[789]],[[790]],[[791]],[[792]],[[793]],[[794]],[[795]],[[796]],[[797]],[[798]],[[799]],[[800]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Georgia","sov_a3":"GEO","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Georgia","adm0_a3":"GEO","geou_dif":0,"geounit":"Georgia","gu_a3":"GEO","su_dif":0,"subunit":"Georgia","su_a3":"GEO","brk_diff":0,"name":"Georgia","name_long":"Georgia","brk_a3":"GEO","brk_name":"Georgia","brk_group":null,"abbrev":"Geo.","postal":"GE","formal_en":"Georgia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Georgia","name_alt":null,"mapcolor7":5,"mapcolor8":1,"mapcolor9":3,"mapcolor13":2,"pop_est":4615807,"gdp_md_est":21510,"pop_year":-99,"lastcensus":2002,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"GE","iso_a3":"GEO","iso_n3":"268","un_a3":"268","wb_a2":"GE","wb_a3":"GEO","woe_id":-99,"adm0_a3_is":"GEO","adm0_a3_us":"GEO","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-223,-51,801,802,803]]},{"type":"Polygon","properties":{"scalerank":4,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"United Kingdom","sov_a3":"GB1","adm0_dif":1,"level":2,"type":"Country","admin":"Guernsey","adm0_a3":"GGY","geou_dif":0,"geounit":"Guernsey","gu_a3":"GGY","su_dif":0,"subunit":"Guernsey","su_a3":"GGY","brk_diff":0,"name":"Guernsey","name_long":"Guernsey","brk_a3":"GGY","brk_name":"Guernsey","brk_group":"Channel Islands","abbrev":"Guern.","postal":"GG","formal_en":"Bailiwick of Guernsey","formal_fr":null,"note_adm0":"U.K. crown dependency","note_brk":null,"name_sort":"Guernsey","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":3,"pop_est":68633,"gdp_md_est":2742,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"GG","iso_a3":"GGY","iso_n3":"831","un_a3":"831","wb_a2":"JG","wb_a3":"CHI","woe_id":-99,"adm0_a3_is":"GGY","adm0_a3_us":"GGY","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Northern Europe","region_wb":"Europe & Central Asia","name_len":8,"long_len":8,"abbrev_len":6,"tiny":-99,"homepart":-99},"arcs":[[804]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Ghana","sov_a3":"GHA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Ghana","adm0_a3":"GHA","geou_dif":0,"geounit":"Ghana","gu_a3":"GHA","su_dif":0,"subunit":"Ghana","su_a3":"GHA","brk_diff":0,"name":"Ghana","name_long":"Ghana","brk_a3":"GHA","brk_name":"Ghana","brk_group":null,"abbrev":"Ghana","postal":"GH","formal_en":"Republic of Ghana","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Ghana","name_alt":null,"mapcolor7":5,"mapcolor8":3,"mapcolor9":1,"mapcolor13":4,"pop_est":23832495,"gdp_md_est":34200,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"GH","iso_a3":"GHA","iso_n3":"288","un_a3":"288","wb_a2":"GH","wb_a3":"GHA","woe_id":-99,"adm0_a3_is":"GHA","adm0_a3_us":"GHA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[805,806,-564,807,-566,-242]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Guinea","sov_a3":"GIN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Guinea","adm0_a3":"GIN","geou_dif":0,"geounit":"Guinea","gu_a3":"GIN","su_dif":0,"subunit":"Guinea","su_a3":"GIN","brk_diff":0,"name":"Guinea","name_long":"Guinea","brk_a3":"GIN","brk_name":"Guinea","brk_group":null,"abbrev":"Gin.","postal":"GN","formal_en":"Republic of Guinea","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Guinea","name_alt":null,"mapcolor7":6,"mapcolor8":3,"mapcolor9":7,"mapcolor13":2,"pop_est":10057975,"gdp_md_est":10600,"pop_year":-99,"lastcensus":1996,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"GN","iso_a3":"GIN","iso_n3":"324","un_a3":"324","wb_a2":"GN","wb_a3":"GIN","woe_id":-99,"adm0_a3_is":"GIN","adm0_a3_us":"GIN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[808,-569,809,810,811,812,813]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Gambia","sov_a3":"GMB","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Gambia","adm0_a3":"GMB","geou_dif":0,"geounit":"Gambia","gu_a3":"GMB","su_dif":0,"subunit":"Gambia","su_a3":"GMB","brk_diff":0,"name":"Gambia","name_long":"The Gambia","brk_a3":"GMB","brk_name":"Gambia","brk_group":null,"abbrev":"Gambia","postal":"GM","formal_en":"Republic of the Gambia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Gambia, The","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":1,"mapcolor13":8,"pop_est":1782893,"gdp_md_est":2272,"pop_year":-99,"lastcensus":2003,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"GM","iso_a3":"GMB","iso_n3":"270","un_a3":"270","wb_a2":"GM","wb_a3":"GMB","woe_id":-99,"adm0_a3_is":"GMB","adm0_a3_us":"GMB","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":6,"long_len":10,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[814,815]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Guinea Bissau","sov_a3":"GNB","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Guinea Bissau","adm0_a3":"GNB","geou_dif":0,"geounit":"Guinea Bissau","gu_a3":"GNB","su_dif":0,"subunit":"Guinea Bissau","su_a3":"GNB","brk_diff":0,"name":"Guinea-Bissau","name_long":"Guinea-Bissau","brk_a3":"GNB","brk_name":"Guinea-Bissau","brk_group":null,"abbrev":"GnB.","postal":"GW","formal_en":"Republic of Guinea-Bissau","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Guinea-Bissau","name_alt":null,"mapcolor7":3,"mapcolor8":5,"mapcolor9":3,"mapcolor13":4,"pop_est":1533964,"gdp_md_est":904.2,"pop_year":-99,"lastcensus":2009,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"GW","iso_a3":"GNB","iso_n3":"624","un_a3":"624","wb_a2":"GW","wb_a3":"GNB","woe_id":-99,"adm0_a3_is":"GNB","adm0_a3_us":"GNB","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":13,"long_len":13,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[816]],[[817]],[[818]],[[819]],[[820]],[[821]],[[822,823,-813]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Equatorial Guinea","sov_a3":"GNQ","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Equatorial Guinea","adm0_a3":"GNQ","geou_dif":0,"geounit":"Equatorial Guinea","gu_a3":"GNQ","su_dif":0,"subunit":"Equatorial Guinea","su_a3":"GNQ","brk_diff":0,"name":"Eq. Guinea","name_long":"Equatorial Guinea","brk_a3":"GNQ","brk_name":"Eq. Guinea","brk_group":null,"abbrev":"Eq. G.","postal":"GQ","formal_en":"Republic of Equatorial Guinea","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Equatorial Guinea","name_alt":null,"mapcolor7":4,"mapcolor8":1,"mapcolor9":4,"mapcolor13":8,"pop_est":650702,"gdp_md_est":14060,"pop_year":0,"lastcensus":2002,"gdp_year":0,"economy":"7. Least developed region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"GQ","iso_a3":"GNQ","iso_n3":"226","un_a3":"226","wb_a2":"GQ","wb_a3":"GNQ","woe_id":-99,"adm0_a3_is":"GNQ","adm0_a3_us":"GNQ","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Middle Africa","region_wb":"Sub-Saharan Africa","name_len":10,"long_len":17,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[[824,-573,-777]],[[825]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Greece","sov_a3":"GRC","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Greece","adm0_a3":"GRC","geou_dif":0,"geounit":"Greece","gu_a3":"GRC","su_dif":0,"subunit":"Greece","su_a3":"GRC","brk_diff":0,"name":"Greece","name_long":"Greece","brk_a3":"GRC","brk_name":"Greece","brk_group":null,"abbrev":"Greece","postal":"GR","formal_en":"Hellenic Republic","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Greece","name_alt":null,"mapcolor7":2,"mapcolor8":2,"mapcolor9":2,"mapcolor13":9,"pop_est":10737428,"gdp_md_est":343000,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"GR","iso_a3":"GRC","iso_n3":"300","un_a3":"300","wb_a2":"GR","wb_a3":"GRC","woe_id":-99,"adm0_a3_is":"GRC","adm0_a3_us":"GRC","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Southern Europe","region_wb":"Europe & Central Asia","name_len":6,"long_len":6,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[[826]],[[827]],[[828]],[[829]],[[830]],[[831]],[[832]],[[833]],[[834]],[[835]],[[836]],[[837]],[[838]],[[839]],[[840]],[[841]],[[842]],[[843]],[[844]],[[845]],[[846]],[[847]],[[848]],[[849]],[[850]],[[851]],[[852]],[[853]],[[854]],[[855]],[[856]],[[857]],[[858]],[[859]],[[860]],[[861]],[[862]],[[863]],[[864]],[[865,-19,866,-256,867]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Grenada","sov_a3":"GRD","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Grenada","adm0_a3":"GRD","geou_dif":0,"geounit":"Grenada","gu_a3":"GRD","su_dif":0,"subunit":"Grenada","su_a3":"GRD","brk_diff":0,"name":"Grenada","name_long":"Grenada","brk_a3":"GRD","brk_name":"Grenada","brk_group":null,"abbrev":"Gren.","postal":"GD","formal_en":"Grenada","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Grenada","name_alt":null,"mapcolor7":2,"mapcolor8":4,"mapcolor9":3,"mapcolor13":6,"pop_est":90739,"gdp_md_est":1161,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"GD","iso_a3":"GRD","iso_n3":"308","un_a3":"308","wb_a2":"GD","wb_a3":"GRD","woe_id":-99,"adm0_a3_is":"GRD","adm0_a3_us":"GRD","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":7,"long_len":7,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[868]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Denmark","sov_a3":"DN1","adm0_dif":1,"level":2,"type":"Country","admin":"Greenland","adm0_a3":"GRL","geou_dif":0,"geounit":"Greenland","gu_a3":"GRL","su_dif":0,"subunit":"Greenland","su_a3":"GRL","brk_diff":0,"name":"Greenland","name_long":"Greenland","brk_a3":"GRL","brk_name":"Greenland","brk_group":null,"abbrev":"Grlnd.","postal":"GL","formal_en":"Greenland","formal_fr":null,"note_adm0":"Den.","note_brk":null,"name_sort":"Greenland","name_alt":null,"mapcolor7":4,"mapcolor8":1,"mapcolor9":3,"mapcolor13":12,"pop_est":57600,"gdp_md_est":1100,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"GL","iso_a3":"GRL","iso_n3":"304","un_a3":"304","wb_a2":"GL","wb_a3":"GRL","woe_id":-99,"adm0_a3_is":"GRL","adm0_a3_us":"GRL","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Northern America","region_wb":"Europe & Central Asia","name_len":9,"long_len":9,"abbrev_len":6,"tiny":-99,"homepart":-99},"arcs":[[[869]],[[870]],[[871]],[[872]],[[873]],[[874]],[[875]],[[876]],[[877]],[[878]],[[879]],[[880]],[[881]],[[882]],[[883]],[[884]],[[885]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Guatemala","sov_a3":"GTM","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Guatemala","adm0_a3":"GTM","geou_dif":0,"geounit":"Guatemala","gu_a3":"GTM","su_dif":0,"subunit":"Guatemala","su_a3":"GTM","brk_diff":0,"name":"Guatemala","name_long":"Guatemala","brk_a3":"GTM","brk_name":"Guatemala","brk_group":null,"abbrev":"Guat.","postal":"GT","formal_en":"Republic of Guatemala","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Guatemala","name_alt":null,"mapcolor7":3,"mapcolor8":3,"mapcolor9":3,"mapcolor13":6,"pop_est":13276517,"gdp_md_est":68580,"pop_year":-99,"lastcensus":2002,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"GT","iso_a3":"GTM","iso_n3":"320","un_a3":"320","wb_a2":"GT","wb_a3":"GTM","woe_id":-99,"adm0_a3_is":"GTM","adm0_a3_us":"GTM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Central America","region_wb":"Latin America & Caribbean","name_len":9,"long_len":9,"abbrev_len":5,"tiny":4,"homepart":1},"arcs":[[-289,886,887,888,889,890]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"United States of America","sov_a3":"US1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Guam","adm0_a3":"GUM","geou_dif":0,"geounit":"Guam","gu_a3":"GUM","su_dif":0,"subunit":"Guam","su_a3":"GUM","brk_diff":0,"name":"Guam","name_long":"Guam","brk_a3":"GUM","brk_name":"Guam","brk_group":null,"abbrev":"Guam","postal":"GU","formal_en":"Territory of Guam","formal_fr":null,"note_adm0":"U.S.A.","note_brk":null,"name_sort":"Guam","name_alt":null,"mapcolor7":4,"mapcolor8":5,"mapcolor9":1,"mapcolor13":1,"pop_est":178430,"gdp_md_est":2500,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"GU","iso_a3":"GUM","iso_n3":"316","un_a3":"316","wb_a2":"GU","wb_a3":"GUM","woe_id":-99,"adm0_a3_is":"GUM","adm0_a3_us":"GUM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Micronesia","region_wb":"East Asia & Pacific","name_len":4,"long_len":4,"abbrev_len":4,"tiny":2,"homepart":-99},"arcs":[[891]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Guyana","sov_a3":"GUY","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Guyana","adm0_a3":"GUY","geou_dif":0,"geounit":"Guyana","gu_a3":"GUY","su_dif":0,"subunit":"Guyana","su_a3":"GUY","brk_diff":0,"name":"Guyana","name_long":"Guyana","brk_a3":"GUY","brk_name":"Guyana","brk_group":null,"abbrev":"Guy.","postal":"GY","formal_en":"Co-operative Republic of Guyana","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Guyana","name_alt":null,"mapcolor7":3,"mapcolor8":1,"mapcolor9":4,"mapcolor13":8,"pop_est":772298,"gdp_md_est":2966,"pop_year":-99,"lastcensus":2002,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"GY","iso_a3":"GUY","iso_n3":"328","un_a3":"328","wb_a2":"GY","wb_a3":"GUY","woe_id":-99,"adm0_a3_is":"GUY","adm0_a3_us":"GUY","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"South America","region_un":"Americas","subregion":"South America","region_wb":"Latin America & Caribbean","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[892,-321,893,894]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"China","sov_a3":"CH1","adm0_dif":1,"level":2,"type":"Country","admin":"Hong Kong S.A.R.","adm0_a3":"HKG","geou_dif":0,"geounit":"Hong Kong S.A.R.","gu_a3":"HKG","su_dif":0,"subunit":"Hong Kong S.A.R.","su_a3":"HKG","brk_diff":0,"name":"Hong Kong","name_long":"Hong Kong","brk_a3":"HKG","brk_name":"Hong Kong","brk_group":null,"abbrev":"H.K.","postal":"HK","formal_en":"Hong Kong Special Administrative Region, PRC","formal_fr":null,"note_adm0":"China","note_brk":null,"name_sort":"Hong Kong SAR, China","name_alt":null,"mapcolor7":4,"mapcolor8":4,"mapcolor9":4,"mapcolor13":3,"pop_est":7061200,"gdp_md_est":351119,"pop_year":2010,"lastcensus":2006,"gdp_year":2011,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":0,"fips_10":null,"iso_a2":"HK","iso_a3":"HKG","iso_n3":"344","un_a3":"344","wb_a2":"HK","wb_a3":"HKG","woe_id":-99,"adm0_a3_is":"HKG","adm0_a3_us":"HKG","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Eastern Asia","region_wb":"East Asia & Pacific","name_len":9,"long_len":9,"abbrev_len":4,"tiny":-99,"homepart":-99},"arcs":[[[895]],[[896]],[[-534,897]]]},{"type":"Polygon","properties":{"scalerank":5,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Australia","sov_a3":"AU1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Heard Island and McDonald Islands","adm0_a3":"HMD","geou_dif":0,"geounit":"Heard Island and McDonald Islands","gu_a3":"HMD","su_dif":0,"subunit":"Heard Island and McDonald Islands","su_a3":"HMD","brk_diff":0,"name":"Heard I. and McDonald Is.","name_long":"Heard I. and McDonald Islands","brk_a3":"HMD","brk_name":"Heard I. and McDonald Is.","brk_group":null,"abbrev":"H.M.Is.","postal":"HM","formal_en":"Territory of Heard Island and McDonald Islands","formal_fr":null,"note_adm0":"Auz.","note_brk":null,"name_sort":"Heard Island and McDonald Islands","name_alt":null,"mapcolor7":1,"mapcolor8":2,"mapcolor9":2,"mapcolor13":7,"pop_est":-99,"gdp_md_est":-99,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"HM","iso_a3":"HMD","iso_n3":"334","un_a3":"-099","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"HMD","adm0_a3_us":"HMD","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Seven seas (open ocean)","region_un":"Seven seas (open ocean)","subregion":"Seven seas (open ocean)","region_wb":"Sub-Saharan Africa","name_len":25,"long_len":29,"abbrev_len":7,"tiny":-99,"homepart":-99},"arcs":[[898]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Honduras","sov_a3":"HND","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Honduras","adm0_a3":"HND","geou_dif":0,"geounit":"Honduras","gu_a3":"HND","su_dif":0,"subunit":"Honduras","su_a3":"HND","brk_diff":0,"name":"Honduras","name_long":"Honduras","brk_a3":"HND","brk_name":"Honduras","brk_group":null,"abbrev":"Hond.","postal":"HN","formal_en":"Republic of Honduras","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Honduras","name_alt":null,"mapcolor7":2,"mapcolor8":5,"mapcolor9":2,"mapcolor13":5,"pop_est":7792854,"gdp_md_est":33720,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"HN","iso_a3":"HND","iso_n3":"340","un_a3":"340","wb_a2":"HN","wb_a3":"HND","woe_id":-99,"adm0_a3_is":"HND","adm0_a3_us":"HND","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Central America","region_wb":"Latin America & Caribbean","name_len":8,"long_len":8,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[899,900,901,-888,902]],[[903]],[[904]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Croatia","sov_a3":"HRV","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Croatia","adm0_a3":"HRV","geou_dif":0,"geounit":"Croatia","gu_a3":"HRV","su_dif":0,"subunit":"Croatia","su_a3":"HRV","brk_diff":0,"name":"Croatia","name_long":"Croatia","brk_a3":"HRV","brk_name":"Croatia","brk_group":null,"abbrev":"Cro.","postal":"HR","formal_en":"Republic of Croatia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Croatia","name_alt":null,"mapcolor7":5,"mapcolor8":4,"mapcolor9":5,"mapcolor13":1,"pop_est":4489409,"gdp_md_est":82390,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"HR","iso_a3":"HRV","iso_n3":"191","un_a3":"191","wb_a2":"HR","wb_a3":"HRV","woe_id":-99,"adm0_a3_is":"HRV","adm0_a3_us":"HRV","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Southern Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[905]],[[906]],[[-278,907,908]],[[909]],[[910]],[[911]],[[912]],[[913]],[[914]],[[915]],[[916]],[[917]],[[918,-280,919,920,921]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Haiti","sov_a3":"HTI","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Haiti","adm0_a3":"HTI","geou_dif":0,"geounit":"Haiti","gu_a3":"HTI","su_dif":0,"subunit":"Haiti","su_a3":"HTI","brk_diff":0,"name":"Haiti","name_long":"Haiti","brk_a3":"HTI","brk_name":"Haiti","brk_group":null,"abbrev":"Haiti","postal":"HT","formal_en":"Republic of Haiti","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Haiti","name_alt":null,"mapcolor7":2,"mapcolor8":1,"mapcolor9":7,"mapcolor13":2,"pop_est":9035536,"gdp_md_est":11500,"pop_year":-99,"lastcensus":2003,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"HT","iso_a3":"HTI","iso_n3":"332","un_a3":"332","wb_a2":"HT","wb_a3":"HTI","woe_id":-99,"adm0_a3_is":"HTI","adm0_a3_us":"HTI","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[922]],[[-656,923]],[[924]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Hungary","sov_a3":"HUN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Hungary","adm0_a3":"HUN","geou_dif":0,"geounit":"Hungary","gu_a3":"HUN","su_dif":0,"subunit":"Hungary","su_a3":"HUN","brk_diff":0,"name":"Hungary","name_long":"Hungary","brk_a3":"HUN","brk_name":"Hungary","brk_group":null,"abbrev":"Hun.","postal":"HU","formal_en":"Republic of Hungary","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Hungary","name_alt":null,"mapcolor7":4,"mapcolor8":6,"mapcolor9":1,"mapcolor13":5,"pop_est":9905596,"gdp_md_est":196600,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"HU","iso_a3":"HUN","iso_n3":"348","un_a3":"348","wb_a2":"HU","wb_a3":"HUN","woe_id":-99,"adm0_a3_is":"HUN","adm0_a3_us":"HUN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Eastern Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[925,926,927,-922,928,-211,929]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Indonesia","sov_a3":"IDN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Indonesia","adm0_a3":"IDN","geou_dif":0,"geounit":"Indonesia","gu_a3":"IDN","su_dif":0,"subunit":"Indonesia","su_a3":"IDN","brk_diff":0,"name":"Indonesia","name_long":"Indonesia","brk_a3":"IDN","brk_name":"Indonesia","brk_group":null,"abbrev":"Indo.","postal":"INDO","formal_en":"Republic of Indonesia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Indonesia","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":11,"pop_est":240271522,"gdp_md_est":914600,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"4. Emerging region: MIKT","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"ID","iso_a3":"IDN","iso_n3":"360","un_a3":"360","wb_a2":"ID","wb_a3":"IDN","woe_id":-99,"adm0_a3_is":"IDN","adm0_a3_us":"IDN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"South-Eastern Asia","region_wb":"East Asia & Pacific","name_len":9,"long_len":9,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[930]],[[931]],[[932]],[[933]],[[934,935,936,937]],[[938]],[[939]],[[940]],[[941]],[[942]],[[943]],[[944]],[[945]],[[946]],[[947]],[[948]],[[949]],[[950]],[[951]],[[952]],[[953]],[[954]],[[955]],[[956]],[[957]],[[958]],[[959]],[[960]],[[961]],[[962]],[[963]],[[964]],[[965]],[[966]],[[967]],[[968]],[[969]],[[970]],[[971]],[[972]],[[973]],[[974]],[[975]],[[976]],[[977]],[[978]],[[979]],[[980]],[[981]],[[982]],[[983]],[[984]],[[985]],[[986]],[[987]],[[988]],[[989]],[[990]],[[991]],[[992]],[[993]],[[994]],[[995]],[[996]],[[997]],[[998]],[[999]],[[1000]],[[1001]],[[1002]],[[1003]],[[1004]],[[1005]],[[1006]],[[1007]],[[1008]],[[1009]],[[1010]],[[1011]],[[1012]],[[1013]],[[1014]],[[1015]],[[1016]],[[1017]],[[1018]],[[1019]],[[1020]],[[1021,1022,1023]],[[1024]],[[1025]],[[1026]],[[1027]],[[1028]],[[1029]],[[1030]],[[1031]],[[1032]],[[1033]],[[1034]],[[1035]],[[1036]],[[1037]],[[1038]],[[1039]],[[1040]],[[1041]],[[1042]],[[1043]],[[1044]],[[1045]],[[1046]],[[1047]],[[1048]],[[1049]],[[1050]],[[1051]],[[1052]],[[1053]],[[1054]],[[1055]],[[1056]],[[1057]],[[1058]],[[1059]],[[1060]],[[1061]],[[1062,1063]],[[1064]],[[1065,1066]],[[1067]],[[1068]],[[1069]]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"United Kingdom","sov_a3":"GB1","adm0_dif":1,"level":2,"type":"Country","admin":"Isle of Man","adm0_a3":"IMN","geou_dif":0,"geounit":"Isle of Man","gu_a3":"IMN","su_dif":0,"subunit":"Isle of Man","su_a3":"IMN","brk_diff":0,"name":"Isle of Man","name_long":"Isle of Man","brk_a3":"IMN","brk_name":"Isle of Man","brk_group":null,"abbrev":"IoMan","postal":"IM","formal_en":null,"formal_fr":null,"note_adm0":"U.K. crown dependency","note_brk":null,"name_sort":"Isle of Man","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":3,"pop_est":76512,"gdp_md_est":2719,"pop_year":-99,"lastcensus":2006,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"IM","iso_a3":"IMN","iso_n3":"833","un_a3":"833","wb_a2":"IM","wb_a3":"IMY","woe_id":-99,"adm0_a3_is":"IMN","adm0_a3_us":"IMN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Northern Europe","region_wb":"Europe & Central Asia","name_len":11,"long_len":11,"abbrev_len":5,"tiny":-99,"homepart":-99},"arcs":[[1070]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"India","sov_a3":"IND","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"India","adm0_a3":"IND","geou_dif":0,"geounit":"India","gu_a3":"IND","su_dif":0,"subunit":"India","su_a3":"IND","brk_diff":0,"name":"India","name_long":"India","brk_a3":"IND","brk_name":"India","brk_group":null,"abbrev":"India","postal":"IND","formal_en":"Republic of India","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"India","name_alt":null,"mapcolor7":1,"mapcolor8":3,"mapcolor9":2,"mapcolor13":2,"pop_est":1166079220,"gdp_md_est":3297000,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"3. Emerging region: BRIC","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"IN","iso_a3":"IND","iso_n3":"356","un_a3":"356","wb_a2":"IN","wb_a3":"IND","woe_id":-99,"adm0_a3_is":"IND","adm0_a3_us":"IND","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Southern Asia","region_wb":"South Asia","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[1071]],[[1072]],[[1073]],[[1074]],[[1075]],[[1076]],[[1077]],[[1078]],[[1079]],[[1080]],[[1081]],[[1082]],[[1083,-549,1084,-547,1085,1086,-544,1087,-542,-327,-541,1088,-253,1089,1090,1091,1092,-554,1093,-552,1094,-550]]]},{"type":"MultiPolygon","properties":{"scalerank":5,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Australia","sov_a3":"AU1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Indian Ocean Territories","adm0_a3":"IOA","geou_dif":0,"geounit":"Indian Ocean Territories","gu_a3":"IOA","su_dif":0,"subunit":"Indian Ocean Territories","su_a3":"IOA","brk_diff":0,"name":"Indian Ocean Ter.","name_long":"Indian Ocean Territories","brk_a3":"IOA","brk_name":"Indian Ocean Ter.","brk_group":null,"abbrev":"Ind. Oc. Ter.","postal":"IOT","formal_en":null,"formal_fr":null,"note_adm0":"Auz.","note_brk":null,"name_sort":"Indian Ocean Territories","name_alt":null,"mapcolor7":1,"mapcolor8":2,"mapcolor9":2,"mapcolor13":7,"pop_est":2069,"gdp_md_est":31.035,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"-99","iso_a3":"-99","iso_n3":"-99","un_a3":"-099","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"AUS","adm0_a3_us":"AUS","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Seven seas (open ocean)","subregion":"Seven seas (open ocean)","region_wb":"East Asia & Pacific","name_len":17,"long_len":24,"abbrev_len":13,"tiny":-99,"homepart":-99},"arcs":[[[1095]],[[1096]],[[1097]]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"United Kingdom","sov_a3":"GB1","adm0_dif":1,"level":2,"type":"Dependency","admin":"British Indian Ocean Territory","adm0_a3":"IOT","geou_dif":0,"geounit":"British Indian Ocean Territory","gu_a3":"IOT","su_dif":0,"subunit":"British Indian Ocean Territory","su_a3":"IOT","brk_diff":1,"name":"Br. Indian Ocean Ter.","name_long":"British Indian Ocean Territory","brk_a3":"B69","brk_name":"Br. Indian Ocean Ter.","brk_group":null,"abbrev":"I.O.T.","postal":"IO","formal_en":null,"formal_fr":null,"note_adm0":"U.K.","note_brk":"Admin. by U.K.; Claimed by Mauritius and Seychelles","name_sort":"British Indian Ocean Territory","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":3,"pop_est":4000,"gdp_md_est":160,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"IO","iso_a3":"IOT","iso_n3":"086","un_a3":"-099","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"IOT","adm0_a3_us":"IOT","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Seven seas (open ocean)","region_un":"Seven seas (open ocean)","subregion":"Seven seas (open ocean)","region_wb":"Sub-Saharan Africa","name_len":21,"long_len":30,"abbrev_len":6,"tiny":5,"homepart":-99},"arcs":[[1098]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Ireland","sov_a3":"IRL","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Ireland","adm0_a3":"IRL","geou_dif":0,"geounit":"Ireland","gu_a3":"IRL","su_dif":0,"subunit":"Ireland","su_a3":"IRL","brk_diff":0,"name":"Ireland","name_long":"Ireland","brk_a3":"IRL","brk_name":"Ireland","brk_group":null,"abbrev":"Ire.","postal":"IRL","formal_en":"Ireland","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Ireland","name_alt":null,"mapcolor7":2,"mapcolor8":3,"mapcolor9":2,"mapcolor13":2,"pop_est":4203200,"gdp_md_est":188400,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"IE","iso_a3":"IRL","iso_n3":"372","un_a3":"372","wb_a2":"IE","wb_a3":"IRL","woe_id":-99,"adm0_a3_is":"IRL","adm0_a3_us":"IRL","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Northern Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1099]],[[1100,-780]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Iran","sov_a3":"IRN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Iran","adm0_a3":"IRN","geou_dif":0,"geounit":"Iran","gu_a3":"IRN","su_dif":0,"subunit":"Iran","su_a3":"IRN","brk_diff":0,"name":"Iran","name_long":"Iran","brk_a3":"IRN","brk_name":"Iran","brk_group":null,"abbrev":"Iran","postal":"IRN","formal_en":"Islamic Republic of Iran","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Iran, Islamic Rep.","name_alt":null,"mapcolor7":4,"mapcolor8":3,"mapcolor9":4,"mapcolor13":13,"pop_est":66429284,"gdp_md_est":841700,"pop_year":-99,"lastcensus":2006,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"IR","iso_a3":"IRN","iso_n3":"364","un_a3":"364","wb_a2":"IR","wb_a3":"IRN","woe_id":-99,"adm0_a3_is":"IRN","adm0_a3_us":"IRN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Southern Asia","region_wb":"Middle East & North Africa","name_len":4,"long_len":4,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1101]],[[-48,-222,1102,1103,-5,1104,1105,1106,1107,1108,-219]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Iraq","sov_a3":"IRQ","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Iraq","adm0_a3":"IRQ","geou_dif":0,"geounit":"Iraq","gu_a3":"IRQ","su_dif":0,"subunit":"Iraq","su_a3":"IRQ","brk_diff":0,"name":"Iraq","name_long":"Iraq","brk_a3":"IRQ","brk_name":"Iraq","brk_group":null,"abbrev":"Iraq","postal":"IRQ","formal_en":"Republic of Iraq","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Iraq","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":3,"mapcolor13":1,"pop_est":31129225,"gdp_md_est":103900,"pop_year":-99,"lastcensus":1997,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"IQ","iso_a3":"IRQ","iso_n3":"368","un_a3":"368","wb_a2":"IQ","wb_a3":"IRQ","woe_id":-99,"adm0_a3_is":"IRQ","adm0_a3_us":"IRQ","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Middle East & North Africa","name_len":4,"long_len":4,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-1108,1109,1110,1111,1112,1113,1114]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Iceland","sov_a3":"ISL","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Iceland","adm0_a3":"ISL","geou_dif":0,"geounit":"Iceland","gu_a3":"ISL","su_dif":0,"subunit":"Iceland","su_a3":"ISL","brk_diff":0,"name":"Iceland","name_long":"Iceland","brk_a3":"ISL","brk_name":"Iceland","brk_group":null,"abbrev":"Iceland","postal":"IS","formal_en":"Republic of Iceland","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Iceland","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":4,"mapcolor13":9,"pop_est":306694,"gdp_md_est":12710,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"IS","iso_a3":"ISL","iso_n3":"352","un_a3":"352","wb_a2":"IS","wb_a3":"ISL","woe_id":-99,"adm0_a3_is":"ISL","adm0_a3_us":"ISL","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Northern Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":7,"tiny":-99,"homepart":1},"arcs":[[1115]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Israel","sov_a3":"ISR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Israel","adm0_a3":"ISR","geou_dif":0,"geounit":"Israel","gu_a3":"ISR","su_dif":0,"subunit":"Israel","su_a3":"ISR","brk_diff":0,"name":"Israel","name_long":"Israel","brk_a3":"ISR","brk_name":"Israel","brk_group":null,"abbrev":"Isr.","postal":"IS","formal_en":"State of Israel","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Israel","name_alt":null,"mapcolor7":3,"mapcolor8":2,"mapcolor9":5,"mapcolor13":9,"pop_est":7233701,"gdp_md_est":201400,"pop_year":-99,"lastcensus":2009,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"IL","iso_a3":"ISR","iso_n3":"376","un_a3":"376","wb_a2":"IL","wb_a3":"ISR","woe_id":-99,"adm0_a3_is":"ISR","adm0_a3_us":"ISR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Middle East & North Africa","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1116,1117,1118,1119,-677,1120,1121,1122,1123]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Italy","sov_a3":"ITA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Italy","adm0_a3":"ITA","geou_dif":0,"geounit":"Italy","gu_a3":"ITA","su_dif":0,"subunit":"Italy","su_a3":"ITA","brk_diff":0,"name":"Italy","name_long":"Italy","brk_a3":"ITA","brk_name":"Italy","brk_group":null,"abbrev":"Italy","postal":"I","formal_en":"Italian Republic","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Italy","name_alt":null,"mapcolor7":6,"mapcolor8":7,"mapcolor9":8,"mapcolor13":7,"pop_est":58126212,"gdp_md_est":1823000,"pop_year":-99,"lastcensus":2012,"gdp_year":-99,"economy":"1. Developed region: G7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"IT","iso_a3":"ITA","iso_n3":"380","un_a3":"380","wb_a2":"IT","wb_a3":"ITA","woe_id":-99,"adm0_a3_is":"ITA","adm0_a3_us":"ITA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Southern Europe","region_wb":"Europe & Central Asia","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[1124]],[[1125]],[[1126]],[[1127]],[[1128]],[[1129]],[[1130]],[[1131,1132,-761,-485,-213],[1133]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Jamaica","sov_a3":"JAM","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Jamaica","adm0_a3":"JAM","geou_dif":0,"geounit":"Jamaica","gu_a3":"JAM","su_dif":0,"subunit":"Jamaica","su_a3":"JAM","brk_diff":0,"name":"Jamaica","name_long":"Jamaica","brk_a3":"JAM","brk_name":"Jamaica","brk_group":null,"abbrev":"Jam.","postal":"J","formal_en":"Jamaica","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Jamaica","name_alt":null,"mapcolor7":1,"mapcolor8":2,"mapcolor9":4,"mapcolor13":10,"pop_est":2825928,"gdp_md_est":20910,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"JM","iso_a3":"JAM","iso_n3":"388","un_a3":"388","wb_a2":"JM","wb_a3":"JAM","woe_id":-99,"adm0_a3_is":"JAM","adm0_a3_us":"JAM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1134]]},{"type":"Polygon","properties":{"scalerank":4,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"United Kingdom","sov_a3":"GB1","adm0_dif":1,"level":2,"type":"Country","admin":"Jersey","adm0_a3":"JEY","geou_dif":0,"geounit":"Jersey","gu_a3":"JEY","su_dif":0,"subunit":"Jersey","su_a3":"JEY","brk_diff":0,"name":"Jersey","name_long":"Jersey","brk_a3":"JEY","brk_name":"Jersey","brk_group":"Channel Islands","abbrev":"Jey.","postal":"JE","formal_en":"Bailiwick of Jersey","formal_fr":null,"note_adm0":"U.K. crown dependency","note_brk":null,"name_sort":"Jersey","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":3,"pop_est":91626,"gdp_md_est":5100,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"JE","iso_a3":"JEY","iso_n3":"832","un_a3":"832","wb_a2":"JG","wb_a3":"CHI","woe_id":-99,"adm0_a3_is":"JEY","adm0_a3_us":"JEY","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Northern Europe","region_wb":"Europe & Central Asia","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":-99},"arcs":[[1135]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Jordan","sov_a3":"JOR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Jordan","adm0_a3":"JOR","geou_dif":0,"geounit":"Jordan","gu_a3":"JOR","su_dif":0,"subunit":"Jordan","su_a3":"JOR","brk_diff":0,"name":"Jordan","name_long":"Jordan","brk_a3":"JOR","brk_name":"Jordan","brk_group":null,"abbrev":"Jord.","postal":"J","formal_en":"Hashemite Kingdom of Jordan","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Jordan","name_alt":null,"mapcolor7":5,"mapcolor8":3,"mapcolor9":4,"mapcolor13":4,"pop_est":6342948,"gdp_md_est":31610,"pop_year":-99,"lastcensus":2004,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"JO","iso_a3":"JOR","iso_n3":"400","un_a3":"400","wb_a2":"JO","wb_a3":"JOR","woe_id":-99,"adm0_a3_is":"JOR","adm0_a3_us":"JOR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Middle East & North Africa","name_len":6,"long_len":6,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[1136,1137,-1119,1138,-1117,1139,-1113]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Japan","sov_a3":"JPN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Japan","adm0_a3":"JPN","geou_dif":0,"geounit":"Japan","gu_a3":"JPN","su_dif":0,"subunit":"Japan","su_a3":"JPN","brk_diff":0,"name":"Japan","name_long":"Japan","brk_a3":"JPN","brk_name":"Japan","brk_group":null,"abbrev":"Japan","postal":"J","formal_en":"Japan","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Japan","name_alt":null,"mapcolor7":5,"mapcolor8":3,"mapcolor9":5,"mapcolor13":4,"pop_est":127078679,"gdp_md_est":4329000,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"1. Developed region: G7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"JP","iso_a3":"JPN","iso_n3":"392","un_a3":"392","wb_a2":"JP","wb_a3":"JPN","woe_id":-99,"adm0_a3_is":"JPN","adm0_a3_us":"JPN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Eastern Asia","region_wb":"East Asia & Pacific","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[1140]],[[1141]],[[1142]],[[1143]],[[1144]],[[1145]],[[1146]],[[1147]],[[1148]],[[1149]],[[1150]],[[1151]],[[1152]],[[1153]],[[1154]],[[1155]],[[1156]],[[1157]],[[1158]],[[1159]],[[1160]],[[1161]],[[1162]],[[1163]],[[1164]],[[1165]],[[1166]],[[1167]],[[1168]],[[1169]],[[1170]],[[1171]],[[1172]],[[1173]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Kashmir","sov_a3":"KAS","adm0_dif":0,"level":2,"type":"Indeterminate","admin":"Siachen Glacier","adm0_a3":"KAS","geou_dif":0,"geounit":"Siachen Glacier","gu_a3":"KAS","su_dif":0,"subunit":"Siachen Glacier","su_a3":"KAS","brk_diff":1,"name":"Siachen Glacier","name_long":"Siachen Glacier","brk_a3":"B45","brk_name":"Siachen Glacier","brk_group":"Jammu and Kashmir","abbrev":"Siachen","postal":"SG","formal_en":null,"formal_fr":null,"note_adm0":null,"note_brk":"Claimed by Pakistan and India","name_sort":"Kashmir","name_alt":null,"mapcolor7":3,"mapcolor8":7,"mapcolor9":6,"mapcolor13":-99,"pop_est":6000,"gdp_md_est":15,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"-99","iso_a3":"-99","iso_n3":"-99","un_a3":"-099","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"-99","adm0_a3_us":"KAS","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Southern Asia","region_wb":"South Asia","name_len":15,"long_len":15,"abbrev_len":7,"tiny":-99,"homepart":1},"arcs":[[-1092,1174,-556]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Kazakhstan","sov_a3":"KAZ","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Kazakhstan","adm0_a3":"KAZ","geou_dif":0,"geounit":"Kazakhstan","gu_a3":"KAZ","su_dif":0,"subunit":"Kazakhstan","su_a3":"KAZ","brk_diff":0,"name":"Kazakhstan","name_long":"Kazakhstan","brk_a3":"KAZ","brk_name":"Kazakhstan","brk_group":null,"abbrev":"Kaz.","postal":"KZ","formal_en":"Republic of Kazakhstan","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Kazakhstan","name_alt":null,"mapcolor7":6,"mapcolor8":1,"mapcolor9":6,"mapcolor13":1,"pop_est":15399437,"gdp_md_est":175800,"pop_year":-99,"lastcensus":2009,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"KZ","iso_a3":"KAZ","iso_n3":"398","un_a3":"398","wb_a2":"KZ","wb_a3":"KAZ","woe_id":-99,"adm0_a3_is":"KAZ","adm0_a3_us":"KAZ","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Central Asia","region_wb":"Europe & Central Asia","name_len":10,"long_len":10,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1175]],[[1176]],[[1177]],[[-560,1178,1179,1180,1181,1182]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Kenya","sov_a3":"KEN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Kenya","adm0_a3":"KEN","geou_dif":0,"geounit":"Kenya","gu_a3":"KEN","su_dif":0,"subunit":"Kenya","su_a3":"KEN","brk_diff":0,"name":"Kenya","name_long":"Kenya","brk_a3":"KEN","brk_name":"Kenya","brk_group":null,"abbrev":"Ken.","postal":"KE","formal_en":"Republic of Kenya","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Kenya","name_alt":null,"mapcolor7":5,"mapcolor8":2,"mapcolor9":7,"mapcolor13":3,"pop_est":39002772,"gdp_md_est":61510,"pop_year":-99,"lastcensus":2009,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"KE","iso_a3":"KEN","iso_n3":"404","un_a3":"404","wb_a2":"KE","wb_a3":"KEN","woe_id":-99,"adm0_a3_is":"KEN","adm0_a3_us":"KEN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":5,"long_len":5,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1183]],[[1184,1185,1186,1187,1188,-711]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Kyrgyzstan","sov_a3":"KGZ","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Kyrgyzstan","adm0_a3":"KGZ","geou_dif":0,"geounit":"Kyrgyzstan","gu_a3":"KGZ","su_dif":0,"subunit":"Kyrgyzstan","su_a3":"KGZ","brk_diff":0,"name":"Kyrgyzstan","name_long":"Kyrgyzstan","brk_a3":"KGZ","brk_name":"Kyrgyzstan","brk_group":null,"abbrev":"Kgz.","postal":"KG","formal_en":"Kyrgyz Republic","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Kyrgyz Republic","name_alt":null,"mapcolor7":5,"mapcolor8":7,"mapcolor9":7,"mapcolor13":6,"pop_est":5431747,"gdp_md_est":11610,"pop_year":-99,"lastcensus":2009,"gdp_year":-99,"economy":"6. Developing region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"KG","iso_a3":"KGZ","iso_n3":"417","un_a3":"417","wb_a2":"KG","wb_a3":"KGZ","woe_id":-99,"adm0_a3_is":"KGZ","adm0_a3_us":"KGZ","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Central Asia","region_wb":"Europe & Central Asia","name_len":10,"long_len":10,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-559,1189,1190,-1179],[1191],[1192],[1193]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Cambodia","sov_a3":"KHM","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Cambodia","adm0_a3":"KHM","geou_dif":0,"geounit":"Cambodia","gu_a3":"KHM","su_dif":0,"subunit":"Cambodia","su_a3":"KHM","brk_diff":0,"name":"Cambodia","name_long":"Cambodia","brk_a3":"KHM","brk_name":"Cambodia","brk_group":null,"abbrev":"Camb.","postal":"KH","formal_en":"Kingdom of Cambodia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Cambodia","name_alt":null,"mapcolor7":6,"mapcolor8":3,"mapcolor9":6,"mapcolor13":5,"pop_est":14494293,"gdp_md_est":27940,"pop_year":-99,"lastcensus":2008,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"KH","iso_a3":"KHM","iso_n3":"116","un_a3":"116","wb_a2":"KH","wb_a3":"KHM","woe_id":-99,"adm0_a3_is":"KHM","adm0_a3_us":"KHM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"South-Eastern Asia","region_wb":"East Asia & Pacific","name_len":8,"long_len":8,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[1194]],[[1195]],[[1196,1197,1198,1199]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Kiribati","sov_a3":"KIR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Kiribati","adm0_a3":"KIR","geou_dif":0,"geounit":"Kiribati","gu_a3":"KIR","su_dif":0,"subunit":"Kiribati","su_a3":"KIR","brk_diff":0,"name":"Kiribati","name_long":"Kiribati","brk_a3":"KIR","brk_name":"Kiribati","brk_group":null,"abbrev":"Kir.","postal":"KI","formal_en":"Republic of Kiribati","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Kiribati","name_alt":null,"mapcolor7":5,"mapcolor8":7,"mapcolor9":6,"mapcolor13":12,"pop_est":112850,"gdp_md_est":579.5,"pop_year":-99,"lastcensus":2005,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"KI","iso_a3":"KIR","iso_n3":"296","un_a3":"296","wb_a2":"KI","wb_a3":"KIR","woe_id":-99,"adm0_a3_is":"KIR","adm0_a3_us":"KIR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Micronesia","region_wb":"East Asia & Pacific","name_len":8,"long_len":8,"abbrev_len":4,"tiny":2,"homepart":1},"arcs":[[[1200]],[[1201]],[[1202]],[[1203]],[[1204]],[[1205]],[[1206]],[[1207]],[[1208]],[[1209]],[[1210]],[[1211]],[[1212]],[[1213]],[[1214]],[[1215]],[[1216]],[[1217]],[[1218]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Saint Kitts and Nevis","sov_a3":"KNA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Saint Kitts and Nevis","adm0_a3":"KNA","geou_dif":0,"geounit":"Saint Kitts and Nevis","gu_a3":"KNA","su_dif":0,"subunit":"Saint Kitts and Nevis","su_a3":"KNA","brk_diff":0,"name":"St. Kitts and Nevis","name_long":"Saint Kitts and Nevis","brk_a3":"KNA","brk_name":"Saint Kitts and Nevis","brk_group":null,"abbrev":"St.K.N.","postal":"KN","formal_en":"Federation of Saint Kitts and Nevis","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"St. Kitts and Nevis","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":1,"mapcolor13":8,"pop_est":40131,"gdp_md_est":777.7,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"KN","iso_a3":"KNA","iso_n3":"659","un_a3":"659","wb_a2":"KN","wb_a3":"KNA","woe_id":-99,"adm0_a3_is":"KNA","adm0_a3_us":"KNA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":19,"long_len":21,"abbrev_len":7,"tiny":4,"homepart":1},"arcs":[[[1219]],[[1220]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"South Korea","sov_a3":"KOR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"South Korea","adm0_a3":"KOR","geou_dif":0,"geounit":"South Korea","gu_a3":"KOR","su_dif":0,"subunit":"South Korea","su_a3":"KOR","brk_diff":0,"name":"Korea","name_long":"Republic of Korea","brk_a3":"KOR","brk_name":"Republic of Korea","brk_group":null,"abbrev":"S.K.","postal":"KR","formal_en":"Republic of Korea","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Korea, Rep.","name_alt":null,"mapcolor7":4,"mapcolor8":1,"mapcolor9":1,"mapcolor13":5,"pop_est":48508972,"gdp_md_est":1335000,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"4. Emerging region: MIKT","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"KR","iso_a3":"KOR","iso_n3":"410","un_a3":"410","wb_a2":"KR","wb_a3":"KOR","woe_id":-99,"adm0_a3_is":"KOR","adm0_a3_us":"KOR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Eastern Asia","region_wb":"East Asia & Pacific","name_len":5,"long_len":17,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1221]],[[1222]],[[1223]],[[1224]],[[1225]],[[1226]],[[1227]],[[1228]],[[1229]],[[1230]],[[1231,1232]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Kosovo","sov_a3":"KOS","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Kosovo","adm0_a3":"KOS","geou_dif":0,"geounit":"Kosovo","gu_a3":"KOS","su_dif":0,"subunit":"Kosovo","su_a3":"KOS","brk_diff":1,"name":"Kosovo","name_long":"Kosovo","brk_a3":"B57","brk_name":"Kosovo","brk_group":null,"abbrev":"Kos.","postal":"KO","formal_en":"Republic of Kosovo","formal_fr":null,"note_adm0":null,"note_brk":"Self admin.; Claimed by Serbia","name_sort":"Kosovo","name_alt":null,"mapcolor7":2,"mapcolor8":2,"mapcolor9":3,"mapcolor13":11,"pop_est":1804838,"gdp_md_est":5352,"pop_year":-99,"lastcensus":1981,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"-99","iso_a3":"-99","iso_n3":"-99","un_a3":"-099","wb_a2":"KV","wb_a3":"KSV","woe_id":-99,"adm0_a3_is":"SRB","adm0_a3_us":"KOS","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Southern Europe","region_wb":"Europe & Central Asia","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1233,-17,1234,1235]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Kuwait","sov_a3":"KWT","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Kuwait","adm0_a3":"KWT","geou_dif":0,"geounit":"Kuwait","gu_a3":"KWT","su_dif":0,"subunit":"Kuwait","su_a3":"KWT","brk_diff":0,"name":"Kuwait","name_long":"Kuwait","brk_a3":"KWT","brk_name":"Kuwait","brk_group":null,"abbrev":"Kwt.","postal":"KW","formal_en":"State of Kuwait","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Kuwait","name_alt":null,"mapcolor7":2,"mapcolor8":2,"mapcolor9":2,"mapcolor13":2,"pop_est":2691158,"gdp_md_est":149100,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"KW","iso_a3":"KWT","iso_n3":"414","un_a3":"414","wb_a2":"KW","wb_a3":"KWT","woe_id":-99,"adm0_a3_is":"KWT","adm0_a3_us":"KWT","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Middle East & North Africa","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1236]],[[1237,-1111,1238]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Laos","sov_a3":"LAO","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Laos","adm0_a3":"LAO","geou_dif":0,"geounit":"Laos","gu_a3":"LAO","su_dif":0,"subunit":"Laos","su_a3":"LAO","brk_diff":0,"name":"Lao PDR","name_long":"Lao PDR","brk_a3":"LAO","brk_name":"Laos","brk_group":null,"abbrev":"Laos","postal":"LA","formal_en":"Lao People's Democratic Republic","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Lao PDR","name_alt":null,"mapcolor7":1,"mapcolor8":1,"mapcolor9":1,"mapcolor13":9,"pop_est":6834942,"gdp_md_est":13980,"pop_year":-99,"lastcensus":2005,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"LA","iso_a3":"LAO","iso_n3":"418","un_a3":"418","wb_a2":"LA","wb_a3":"LAO","woe_id":-99,"adm0_a3_is":"LAO","adm0_a3_us":"LAO","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"South-Eastern Asia","region_wb":"East Asia & Pacific","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1239,1240,1241,-1199,1242,1243,-539]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Lebanon","sov_a3":"LBN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Lebanon","adm0_a3":"LBN","geou_dif":0,"geounit":"Lebanon","gu_a3":"LBN","su_dif":0,"subunit":"Lebanon","su_a3":"LBN","brk_diff":0,"name":"Lebanon","name_long":"Lebanon","brk_a3":"LBN","brk_name":"Lebanon","brk_group":null,"abbrev":"Leb.","postal":"LB","formal_en":"Lebanese Republic","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Lebanon","name_alt":null,"mapcolor7":4,"mapcolor8":4,"mapcolor9":4,"mapcolor13":12,"pop_est":4017095,"gdp_md_est":44060,"pop_year":-99,"lastcensus":1970,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"LB","iso_a3":"LBN","iso_n3":"422","un_a3":"422","wb_a2":"LB","wb_a3":"LBN","woe_id":-99,"adm0_a3_is":"LBN","adm0_a3_us":"LBN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Middle East & North Africa","name_len":7,"long_len":7,"abbrev_len":4,"tiny":4,"homepart":1},"arcs":[[-1123,1244,1245]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Liberia","sov_a3":"LBR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Liberia","adm0_a3":"LBR","geou_dif":0,"geounit":"Liberia","gu_a3":"LBR","su_dif":0,"subunit":"Liberia","su_a3":"LBR","brk_diff":0,"name":"Liberia","name_long":"Liberia","brk_a3":"LBR","brk_name":"Liberia","brk_group":null,"abbrev":"Liberia","postal":"LR","formal_en":"Republic of Liberia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Liberia","name_alt":null,"mapcolor7":2,"mapcolor8":3,"mapcolor9":4,"mapcolor13":9,"pop_est":3441790,"gdp_md_est":1526,"pop_year":-99,"lastcensus":2008,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"LR","iso_a3":"LBR","iso_n3":"430","un_a3":"430","wb_a2":"LR","wb_a3":"LBR","woe_id":-99,"adm0_a3_is":"LBR","adm0_a3_us":"LBR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":7,"long_len":7,"abbrev_len":7,"tiny":-99,"homepart":1},"arcs":[[-568,1246,1247,-810]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Libya","sov_a3":"LBY","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Libya","adm0_a3":"LBY","geou_dif":0,"geounit":"Libya","gu_a3":"LBY","su_dif":0,"subunit":"Libya","su_a3":"LBY","brk_diff":0,"name":"Libya","name_long":"Libya","brk_a3":"LBY","brk_name":"Libya","brk_group":null,"abbrev":"Libya","postal":"LY","formal_en":"Libya","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Libya","name_alt":null,"mapcolor7":1,"mapcolor8":2,"mapcolor9":2,"mapcolor13":11,"pop_est":6310434,"gdp_md_est":88830,"pop_year":-99,"lastcensus":2006,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"LY","iso_a3":"LBY","iso_n3":"434","un_a3":"434","wb_a2":"LY","wb_a3":"LBY","woe_id":-99,"adm0_a3_is":"LBY","adm0_a3_us":"LBY","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Northern Africa","region_wb":"Middle East & North Africa","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[-680,1248,1249,1250,-659,1251,1252]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Saint Lucia","sov_a3":"LCA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Saint Lucia","adm0_a3":"LCA","geou_dif":0,"geounit":"Saint Lucia","gu_a3":"LCA","su_dif":0,"subunit":"Saint Lucia","su_a3":"LCA","brk_diff":0,"name":"Saint Lucia","name_long":"Saint Lucia","brk_a3":"LCA","brk_name":"Saint Lucia","brk_group":null,"abbrev":"S.L.","postal":"LC","formal_en":"Saint Lucia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"St. Lucia","name_alt":null,"mapcolor7":3,"mapcolor8":4,"mapcolor9":3,"mapcolor13":4,"pop_est":160267,"gdp_md_est":1778,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"LC","iso_a3":"LCA","iso_n3":"662","un_a3":"662","wb_a2":"LC","wb_a3":"LCA","woe_id":-99,"adm0_a3_is":"LCA","adm0_a3_us":"LCA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":11,"long_len":11,"abbrev_len":4,"tiny":4,"homepart":1},"arcs":[[1253]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Liechtenstein","sov_a3":"LIE","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Liechtenstein","adm0_a3":"LIE","geou_dif":0,"geounit":"Liechtenstein","gu_a3":"LIE","su_dif":0,"subunit":"Liechtenstein","su_a3":"LIE","brk_diff":0,"name":"Liechtenstein","name_long":"Liechtenstein","brk_a3":"LIE","brk_name":"Liechtenstein","brk_group":null,"abbrev":"Liech.","postal":"FL","formal_en":"Principality of Liechtenstein","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Liechtenstein","name_alt":null,"mapcolor7":2,"mapcolor8":4,"mapcolor9":2,"mapcolor13":9,"pop_est":34761,"gdp_md_est":4160,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"LI","iso_a3":"LIE","iso_n3":"438","un_a3":"438","wb_a2":"LI","wb_a3":"LIE","woe_id":-99,"adm0_a3_is":"LIE","adm0_a3_us":"LIE","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Western Europe","region_wb":"Europe & Central Asia","name_len":13,"long_len":13,"abbrev_len":6,"tiny":6,"homepart":1},"arcs":[[-484,-215]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Sri Lanka","sov_a3":"LKA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Sri Lanka","adm0_a3":"LKA","geou_dif":0,"geounit":"Sri Lanka","gu_a3":"LKA","su_dif":0,"subunit":"Sri Lanka","su_a3":"LKA","brk_diff":0,"name":"Sri Lanka","name_long":"Sri Lanka","brk_a3":"LKA","brk_name":"Sri Lanka","brk_group":null,"abbrev":"Sri L.","postal":"LK","formal_en":"Democratic Socialist Republic of Sri Lanka","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Sri Lanka","name_alt":null,"mapcolor7":3,"mapcolor8":5,"mapcolor9":4,"mapcolor13":9,"pop_est":21324791,"gdp_md_est":91870,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"LK","iso_a3":"LKA","iso_n3":"144","un_a3":"144","wb_a2":"LK","wb_a3":"LKA","woe_id":-99,"adm0_a3_is":"LKA","adm0_a3_us":"LKA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Southern Asia","region_wb":"South Asia","name_len":9,"long_len":9,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[[1254]],[[1255]],[[1256]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Lesotho","sov_a3":"LSO","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Lesotho","adm0_a3":"LSO","geou_dif":0,"geounit":"Lesotho","gu_a3":"LSO","su_dif":0,"subunit":"Lesotho","su_a3":"LSO","brk_diff":0,"name":"Lesotho","name_long":"Lesotho","brk_a3":"LSO","brk_name":"Lesotho","brk_group":null,"abbrev":"Les.","postal":"LS","formal_en":"Kingdom of Lesotho","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Lesotho","name_alt":null,"mapcolor7":1,"mapcolor8":5,"mapcolor9":2,"mapcolor13":8,"pop_est":2130819,"gdp_md_est":3293,"pop_year":-99,"lastcensus":2006,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"LS","iso_a3":"LSO","iso_n3":"426","un_a3":"426","wb_a2":"LS","wb_a3":"LSO","woe_id":-99,"adm0_a3_is":"LSO","adm0_a3_us":"LSO","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Southern Africa","region_wb":"Sub-Saharan Africa","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1257]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Lithuania","sov_a3":"LTU","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Lithuania","adm0_a3":"LTU","geou_dif":0,"geounit":"Lithuania","gu_a3":"LTU","su_dif":0,"subunit":"Lithuania","su_a3":"LTU","brk_diff":0,"name":"Lithuania","name_long":"Lithuania","brk_a3":"LTU","brk_name":"Lithuania","brk_group":null,"abbrev":"Lith.","postal":"LT","formal_en":"Republic of Lithuania","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Lithuania","name_alt":null,"mapcolor7":6,"mapcolor8":3,"mapcolor9":3,"mapcolor13":9,"pop_est":3555179,"gdp_md_est":63330,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"LT","iso_a3":"LTU","iso_n3":"440","un_a3":"440","wb_a2":"LT","wb_a3":"LTU","woe_id":-99,"adm0_a3_is":"LTU","adm0_a3_us":"LTU","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Northern Europe","region_wb":"Europe & Central Asia","name_len":9,"long_len":9,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[1258,1259]],[[-285,1260,1261,1262,1263]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Luxembourg","sov_a3":"LUX","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Luxembourg","adm0_a3":"LUX","geou_dif":0,"geounit":"Luxembourg","gu_a3":"LUX","su_dif":0,"subunit":"Luxembourg","su_a3":"LUX","brk_diff":0,"name":"Luxembourg","name_long":"Luxembourg","brk_a3":"LUX","brk_name":"Luxembourg","brk_group":null,"abbrev":"Lux.","postal":"L","formal_en":"Grand Duchy of Luxembourg","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Luxembourg","name_alt":null,"mapcolor7":1,"mapcolor8":7,"mapcolor9":3,"mapcolor13":7,"pop_est":491775,"gdp_md_est":39370,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"LU","iso_a3":"LUX","iso_n3":"442","un_a3":"442","wb_a2":"LU","wb_a3":"LUX","woe_id":-99,"adm0_a3_is":"LUX","adm0_a3_us":"LUX","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Western Europe","region_wb":"Europe & Central Asia","name_len":10,"long_len":10,"abbrev_len":4,"tiny":5,"homepart":1},"arcs":[[-634,-760,-230]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Latvia","sov_a3":"LVA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Latvia","adm0_a3":"LVA","geou_dif":0,"geounit":"Latvia","gu_a3":"LVA","su_dif":0,"subunit":"Latvia","su_a3":"LVA","brk_diff":0,"name":"Latvia","name_long":"Latvia","brk_a3":"LVA","brk_name":"Latvia","brk_group":null,"abbrev":"Lat.","postal":"LV","formal_en":"Republic of Latvia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Latvia","name_alt":null,"mapcolor7":4,"mapcolor8":7,"mapcolor9":6,"mapcolor13":13,"pop_est":2231503,"gdp_md_est":38860,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"LV","iso_a3":"LVA","iso_n3":"428","un_a3":"428","wb_a2":"LV","wb_a3":"LVA","woe_id":-99,"adm0_a3_is":"LVA","adm0_a3_us":"LVA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Northern Europe","region_wb":"Europe & Central Asia","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1264,-286,-1264,1265,-707]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"China","sov_a3":"CH1","adm0_dif":1,"level":2,"type":"Country","admin":"Macao S.A.R","adm0_a3":"MAC","geou_dif":0,"geounit":"Macao S.A.R","gu_a3":"MAC","su_dif":0,"subunit":"Macao S.A.R","su_a3":"MAC","brk_diff":0,"name":"Macao","name_long":"Macao","brk_a3":"MAC","brk_name":"Macao","brk_group":null,"abbrev":"Mac.","postal":"MO","formal_en":"Macao Special Administrative Region, PRC","formal_fr":null,"note_adm0":"China","note_brk":null,"name_sort":"Macao SAR, China","name_alt":null,"mapcolor7":4,"mapcolor8":4,"mapcolor9":4,"mapcolor13":3,"pop_est":559846,"gdp_md_est":18140,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"MO","iso_a3":"MAC","iso_n3":"446","un_a3":"446","wb_a2":"MO","wb_a3":"MAC","woe_id":-99,"adm0_a3_is":"MAC","adm0_a3_us":"MAC","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Eastern Asia","region_wb":"East Asia & Pacific","name_len":5,"long_len":5,"abbrev_len":4,"tiny":-99,"homepart":-99},"arcs":[[-536,1266]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"France","sov_a3":"FR1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Saint Martin","adm0_a3":"MAF","geou_dif":0,"geounit":"Saint Martin","gu_a3":"MAF","su_dif":0,"subunit":"Saint Martin","su_a3":"MAF","brk_diff":0,"name":"St-Martin","name_long":"Saint-Martin","brk_a3":"MAF","brk_name":"Saint-Martin","brk_group":null,"abbrev":"St. M.","postal":"MF","formal_en":"Saint-Martin (French part)","formal_fr":null,"note_adm0":"Fr.","note_brk":null,"name_sort":"St. Martin (French part)","name_alt":null,"mapcolor7":7,"mapcolor8":5,"mapcolor9":9,"mapcolor13":11,"pop_est":36661,"gdp_md_est":449,"pop_year":2008,"lastcensus":-99,"gdp_year":1999,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":0,"fips_10":null,"iso_a2":"MF","iso_a3":"MAF","iso_n3":"663","un_a3":"663","wb_a2":"MF","wb_a3":"MAF","woe_id":-99,"adm0_a3_is":"MAF","adm0_a3_us":"MAF","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":9,"long_len":12,"abbrev_len":6,"tiny":4,"homepart":-99},"arcs":[[1267,1268]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Morocco","sov_a3":"MAR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Morocco","adm0_a3":"MAR","geou_dif":0,"geounit":"Morocco","gu_a3":"MAR","su_dif":0,"subunit":"Morocco","su_a3":"MAR","brk_diff":0,"name":"Morocco","name_long":"Morocco","brk_a3":"MAR","brk_name":"Morocco","brk_group":null,"abbrev":"Mor.","postal":"MA","formal_en":"Kingdom of Morocco","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Morocco","name_alt":null,"mapcolor7":2,"mapcolor8":2,"mapcolor9":3,"mapcolor13":9,"pop_est":34859364,"gdp_md_est":136600,"pop_year":-99,"lastcensus":2004,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"MA","iso_a3":"MAR","iso_n3":"504","un_a3":"504","wb_a2":"MA","wb_a3":"MAR","woe_id":-99,"adm0_a3_is":"MAR","adm0_a3_us":"MAR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Northern Africa","region_wb":"Middle East & North Africa","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-664,1269,1270]]},{"type":"Polygon","properties":{"scalerank":6,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Monaco","sov_a3":"MCO","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Monaco","adm0_a3":"MCO","geou_dif":0,"geounit":"Monaco","gu_a3":"MCO","su_dif":0,"subunit":"Monaco","su_a3":"MCO","brk_diff":0,"name":"Monaco","name_long":"Monaco","brk_a3":"MCO","brk_name":"Monaco","brk_group":null,"abbrev":"Mco.","postal":"MC","formal_en":"Principality of Monaco","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Monaco","name_alt":null,"mapcolor7":1,"mapcolor8":1,"mapcolor9":2,"mapcolor13":12,"pop_est":32965,"gdp_md_est":976.3,"pop_year":-99,"lastcensus":2008,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"MC","iso_a3":"MCO","iso_n3":"492","un_a3":"492","wb_a2":"MC","wb_a3":"MCO","woe_id":-99,"adm0_a3_is":"MCO","adm0_a3_us":"MCO","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Western Europe","region_wb":"Europe & Central Asia","name_len":6,"long_len":6,"abbrev_len":4,"tiny":5,"homepart":1},"arcs":[[1271,-763]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Moldova","sov_a3":"MDA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Moldova","adm0_a3":"MDA","geou_dif":0,"geounit":"Moldova","gu_a3":"MDA","su_dif":0,"subunit":"Moldova","su_a3":"MDA","brk_diff":0,"name":"Moldova","name_long":"Moldova","brk_a3":"MDA","brk_name":"Moldova","brk_group":null,"abbrev":"Mda.","postal":"MD","formal_en":"Republic of Moldova","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Moldova","name_alt":null,"mapcolor7":3,"mapcolor8":5,"mapcolor9":4,"mapcolor13":12,"pop_est":4320748,"gdp_md_est":10670,"pop_year":-99,"lastcensus":2004,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"MD","iso_a3":"MDA","iso_n3":"498","un_a3":"498","wb_a2":"MD","wb_a3":"MDA","woe_id":-99,"adm0_a3_is":"MDA","adm0_a3_us":"MDA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Eastern Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1272,1273]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Madagascar","sov_a3":"MDG","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Madagascar","adm0_a3":"MDG","geou_dif":0,"geounit":"Madagascar","gu_a3":"MDG","su_dif":0,"subunit":"Madagascar","su_a3":"MDG","brk_diff":0,"name":"Madagascar","name_long":"Madagascar","brk_a3":"MDG","brk_name":"Madagascar","brk_group":null,"abbrev":"Mad.","postal":"MG","formal_en":"Republic of Madagascar","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Madagascar","name_alt":null,"mapcolor7":6,"mapcolor8":5,"mapcolor9":2,"mapcolor13":3,"pop_est":20653556,"gdp_md_est":20130,"pop_year":-99,"lastcensus":1993,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"MG","iso_a3":"MDG","iso_n3":"450","un_a3":"450","wb_a2":"MG","wb_a3":"MDG","woe_id":-99,"adm0_a3_is":"MDG","adm0_a3_us":"MDG","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":10,"long_len":10,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1274]],[[1275]],[[1276]]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Maldives","sov_a3":"MDV","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Maldives","adm0_a3":"MDV","geou_dif":0,"geounit":"Maldives","gu_a3":"MDV","su_dif":0,"subunit":"Maldives","su_a3":"MDV","brk_diff":0,"name":"Maldives","name_long":"Maldives","brk_a3":"MDV","brk_name":"Maldives","brk_group":null,"abbrev":"Mald.","postal":"MV","formal_en":"Republic of Maldives","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Maldives","name_alt":null,"mapcolor7":2,"mapcolor8":3,"mapcolor9":1,"mapcolor13":7,"pop_est":396334,"gdp_md_est":1716,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"MV","iso_a3":"MDV","iso_n3":"462","un_a3":"462","wb_a2":"MV","wb_a3":"MDV","woe_id":-99,"adm0_a3_is":"MDV","adm0_a3_us":"B13","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Seven seas (open ocean)","region_un":"Asia","subregion":"Southern Asia","region_wb":"South Asia","name_len":8,"long_len":8,"abbrev_len":5,"tiny":2,"homepart":1},"arcs":[[[1277]],[[1278]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Mexico","sov_a3":"MEX","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Mexico","adm0_a3":"MEX","geou_dif":0,"geounit":"Mexico","gu_a3":"MEX","su_dif":0,"subunit":"Mexico","su_a3":"MEX","brk_diff":0,"name":"Mexico","name_long":"Mexico","brk_a3":"MEX","brk_name":"Mexico","brk_group":null,"abbrev":"Mex.","postal":"MX","formal_en":"United Mexican States","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Mexico","name_alt":null,"mapcolor7":6,"mapcolor8":1,"mapcolor9":7,"mapcolor13":3,"pop_est":111211789,"gdp_md_est":1563000,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"4. Emerging region: MIKT","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"MX","iso_a3":"MEX","iso_n3":"484","un_a3":"484","wb_a2":"MX","wb_a3":"MEX","woe_id":-99,"adm0_a3_is":"MEX","adm0_a3_us":"MEX","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Central America","region_wb":"Latin America & Caribbean","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1279]],[[1280]],[[1281]],[[1282]],[[1283]],[[1284]],[[1285]],[[1286]],[[1287]],[[1288]],[[1289]],[[1290]],[[1291]],[[1292]],[[1293]],[[1294,-290,-891,1295,1296]]]},{"type":"MultiPolygon","properties":{"scalerank":5,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Marshall Islands","sov_a3":"MHL","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Marshall Islands","adm0_a3":"MHL","geou_dif":0,"geounit":"Marshall Islands","gu_a3":"MHL","su_dif":0,"subunit":"Marshall Islands","su_a3":"MHL","brk_diff":0,"name":"Marshall Is.","name_long":"Marshall Islands","brk_a3":"MHL","brk_name":"Marshall Is.","brk_group":null,"abbrev":"M. Is.","postal":"MH","formal_en":"Republic of the Marshall Islands","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Marshall Islands","name_alt":null,"mapcolor7":2,"mapcolor8":5,"mapcolor9":5,"mapcolor13":3,"pop_est":64522,"gdp_md_est":133.5,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"MH","iso_a3":"MHL","iso_n3":"584","un_a3":"584","wb_a2":"MH","wb_a3":"MHL","woe_id":-99,"adm0_a3_is":"MHL","adm0_a3_us":"MHL","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Micronesia","region_wb":"East Asia & Pacific","name_len":12,"long_len":16,"abbrev_len":6,"tiny":2,"homepart":1},"arcs":[[[1297]],[[1298]],[[1299]],[[1300]],[[1301]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Macedonia","sov_a3":"MKD","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Macedonia","adm0_a3":"MKD","geou_dif":0,"geounit":"Macedonia","gu_a3":"MKD","su_dif":0,"subunit":"Macedonia","su_a3":"MKD","brk_diff":0,"name":"Macedonia","name_long":"Macedonia","brk_a3":"MKD","brk_name":"Macedonia","brk_group":null,"abbrev":"Mkd.","postal":"MK","formal_en":"Former Yugoslav Republic of Macedonia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Macedonia, FYR","name_alt":null,"mapcolor7":5,"mapcolor8":3,"mapcolor9":7,"mapcolor13":3,"pop_est":2066718,"gdp_md_est":18780,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"MK","iso_a3":"MKD","iso_n3":"807","un_a3":"807","wb_a2":"MK","wb_a3":"MKD","woe_id":-99,"adm0_a3_is":"MKD","adm0_a3_us":"MKD","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Southern Europe","region_wb":"Europe & Central Asia","name_len":9,"long_len":9,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-257,-867,-18,-1234,1302]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Mali","sov_a3":"MLI","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Mali","adm0_a3":"MLI","geou_dif":0,"geounit":"Mali","gu_a3":"MLI","su_dif":0,"subunit":"Mali","su_a3":"MLI","brk_diff":0,"name":"Mali","name_long":"Mali","brk_a3":"MLI","brk_name":"Mali","brk_group":null,"abbrev":"Mali","postal":"ML","formal_en":"Republic of Mali","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Mali","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":1,"mapcolor13":7,"pop_est":12666987,"gdp_md_est":14590,"pop_year":-99,"lastcensus":2009,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"ML","iso_a3":"MLI","iso_n3":"466","un_a3":"466","wb_a2":"ML","wb_a3":"MLI","woe_id":-99,"adm0_a3_is":"MLI","adm0_a3_us":"MLI","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":4,"long_len":4,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1303,-244,-570,-809,1304,1305,-661]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Malta","sov_a3":"MLT","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Malta","adm0_a3":"MLT","geou_dif":0,"geounit":"Malta","gu_a3":"MLT","su_dif":0,"subunit":"Malta","su_a3":"MLT","brk_diff":0,"name":"Malta","name_long":"Malta","brk_a3":"MLT","brk_name":"Malta","brk_group":null,"abbrev":"Malta","postal":"M","formal_en":"Republic of Malta","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Malta","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":1,"mapcolor13":8,"pop_est":405165,"gdp_md_est":9962,"pop_year":-99,"lastcensus":2005,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"MT","iso_a3":"MLT","iso_n3":"470","un_a3":"470","wb_a2":"MT","wb_a3":"MLT","woe_id":-99,"adm0_a3_is":"MLT","adm0_a3_us":"MLT","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Southern Europe","region_wb":"Middle East & North Africa","name_len":5,"long_len":5,"abbrev_len":5,"tiny":3,"homepart":1},"arcs":[[[1306]],[[1307]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Myanmar","sov_a3":"MMR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Myanmar","adm0_a3":"MMR","geou_dif":0,"geounit":"Myanmar","gu_a3":"MMR","su_dif":0,"subunit":"Myanmar","su_a3":"MMR","brk_diff":0,"name":"Myanmar","name_long":"Myanmar","brk_a3":"MMR","brk_name":"Myanmar","brk_group":null,"abbrev":"Myan.","postal":"MM","formal_en":"Republic of the Union of Myanmar","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Myanmar","name_alt":null,"mapcolor7":2,"mapcolor8":2,"mapcolor9":5,"mapcolor13":13,"pop_est":48137741,"gdp_md_est":55130,"pop_year":-99,"lastcensus":1983,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"MM","iso_a3":"MMR","iso_n3":"104","un_a3":"104","wb_a2":"MM","wb_a3":"MMR","woe_id":-99,"adm0_a3_is":"MMR","adm0_a3_us":"MMR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"South-Eastern Asia","region_wb":"East Asia & Pacific","name_len":7,"long_len":7,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[1308]],[[1309]],[[1310]],[[1311]],[[1312]],[[1313]],[[1314]],[[1315]],[[1316]],[[1317]],[[1318]],[[1319]],[[1320]],[[1321]],[[1322]],[[1323]],[[1324]],[[1325]],[[-1244,1326,1327,-251,-1089,-540]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Montenegro","sov_a3":"MNE","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Montenegro","adm0_a3":"MNE","geou_dif":0,"geounit":"Montenegro","gu_a3":"MNE","su_dif":0,"subunit":"Montenegro","su_a3":"MNE","brk_diff":0,"name":"Montenegro","name_long":"Montenegro","brk_a3":"MNE","brk_name":"Montenegro","brk_group":null,"abbrev":"Mont.","postal":"ME","formal_en":"Montenegro","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Montenegro","name_alt":null,"mapcolor7":4,"mapcolor8":1,"mapcolor9":4,"mapcolor13":5,"pop_est":672180,"gdp_md_est":6816,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"ME","iso_a3":"MNE","iso_n3":"499","un_a3":"499","wb_a2":"ME","wb_a3":"MNE","woe_id":-99,"adm0_a3_is":"MNE","adm0_a3_us":"MNE","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Southern Europe","region_wb":"Europe & Central Asia","name_len":10,"long_len":10,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[1328,-1235,-21,1329,-908,-277]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Mongolia","sov_a3":"MNG","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Mongolia","adm0_a3":"MNG","geou_dif":0,"geounit":"Mongolia","gu_a3":"MNG","su_dif":0,"subunit":"Mongolia","su_a3":"MNG","brk_diff":0,"name":"Mongolia","name_long":"Mongolia","brk_a3":"MNG","brk_name":"Mongolia","brk_group":null,"abbrev":"Mong.","postal":"MN","formal_en":"Mongolia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Mongolia","name_alt":null,"mapcolor7":3,"mapcolor8":5,"mapcolor9":5,"mapcolor13":6,"pop_est":3041142,"gdp_md_est":9476,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"MN","iso_a3":"MNG","iso_n3":"496","un_a3":"496","wb_a2":"MN","wb_a3":"MNG","woe_id":-99,"adm0_a3_is":"MNG","adm0_a3_us":"MNG","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Eastern Asia","region_wb":"East Asia & Pacific","name_len":8,"long_len":8,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[-562,1330]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"United States of America","sov_a3":"US1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Northern Mariana Islands","adm0_a3":"MNP","geou_dif":0,"geounit":"Northern Mariana Islands","gu_a3":"MNP","su_dif":0,"subunit":"Northern Mariana Islands","su_a3":"MNP","brk_diff":0,"name":"N. Mariana Is.","name_long":"Northern Mariana Islands","brk_a3":"MNP","brk_name":"N. Mariana Is.","brk_group":null,"abbrev":"N.M.I.","postal":"MP","formal_en":"Commonwealth of the Northern Mariana Islands","formal_fr":null,"note_adm0":"Commonwealth of U.S.A.","note_brk":null,"name_sort":"Northern Mariana Islands","name_alt":null,"mapcolor7":4,"mapcolor8":5,"mapcolor9":1,"mapcolor13":1,"pop_est":88662,"gdp_md_est":900,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"MP","iso_a3":"MNP","iso_n3":"580","un_a3":"580","wb_a2":"MP","wb_a3":"MNP","woe_id":-99,"adm0_a3_is":"MNP","adm0_a3_us":"MNP","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Micronesia","region_wb":"East Asia & Pacific","name_len":14,"long_len":24,"abbrev_len":6,"tiny":3,"homepart":-99},"arcs":[[[1331]],[[1332]],[[1333]],[[1334]],[[1335]],[[1336]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Mozambique","sov_a3":"MOZ","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Mozambique","adm0_a3":"MOZ","geou_dif":0,"geounit":"Mozambique","gu_a3":"MOZ","su_dif":0,"subunit":"Mozambique","su_a3":"MOZ","brk_diff":0,"name":"Mozambique","name_long":"Mozambique","brk_a3":"MOZ","brk_name":"Mozambique","brk_group":null,"abbrev":"Moz.","postal":"MZ","formal_en":"Republic of Mozambique","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Mozambique","name_alt":null,"mapcolor7":4,"mapcolor8":2,"mapcolor9":1,"mapcolor13":4,"pop_est":21669278,"gdp_md_est":18940,"pop_year":-99,"lastcensus":2007,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"MZ","iso_a3":"MOZ","iso_n3":"508","un_a3":"508","wb_a2":"MZ","wb_a3":"MOZ","woe_id":-99,"adm0_a3_is":"MOZ","adm0_a3_us":"MOZ","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":10,"long_len":10,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1337,1338,1339,1340,1341,1342,1343,1344],[1345],[1346]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Mauritania","sov_a3":"MRT","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Mauritania","adm0_a3":"MRT","geou_dif":0,"geounit":"Mauritania","gu_a3":"MRT","su_dif":0,"subunit":"Mauritania","su_a3":"MRT","brk_diff":0,"name":"Mauritania","name_long":"Mauritania","brk_a3":"MRT","brk_name":"Mauritania","brk_group":null,"abbrev":"Mrt.","postal":"MR","formal_en":"Islamic Republic of Mauritania","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Mauritania","name_alt":null,"mapcolor7":3,"mapcolor8":3,"mapcolor9":2,"mapcolor13":1,"pop_est":3129486,"gdp_md_est":6308,"pop_year":-99,"lastcensus":2000,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"MR","iso_a3":"MRT","iso_n3":"478","un_a3":"478","wb_a2":"MR","wb_a3":"MRT","woe_id":-99,"adm0_a3_is":"MRT","adm0_a3_us":"MRT","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":10,"long_len":10,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1347]],[[1348,1349,1350,-662,-1306]]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"United Kingdom","sov_a3":"GB1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Montserrat","adm0_a3":"MSR","geou_dif":0,"geounit":"Montserrat","gu_a3":"MSR","su_dif":0,"subunit":"Montserrat","su_a3":"MSR","brk_diff":0,"name":"Montserrat","name_long":"Montserrat","brk_a3":"MSR","brk_name":"Montserrat","brk_group":null,"abbrev":"Monts.","postal":"MS","formal_en":null,"formal_fr":null,"note_adm0":"U.K.","note_brk":null,"name_sort":"Montserrat","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":3,"pop_est":5097,"gdp_md_est":29,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"MS","iso_a3":"MSR","iso_n3":"500","un_a3":"500","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"MSR","adm0_a3_us":"MSR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":10,"long_len":10,"abbrev_len":6,"tiny":6,"homepart":-99},"arcs":[[1351]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Mauritius","sov_a3":"MUS","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Mauritius","adm0_a3":"MUS","geou_dif":0,"geounit":"Mauritius","gu_a3":"MUS","su_dif":0,"subunit":"Mauritius","su_a3":"MUS","brk_diff":0,"name":"Mauritius","name_long":"Mauritius","brk_a3":"MUS","brk_name":"Mauritius","brk_group":null,"abbrev":"Mus.","postal":"MU","formal_en":"Republic of Mauritius","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Mauritius","name_alt":null,"mapcolor7":1,"mapcolor8":3,"mapcolor9":5,"mapcolor13":7,"pop_est":1284264,"gdp_md_est":15270,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"MU","iso_a3":"MUS","iso_n3":"480","un_a3":"480","wb_a2":"MU","wb_a3":"MUS","woe_id":-99,"adm0_a3_is":"MUS","adm0_a3_us":"MUS","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Seven seas (open ocean)","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":9,"long_len":9,"abbrev_len":4,"tiny":2,"homepart":1},"arcs":[[1352]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Malawi","sov_a3":"MWI","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Malawi","adm0_a3":"MWI","geou_dif":0,"geounit":"Malawi","gu_a3":"MWI","su_dif":0,"subunit":"Malawi","su_a3":"MWI","brk_diff":0,"name":"Malawi","name_long":"Malawi","brk_a3":"MWI","brk_name":"Malawi","brk_group":null,"abbrev":"Mal.","postal":"MW","formal_en":"Republic of Malawi","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Malawi","name_alt":null,"mapcolor7":1,"mapcolor8":3,"mapcolor9":4,"mapcolor13":5,"pop_est":14268711,"gdp_md_est":11810,"pop_year":-99,"lastcensus":2008,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"MW","iso_a3":"MWI","iso_n3":"454","un_a3":"454","wb_a2":"MW","wb_a3":"MWI","woe_id":-99,"adm0_a3_is":"MWI","adm0_a3_us":"MWI","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[-1347]],[[-1346]],[[-1343,1353,1354]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Malaysia","sov_a3":"MYS","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Malaysia","adm0_a3":"MYS","geou_dif":0,"geounit":"Malaysia","gu_a3":"MYS","su_dif":0,"subunit":"Malaysia","su_a3":"MYS","brk_diff":0,"name":"Malaysia","name_long":"Malaysia","brk_a3":"MYS","brk_name":"Malaysia","brk_group":null,"abbrev":"Malay.","postal":"MY","formal_en":"Malaysia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Malaysia","name_alt":null,"mapcolor7":2,"mapcolor8":4,"mapcolor9":3,"mapcolor13":6,"pop_est":25715819,"gdp_md_est":384300,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"MY","iso_a3":"MYS","iso_n3":"458","un_a3":"458","wb_a2":"MY","wb_a3":"MYS","woe_id":-99,"adm0_a3_is":"MYS","adm0_a3_us":"MYS","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"South-Eastern Asia","region_wb":"East Asia & Pacific","name_len":8,"long_len":8,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[[1355]],[[1356]],[[1357]],[[-1064,1358]],[[1359]],[[1360]],[[1361,1362]],[[-1067,1363,-325,-324,1364]],[[1365]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Namibia","sov_a3":"NAM","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Namibia","adm0_a3":"NAM","geou_dif":0,"geounit":"Namibia","gu_a3":"NAM","su_dif":0,"subunit":"Namibia","su_a3":"NAM","brk_diff":0,"name":"Namibia","name_long":"Namibia","brk_a3":"NAM","brk_name":"Namibia","brk_group":null,"abbrev":"Nam.","postal":"NA","formal_en":"Republic of Namibia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Namibia","name_alt":null,"mapcolor7":4,"mapcolor8":1,"mapcolor9":1,"mapcolor13":7,"pop_est":2108665,"gdp_md_est":13250,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"NA","iso_a3":"NAM","iso_n3":"516","un_a3":"516","wb_a2":"NA","wb_a3":"NAM","woe_id":-99,"adm0_a3_is":"NAM","adm0_a3_us":"NAM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Southern Africa","region_wb":"Sub-Saharan Africa","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1366,-331,1367,1368,-10]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"France","sov_a3":"FR1","adm0_dif":1,"level":2,"type":"Dependency","admin":"New Caledonia","adm0_a3":"NCL","geou_dif":0,"geounit":"New Caledonia","gu_a3":"NCL","su_dif":0,"subunit":"New Caledonia","su_a3":"NCL","brk_diff":0,"name":"New Caledonia","name_long":"New Caledonia","brk_a3":"NCL","brk_name":"New Caledonia","brk_group":null,"abbrev":"New C.","postal":"NC","formal_en":"New Caledonia","formal_fr":"Nouvelle-Calédonie","note_adm0":"Fr.","note_brk":null,"name_sort":"New Caledonia","name_alt":null,"mapcolor7":7,"mapcolor8":5,"mapcolor9":9,"mapcolor13":11,"pop_est":227436,"gdp_md_est":3158,"pop_year":-99,"lastcensus":2009,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"NC","iso_a3":"NCL","iso_n3":"540","un_a3":"540","wb_a2":"NC","wb_a3":"NCL","woe_id":-99,"adm0_a3_is":"NCL","adm0_a3_us":"NCL","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Melanesia","region_wb":"East Asia & Pacific","name_len":13,"long_len":13,"abbrev_len":6,"tiny":-99,"homepart":-99},"arcs":[[[1369]],[[1370]],[[1371]],[[1372]],[[1373]],[[1374]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Niger","sov_a3":"NER","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Niger","adm0_a3":"NER","geou_dif":0,"geounit":"Niger","gu_a3":"NER","su_dif":0,"subunit":"Niger","su_a3":"NER","brk_diff":0,"name":"Niger","name_long":"Niger","brk_a3":"NER","brk_name":"Niger","brk_group":null,"abbrev":"Niger","postal":"NE","formal_en":"Republic of Niger","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Niger","name_alt":null,"mapcolor7":4,"mapcolor8":5,"mapcolor9":3,"mapcolor13":13,"pop_est":15306252,"gdp_md_est":10040,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"NE","iso_a3":"NER","iso_n3":"562","un_a3":"562","wb_a2":"NE","wb_a3":"NER","woe_id":-99,"adm0_a3_is":"NER","adm0_a3_us":"NER","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[1375,1376,-239,-240,-1304,-660,-1251]]},{"type":"Polygon","properties":{"scalerank":5,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Australia","sov_a3":"AU1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Norfolk Island","adm0_a3":"NFK","geou_dif":0,"geounit":"Norfolk Island","gu_a3":"NFK","su_dif":0,"subunit":"Norfolk Island","su_a3":"NFK","brk_diff":0,"name":"Norfolk Island","name_long":"Norfolk Island","brk_a3":"NFK","brk_name":"Norfolk Island","brk_group":null,"abbrev":"Nfk. I.","postal":"NF","formal_en":"Territory of Norfolk Island","formal_fr":null,"note_adm0":"Auz.","note_brk":null,"name_sort":"Norfolk Island","name_alt":null,"mapcolor7":1,"mapcolor8":2,"mapcolor9":2,"mapcolor13":7,"pop_est":2141,"gdp_md_est":32.115,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"NF","iso_a3":"NFK","iso_n3":"574","un_a3":"574","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"NFK","adm0_a3_us":"NFK","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Australia and New Zealand","region_wb":"East Asia & Pacific","name_len":14,"long_len":14,"abbrev_len":7,"tiny":-99,"homepart":-99},"arcs":[[1377]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Nigeria","sov_a3":"NGA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Nigeria","adm0_a3":"NGA","geou_dif":0,"geounit":"Nigeria","gu_a3":"NGA","su_dif":0,"subunit":"Nigeria","su_a3":"NGA","brk_diff":0,"name":"Nigeria","name_long":"Nigeria","brk_a3":"NGA","brk_name":"Nigeria","brk_group":null,"abbrev":"Nigeria","postal":"NG","formal_en":"Federal Republic of Nigeria","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Nigeria","name_alt":null,"mapcolor7":3,"mapcolor8":2,"mapcolor9":5,"mapcolor13":2,"pop_est":149229090,"gdp_md_est":335400,"pop_year":-99,"lastcensus":2006,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"NG","iso_a3":"NGA","iso_n3":"566","un_a3":"566","wb_a2":"NG","wb_a3":"NGA","woe_id":-99,"adm0_a3_is":"NGA","adm0_a3_us":"NGA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":7,"long_len":7,"abbrev_len":7,"tiny":-99,"homepart":1},"arcs":[[[1378]],[[1379,-575,1380,-235,-1377]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Nicaragua","sov_a3":"NIC","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Nicaragua","adm0_a3":"NIC","geou_dif":0,"geounit":"Nicaragua","gu_a3":"NIC","su_dif":0,"subunit":"Nicaragua","su_a3":"NIC","brk_diff":0,"name":"Nicaragua","name_long":"Nicaragua","brk_a3":"NIC","brk_name":"Nicaragua","brk_group":null,"abbrev":"Nic.","postal":"NI","formal_en":"Republic of Nicaragua","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Nicaragua","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":1,"mapcolor13":9,"pop_est":5891199,"gdp_md_est":16790,"pop_year":-99,"lastcensus":2005,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"NI","iso_a3":"NIC","iso_n3":"558","un_a3":"558","wb_a2":"NI","wb_a3":"NIC","woe_id":-99,"adm0_a3_is":"NIC","adm0_a3_us":"NIC","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Central America","region_wb":"Latin America & Caribbean","name_len":9,"long_len":9,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1381,-608,1382,-900]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"New Zealand","sov_a3":"NZ1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Niue","adm0_a3":"NIU","geou_dif":0,"geounit":"Niue","gu_a3":"NIU","su_dif":0,"subunit":"Niue","su_a3":"NIU","brk_diff":0,"name":"Niue","name_long":"Niue","brk_a3":"NIU","brk_name":"Niue","brk_group":null,"abbrev":"Niue","postal":"NU","formal_en":null,"formal_fr":null,"note_adm0":"Assoc. with N.Z.","note_brk":null,"name_sort":"Niue","name_alt":null,"mapcolor7":3,"mapcolor8":3,"mapcolor9":4,"mapcolor13":4,"pop_est":1398,"gdp_md_est":10.01,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"NU","iso_a3":"NIU","iso_n3":"570","un_a3":"570","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"NIU","adm0_a3_us":"NIU","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Polynesia","region_wb":"East Asia & Pacific","name_len":4,"long_len":4,"abbrev_len":4,"tiny":3,"homepart":-99},"arcs":[[1383]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Netherlands","sov_a3":"NL1","adm0_dif":1,"level":2,"type":"Country","admin":"Netherlands","adm0_a3":"NLD","geou_dif":0,"geounit":"Netherlands","gu_a3":"NLD","su_dif":0,"subunit":"Netherlands","su_a3":"NLD","brk_diff":0,"name":"Netherlands","name_long":"Netherlands","brk_a3":"NLD","brk_name":"Netherlands","brk_group":null,"abbrev":"Neth.","postal":"NL","formal_en":"Kingdom of the Netherlands","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Netherlands","name_alt":null,"mapcolor7":4,"mapcolor8":2,"mapcolor9":2,"mapcolor13":9,"pop_est":16715999,"gdp_md_est":672000,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"NL","iso_a3":"NLD","iso_n3":"528","un_a3":"528","wb_a2":"NL","wb_a3":"NLD","woe_id":-99,"adm0_a3_is":"NLD","adm0_a3_us":"NLD","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Western Europe","region_wb":"Europe & Central Asia","name_len":11,"long_len":11,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[1384]],[[1385]],[[-233,1386]],[[1387]],[[1388]],[[1389]],[[1390,-635,1391,-234]],[[1392]],[[1393]],[[1394]],[[1395]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Norway","sov_a3":"NOR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Norway","adm0_a3":"NOR","geou_dif":0,"geounit":"Norway","gu_a3":"NOR","su_dif":0,"subunit":"Norway","su_a3":"NOR","brk_diff":0,"name":"Norway","name_long":"Norway","brk_a3":"NOR","brk_name":"Norway","brk_group":null,"abbrev":"Nor.","postal":"N","formal_en":"Kingdom of Norway","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Norway","name_alt":null,"mapcolor7":5,"mapcolor8":3,"mapcolor9":8,"mapcolor13":12,"pop_est":4676305,"gdp_md_est":276400,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"NO","iso_a3":"NOR","iso_n3":"578","un_a3":"578","wb_a2":"NO","wb_a3":"NOR","woe_id":-99,"adm0_a3_is":"NOR","adm0_a3_us":"NOR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Northern Europe","region_wb":"Europe & Central Asia","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1396]],[[1397]],[[1398]],[[1399]],[[1400]],[[1401]],[[1402]],[[1403]],[[1404]],[[1405]],[[1406]],[[1407]],[[1408]],[[1409]],[[1410]],[[1411]],[[1412]],[[1413]],[[1414]],[[1415]],[[1416,-724,1417,1418]],[[1419]],[[1420]],[[1421]],[[1422]],[[1423]],[[1424]],[[1425]],[[1426]],[[1427]],[[1428]],[[1429]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Nepal","sov_a3":"NPL","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Nepal","adm0_a3":"NPL","geou_dif":0,"geounit":"Nepal","gu_a3":"NPL","su_dif":0,"subunit":"Nepal","su_a3":"NPL","brk_diff":0,"name":"Nepal","name_long":"Nepal","brk_a3":"NPL","brk_name":"Nepal","brk_group":null,"abbrev":"Nepal","postal":"NP","formal_en":"Nepal","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Nepal","name_alt":null,"mapcolor7":2,"mapcolor8":2,"mapcolor9":3,"mapcolor13":12,"pop_est":28563377,"gdp_md_est":31080,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"NP","iso_a3":"NPL","iso_n3":"524","un_a3":"524","wb_a2":"NP","wb_a3":"NPL","woe_id":-99,"adm0_a3_is":"NPL","adm0_a3_us":"NPL","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Southern Asia","region_wb":"South Asia","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[-1088,-543]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Nauru","sov_a3":"NRU","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Nauru","adm0_a3":"NRU","geou_dif":0,"geounit":"Nauru","gu_a3":"NRU","su_dif":0,"subunit":"Nauru","su_a3":"NRU","brk_diff":0,"name":"Nauru","name_long":"Nauru","brk_a3":"NRU","brk_name":"Nauru","brk_group":null,"abbrev":"Nauru","postal":"NR","formal_en":"Republic of Nauru","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Nauru","name_alt":null,"mapcolor7":3,"mapcolor8":7,"mapcolor9":6,"mapcolor13":9,"pop_est":14019,"gdp_md_est":60,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"NR","iso_a3":"NRU","iso_n3":"520","un_a3":"520","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"NRU","adm0_a3_us":"NRU","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Micronesia","region_wb":"East Asia & Pacific","name_len":5,"long_len":5,"abbrev_len":5,"tiny":3,"homepart":1},"arcs":[[1430]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"New Zealand","sov_a3":"NZ1","adm0_dif":1,"level":2,"type":"Country","admin":"New Zealand","adm0_a3":"NZL","geou_dif":0,"geounit":"New Zealand","gu_a3":"NZL","su_dif":0,"subunit":"New Zealand","su_a3":"NZL","brk_diff":0,"name":"New Zealand","name_long":"New Zealand","brk_a3":"NZL","brk_name":"New Zealand","brk_group":null,"abbrev":"N.Z.","postal":"NZ","formal_en":"New Zealand","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"New Zealand","name_alt":null,"mapcolor7":3,"mapcolor8":3,"mapcolor9":4,"mapcolor13":4,"pop_est":4213418,"gdp_md_est":116700,"pop_year":-99,"lastcensus":2006,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"NZ","iso_a3":"NZL","iso_n3":"554","un_a3":"554","wb_a2":"NZ","wb_a3":"NZL","woe_id":-99,"adm0_a3_is":"NZL","adm0_a3_us":"NZL","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Australia and New Zealand","region_wb":"East Asia & Pacific","name_len":11,"long_len":11,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1431]],[[1432]],[[1433]],[[1434]],[[1435]],[[1436]],[[1437]],[[1438]],[[1439]],[[1440]],[[1441]],[[1442]],[[1443]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Oman","sov_a3":"OMN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Oman","adm0_a3":"OMN","geou_dif":0,"geounit":"Oman","gu_a3":"OMN","su_dif":0,"subunit":"Oman","su_a3":"OMN","brk_diff":0,"name":"Oman","name_long":"Oman","brk_a3":"OMN","brk_name":"Oman","brk_group":null,"abbrev":"Oman","postal":"OM","formal_en":"Sultanate of Oman","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Oman","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":1,"mapcolor13":6,"pop_est":3418085,"gdp_md_est":66980,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"OM","iso_a3":"OMN","iso_n3":"512","un_a3":"512","wb_a2":"OM","wb_a3":"OMN","woe_id":-99,"adm0_a3_is":"OMN","adm0_a3_us":"OMN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Middle East & North Africa","name_len":4,"long_len":4,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1444]],[[1445,1446,1447,-32]],[[-36]],[[-35,1448]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Pakistan","sov_a3":"PAK","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Pakistan","adm0_a3":"PAK","geou_dif":0,"geounit":"Pakistan","gu_a3":"PAK","su_dif":0,"subunit":"Pakistan","su_a3":"PAK","brk_diff":0,"name":"Pakistan","name_long":"Pakistan","brk_a3":"PAK","brk_name":"Pakistan","brk_group":null,"abbrev":"Pak.","postal":"PK","formal_en":"Islamic Republic of Pakistan","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Pakistan","name_alt":null,"mapcolor7":2,"mapcolor8":2,"mapcolor9":3,"mapcolor13":11,"pop_est":176242949,"gdp_md_est":427300,"pop_year":-99,"lastcensus":1998,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"PK","iso_a3":"PAK","iso_n3":"586","un_a3":"586","wb_a2":"PK","wb_a3":"PAK","woe_id":-99,"adm0_a3_is":"PAK","adm0_a3_us":"PAK","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Southern Asia","region_wb":"South Asia","name_len":8,"long_len":8,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-1175,-1091,1449,-1106,-3,-557]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Panama","sov_a3":"PAN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Panama","adm0_a3":"PAN","geou_dif":0,"geounit":"Panama","gu_a3":"PAN","su_dif":0,"subunit":"Panama","su_a3":"PAN","brk_diff":0,"name":"Panama","name_long":"Panama","brk_a3":"PAN","brk_name":"Panama","brk_group":null,"abbrev":"Pan.","postal":"PA","formal_en":"Republic of Panama","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Panama","name_alt":null,"mapcolor7":4,"mapcolor8":4,"mapcolor9":6,"mapcolor13":3,"pop_est":3360474,"gdp_md_est":38830,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"PA","iso_a3":"PAN","iso_n3":"591","un_a3":"591","wb_a2":"PA","wb_a3":"PAN","woe_id":-99,"adm0_a3_is":"PAN","adm0_a3_us":"PAN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Central America","region_wb":"Latin America & Caribbean","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1450]],[[1451]],[[1452]],[[1453]],[[-592,1454,-606,1455]]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"United Kingdom","sov_a3":"GB1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Pitcairn Islands","adm0_a3":"PCN","geou_dif":0,"geounit":"Pitcairn Islands","gu_a3":"PCN","su_dif":0,"subunit":"Pitcairn Islands","su_a3":"PCN","brk_diff":0,"name":"Pitcairn Is.","name_long":"Pitcairn Islands","brk_a3":"PCN","brk_name":"Pitcairn Is.","brk_group":null,"abbrev":"Pit. Is.","postal":"PN","formal_en":"Pitcairn, Henderson, Ducie and Oeno Islands","formal_fr":null,"note_adm0":"U.K.","note_brk":null,"name_sort":"Pitcairn Islands","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":3,"pop_est":48,"gdp_md_est":0.72,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"PN","iso_a3":"PCN","iso_n3":"612","un_a3":"612","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"PCN","adm0_a3_us":"PCN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Polynesia","region_wb":"East Asia & Pacific","name_len":12,"long_len":16,"abbrev_len":8,"tiny":-99,"homepart":-99},"arcs":[[1456]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Peru","sov_a3":"PER","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Peru","adm0_a3":"PER","geou_dif":0,"geounit":"Peru","gu_a3":"PER","su_dif":0,"subunit":"Peru","su_a3":"PER","brk_diff":0,"name":"Peru","name_long":"Peru","brk_a3":"PER","brk_name":"Peru","brk_group":null,"abbrev":"Peru","postal":"PE","formal_en":"Republic of Peru","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Peru","name_alt":null,"mapcolor7":4,"mapcolor8":4,"mapcolor9":4,"mapcolor13":11,"pop_est":29546963,"gdp_md_est":247300,"pop_year":-99,"lastcensus":2007,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"PE","iso_a3":"PER","iso_n3":"604","un_a3":"604","wb_a2":"PE","wb_a3":"PER","woe_id":-99,"adm0_a3_is":"PER","adm0_a3_us":"PER","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"South America","region_un":"Americas","subregion":"South America","region_wb":"Latin America & Caribbean","name_len":4,"long_len":4,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-318,-295,-519,1457,-674,-589]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Philippines","sov_a3":"PHL","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Philippines","adm0_a3":"PHL","geou_dif":0,"geounit":"Philippines","gu_a3":"PHL","su_dif":0,"subunit":"Philippines","su_a3":"PHL","brk_diff":0,"name":"Philippines","name_long":"Philippines","brk_a3":"PHL","brk_name":"Philippines","brk_group":null,"abbrev":"Phil.","postal":"PH","formal_en":"Republic of the Philippines","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Philippines","name_alt":null,"mapcolor7":3,"mapcolor8":2,"mapcolor9":2,"mapcolor13":8,"pop_est":97976603,"gdp_md_est":317500,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"PH","iso_a3":"PHL","iso_n3":"608","un_a3":"608","wb_a2":"PH","wb_a3":"PHL","woe_id":-99,"adm0_a3_is":"PHL","adm0_a3_us":"PHL","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"South-Eastern Asia","region_wb":"East Asia & Pacific","name_len":11,"long_len":11,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[1458]],[[1459]],[[1460]],[[1461]],[[1462]],[[1463]],[[1464]],[[1465]],[[1466]],[[1467]],[[1468]],[[1469]],[[1470]],[[1471]],[[1472]],[[1473]],[[1474]],[[1475]],[[1476]],[[1477]],[[1478]],[[1479]],[[1480]],[[1481]],[[1482]],[[1483]],[[1484]],[[1485]],[[1486]],[[1487]],[[1488]],[[1489]],[[1490]],[[1491]],[[1492]],[[1493]],[[1494]],[[1495]],[[1496]],[[1497]],[[1498]],[[1499]],[[1500]],[[1501]],[[1502]],[[1503]],[[1504]],[[1505]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Palau","sov_a3":"PLW","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Palau","adm0_a3":"PLW","geou_dif":0,"geounit":"Palau","gu_a3":"PLW","su_dif":0,"subunit":"Palau","su_a3":"PLW","brk_diff":0,"name":"Palau","name_long":"Palau","brk_a3":"PLW","brk_name":"Palau","brk_group":null,"abbrev":"Palau","postal":"PW","formal_en":"Republic of Palau","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Palau","name_alt":null,"mapcolor7":2,"mapcolor8":5,"mapcolor9":1,"mapcolor13":12,"pop_est":20796,"gdp_md_est":164,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"PW","iso_a3":"PLW","iso_n3":"585","un_a3":"585","wb_a2":"PW","wb_a3":"PLW","woe_id":-99,"adm0_a3_is":"PLW","adm0_a3_us":"PLW","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Micronesia","region_wb":"East Asia & Pacific","name_len":5,"long_len":5,"abbrev_len":5,"tiny":2,"homepart":1},"arcs":[[[1506]],[[1507]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Papua New Guinea","sov_a3":"PNG","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Papua New Guinea","adm0_a3":"PNG","geou_dif":0,"geounit":"Papua New Guinea","gu_a3":"PNG","su_dif":1,"subunit":"Papua New Guinea","su_a3":"PN1","brk_diff":0,"name":"Papua New Guinea","name_long":"Papua New Guinea","brk_a3":"PN1","brk_name":"Papua New Guinea","brk_group":null,"abbrev":"P.N.G.","postal":"PG","formal_en":"Independent State of Papua New Guinea","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Papua New Guinea","name_alt":null,"mapcolor7":4,"mapcolor8":2,"mapcolor9":3,"mapcolor13":1,"pop_est":6057263,"gdp_md_est":13210,"pop_year":-99,"lastcensus":2000,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"PG","iso_a3":"PNG","iso_n3":"598","un_a3":"598","wb_a2":"PG","wb_a3":"PNG","woe_id":-99,"adm0_a3_is":"PNG","adm0_a3_us":"PNG","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Melanesia","region_wb":"East Asia & Pacific","name_len":16,"long_len":16,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[[1508]],[[1509]],[[1510]],[[1511]],[[1512]],[[1513]],[[1514]],[[1515]],[[1516]],[[1517]],[[1518]],[[1519]],[[1520]],[[1521]],[[1522]],[[1523]],[[1524]],[[1525]],[[1526]],[[1527]],[[-1023,1528,1529]],[[1530]],[[1531]],[[1532]],[[1533]],[[1534]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Poland","sov_a3":"POL","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Poland","adm0_a3":"POL","geou_dif":0,"geounit":"Poland","gu_a3":"POL","su_dif":0,"subunit":"Poland","su_a3":"POL","brk_diff":0,"name":"Poland","name_long":"Poland","brk_a3":"POL","brk_name":"Poland","brk_group":null,"abbrev":"Pol.","postal":"PL","formal_en":"Republic of Poland","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Poland","name_alt":null,"mapcolor7":3,"mapcolor8":7,"mapcolor9":1,"mapcolor13":2,"pop_est":38482919,"gdp_md_est":667900,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"PL","iso_a3":"POL","iso_n3":"616","un_a3":"616","wb_a2":"PL","wb_a3":"POL","woe_id":-99,"adm0_a3_is":"POL","adm0_a3_us":"POL","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Eastern Europe","region_wb":"Europe & Central Asia","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1535,-1261,-284,1536,1537,-623,-632,1538,-627,1539]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"United States of America","sov_a3":"US1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Puerto Rico","adm0_a3":"PRI","geou_dif":0,"geounit":"Puerto Rico","gu_a3":"PRI","su_dif":0,"subunit":"Puerto Rico","su_a3":"PRI","brk_diff":0,"name":"Puerto Rico","name_long":"Puerto Rico","brk_a3":"PRI","brk_name":"Puerto Rico","brk_group":null,"abbrev":"P.R.","postal":"PR","formal_en":"Commonwealth of Puerto Rico","formal_fr":null,"note_adm0":"Commonwealth of U.S.A.","note_brk":null,"name_sort":"Puerto Rico","name_alt":null,"mapcolor7":4,"mapcolor8":5,"mapcolor9":1,"mapcolor13":1,"pop_est":3971020,"gdp_md_est":70230,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"PR","iso_a3":"PRI","iso_n3":"630","un_a3":"630","wb_a2":"PR","wb_a3":"PRI","woe_id":-99,"adm0_a3_is":"PRI","adm0_a3_us":"PRI","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":11,"long_len":11,"abbrev_len":4,"tiny":-99,"homepart":-99},"arcs":[[[1540]],[[1541]],[[1542]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"North Korea","sov_a3":"PRK","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"North Korea","adm0_a3":"PRK","geou_dif":0,"geounit":"North Korea","gu_a3":"PRK","su_dif":0,"subunit":"North Korea","su_a3":"PRK","brk_diff":0,"name":"Dem. Rep. Korea","name_long":"Dem. Rep. Korea","brk_a3":"PRK","brk_name":"Dem. Rep. Korea","brk_group":null,"abbrev":"N.K.","postal":"KP","formal_en":"Democratic People's Republic of Korea","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Korea, Dem. Rep.","name_alt":null,"mapcolor7":3,"mapcolor8":5,"mapcolor9":3,"mapcolor13":9,"pop_est":22665345,"gdp_md_est":40000,"pop_year":-99,"lastcensus":2009,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"KP","iso_a3":"PRK","iso_n3":"408","un_a3":"408","wb_a2":"KP","wb_a3":"PRK","woe_id":-99,"adm0_a3_is":"PRK","adm0_a3_us":"PRK","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Eastern Asia","region_wb":"East Asia & Pacific","name_len":15,"long_len":15,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1543]],[[1544,1545,-1233,1546,-532]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Portugal","sov_a3":"PRT","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Portugal","adm0_a3":"PRT","geou_dif":0,"geounit":"Portugal","gu_a3":"PRT","su_dif":1,"subunit":"Portugal","su_a3":"PR1","brk_diff":0,"name":"Portugal","name_long":"Portugal","brk_a3":"PR1","brk_name":"Portugal","brk_group":null,"abbrev":"Port.","postal":"P","formal_en":"Portuguese Republic","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Portugal","name_alt":null,"mapcolor7":1,"mapcolor8":7,"mapcolor9":1,"mapcolor13":4,"pop_est":10707924,"gdp_md_est":208627,"pop_year":-99,"lastcensus":2011,"gdp_year":0,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"PT","iso_a3":"PRT","iso_n3":"620","un_a3":"620","wb_a2":"PT","wb_a3":"PRT","woe_id":-99,"adm0_a3_is":"PRT","adm0_a3_us":"PRT","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Southern Europe","region_wb":"Europe & Central Asia","name_len":8,"long_len":8,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[1547]],[[1548]],[[1549]],[[1550]],[[1551]],[[1552]],[[1553]],[[1554]],[[1555,-701]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Paraguay","sov_a3":"PRY","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Paraguay","adm0_a3":"PRY","geou_dif":0,"geounit":"Paraguay","gu_a3":"PRY","su_dif":0,"subunit":"Paraguay","su_a3":"PRY","brk_diff":0,"name":"Paraguay","name_long":"Paraguay","brk_a3":"PRY","brk_name":"Paraguay","brk_group":null,"abbrev":"Para.","postal":"PY","formal_en":"Republic of Paraguay","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Paraguay","name_alt":null,"mapcolor7":6,"mapcolor8":3,"mapcolor9":6,"mapcolor13":2,"pop_est":6995655,"gdp_md_est":28890,"pop_year":-99,"lastcensus":2002,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"PY","iso_a3":"PRY","iso_n3":"600","un_a3":"600","wb_a2":"PY","wb_a3":"PRY","woe_id":-99,"adm0_a3_is":"PRY","adm0_a3_us":"PRY","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"South America","region_un":"Americas","subregion":"South America","region_wb":"Latin America & Caribbean","name_len":8,"long_len":8,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[-317,-41,-293]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Israel","sov_a3":"ISR","adm0_dif":1,"level":2,"type":"Disputed","admin":"Palestine","adm0_a3":"PSX","geou_dif":0,"geounit":"Palestine","gu_a3":"PSX","su_dif":0,"subunit":"Palestine","su_a3":"PSX","brk_diff":0,"name":"Palestine","name_long":"Palestine","brk_a3":"PSX","brk_name":"Palestine","brk_group":null,"abbrev":"Pal.","postal":"PAL","formal_en":"West Bank and Gaza","formal_fr":null,"note_adm0":"Partial self-admin.","note_brk":"Partial self-admin.","name_sort":"Palestine (West Bank and Gaza)","name_alt":null,"mapcolor7":3,"mapcolor8":2,"mapcolor9":5,"mapcolor13":8,"pop_est":4119083,"gdp_md_est":11950.77,"pop_year":-99,"lastcensus":2007,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"PS","iso_a3":"PSE","iso_n3":"275","un_a3":"275","wb_a2":"GZ","wb_a3":"WBG","woe_id":-99,"adm0_a3_is":"PSE","adm0_a3_us":"PSX","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Middle East & North Africa","name_len":9,"long_len":9,"abbrev_len":4,"tiny":-99,"homepart":-99},"arcs":[[[-676,1556,-1121]],[[-1118,-1139]]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"France","sov_a3":"FR1","adm0_dif":1,"level":2,"type":"Dependency","admin":"French Polynesia","adm0_a3":"PYF","geou_dif":0,"geounit":"French Polynesia","gu_a3":"PYF","su_dif":0,"subunit":"French Polynesia","su_a3":"PYF","brk_diff":0,"name":"Fr. Polynesia","name_long":"French Polynesia","brk_a3":"PYF","brk_name":"Fr. Polynesia","brk_group":null,"abbrev":"Fr. Poly.","postal":"PF","formal_en":"French Polynesia","formal_fr":null,"note_adm0":"Fr.","note_brk":null,"name_sort":"French Polynesia","name_alt":null,"mapcolor7":7,"mapcolor8":5,"mapcolor9":9,"mapcolor13":11,"pop_est":287032,"gdp_md_est":4718,"pop_year":-99,"lastcensus":2007,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"PF","iso_a3":"PYF","iso_n3":"258","un_a3":"258","wb_a2":"PF","wb_a3":"PYF","woe_id":-99,"adm0_a3_is":"PYF","adm0_a3_us":"PYF","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Polynesia","region_wb":"East Asia & Pacific","name_len":13,"long_len":16,"abbrev_len":9,"tiny":2,"homepart":-99},"arcs":[[[1557]],[[1558]],[[1559]],[[1560]],[[1561]],[[1562]],[[1563]],[[1564]],[[1565]],[[1566]],[[1567]],[[1568]],[[1569]],[[1570]],[[1571]],[[1572]],[[1573]],[[1574]],[[1575]],[[1576]],[[1577]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Qatar","sov_a3":"QAT","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Qatar","adm0_a3":"QAT","geou_dif":0,"geounit":"Qatar","gu_a3":"QAT","su_dif":0,"subunit":"Qatar","su_a3":"QAT","brk_diff":0,"name":"Qatar","name_long":"Qatar","brk_a3":"QAT","brk_name":"Qatar","brk_group":null,"abbrev":"Qatar","postal":"QA","formal_en":"State of Qatar","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Qatar","name_alt":null,"mapcolor7":3,"mapcolor8":6,"mapcolor9":2,"mapcolor13":4,"pop_est":833285,"gdp_md_est":91330,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"QA","iso_a3":"QAT","iso_n3":"634","un_a3":"634","wb_a2":"QA","wb_a3":"QAT","woe_id":-99,"adm0_a3_is":"QAT","adm0_a3_us":"QAT","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Middle East & North Africa","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[1578,1579]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Romania","sov_a3":"ROU","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Romania","adm0_a3":"ROU","geou_dif":0,"geounit":"Romania","gu_a3":"ROU","su_dif":0,"subunit":"Romania","su_a3":"ROU","brk_diff":0,"name":"Romania","name_long":"Romania","brk_a3":"ROU","brk_name":"Romania","brk_group":null,"abbrev":"Rom.","postal":"RO","formal_en":"Romania","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Romania","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":3,"mapcolor13":13,"pop_est":22215421,"gdp_md_est":271400,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"RO","iso_a3":"ROU","iso_n3":"642","un_a3":"642","wb_a2":"RO","wb_a3":"ROM","woe_id":-99,"adm0_a3_is":"ROU","adm0_a3_us":"ROU","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Eastern Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1580,1581,-259,1582,-927,1583,-1273]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Russia","sov_a3":"RUS","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Russia","adm0_a3":"RUS","geou_dif":0,"geounit":"Russia","gu_a3":"RUS","su_dif":0,"subunit":"Russia","su_a3":"RUS","brk_diff":0,"name":"Russia","name_long":"Russian Federation","brk_a3":"RUS","brk_name":"Russia","brk_group":null,"abbrev":"Rus.","postal":"RUS","formal_en":"Russian Federation","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Russian Federation","name_alt":null,"mapcolor7":2,"mapcolor8":5,"mapcolor9":7,"mapcolor13":7,"pop_est":140041247,"gdp_md_est":2266000,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"3. Emerging region: BRIC","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"RU","iso_a3":"RUS","iso_n3":"643","un_a3":"643","wb_a2":"RU","wb_a3":"RUS","woe_id":-99,"adm0_a3_is":"RUS","adm0_a3_us":"RUS","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Eastern Europe","region_wb":"Europe & Central Asia","name_len":6,"long_len":18,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1584]],[[1585]],[[1586]],[[1587]],[[1588]],[[1589]],[[1590]],[[1591]],[[1592]],[[1593]],[[1594]],[[1595]],[[1596]],[[1597]],[[1598]],[[1599]],[[1600]],[[1601]],[[1602]],[[-1262,-1536,1603,-1259,1604]],[[1605]],[[1606]],[[1607]],[[1608]],[[1609]],[[1610]],[[1611]],[[1612]],[[1613]],[[1614]],[[1615]],[[1616]],[[1617]],[[1618]],[[1619]],[[1620]],[[1621]],[[1622]],[[1623]],[[1624]],[[1625]],[[1626]],[[1627]],[[1628]],[[1629]],[[1630]],[[1631]],[[1632]],[[1633]],[[1634]],[[1635]],[[1636]],[[1637]],[[1638]],[[1639]],[[1640]],[[1641]],[[1642]],[[1643]],[[1644]],[[1645]],[[1646]],[[1647]],[[1648]],[[1649]],[[1650]],[[1651]],[[-1545,-563,-1331,-561,-1183,1652,-224,-804,1653,1654,-282,-1265,-706,1655,-721,-1417,1656]],[[1657]],[[1658]],[[1659]],[[1660]],[[1661]],[[1662]],[[1663]],[[1664]],[[1665]],[[1666]],[[1667]],[[1668]],[[1669]],[[1670]],[[1671]],[[1672]],[[1673]],[[1674]],[[1675]],[[1676]],[[1677]],[[1678]],[[1679]],[[1680]],[[1681]],[[1682]],[[1683]],[[1684]],[[1685]],[[1686]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Rwanda","sov_a3":"RWA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Rwanda","adm0_a3":"RWA","geou_dif":0,"geounit":"Rwanda","gu_a3":"RWA","su_dif":0,"subunit":"Rwanda","su_a3":"RWA","brk_diff":0,"name":"Rwanda","name_long":"Rwanda","brk_a3":"RWA","brk_name":"Rwanda","brk_group":null,"abbrev":"Rwa.","postal":"RW","formal_en":"Republic of Rwanda","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Rwanda","name_alt":null,"mapcolor7":5,"mapcolor8":2,"mapcolor9":3,"mapcolor13":10,"pop_est":10473282,"gdp_md_est":9706,"pop_year":-99,"lastcensus":2002,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"RW","iso_a3":"RWA","iso_n3":"646","un_a3":"646","wb_a2":"RW","wb_a3":"RWA","woe_id":-99,"adm0_a3_is":"RWA","adm0_a3_us":"RWA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1687,-227,-579,1688]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":7,"sovereignt":"Western Sahara","sov_a3":"SAH","adm0_dif":0,"level":2,"type":"Indeterminate","admin":"Western Sahara","adm0_a3":"SAH","geou_dif":0,"geounit":"Western Sahara","gu_a3":"SAH","su_dif":0,"subunit":"Western Sahara","su_a3":"SAH","brk_diff":1,"name":"W. Sahara","name_long":"Western Sahara","brk_a3":"B28","brk_name":"W. Sahara","brk_group":null,"abbrev":"W. Sah.","postal":"WS","formal_en":"Sahrawi Arab Democratic Republic","formal_fr":null,"note_adm0":"Self admin.","note_brk":"Self admin.; Claimed by Morocco","name_sort":"Western Sahara","name_alt":null,"mapcolor7":4,"mapcolor8":7,"mapcolor9":4,"mapcolor13":4,"pop_est":-99,"gdp_md_est":-99,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"EH","iso_a3":"ESH","iso_n3":"732","un_a3":"732","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"MAR","adm0_a3_us":"SAH","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Northern Africa","region_wb":"Middle East & North Africa","name_len":9,"long_len":14,"abbrev_len":7,"tiny":-99,"homepart":1},"arcs":[[-1351,1689,-1270,-663]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Saudi Arabia","sov_a3":"SAU","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Saudi Arabia","adm0_a3":"SAU","geou_dif":0,"geounit":"Saudi Arabia","gu_a3":"SAU","su_dif":0,"subunit":"Saudi Arabia","su_a3":"SAU","brk_diff":0,"name":"Saudi Arabia","name_long":"Saudi Arabia","brk_a3":"SAU","brk_name":"Saudi Arabia","brk_group":null,"abbrev":"Saud.","postal":"SA","formal_en":"Kingdom of Saudi Arabia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Saudi Arabia","name_alt":null,"mapcolor7":6,"mapcolor8":1,"mapcolor9":6,"mapcolor13":7,"pop_est":28686633,"gdp_md_est":576500,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"SA","iso_a3":"SAU","iso_n3":"682","un_a3":"682","wb_a2":"SA","wb_a3":"SAU","woe_id":-99,"adm0_a3_is":"SAU","adm0_a3_us":"SAU","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Middle East & North Africa","name_len":12,"long_len":12,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[1690]],[[1691]],[[1692]],[[-1238,1693,-1579,1694,-33,-1448,1695,1696,-1137,-1112]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Sudan","sov_a3":"SDN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Sudan","adm0_a3":"SDN","geou_dif":0,"geounit":"Sudan","gu_a3":"SDN","su_dif":0,"subunit":"Sudan","su_a3":"SDN","brk_diff":0,"name":"Sudan","name_long":"Sudan","brk_a3":"SDN","brk_name":"Sudan","brk_group":null,"abbrev":"Sudan","postal":"SD","formal_en":"Republic of the Sudan","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Sudan","name_alt":null,"mapcolor7":2,"mapcolor8":6,"mapcolor9":4,"mapcolor13":1,"pop_est":25946220,"gdp_md_est":88080,"pop_year":-99,"lastcensus":2008,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"SD","iso_a3":"SDN","iso_n3":"729","un_a3":"729","wb_a2":"SD","wb_a3":"SDN","woe_id":-99,"adm0_a3_is":"SDN","adm0_a3_us":"SDN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Northern Africa","region_wb":"Sub-Saharan Africa","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[1697,-686,-713,1698,-332,1699,-1249,-679]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"South Sudan","sov_a3":"SDS","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"South Sudan","adm0_a3":"SDS","geou_dif":0,"geounit":"South Sudan","gu_a3":"SDS","su_dif":0,"subunit":"South Sudan","su_a3":"SDS","brk_diff":0,"name":"S. Sudan","name_long":"South Sudan","brk_a3":"SDS","brk_name":"S. Sudan","brk_group":null,"abbrev":"S. Sud.","postal":"SS","formal_en":"Republic of South Sudan","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"South Sudan","name_alt":null,"mapcolor7":1,"mapcolor8":3,"mapcolor9":3,"mapcolor13":5,"pop_est":10625176,"gdp_md_est":13227,"pop_year":-99,"lastcensus":2008,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"SS","iso_a3":"SSD","iso_n3":"728","un_a3":"728","wb_a2":"SS","wb_a3":"SSD","woe_id":-99,"adm0_a3_is":"SSD","adm0_a3_us":"SDS","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":8,"long_len":11,"abbrev_len":7,"tiny":-99,"homepart":1},"arcs":[[-712,-1189,1700,-577,-333,-1699]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Senegal","sov_a3":"SEN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Senegal","adm0_a3":"SEN","geou_dif":0,"geounit":"Senegal","gu_a3":"SEN","su_dif":0,"subunit":"Senegal","su_a3":"SEN","brk_diff":0,"name":"Senegal","name_long":"Senegal","brk_a3":"SEN","brk_name":"Senegal","brk_group":null,"abbrev":"Sen.","postal":"SN","formal_en":"Republic of Senegal","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Senegal","name_alt":null,"mapcolor7":2,"mapcolor8":6,"mapcolor9":5,"mapcolor13":5,"pop_est":13711597,"gdp_md_est":21980,"pop_year":-99,"lastcensus":2002,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"SN","iso_a3":"SEN","iso_n3":"686","un_a3":"686","wb_a2":"SN","wb_a3":"SEN","woe_id":-99,"adm0_a3_is":"SEN","adm0_a3_us":"SEN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-1305,-814,-824,1701,-816,1702,-1349]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Singapore","sov_a3":"SGP","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Singapore","adm0_a3":"SGP","geou_dif":0,"geounit":"Singapore","gu_a3":"SGP","su_dif":0,"subunit":"Singapore","su_a3":"SGP","brk_diff":0,"name":"Singapore","name_long":"Singapore","brk_a3":"SGP","brk_name":"Singapore","brk_group":null,"abbrev":"Sing.","postal":"SG","formal_en":"Republic of Singapore","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Singapore","name_alt":null,"mapcolor7":5,"mapcolor8":3,"mapcolor9":7,"mapcolor13":3,"pop_est":4657542,"gdp_md_est":237300,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"SG","iso_a3":"SGP","iso_n3":"702","un_a3":"702","wb_a2":"SG","wb_a3":"SGP","woe_id":-99,"adm0_a3_is":"SGP","adm0_a3_us":"SGP","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"South-Eastern Asia","region_wb":"East Asia & Pacific","name_len":9,"long_len":9,"abbrev_len":5,"tiny":3,"homepart":1},"arcs":[[1703]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"United Kingdom","sov_a3":"GB1","adm0_dif":1,"level":2,"type":"Dependency","admin":"South Georgia and South Sandwich Islands","adm0_a3":"SGS","geou_dif":0,"geounit":"South Georgia and South Sandwich Islands","gu_a3":"SGS","su_dif":0,"subunit":"South Georgia and South Sandwich Islands","su_a3":"SGS","brk_diff":0,"name":"S. Geo. and S. Sandw. Is.","name_long":"South Georgia and South Sandwich Islands","brk_a3":"SGS","brk_name":"S. Geo. and S. Sandw. Is.","brk_group":null,"abbrev":"S.G. S.S. Is.","postal":"GS","formal_en":"South Georgia and South Sandwich Islands","formal_fr":null,"note_adm0":"U.K.","note_brk":null,"name_sort":"South Georgia and the Islands","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":3,"pop_est":30,"gdp_md_est":0.3,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"GS","iso_a3":"SGS","iso_n3":"239","un_a3":"-099","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"SGS","adm0_a3_us":"SGS","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Seven seas (open ocean)","region_un":"Seven seas (open ocean)","subregion":"Seven seas (open ocean)","region_wb":"Antarctica","name_len":25,"long_len":40,"abbrev_len":13,"tiny":3,"homepart":-99},"arcs":[[[1704]],[[1705]]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"United Kingdom","sov_a3":"GB1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Saint Helena","adm0_a3":"SHN","geou_dif":0,"geounit":"Saint Helena","gu_a3":"SHN","su_dif":0,"subunit":"Saint Helena","su_a3":"SHN","brk_diff":0,"name":"Saint Helena","name_long":"Saint Helena","brk_a3":"SHN","brk_name":"Saint Helena","brk_group":null,"abbrev":"St.H.","postal":"SH","formal_en":null,"formal_fr":null,"note_adm0":"U.K.","note_brk":null,"name_sort":"St. Helena","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":3,"pop_est":7637,"gdp_md_est":18,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"SH","iso_a3":"SHN","iso_n3":"654","un_a3":"654","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"SHN","adm0_a3_us":"SHN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Seven seas (open ocean)","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":12,"long_len":12,"abbrev_len":5,"tiny":-99,"homepart":-99},"arcs":[[[1706]],[[1707]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Solomon Islands","sov_a3":"SLB","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Solomon Islands","adm0_a3":"SLB","geou_dif":0,"geounit":"Solomon Islands","gu_a3":"SLB","su_dif":0,"subunit":"Solomon Islands","su_a3":"SLB","brk_diff":0,"name":"Solomon Is.","name_long":"Solomon Islands","brk_a3":"SLB","brk_name":"Solomon Is.","brk_group":null,"abbrev":"S. Is.","postal":"SB","formal_en":null,"formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Solomon Islands","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":1,"mapcolor13":6,"pop_est":595613,"gdp_md_est":1078,"pop_year":-99,"lastcensus":2009,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"SB","iso_a3":"SLB","iso_n3":"090","un_a3":"090","wb_a2":"SB","wb_a3":"SLB","woe_id":-99,"adm0_a3_is":"SLB","adm0_a3_us":"SLB","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Melanesia","region_wb":"East Asia & Pacific","name_len":11,"long_len":15,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[[1708]],[[1709]],[[1710]],[[1711]],[[1712]],[[1713]],[[1714]],[[1715]],[[1716]],[[1717]],[[1718]],[[1719]],[[1720]],[[1721]],[[1722]],[[1723]],[[1724]],[[1725]],[[1726]],[[1727]],[[1728]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Sierra Leone","sov_a3":"SLE","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Sierra Leone","adm0_a3":"SLE","geou_dif":0,"geounit":"Sierra Leone","gu_a3":"SLE","su_dif":0,"subunit":"Sierra Leone","su_a3":"SLE","brk_diff":0,"name":"Sierra Leone","name_long":"Sierra Leone","brk_a3":"SLE","brk_name":"Sierra Leone","brk_group":null,"abbrev":"S.L.","postal":"SL","formal_en":"Republic of Sierra Leone","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Sierra Leone","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":1,"mapcolor13":7,"pop_est":6440053,"gdp_md_est":4285,"pop_year":-99,"lastcensus":2004,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"SL","iso_a3":"SLE","iso_n3":"694","un_a3":"694","wb_a2":"SL","wb_a3":"SLE","woe_id":-99,"adm0_a3_is":"SLE","adm0_a3_us":"SLE","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":12,"long_len":12,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1729]],[[-1248,1730,-811]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"El Salvador","sov_a3":"SLV","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"El Salvador","adm0_a3":"SLV","geou_dif":0,"geounit":"El Salvador","gu_a3":"SLV","su_dif":0,"subunit":"El Salvador","su_a3":"SLV","brk_diff":0,"name":"El Salvador","name_long":"El Salvador","brk_a3":"SLV","brk_name":"El Salvador","brk_group":null,"abbrev":"El. S.","postal":"SV","formal_en":"Republic of El Salvador","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"El Salvador","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":6,"mapcolor13":8,"pop_est":7185218,"gdp_md_est":43630,"pop_year":-99,"lastcensus":2007,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"SV","iso_a3":"SLV","iso_n3":"222","un_a3":"222","wb_a2":"SV","wb_a3":"SLV","woe_id":-99,"adm0_a3_is":"SLV","adm0_a3_us":"SLV","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Central America","region_wb":"Latin America & Caribbean","name_len":11,"long_len":11,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[-902,1731,-889]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"San Marino","sov_a3":"SMR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"San Marino","adm0_a3":"SMR","geou_dif":0,"geounit":"San Marino","gu_a3":"SMR","su_dif":0,"subunit":"San Marino","su_a3":"SMR","brk_diff":0,"name":"San Marino","name_long":"San Marino","brk_a3":"SMR","brk_name":"San Marino","brk_group":null,"abbrev":"S.M.","postal":"RSM","formal_en":"Republic of San Marino","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"San Marino","name_alt":null,"mapcolor7":2,"mapcolor8":3,"mapcolor9":1,"mapcolor13":6,"pop_est":30324,"gdp_md_est":1662,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"SM","iso_a3":"SMR","iso_n3":"674","un_a3":"674","wb_a2":"SM","wb_a3":"SMR","woe_id":-99,"adm0_a3_is":"SMR","adm0_a3_us":"SMR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Southern Europe","region_wb":"Europe & Central Asia","name_len":10,"long_len":10,"abbrev_len":4,"tiny":5,"homepart":1},"arcs":[[-1134]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Somaliland","sov_a3":"SOL","adm0_dif":0,"level":2,"type":"Indeterminate","admin":"Somaliland","adm0_a3":"SOL","geou_dif":0,"geounit":"Somaliland","gu_a3":"SOL","su_dif":0,"subunit":"Somaliland","su_a3":"SOL","brk_diff":1,"name":"Somaliland","name_long":"Somaliland","brk_a3":"B30","brk_name":"Somaliland","brk_group":null,"abbrev":"Solnd.","postal":"SL","formal_en":"Republic of Somaliland","formal_fr":null,"note_adm0":"Self admin.","note_brk":"Self admin.; Claimed by Somalia","name_sort":"Somaliland","name_alt":null,"mapcolor7":3,"mapcolor8":6,"mapcolor9":5,"mapcolor13":2,"pop_est":3500000,"gdp_md_est":12250,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"-99","iso_a3":"-99","iso_n3":"-99","un_a3":"-099","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"SOM","adm0_a3_us":"SOM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":10,"long_len":10,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[1732,-709,-639,1733]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Somalia","sov_a3":"SOM","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Somalia","adm0_a3":"SOM","geou_dif":0,"geounit":"Somalia","gu_a3":"SOM","su_dif":0,"subunit":"Somalia","su_a3":"SOM","brk_diff":0,"name":"Somalia","name_long":"Somalia","brk_a3":"SOM","brk_name":"Somalia","brk_group":null,"abbrev":"Som.","postal":"SO","formal_en":"Federal Republic of Somalia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Somalia","name_alt":null,"mapcolor7":2,"mapcolor8":8,"mapcolor9":6,"mapcolor13":7,"pop_est":9832017,"gdp_md_est":5524,"pop_year":-99,"lastcensus":1987,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"SO","iso_a3":"SOM","iso_n3":"706","un_a3":"706","wb_a2":"SO","wb_a3":"SOM","woe_id":-99,"adm0_a3_is":"SOM","adm0_a3_us":"SOM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-1185,-710,-1733,1734]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"France","sov_a3":"FR1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Saint Pierre and Miquelon","adm0_a3":"SPM","geou_dif":0,"geounit":"Saint Pierre and Miquelon","gu_a3":"SPM","su_dif":0,"subunit":"Saint Pierre and Miquelon","su_a3":"SPM","brk_diff":0,"name":"St. Pierre and Miquelon","name_long":"Saint Pierre and Miquelon","brk_a3":"SPM","brk_name":"St. Pierre and Miquelon","brk_group":null,"abbrev":"St. P.M.","postal":"PM","formal_en":"Saint Pierre and Miquelon","formal_fr":null,"note_adm0":"Fr.","note_brk":null,"name_sort":"St. Pierre and Miquelon","name_alt":null,"mapcolor7":7,"mapcolor8":5,"mapcolor9":9,"mapcolor13":11,"pop_est":7051,"gdp_md_est":48.3,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"PM","iso_a3":"SPM","iso_n3":"666","un_a3":"666","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"SPM","adm0_a3_us":"SPM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Northern America","region_wb":"North America","name_len":23,"long_len":25,"abbrev_len":8,"tiny":3,"homepart":-99},"arcs":[[[1735]],[[1736]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Republic of Serbia","sov_a3":"SRB","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Republic of Serbia","adm0_a3":"SRB","geou_dif":0,"geounit":"Republic of Serbia","gu_a3":"SRB","su_dif":0,"subunit":"Republic of Serbia","su_a3":"SRB","brk_diff":0,"name":"Serbia","name_long":"Serbia","brk_a3":"SRB","brk_name":"Serbia","brk_group":null,"abbrev":"Serb.","postal":"RS","formal_en":"Republic of Serbia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Serbia","name_alt":null,"mapcolor7":3,"mapcolor8":3,"mapcolor9":2,"mapcolor13":10,"pop_est":7379339,"gdp_md_est":80340,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"RS","iso_a3":"SRB","iso_n3":"688","un_a3":"688","wb_a2":"YF","wb_a3":"SRB","woe_id":-99,"adm0_a3_is":"SRB","adm0_a3_us":"SRB","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Southern Europe","region_wb":"Europe & Central Asia","name_len":6,"long_len":6,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[-1583,-258,-1303,-1236,-1329,-276,-919,-928]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Sao Tome and Principe","sov_a3":"STP","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Sao Tome and Principe","adm0_a3":"STP","geou_dif":0,"geounit":"Sao Tome and Principe","gu_a3":"STP","su_dif":0,"subunit":"Sao Tome and Principe","su_a3":"STP","brk_diff":0,"name":"São Tomé and Principe","name_long":"São Tomé and Principe","brk_a3":"STP","brk_name":"Sao Tome and Principe","brk_group":null,"abbrev":"S.T.P.","postal":"ST","formal_en":"Democratic Republic of São Tomé and Principe","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"São Tomé and Principe","name_alt":null,"mapcolor7":1,"mapcolor8":6,"mapcolor9":1,"mapcolor13":7,"pop_est":212679,"gdp_md_est":276.5,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"ST","iso_a3":"STP","iso_n3":"678","un_a3":"678","wb_a2":"ST","wb_a3":"STP","woe_id":-99,"adm0_a3_is":"STP","adm0_a3_us":"STP","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Middle Africa","region_wb":"Sub-Saharan Africa","name_len":21,"long_len":21,"abbrev_len":6,"tiny":3,"homepart":1},"arcs":[[[1737]],[[1738]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Suriname","sov_a3":"SUR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Suriname","adm0_a3":"SUR","geou_dif":0,"geounit":"Suriname","gu_a3":"SUR","su_dif":0,"subunit":"Suriname","su_a3":"SUR","brk_diff":0,"name":"Suriname","name_long":"Suriname","brk_a3":"SUR","brk_name":"Suriname","brk_group":null,"abbrev":"Sur.","postal":"SR","formal_en":"Republic of Suriname","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Suriname","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":7,"mapcolor13":6,"pop_est":481267,"gdp_md_est":4254,"pop_year":-99,"lastcensus":2004,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"SR","iso_a3":"SUR","iso_n3":"740","un_a3":"740","wb_a2":"SR","wb_a3":"SUR","woe_id":-99,"adm0_a3_is":"SUR","adm0_a3_us":"SUR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"South America","region_un":"Americas","subregion":"South America","region_wb":"Latin America & Caribbean","name_len":8,"long_len":8,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-752,-313,-893,1739]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Slovakia","sov_a3":"SVK","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Slovakia","adm0_a3":"SVK","geou_dif":0,"geounit":"Slovakia","gu_a3":"SVK","su_dif":0,"subunit":"Slovakia","su_a3":"SVK","brk_diff":0,"name":"Slovakia","name_long":"Slovakia","brk_a3":"SVK","brk_name":"Slovakia","brk_group":null,"abbrev":"Svk.","postal":"SK","formal_en":"Slovak Republic","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Slovak Republic","name_alt":null,"mapcolor7":2,"mapcolor8":4,"mapcolor9":4,"mapcolor13":9,"pop_est":5463046,"gdp_md_est":119500,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"SK","iso_a3":"SVK","iso_n3":"703","un_a3":"703","wb_a2":"SK","wb_a3":"SVK","woe_id":-99,"adm0_a3_is":"SVK","adm0_a3_us":"SVK","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Eastern Europe","region_wb":"Europe & Central Asia","name_len":8,"long_len":8,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1740,-930,-210,-624,-1538]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Slovenia","sov_a3":"SVN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Slovenia","adm0_a3":"SVN","geou_dif":0,"geounit":"Slovenia","gu_a3":"SVN","su_dif":0,"subunit":"Slovenia","su_a3":"SVN","brk_diff":0,"name":"Slovenia","name_long":"Slovenia","brk_a3":"SVN","brk_name":"Slovenia","brk_group":null,"abbrev":"Slo.","postal":"SLO","formal_en":"Republic of Slovenia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Slovenia","name_alt":null,"mapcolor7":2,"mapcolor8":3,"mapcolor9":2,"mapcolor13":12,"pop_est":2005692,"gdp_md_est":59340,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"SI","iso_a3":"SVN","iso_n3":"705","un_a3":"705","wb_a2":"SI","wb_a3":"SVN","woe_id":-99,"adm0_a3_is":"SVN","adm0_a3_us":"SVN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Southern Europe","region_wb":"Europe & Central Asia","name_len":8,"long_len":8,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-921,1741,-1132,-212,-929]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Sweden","sov_a3":"SWE","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Sweden","adm0_a3":"SWE","geou_dif":0,"geounit":"Sweden","gu_a3":"SWE","su_dif":0,"subunit":"Sweden","su_a3":"SWE","brk_diff":0,"name":"Sweden","name_long":"Sweden","brk_a3":"SWE","brk_name":"Sweden","brk_group":null,"abbrev":"Swe.","postal":"S","formal_en":"Kingdom of Sweden","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Sweden","name_alt":null,"mapcolor7":1,"mapcolor8":4,"mapcolor9":2,"mapcolor13":4,"pop_est":9059651,"gdp_md_est":344300,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"SE","iso_a3":"SWE","iso_n3":"752","un_a3":"752","wb_a2":"SE","wb_a3":"SWE","woe_id":-99,"adm0_a3_is":"SWE","adm0_a3_us":"SWE","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Northern Europe","region_wb":"Europe & Central Asia","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1742]],[[1743]],[[1744]],[[1745]],[[1746]],[[1747,-1418,-723]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Swaziland","sov_a3":"SWZ","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Swaziland","adm0_a3":"SWZ","geou_dif":0,"geounit":"Swaziland","gu_a3":"SWZ","su_dif":0,"subunit":"Swaziland","su_a3":"SWZ","brk_diff":0,"name":"Swaziland","name_long":"Swaziland","brk_a3":"SWZ","brk_name":"Swaziland","brk_group":null,"abbrev":"Swz.","postal":"SW","formal_en":"Kingdom of Swaziland","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Swaziland","name_alt":null,"mapcolor7":3,"mapcolor8":6,"mapcolor9":2,"mapcolor13":5,"pop_est":1123913,"gdp_md_est":5702,"pop_year":-99,"lastcensus":2007,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"SZ","iso_a3":"SWZ","iso_n3":"748","un_a3":"748","wb_a2":"SZ","wb_a3":"SWZ","woe_id":-99,"adm0_a3_is":"SWZ","adm0_a3_us":"SWZ","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Southern Africa","region_wb":"Sub-Saharan Africa","name_len":9,"long_len":9,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-1339,1748]]},{"type":"Polygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Netherlands","sov_a3":"NL1","adm0_dif":1,"level":2,"type":"Country","admin":"Sint Maarten","adm0_a3":"SXM","geou_dif":0,"geounit":"Sint Maarten","gu_a3":"SXM","su_dif":0,"subunit":"Sint Maarten","su_a3":"SXM","brk_diff":0,"name":"Sint Maarten","name_long":"Sint Maarten","brk_a3":"SXM","brk_name":"Sint Maarten","brk_group":null,"abbrev":"St. M.","postal":"SX","formal_en":"Sint Maarten (Dutch part)","formal_fr":null,"note_adm0":"Neth.","note_brk":null,"name_sort":"St. Maarten (Dutch part)","name_alt":null,"mapcolor7":4,"mapcolor8":2,"mapcolor9":2,"mapcolor13":9,"pop_est":37429,"gdp_md_est":400,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"SX","iso_a3":"SXM","iso_n3":"534","un_a3":"534","wb_a2":"SX","wb_a3":"SXM","woe_id":-99,"adm0_a3_is":"SXM","adm0_a3_us":"SXM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":12,"long_len":12,"abbrev_len":6,"tiny":4,"homepart":-99},"arcs":[[-1268,1749]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Seychelles","sov_a3":"SYC","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Seychelles","adm0_a3":"SYC","geou_dif":0,"geounit":"Seychelles","gu_a3":"SYC","su_dif":0,"subunit":"Seychelles","su_a3":"SYC","brk_diff":0,"name":"Seychelles","name_long":"Seychelles","brk_a3":"SYC","brk_name":"Seychelles","brk_group":null,"abbrev":"Syc.","postal":"SC","formal_en":"Republic of Seychelles","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Seychelles","name_alt":null,"mapcolor7":5,"mapcolor8":8,"mapcolor9":3,"mapcolor13":1,"pop_est":87476,"gdp_md_est":1715,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"SC","iso_a3":"SYC","iso_n3":"690","un_a3":"690","wb_a2":"SC","wb_a3":"SYC","woe_id":-99,"adm0_a3_is":"SYC","adm0_a3_us":"SYC","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Seven seas (open ocean)","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":10,"long_len":10,"abbrev_len":4,"tiny":2,"homepart":1},"arcs":[[1750]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Syria","sov_a3":"SYR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Syria","adm0_a3":"SYR","geou_dif":0,"geounit":"Syria","gu_a3":"SYR","su_dif":0,"subunit":"Syria","su_a3":"SYR","brk_diff":0,"name":"Syria","name_long":"Syria","brk_a3":"SYR","brk_name":"Syria","brk_group":null,"abbrev":"Syria","postal":"SYR","formal_en":"Syrian Arab Republic","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Syrian Arab Republic","name_alt":null,"mapcolor7":2,"mapcolor8":6,"mapcolor9":2,"mapcolor13":6,"pop_est":20178485,"gdp_md_est":98830,"pop_year":-99,"lastcensus":2004,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"SY","iso_a3":"SYR","iso_n3":"760","un_a3":"760","wb_a2":"SY","wb_a3":"SYR","woe_id":-99,"adm0_a3_is":"SYR","adm0_a3_us":"SYR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Middle East & North Africa","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[-1114,-1140,-1124,-1246,1751,1752]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"United Kingdom","sov_a3":"GB1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Turks and Caicos Islands","adm0_a3":"TCA","geou_dif":0,"geounit":"Turks and Caicos Islands","gu_a3":"TCA","su_dif":0,"subunit":"Turks and Caicos Islands","su_a3":"TCA","brk_diff":0,"name":"Turks and Caicos Is.","name_long":"Turks and Caicos Islands","brk_a3":"TCA","brk_name":"Turks and Caicos Is.","brk_group":null,"abbrev":"T.C. Is.","postal":"TC","formal_en":"Turks and Caicos Islands","formal_fr":null,"note_adm0":"U.K.","note_brk":null,"name_sort":"Turks and Caicos Islands","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":3,"pop_est":22942,"gdp_md_est":216,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"TC","iso_a3":"TCA","iso_n3":"796","un_a3":"796","wb_a2":"TC","wb_a3":"TCA","woe_id":-99,"adm0_a3_is":"TCA","adm0_a3_us":"TCA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":20,"long_len":24,"abbrev_len":8,"tiny":-99,"homepart":-99},"arcs":[[[1753]],[[1754]],[[1755]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Chad","sov_a3":"TCD","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Chad","adm0_a3":"TCD","geou_dif":0,"geounit":"Chad","gu_a3":"TCD","su_dif":0,"subunit":"Chad","su_a3":"TCD","brk_diff":0,"name":"Chad","name_long":"Chad","brk_a3":"TCD","brk_name":"Chad","brk_group":null,"abbrev":"Chad","postal":"TD","formal_en":"Republic of Chad","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Chad","name_alt":null,"mapcolor7":6,"mapcolor8":1,"mapcolor9":8,"mapcolor13":6,"pop_est":10329208,"gdp_md_est":15860,"pop_year":-99,"lastcensus":2009,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"TD","iso_a3":"TCD","iso_n3":"148","un_a3":"148","wb_a2":"TD","wb_a3":"TCD","woe_id":-99,"adm0_a3_is":"TCD","adm0_a3_us":"TCD","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Middle Africa","region_wb":"Sub-Saharan Africa","name_len":4,"long_len":4,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-1700,-337,-576,-1380,-1376,-1250]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Togo","sov_a3":"TGO","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Togo","adm0_a3":"TGO","geou_dif":0,"geounit":"Togo","gu_a3":"TGO","su_dif":0,"subunit":"Togo","su_a3":"TGO","brk_diff":0,"name":"Togo","name_long":"Togo","brk_a3":"TGO","brk_name":"Togo","brk_group":null,"abbrev":"Togo","postal":"TG","formal_en":"Togolese Republic","formal_fr":"République Togolaise","note_adm0":null,"note_brk":null,"name_sort":"Togo","name_alt":null,"mapcolor7":3,"mapcolor8":1,"mapcolor9":3,"mapcolor13":5,"pop_est":6019877,"gdp_md_est":5118,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"TG","iso_a3":"TGO","iso_n3":"768","un_a3":"768","wb_a2":"TG","wb_a3":"TGO","woe_id":-99,"adm0_a3_is":"TGO","adm0_a3_us":"TGO","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Western Africa","region_wb":"Sub-Saharan Africa","name_len":4,"long_len":4,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-237,1756,-806,-241]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Thailand","sov_a3":"THA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Thailand","adm0_a3":"THA","geou_dif":0,"geounit":"Thailand","gu_a3":"THA","su_dif":0,"subunit":"Thailand","su_a3":"THA","brk_diff":0,"name":"Thailand","name_long":"Thailand","brk_a3":"THA","brk_name":"Thailand","brk_group":null,"abbrev":"Thai.","postal":"TH","formal_en":"Kingdom of Thailand","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Thailand","name_alt":null,"mapcolor7":3,"mapcolor8":6,"mapcolor9":8,"mapcolor13":1,"pop_est":65905410,"gdp_md_est":547400,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"TH","iso_a3":"THA","iso_n3":"764","un_a3":"764","wb_a2":"TH","wb_a3":"THA","woe_id":-99,"adm0_a3_is":"THA","adm0_a3_us":"THA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"South-Eastern Asia","region_wb":"East Asia & Pacific","name_len":8,"long_len":8,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[1757]],[[1758]],[[1759]],[[1760]],[[1761]],[[1762]],[[1763]],[[1764]],[[1765]],[[-1243,-1198,1766,-1363,1767,-1327]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Tajikistan","sov_a3":"TJK","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Tajikistan","adm0_a3":"TJK","geou_dif":0,"geounit":"Tajikistan","gu_a3":"TJK","su_dif":0,"subunit":"Tajikistan","su_a3":"TJK","brk_diff":0,"name":"Tajikistan","name_long":"Tajikistan","brk_a3":"TJK","brk_name":"Tajikistan","brk_group":null,"abbrev":"Tjk.","postal":"TJ","formal_en":"Republic of Tajikistan","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Tajikistan","name_alt":null,"mapcolor7":3,"mapcolor8":6,"mapcolor9":2,"mapcolor13":5,"pop_est":7349145,"gdp_md_est":13160,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"TJ","iso_a3":"TJK","iso_n3":"762","un_a3":"762","wb_a2":"TJ","wb_a3":"TJK","woe_id":-99,"adm0_a3_is":"TJK","adm0_a3_us":"TJK","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Central Asia","region_wb":"Europe & Central Asia","name_len":10,"long_len":10,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[-1192]],[[1768]],[[-1190,-558,-8,1769]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Turkmenistan","sov_a3":"TKM","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Turkmenistan","adm0_a3":"TKM","geou_dif":0,"geounit":"Turkmenistan","gu_a3":"TKM","su_dif":0,"subunit":"Turkmenistan","su_a3":"TKM","brk_diff":0,"name":"Turkmenistan","name_long":"Turkmenistan","brk_a3":"TKM","brk_name":"Turkmenistan","brk_group":null,"abbrev":"Turkm.","postal":"TM","formal_en":"Turkmenistan","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Turkmenistan","name_alt":null,"mapcolor7":3,"mapcolor8":2,"mapcolor9":1,"mapcolor13":9,"pop_est":4884887,"gdp_md_est":29780,"pop_year":-99,"lastcensus":1995,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"TM","iso_a3":"TKM","iso_n3":"795","un_a3":"795","wb_a2":"TM","wb_a3":"TKM","woe_id":-99,"adm0_a3_is":"TKM","adm0_a3_us":"TKM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Central Asia","region_wb":"Europe & Central Asia","name_len":12,"long_len":12,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[[1770]],[[-6,-1104,1771,-1181,1772]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"East Timor","sov_a3":"TLS","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"East Timor","adm0_a3":"TLS","geou_dif":0,"geounit":"East Timor","gu_a3":"TLS","su_dif":0,"subunit":"East Timor","su_a3":"TLS","brk_diff":0,"name":"Timor-Leste","name_long":"Timor-Leste","brk_a3":"TLS","brk_name":"Timor-Leste","brk_group":null,"abbrev":"T.L.","postal":"TL","formal_en":"Democratic Republic of Timor-Leste","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Timor-Leste","name_alt":"East Timor","mapcolor7":2,"mapcolor8":2,"mapcolor9":4,"mapcolor13":3,"pop_est":1131612,"gdp_md_est":2520,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"TL","iso_a3":"TLS","iso_n3":"626","un_a3":"626","wb_a2":"TP","wb_a3":"TMP","woe_id":-99,"adm0_a3_is":"TLS","adm0_a3_us":"TLS","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"South-Eastern Asia","region_wb":"East Asia & Pacific","name_len":11,"long_len":11,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1773,-936]],[[-938,1774]],[[1775]]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Tonga","sov_a3":"TON","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Tonga","adm0_a3":"TON","geou_dif":0,"geounit":"Tonga","gu_a3":"TON","su_dif":0,"subunit":"Tonga","su_a3":"TON","brk_diff":0,"name":"Tonga","name_long":"Tonga","brk_a3":"TON","brk_name":"Tonga","brk_group":null,"abbrev":"Tongo","postal":"TO","formal_en":"Kingdom of Tonga","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Tonga","name_alt":null,"mapcolor7":2,"mapcolor8":1,"mapcolor9":1,"mapcolor13":8,"pop_est":120898,"gdp_md_est":549,"pop_year":-99,"lastcensus":2006,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"TO","iso_a3":"TON","iso_n3":"776","un_a3":"776","wb_a2":"TO","wb_a3":"TON","woe_id":-99,"adm0_a3_is":"TON","adm0_a3_us":"TON","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Polynesia","region_wb":"East Asia & Pacific","name_len":5,"long_len":5,"abbrev_len":5,"tiny":3,"homepart":1},"arcs":[[[1776]],[[1777]],[[1778]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":5,"sovereignt":"Trinidad and Tobago","sov_a3":"TTO","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Trinidad and Tobago","adm0_a3":"TTO","geou_dif":0,"geounit":"Trinidad and Tobago","gu_a3":"TTO","su_dif":0,"subunit":"Trinidad and Tobago","su_a3":"TTO","brk_diff":0,"name":"Trinidad and Tobago","name_long":"Trinidad and Tobago","brk_a3":"TTO","brk_name":"Trinidad and Tobago","brk_group":null,"abbrev":"Tr.T.","postal":"TT","formal_en":"Republic of Trinidad and Tobago","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Trinidad and Tobago","name_alt":null,"mapcolor7":5,"mapcolor8":6,"mapcolor9":2,"mapcolor13":5,"pop_est":1310000,"gdp_md_est":29010,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"TT","iso_a3":"TTO","iso_n3":"780","un_a3":"780","wb_a2":"TT","wb_a3":"TTO","woe_id":-99,"adm0_a3_is":"TTO","adm0_a3_us":"TTO","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":19,"long_len":19,"abbrev_len":5,"tiny":2,"homepart":1},"arcs":[[[1779]],[[1780]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Tunisia","sov_a3":"TUN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Tunisia","adm0_a3":"TUN","geou_dif":0,"geounit":"Tunisia","gu_a3":"TUN","su_dif":0,"subunit":"Tunisia","su_a3":"TUN","brk_diff":0,"name":"Tunisia","name_long":"Tunisia","brk_a3":"TUN","brk_name":"Tunisia","brk_group":null,"abbrev":"Tun.","postal":"TN","formal_en":"Republic of Tunisia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Tunisia","name_alt":null,"mapcolor7":4,"mapcolor8":3,"mapcolor9":3,"mapcolor13":2,"pop_est":10486339,"gdp_md_est":81710,"pop_year":-99,"lastcensus":2004,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"TN","iso_a3":"TUN","iso_n3":"788","un_a3":"788","wb_a2":"TN","wb_a3":"TUN","woe_id":-99,"adm0_a3_is":"TUN","adm0_a3_us":"TUN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Northern Africa","region_wb":"Middle East & North Africa","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1781]],[[1782]],[[-1252,-658,1783]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Turkey","sov_a3":"TUR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Turkey","adm0_a3":"TUR","geou_dif":0,"geounit":"Turkey","gu_a3":"TUR","su_dif":0,"subunit":"Turkey","su_a3":"TUR","brk_diff":0,"name":"Turkey","name_long":"Turkey","brk_a3":"TUR","brk_name":"Turkey","brk_group":null,"abbrev":"Tur.","postal":"TR","formal_en":"Republic of Turkey","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Turkey","name_alt":null,"mapcolor7":6,"mapcolor8":3,"mapcolor9":8,"mapcolor13":4,"pop_est":76805524,"gdp_md_est":902700,"pop_year":-99,"lastcensus":2000,"gdp_year":-99,"economy":"4. Emerging region: MIKT","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"TR","iso_a3":"TUR","iso_n3":"792","un_a3":"792","wb_a2":"TR","wb_a3":"TUR","woe_id":-99,"adm0_a3_is":"TUR","adm0_a3_us":"TUR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Europe & Central Asia","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1784]],[[-802,-50,-220,-1109,-1115,-1753,1785]],[[1786,-868,-255]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Taiwan","sov_a3":"TWN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Taiwan","adm0_a3":"TWN","geou_dif":0,"geounit":"Taiwan","gu_a3":"TWN","su_dif":0,"subunit":"Taiwan","su_a3":"TWN","brk_diff":1,"name":"Taiwan","name_long":"Taiwan","brk_a3":"B77","brk_name":"Taiwan","brk_group":null,"abbrev":"Taiwan","postal":"TW","formal_en":null,"formal_fr":null,"note_adm0":null,"note_brk":"Self admin.; Claimed by China","name_sort":"Taiwan","name_alt":null,"mapcolor7":1,"mapcolor8":5,"mapcolor9":7,"mapcolor13":2,"pop_est":22974347,"gdp_md_est":712000,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"TW","iso_a3":"TWN","iso_n3":"158","un_a3":"-099","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"TWN","adm0_a3_us":"TWN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Eastern Asia","region_wb":"East Asia & Pacific","name_len":6,"long_len":6,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[[1787]],[[1788]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"United Republic of Tanzania","sov_a3":"TZA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"United Republic of Tanzania","adm0_a3":"TZA","geou_dif":0,"geounit":"Tanzania","gu_a3":"TZA","su_dif":0,"subunit":"Tanzania","su_a3":"TZA","brk_diff":0,"name":"Tanzania","name_long":"Tanzania","brk_a3":"TZA","brk_name":"Tanzania","brk_group":null,"abbrev":"Tanz.","postal":"TZ","formal_en":"United Republic of Tanzania","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Tanzania","name_alt":null,"mapcolor7":3,"mapcolor8":6,"mapcolor9":2,"mapcolor13":2,"pop_est":41048532,"gdp_md_est":54250,"pop_year":-99,"lastcensus":2002,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"TZ","iso_a3":"TZA","iso_n3":"834","un_a3":"834","wb_a2":"TZ","wb_a3":"TZA","woe_id":-99,"adm0_a3_is":"TZA","adm0_a3_us":"TZA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":8,"long_len":8,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[1789]],[[1790]],[[1791]],[[-1187,1792,-1344,-1355,1793,-580,-225,-1688,1794]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Uganda","sov_a3":"UGA","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Uganda","adm0_a3":"UGA","geou_dif":0,"geounit":"Uganda","gu_a3":"UGA","su_dif":0,"subunit":"Uganda","su_a3":"UGA","brk_diff":0,"name":"Uganda","name_long":"Uganda","brk_a3":"UGA","brk_name":"Uganda","brk_group":null,"abbrev":"Uga.","postal":"UG","formal_en":"Republic of Uganda","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Uganda","name_alt":null,"mapcolor7":6,"mapcolor8":3,"mapcolor9":6,"mapcolor13":4,"pop_est":32369558,"gdp_md_est":39380,"pop_year":-99,"lastcensus":2002,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"UG","iso_a3":"UGA","iso_n3":"800","un_a3":"800","wb_a2":"UG","wb_a3":"UGA","woe_id":-99,"adm0_a3_is":"UGA","adm0_a3_us":"UGA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":6,"long_len":6,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[-1795,-1689,-578,-1701,-1188]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Ukraine","sov_a3":"UKR","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Ukraine","adm0_a3":"UKR","geou_dif":0,"geounit":"Ukraine","gu_a3":"UKR","su_dif":0,"subunit":"Ukraine","su_a3":"UKR","brk_diff":0,"name":"Ukraine","name_long":"Ukraine","brk_a3":"UKR","brk_name":"Ukraine","brk_group":null,"abbrev":"Ukr.","postal":"UA","formal_en":"Ukraine","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Ukraine","name_alt":null,"mapcolor7":5,"mapcolor8":1,"mapcolor9":6,"mapcolor13":3,"pop_est":45700395,"gdp_md_est":339800,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"UA","iso_a3":"UKR","iso_n3":"804","un_a3":"804","wb_a2":"UA","wb_a3":"UKR","woe_id":-99,"adm0_a3_is":"UKR","adm0_a3_us":"UKR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Europe","region_un":"Europe","subregion":"Eastern Europe","region_wb":"Europe & Central Asia","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1795]],[[1796,-1581,-1274,-1584,-926,-1741,-1537,-283,-1655]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Uruguay","sov_a3":"URY","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Uruguay","adm0_a3":"URY","geou_dif":0,"geounit":"Uruguay","gu_a3":"URY","su_dif":0,"subunit":"Uruguay","su_a3":"URY","brk_diff":0,"name":"Uruguay","name_long":"Uruguay","brk_a3":"URY","brk_name":"Uruguay","brk_group":null,"abbrev":"Ury.","postal":"UY","formal_en":"Oriental Republic of Uruguay","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Uruguay","name_alt":null,"mapcolor7":1,"mapcolor8":2,"mapcolor9":2,"mapcolor13":10,"pop_est":3494382,"gdp_md_est":43160,"pop_year":-99,"lastcensus":2004,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"UY","iso_a3":"URY","iso_n3":"858","un_a3":"858","wb_a2":"UY","wb_a3":"URY","woe_id":-99,"adm0_a3_is":"URY","adm0_a3_us":"URY","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"South America","region_un":"Americas","subregion":"South America","region_wb":"Latin America & Caribbean","name_len":7,"long_len":7,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[1797,-43,-316]]},
-
- {
- "type": "MultiPolygon",
- "properties": { "custom":"US-cont", "name":"Continental United States" },
- "arcs": [[[1842]], [[-354, 1856, -1297, 1857, -440]]]
- },
-
- {"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"United States of America","sov_a3":"US1","adm0_dif":1,"level":2,"type":"Country","admin":"United States of America","adm0_a3":"USA","geou_dif":0,"geounit":"United States of America","gu_a3":"USA","su_dif":0,"subunit":"United States of America","su_a3":"USA","brk_diff":0,"name":"United States","name_long":"United States","brk_a3":"USA","brk_name":"United States","brk_group":null,"abbrev":"U.S.A.","postal":"US","formal_en":"United States of America","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"United States of America","name_alt":null,"mapcolor7":4,"mapcolor8":5,"mapcolor9":1,"mapcolor13":1,"pop_est":313973000,"gdp_md_est":15094000,"pop_year":0,"lastcensus":2010,"gdp_year":0,"economy":"1. Developed region: G7","income_grp":"1. High income: OECD","wikipedia":0,"fips_10":null,"iso_a2":"US","iso_a3":"USA","iso_n3":"840","un_a3":"840","wb_a2":"US","wb_a3":"USA","woe_id":-99,"adm0_a3_is":"USA","adm0_a3_us":"USA","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Northern America","region_wb":"North America","name_len":13,"long_len":13,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[[1798]],[[1799]],[[1800]],[[1801]],[[1802]],[[1803]],[[1804]],[[1805]],[[1806]],[[1807]],[[1808]],[[1809]],[[1810]],[[1811]],[[1812]],[[1813]],[[1814]],[[1815]],[[1816]],[[1817]],[[1818]],[[1819]],[[1820]],[[1821]],[[1822]],[[1823]],[[1824]],[[1825]],[[1826]],[[1827]],[[1828]],[[1829]],[[1830]],[[1831]],[[1832]],[[1833]],[[1834]],[[1835]],[[1836]],[[1837]],[[1838]],[[1839]],[[1840]],[[1841]],[[1842]],[[1843]],[[1844]],[[1845]],[[1846]],[[1847]],[[1848]],[[1849]],[[1850]],[[1851]],[[1852]],[[1853]],[[1854]],[[1855]],[[-354,1856,-1297,1857,-440]],[[1858]],[[1859]],[[1860]],[[1861]],[[1862]],[[1863]],[[1864]],[[1865]],[[1866]],[[1867]],[[1868]],[[1869]],[[1870]],[[1871]],[[1872]],[[1873]],[[1874]],[[1875]],[[1876]],[[1877]],[[1878]],[[1879]],[[1880]],[[1881]],[[1882]],[[1883]],[[1884]],[[1885]],[[1886]],[[1887]],[[1888]],[[1889]],[[1890]],[[1891]],[[1892]],[[1893]],[[1894]],[[1895]],[[1896]],[[1897]],[[1898]],[[1899]],[[1900]],[[1901]],[[1902]],[[1903]],[[1904]],[[1905]],[[1906]],[[1907]],[[1908]],[[1909]],[[1910]],[[1911]],[[1912]],[[1913]],[[1914]],[[1915]],[[1916]],[[1917]],[[1918]],[[1919]],[[1920]],[[1921]],[[1922]],[[1923]],[[1924]],[[-442,1925,-382,1926]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Uzbekistan","sov_a3":"UZB","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Uzbekistan","adm0_a3":"UZB","geou_dif":0,"geounit":"Uzbekistan","gu_a3":"UZB","su_dif":0,"subunit":"Uzbekistan","su_a3":"UZB","brk_diff":0,"name":"Uzbekistan","name_long":"Uzbekistan","brk_a3":"UZB","brk_name":"Uzbekistan","brk_group":null,"abbrev":"Uzb.","postal":"UZ","formal_en":"Republic of Uzbekistan","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Uzbekistan","name_alt":null,"mapcolor7":2,"mapcolor8":3,"mapcolor9":5,"mapcolor13":4,"pop_est":27606007,"gdp_md_est":71670,"pop_year":-99,"lastcensus":1989,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"UZ","iso_a3":"UZB","iso_n3":"860","un_a3":"860","wb_a2":"UZ","wb_a3":"UZB","woe_id":-99,"adm0_a3_is":"UZB","adm0_a3_us":"UZB","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Central Asia","region_wb":"Europe & Central Asia","name_len":10,"long_len":10,"abbrev_len":4,"tiny":5,"homepart":1},"arcs":[[[-1193]],[[-1194]],[[-1191,-1770,-7,-1773,-1180],[-1769]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"Saint Vincent and the Grenadines","sov_a3":"VCT","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Saint Vincent and the Grenadines","adm0_a3":"VCT","geou_dif":0,"geounit":"Saint Vincent and the Grenadines","gu_a3":"VCT","su_dif":0,"subunit":"Saint Vincent and the Grenadines","su_a3":"VCT","brk_diff":0,"name":"St. Vin. and Gren.","name_long":"Saint Vincent and the Grenadines","brk_a3":"VCT","brk_name":"St. Vin. and Gren.","brk_group":null,"abbrev":"St.V.G.","postal":"VC","formal_en":"Saint Vincent and the Grenadines","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"St. Vincent and the Grenadines","name_alt":null,"mapcolor7":1,"mapcolor8":1,"mapcolor9":5,"mapcolor13":7,"pop_est":104574,"gdp_md_est":1070,"pop_year":-99,"lastcensus":2011,"gdp_year":-99,"economy":"6. Developing region","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"VC","iso_a3":"VCT","iso_n3":"670","un_a3":"670","wb_a2":"VC","wb_a3":"VCT","woe_id":-99,"adm0_a3_is":"VCT","adm0_a3_us":"VCT","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":18,"long_len":32,"abbrev_len":7,"tiny":-99,"homepart":1},"arcs":[[[1927]],[[1928]],[[1929]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Venezuela","sov_a3":"VEN","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Venezuela","adm0_a3":"VEN","geou_dif":0,"geounit":"Venezuela","gu_a3":"VEN","su_dif":0,"subunit":"Venezuela","su_a3":"VEN","brk_diff":0,"name":"Venezuela","name_long":"Venezuela","brk_a3":"VEN","brk_name":"Venezuela","brk_group":null,"abbrev":"Ven.","postal":"VE","formal_en":"Bolivarian Republic of Venezuela","formal_fr":"República Bolivariana de Venezuela","note_adm0":null,"note_brk":null,"name_sort":"Venezuela, RB","name_alt":null,"mapcolor7":1,"mapcolor8":3,"mapcolor9":1,"mapcolor13":4,"pop_est":26814843,"gdp_md_est":357400,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"VE","iso_a3":"VEN","iso_n3":"862","un_a3":"862","wb_a2":"VE","wb_a3":"VEN","woe_id":-99,"adm0_a3_is":"VEN","adm0_a3_us":"VEN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"South America","region_un":"Americas","subregion":"South America","region_wb":"Latin America & Caribbean","name_len":9,"long_len":9,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1930]],[[1931]],[[1932]],[[1933]],[[-894,-320,-588,1934]]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"United Kingdom","sov_a3":"GB1","adm0_dif":1,"level":2,"type":"Dependency","admin":"British Virgin Islands","adm0_a3":"VGB","geou_dif":0,"geounit":"British Virgin Islands","gu_a3":"VGB","su_dif":0,"subunit":"British Virgin Islands","su_a3":"VGB","brk_diff":0,"name":"British Virgin Is.","name_long":"British Virgin Islands","brk_a3":"VGB","brk_name":"British Virgin Is.","brk_group":null,"abbrev":"V.I. (Br.)","postal":"VG","formal_en":"British Virgin Islands","formal_fr":null,"note_adm0":"U.K.","note_brk":null,"name_sort":"British Virgin Islands","name_alt":null,"mapcolor7":6,"mapcolor8":6,"mapcolor9":6,"mapcolor13":3,"pop_est":24491,"gdp_md_est":853.4,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"2. Developed region: nonG7","income_grp":"1. High income: OECD","wikipedia":-99,"fips_10":null,"iso_a2":"VG","iso_a3":"VGB","iso_n3":"092","un_a3":"092","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"VGB","adm0_a3_us":"VGB","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":18,"long_len":22,"abbrev_len":10,"tiny":3,"homepart":-99},"arcs":[[[1935]],[[1936]],[[1937]]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":6,"sovereignt":"United States of America","sov_a3":"US1","adm0_dif":1,"level":2,"type":"Dependency","admin":"United States Virgin Islands","adm0_a3":"VIR","geou_dif":0,"geounit":"United States Virgin Islands","gu_a3":"VIR","su_dif":0,"subunit":"United States Virgin Islands","su_a3":"VIR","brk_diff":0,"name":"U.S. Virgin Is.","name_long":"United States Virgin Islands","brk_a3":"VIR","brk_name":"U.S. Virgin Is.","brk_group":null,"abbrev":"V.I. (U.S.)","postal":"VI","formal_en":"Virgin Islands of the United States","formal_fr":null,"note_adm0":"U.S.A.","note_brk":null,"name_sort":"Virgin Islands (U.S.)","name_alt":null,"mapcolor7":4,"mapcolor8":5,"mapcolor9":1,"mapcolor13":1,"pop_est":109825,"gdp_md_est":1577,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"6. Developing region","income_grp":"2. High income: nonOECD","wikipedia":-99,"fips_10":null,"iso_a2":"VI","iso_a3":"VIR","iso_n3":"850","un_a3":"850","wb_a2":"VI","wb_a3":"VIR","woe_id":-99,"adm0_a3_is":"VIR","adm0_a3_us":"VIR","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"North America","region_un":"Americas","subregion":"Caribbean","region_wb":"Latin America & Caribbean","name_len":15,"long_len":28,"abbrev_len":11,"tiny":3,"homepart":-99},"arcs":[[[1938]],[[1939]],[[1940]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"Vietnam","sov_a3":"VNM","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Vietnam","adm0_a3":"VNM","geou_dif":0,"geounit":"Vietnam","gu_a3":"VNM","su_dif":0,"subunit":"Vietnam","su_a3":"VNM","brk_diff":0,"name":"Vietnam","name_long":"Vietnam","brk_a3":"VNM","brk_name":"Vietnam","brk_group":null,"abbrev":"Viet.","postal":"VN","formal_en":"Socialist Republic of Vietnam","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Vietnam","name_alt":null,"mapcolor7":5,"mapcolor8":6,"mapcolor9":5,"mapcolor13":4,"pop_est":86967524,"gdp_md_est":241700,"pop_year":-99,"lastcensus":2009,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"VN","iso_a3":"VNM","iso_n3":"704","un_a3":"704","wb_a2":"VN","wb_a3":"VNM","woe_id":-99,"adm0_a3_is":"VNM","adm0_a3_us":"VNM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"South-Eastern Asia","region_wb":"East Asia & Pacific","name_len":7,"long_len":7,"abbrev_len":5,"tiny":2,"homepart":1},"arcs":[[[1941]],[[1942]],[[1943]],[[1944]],[[1945]],[[1946]],[[1947]],[[1948,-1200,-1242,1949,-1240,-538]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Vanuatu","sov_a3":"VUT","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Vanuatu","adm0_a3":"VUT","geou_dif":0,"geounit":"Vanuatu","gu_a3":"VUT","su_dif":0,"subunit":"Vanuatu","su_a3":"VUT","brk_diff":0,"name":"Vanuatu","name_long":"Vanuatu","brk_a3":"VUT","brk_name":"Vanuatu","brk_group":null,"abbrev":"Van.","postal":"VU","formal_en":"Republic of Vanuatu","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Vanuatu","name_alt":null,"mapcolor7":6,"mapcolor8":3,"mapcolor9":7,"mapcolor13":3,"pop_est":218519,"gdp_md_est":988.5,"pop_year":-99,"lastcensus":2009,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"VU","iso_a3":"VUT","iso_n3":"548","un_a3":"548","wb_a2":"VU","wb_a3":"VUT","woe_id":-99,"adm0_a3_is":"VUT","adm0_a3_us":"VUT","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Melanesia","region_wb":"East Asia & Pacific","name_len":7,"long_len":7,"abbrev_len":4,"tiny":2,"homepart":1},"arcs":[[[1950]],[[1951]],[[1952]],[[1953]],[[1954]],[[1955]],[[1956]],[[1957]],[[1958]],[[1959]],[[1960]],[[1961]],[[1962]],[[1963]]]},{"type":"MultiPolygon","properties":{"scalerank":3,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"France","sov_a3":"FR1","adm0_dif":1,"level":2,"type":"Dependency","admin":"Wallis and Futuna","adm0_a3":"WLF","geou_dif":0,"geounit":"Wallis and Futuna","gu_a3":"WLF","su_dif":0,"subunit":"Wallis and Futuna","su_a3":"WLF","brk_diff":0,"name":"Wallis and Futuna Is.","name_long":"Wallis and Futuna Islands","brk_a3":"WLF","brk_name":"Wallis and Futuna Islands","brk_group":null,"abbrev":"Wlf.","postal":"WF","formal_en":"Wallis and Futuna Islands","formal_fr":null,"note_adm0":"Fr.","note_brk":null,"name_sort":"Wallis and Futuna","name_alt":null,"mapcolor7":7,"mapcolor8":5,"mapcolor9":9,"mapcolor13":11,"pop_est":15289,"gdp_md_est":60,"pop_year":-99,"lastcensus":-99,"gdp_year":-99,"economy":"6. Developing region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"WF","iso_a3":"WLF","iso_n3":"876","un_a3":"876","wb_a2":"-99","wb_a3":"-99","woe_id":-99,"adm0_a3_is":"WLF","adm0_a3_us":"WLF","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Polynesia","region_wb":"East Asia & Pacific","name_len":21,"long_len":25,"abbrev_len":4,"tiny":3,"homepart":-99},"arcs":[[[1964]],[[1965]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":4,"sovereignt":"Samoa","sov_a3":"WSM","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Samoa","adm0_a3":"WSM","geou_dif":0,"geounit":"Samoa","gu_a3":"WSM","su_dif":0,"subunit":"Samoa","su_a3":"WSM","brk_diff":0,"name":"Samoa","name_long":"Samoa","brk_a3":"WSM","brk_name":"Samoa","brk_group":null,"abbrev":"Samoa","postal":"WS","formal_en":"Independent State of Samoa","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Samoa","name_alt":null,"mapcolor7":3,"mapcolor8":3,"mapcolor9":4,"mapcolor13":6,"pop_est":219998,"gdp_md_est":1049,"pop_year":-99,"lastcensus":2006,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"WS","iso_a3":"WSM","iso_n3":"882","un_a3":"882","wb_a2":"WS","wb_a3":"WSM","woe_id":-99,"adm0_a3_is":"WSM","adm0_a3_us":"WSM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Oceania","region_un":"Oceania","subregion":"Polynesia","region_wb":"East Asia & Pacific","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[1966]],[[1967]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Yemen","sov_a3":"YEM","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Yemen","adm0_a3":"YEM","geou_dif":0,"geounit":"Yemen","gu_a3":"YEM","su_dif":0,"subunit":"Yemen","su_a3":"YEM","brk_diff":0,"name":"Yemen","name_long":"Yemen","brk_a3":"YEM","brk_name":"Yemen","brk_group":null,"abbrev":"Yem.","postal":"YE","formal_en":"Republic of Yemen","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Yemen, Rep.","name_alt":null,"mapcolor7":5,"mapcolor8":3,"mapcolor9":3,"mapcolor13":11,"pop_est":23822783,"gdp_md_est":55280,"pop_year":-99,"lastcensus":2004,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"YE","iso_a3":"YEM","iso_n3":"887","un_a3":"887","wb_a2":"RY","wb_a3":"YEM","woe_id":-99,"adm0_a3_is":"YEM","adm0_a3_us":"YEM","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Western Asia","region_wb":"Middle East & North Africa","name_len":5,"long_len":5,"abbrev_len":4,"tiny":-99,"homepart":1},"arcs":[[[1968]],[[1969]],[[1970]],[[1971]],[[1972,-1696,-1447]]]},{"type":"MultiPolygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":2,"sovereignt":"South Africa","sov_a3":"ZAF","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"South Africa","adm0_a3":"ZAF","geou_dif":0,"geounit":"South Africa","gu_a3":"ZAF","su_dif":0,"subunit":"South Africa","su_a3":"ZAF","brk_diff":0,"name":"South Africa","name_long":"South Africa","brk_a3":"ZAF","brk_name":"South Africa","brk_group":null,"abbrev":"S.Af.","postal":"ZA","formal_en":"Republic of South Africa","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"South Africa","name_alt":null,"mapcolor7":2,"mapcolor8":3,"mapcolor9":4,"mapcolor13":2,"pop_est":49052489,"gdp_md_est":491000,"pop_year":-99,"lastcensus":2001,"gdp_year":-99,"economy":"5. Emerging region: G20","income_grp":"3. Upper middle income","wikipedia":-99,"fips_10":null,"iso_a2":"ZA","iso_a3":"ZAF","iso_n3":"710","un_a3":"710","wb_a2":"ZA","wb_a3":"ZAF","woe_id":-99,"adm0_a3_is":"ZAF","adm0_a3_us":"ZAF","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Southern Africa","region_wb":"Sub-Saharan Africa","name_len":12,"long_len":12,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[[1973]],[[-1340,-1749,-1338,1974,-1368,-330,1975],[-1258]]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Zambia","sov_a3":"ZMB","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Zambia","adm0_a3":"ZMB","geou_dif":0,"geounit":"Zambia","gu_a3":"ZMB","su_dif":0,"subunit":"Zambia","su_a3":"ZMB","brk_diff":0,"name":"Zambia","name_long":"Zambia","brk_a3":"ZMB","brk_name":"Zambia","brk_group":null,"abbrev":"Zambia","postal":"ZM","formal_en":"Republic of Zambia","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Zambia","name_alt":null,"mapcolor7":5,"mapcolor8":8,"mapcolor9":5,"mapcolor13":13,"pop_est":11862740,"gdp_md_est":17500,"pop_year":-99,"lastcensus":2010,"gdp_year":-99,"economy":"7. Least developed region","income_grp":"4. Lower middle income","wikipedia":-99,"fips_10":null,"iso_a2":"ZM","iso_a3":"ZMB","iso_n3":"894","un_a3":"894","wb_a2":"ZM","wb_a3":"ZMB","woe_id":-99,"adm0_a3_is":"ZMB","adm0_a3_us":"ZMB","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":6,"long_len":6,"abbrev_len":6,"tiny":-99,"homepart":1},"arcs":[[-1354,-1342,1976,-1367,-9,-581,-1794]]},{"type":"Polygon","properties":{"scalerank":1,"featurecla":"Admin-0 country","labelrank":3,"sovereignt":"Zimbabwe","sov_a3":"ZWE","adm0_dif":0,"level":2,"type":"Sovereign country","admin":"Zimbabwe","adm0_a3":"ZWE","geou_dif":0,"geounit":"Zimbabwe","gu_a3":"ZWE","su_dif":0,"subunit":"Zimbabwe","su_a3":"ZWE","brk_diff":0,"name":"Zimbabwe","name_long":"Zimbabwe","brk_a3":"ZWE","brk_name":"Zimbabwe","brk_group":null,"abbrev":"Zimb.","postal":"ZW","formal_en":"Republic of Zimbabwe","formal_fr":null,"note_adm0":null,"note_brk":null,"name_sort":"Zimbabwe","name_alt":null,"mapcolor7":1,"mapcolor8":5,"mapcolor9":3,"mapcolor13":9,"pop_est":12619600,"gdp_md_est":9323,"pop_year":0,"lastcensus":2002,"gdp_year":0,"economy":"5. Emerging region: G20","income_grp":"5. Low income","wikipedia":-99,"fips_10":null,"iso_a2":"ZW","iso_a3":"ZWE","iso_n3":"716","un_a3":"716","wb_a2":"ZW","wb_a3":"ZWE","woe_id":-99,"adm0_a3_is":"ZWE","adm0_a3_us":"ZWE","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Africa","region_un":"Africa","subregion":"Eastern Africa","region_wb":"Sub-Saharan Africa","name_len":8,"long_len":8,"abbrev_len":5,"tiny":-99,"homepart":1},"arcs":[[-1976,-329,-1977,-1341]]}]}},"arcs":[[[3058,5901],[0,-2],[-1,1],[-2,4],[-2,2],[1,3],[0,1],[2,-2],[2,-5],[0,-2]],[[7080,7328],[-2,0],[-2,1],[-1,2],[0,1],[-2,-2],[-3,-1],[-5,-5],[0,-1],[4,-5],[0,-1],[1,-1]],[[7070,7316],[-3,-2],[-7,-5],[-4,-4],[-1,0],[-3,1],[-4,3],[-1,-1],[-9,0],[-8,-1],[-3,-1],[-6,-1],[-4,0],[-3,-1],[-3,-3],[-3,-1],[-2,0],[-2,-2],[-2,-4],[-5,-6],[-3,-3],[-1,-3],[-2,0],[-2,0],[-2,-3],[-3,-5],[-4,-7],[-2,-3],[-1,-4],[1,-3],[3,-3],[2,-4],[0,-2],[2,-7],[1,-7],[1,-3],[1,-5],[0,-3],[-1,-2],[0,-2],[0,-3],[1,-2],[0,-2],[1,-2],[-1,-2],[-1,-2],[-1,-3],[-2,-5],[-3,-3],[-1,-3],[-2,-5],[-3,-6],[-2,-4],[-1,-3],[-1,-1],[0,-3],[1,-3],[2,-4],[0,-5],[0,-4],[0,-5],[-1,-4],[-6,-4],[-5,-2],[-7,0],[-2,1],[-2,1],[-7,4],[-3,-2],[-1,-7],[5,-10],[2,-6],[3,-9],[2,-5],[-1,-5],[-5,-5],[-4,-5],[-6,-1],[-4,-2],[-2,-2],[-1,-11],[-2,-4],[0,-5],[-1,-5],[-2,-3],[-1,-6],[0,-11],[1,-18],[-3,-5],[-3,-6],[-3,-4],[-3,-2],[-2,1],[-2,3],[-1,3],[-2,3],[-2,-1],[-2,-2],[-4,1],[-3,2],[-1,0],[-1,-3],[-3,-5],[-8,-7],[-3,-1],[-2,-1],[1,-4],[1,-2],[3,-2],[0,-2],[-2,-2],[-2,-2],[-4,-2],[-5,-1],[-4,1],[-3,4],[-3,0],[-2,-2],[-3,-4],[-3,-9],[-1,-1],[-1,-2],[-2,-2],[-2,-3],[-2,-6],[-1,-11],[0,-6],[0,-11],[-1,-7],[-1,-5],[1,-4],[1,-4],[0,-3],[-2,-3],[-1,-2],[-6,-3],[-9,-4],[-5,-3],[-8,-5],[-2,-1],[-5,0],[-3,1],[-3,0],[-5,0],[-4,-1],[-4,-3],[-2,-2],[-2,-3],[0,-1],[-4,2],[-11,4],[-30,-5],[-3,1],[-10,6],[-14,7],[-8,5],[-11,7]],[[6689,6904],[8,15]],[[6697,6919],[6,14],[6,13],[7,14],[0,4],[0,10],[-1,12],[-3,5],[-9,3],[-6,1],[-7,2],[-1,1],[-1,9],[0,5],[0,8],[0,6],[1,11],[0,4],[-3,21],[-2,11],[-2,11],[0,4],[0,4],[4,11],[1,3],[3,5],[1,3],[0,2],[-3,1],[-4,0],[-2,1],[-2,3],[0,5],[1,7],[-2,15],[3,7],[2,5],[7,1],[-3,5],[-1,4],[-1,0],[0,2],[1,2],[1,0],[1,2],[2,3],[1,1],[1,3],[1,2],[1,3],[1,3],[0,4],[1,5],[0,3],[1,2],[-1,4],[0,3],[0,3],[1,1],[1,2],[0,3],[1,3],[1,3],[1,2],[0,3],[-1,3]],[[6701,7235],[2,1],[1,-2],[1,-3],[4,-5],[2,-1],[3,-1],[3,1],[3,1],[1,-1],[3,-3],[3,-6],[2,-2],[0,-3],[1,-1],[2,3],[2,1],[2,0],[3,-1],[2,1],[1,1],[3,5],[4,3],[2,2],[1,7],[1,4],[1,3],[0,3],[-1,2],[-1,3],[1,1],[1,1],[4,0],[6,3],[5,3],[4,3],[2,0],[2,0],[1,1],[1,2],[1,3],[2,2],[5,4],[4,7],[2,5],[1,7],[2,12],[2,12],[1,5],[1,5],[4,3],[3,3],[6,0],[7,0],[2,7],[1,6],[1,3],[2,2],[0,1],[4,-4],[6,-5],[6,-3],[4,-1],[1,0]],[[6847,7335],[9,1],[6,-2],[4,-6],[3,-1],[4,3],[2,0],[1,-1],[1,-1],[3,0],[1,-2],[1,-1]],[[6882,7325],[0,-2],[2,-4],[3,-6],[3,-1],[4,4],[1,0],[1,1],[1,3],[2,3],[4,3],[3,2],[1,2],[1,0],[2,0],[1,1],[0,1],[1,1],[1,1],[1,0],[1,0],[2,-4],[4,-6],[2,-3],[1,1],[2,2],[1,3],[1,5],[-1,6],[1,5],[2,4],[3,2],[6,1],[3,0],[1,-2],[2,-2],[2,0],[2,2],[2,5],[0,6],[-2,7],[1,2],[0,1],[2,3],[3,5],[3,7],[3,8],[3,5],[4,2],[5,-2],[6,-7],[2,-8],[-2,-9],[0,-5],[1,-1],[2,0],[3,2],[2,0],[1,-2],[0,-2],[-1,-4],[-1,-11],[-1,-10],[-1,-9],[0,-9],[1,-6],[1,-10],[2,-6],[2,-3],[2,0],[2,0],[4,4],[6,8],[5,5],[9,3],[2,8],[4,5],[9,8],[5,4],[2,0],[4,-1],[1,-1],[2,-1],[0,-2],[0,-3],[-2,-2],[0,-2],[0,-1],[3,-1],[5,3],[4,2],[2,1],[2,2],[1,3],[3,0],[2,-1],[2,-1],[4,1],[2,-2],[3,-5],[1,-2],[1,-1]],[[5665,4558],[1,-8],[0,-10],[1,-8],[0,-3],[0,-2],[0,-2],[0,-5],[-1,-4],[-1,-2],[1,-6],[-1,-7],[0,-8],[0,-7],[1,-14],[0,-4],[-1,-7],[-1,-5],[-1,-6],[0,-3],[2,-9],[0,-2],[-2,-1],[-1,0],[-6,0],[-8,0],[-9,0],[-8,0],[-7,0],[-8,0],[-6,0],[0,-9],[0,-18],[0,-19],[0,-18],[0,-19],[0,-18],[0,-19],[0,-18],[0,-19],[0,-13],[2,-18],[3,-19],[1,-2],[3,-3],[4,-8],[3,-5],[5,-10],[6,-12],[6,-11],[6,-9]],[[5649,4168],[-9,-4],[-12,-4],[-8,-4],[-11,-4],[-6,-2],[-9,-3],[-1,0],[-2,2],[-5,1],[-6,-3],[-4,-1],[-4,1],[-3,3],[-3,4],[-6,1],[-7,-1],[-8,1],[-7,2],[-6,1],[-3,0],[-3,0],[-4,2],[-3,4],[-3,8],[-3,7],[-1,1],[-1,1],[-1,1],[-8,0],[-7,0],[-4,0],[-11,0],[-11,0],[-10,0],[-11,0],[-11,0],[-10,0],[-11,0],[-10,0],[-6,0],[-5,0],[-6,-1],[-1,0],[-1,1],[-1,2],[-3,4],[-3,3],[-4,5],[-2,6],[-2,2],[-4,1],[-2,1],[-3,0],[-3,-2],[-3,-3],[-2,-3],[-4,-3],[-3,-3],[-5,1],[-1,-1],[-3,1],[-3,2],[-3,0],[-3,-3],[-4,-2]],[[5326,4190],[1,22],[1,10],[0,11],[-1,30],[-1,4],[0,5],[3,4],[1,2],[2,5],[1,7],[2,16],[6,35],[2,34],[4,17],[1,18],[10,23],[2,15],[5,7],[7,8],[5,13],[3,9],[2,18],[0,19],[2,25],[0,7],[-3,10],[0,7],[-3,7],[-2,6],[-2,9],[-4,15],[-1,10],[-3,7],[0,9],[-1,9],[-2,9],[-2,11],[0,3],[1,4],[1,1],[0,-2],[-1,-2],[0,-2],[9,18],[0,4],[0,4],[0,5],[0,6],[-8,34],[-6,31],[-1,16],[-9,21],[-3,14],[-2,9],[-1,4],[0,2],[2,0],[5,3],[7,2],[6,6],[1,2]],[[5362,4846],[4,0],[3,-1],[1,1],[1,0],[8,0],[3,1],[6,-1],[4,0],[2,-1],[5,-1],[8,1],[2,0],[10,0],[9,1],[8,0],[10,0],[7,0],[3,-2],[3,-4],[1,-3],[1,-2],[1,-3],[1,-3],[1,-5],[-1,-6],[1,-7],[1,-8],[1,-9],[3,-10],[2,-7],[-1,-5],[1,-6],[2,-6],[2,-4],[1,-2],[2,-9],[5,-15],[4,-11],[1,-2],[2,1],[3,1],[4,0],[3,-2],[1,0],[4,5],[4,1],[4,2],[2,2],[3,0],[6,-4],[2,0],[5,0],[6,2],[1,15],[0,3],[1,6],[2,4],[0,5],[0,7],[1,7],[4,6],[6,3],[3,1],[5,2],[8,1],[3,0],[1,-1],[-2,-10],[0,-4],[1,-3],[1,-2],[8,-1],[8,0],[9,0],[7,-1],[0,-1],[1,0],[1,-6],[0,-10],[-2,-15],[1,-14],[3,-14],[0,-20],[-1,-12],[-1,-15],[-1,-18],[2,-7],[2,-7],[4,-8],[3,-11],[2,-12],[1,-8],[-1,-3],[0,-6],[1,-8],[-1,-5],[-2,-3],[-1,-4],[2,-7],[0,-6],[1,-2],[0,-2],[1,0],[2,2],[3,4],[2,2],[3,0],[4,-1],[7,-1],[3,1],[6,6],[2,0],[3,-1],[4,-1],[3,-1],[2,2],[1,2],[0,3],[1,2]],[[5339,4852],[-1,2],[-1,5],[1,6],[1,4],[-1,8],[-2,7],[-2,10],[-1,2]],[[5333,4896],[2,3],[2,6],[1,4],[3,0],[1,3],[1,4],[0,2],[4,2],[4,3],[2,3],[2,3],[1,0],[1,-1],[3,-6],[2,-4],[1,-1]],[[5363,4917],[-1,-1],[-3,-3],[-3,-2],[-4,-10],[-3,-4],[0,-1],[-2,-2],[-2,-2],[0,-1],[1,-2],[1,-2],[0,-16],[0,-15],[-1,-2],[-2,0],[-4,-1],[-1,-1]],[[3250,6233],[-5,-3],[0,2],[4,4],[1,0],[0,-3]],[[5557,7634],[1,-1],[2,-6],[2,-5],[3,-1],[1,-2],[2,-3],[2,-3],[1,-9],[0,-6],[0,-2]],[[5571,7596],[-1,-1],[-1,-9],[0,-5],[0,-3],[-1,-1],[-1,-2],[2,-7],[0,-3],[0,-4],[2,-8],[1,-3],[1,-1],[2,-8],[1,-1],[3,1],[2,-1],[1,-2],[0,-1]],[[5582,7537],[0,-5],[0,-3],[2,-3],[0,-2],[-1,-4],[-2,-4],[-2,-1],[-2,-2],[-1,-3],[0,-3],[-1,-2],[-1,-3],[-1,-6],[0,-2],[-1,-2],[-2,0],[-2,0],[-2,-1],[0,-2],[-2,-2],[0,-2],[1,-4],[1,-2],[0,-3],[-1,0],[-1,0],[-1,-1],[0,-2],[0,-2],[-1,-2],[-1,-1],[-2,0],[-2,2],[-1,1],[-1,0]],[[5555,7471],[0,5],[-1,4],[-3,10],[-10,10],[-3,4],[-1,4],[-1,3],[1,0],[1,-1],[1,-1],[1,2],[-1,4],[-2,9],[0,2],[1,7],[2,8],[0,10],[1,8],[-1,5],[-1,6],[2,8],[1,2],[1,2],[0,9],[-3,4],[-3,0]],[[5537,7595],[0,3],[0,5],[0,1],[0,3],[-1,3],[-1,3],[1,4],[2,6],[2,4],[2,4],[2,5],[1,3],[2,1],[0,-1],[1,-1],[0,-5],[0,-1],[1,-2],[2,1],[2,1],[3,3],[1,-1]],[[5572,8642],[0,-1],[-3,-1],[0,2],[-3,-1],[0,1],[1,1],[2,1],[2,0],[1,-2]],[[5546,8650],[0,-1],[-1,1],[-1,-1],[-1,-2],[-1,1],[0,2],[1,4],[2,0],[1,-4]],[[5555,8660],[1,0],[1,0],[3,-2],[0,-1],[2,-1],[0,-1],[-2,-4],[-1,0],[-1,0],[-1,0],[-1,-1],[0,-2],[0,-3],[-7,-1],[-1,1],[-2,8],[0,2],[2,1],[1,0],[0,-4],[2,0],[0,3],[0,2],[0,1],[-1,1],[-1,1],[1,2],[2,1],[1,-3],[2,0]],[[5047,7632],[-1,0],[-2,-3],[-2,-1],[-1,0],[-1,0],[-1,2],[0,2],[0,2],[0,1],[0,2]],[[5039,7637],[1,2],[1,1],[2,0],[4,-2],[1,-2],[0,-1],[-1,-2],[0,-1]],[[6497,6576],[0,-2],[-2,1],[-1,-1],[-3,1],[-2,1],[2,2],[4,3],[1,-2],[1,-3]],[[6461,6583],[-1,-1],[0,3],[0,1],[1,2],[1,-3],[-1,-2]],[[6481,6581],[-2,0],[-2,2],[4,3],[1,1],[1,3],[1,-2],[-1,-4],[-1,-2],[-1,-1]],[[6512,6592],[0,-1],[-1,0],[-2,1],[0,1],[1,2],[1,-2],[1,-1]],[[6563,6661],[2,-4],[0,-32],[1,-2]],[[6566,6623],[-1,-1],[-1,-2],[-2,-4],[-1,-2],[-2,-2],[-1,-3],[-1,0],[-2,3],[-1,4],[1,1],[0,1],[0,3],[-1,1],[-1,0],[-2,-1],[-1,-2],[-1,-3],[0,-5],[0,-5],[0,-3],[0,-4],[-1,-5],[1,-3],[0,-3],[1,-2],[-2,-6],[1,-1],[4,0],[1,-5],[1,-2],[-1,-2],[-2,-1],[-3,-2],[-3,1],[-4,-2],[-2,-3],[1,-2],[1,-1],[0,-4],[-1,-6],[-1,-5],[-1,-7],[-2,-7],[-2,-11],[-2,-9],[-1,-7],[1,-4],[-1,-8]],[[6532,6492],[-2,-5],[-2,0],[-1,1],[-2,0],[-3,1],[-5,1],[-5,1],[-5,2],[-6,1],[-6,2],[-6,1],[-6,2],[-6,1],[-5,1],[-4,2],[-4,0],[-2,1],[-3,1],[-1,3],[-2,4],[-1,3],[-2,4],[-1,4],[-2,4],[-1,3],[-2,4],[-1,4],[-2,4],[-1,4],[-2,3],[-1,4],[-2,4],[-1,4],[-2,3],[-1,4],[-2,3],[0,3],[0,7],[0,2]],[[6432,6583],[1,3],[0,-2],[1,-3],[2,0],[1,0],[1,-11],[1,-3],[2,-2],[6,-1],[4,2],[7,7],[4,2],[10,0],[9,-3],[13,-2],[2,1],[7,5],[5,5],[2,1],[2,5],[1,6],[1,4],[1,2],[2,3],[1,5],[2,6],[10,13],[6,11],[0,4],[3,5],[3,6],[11,17],[3,8],[1,7],[0,1]],[[6557,6685],[1,0],[2,-1],[0,-6],[-1,-5],[0,-6],[0,-3],[1,-3],[2,-1],[1,0],[0,1]],[[6561,6636],[1,0],[1,1],[0,3],[0,1],[-2,0],[0,-2],[0,-3]],[[3207,2032],[3,-1],[6,1],[3,0],[1,-1],[1,0],[4,1],[2,0],[0,-3],[-4,-2],[-2,1],[-8,0],[-4,-3],[-1,0],[-4,-3],[-2,2],[-1,2],[2,3],[2,0],[1,1],[1,2]],[[3093,2024],[0,13],[0,18],[0,15],[0,16],[0,15],[0,16],[0,17],[0,17]],[[3093,2151],[2,-2],[6,-12],[2,-5],[1,-6],[-2,4],[-3,-2],[-2,-3],[-1,-4],[0,-3],[1,-2],[3,-2],[6,-1],[1,0],[4,-14],[1,-4],[3,-2],[5,-7],[5,-8],[5,-7],[7,-6],[5,-4],[6,-6],[6,-7],[6,-5],[7,-4],[6,-3],[11,1],[3,0],[2,-3],[-2,-6],[-2,-5],[-4,-2],[-4,-1],[-3,0],[-3,1],[-3,0],[-3,-3],[-3,-1],[-4,0],[-3,-2],[-3,-1],[-3,1],[-8,5],[-6,1],[-18,2],[-6,2],[-6,1],[-3,0],[-5,-1],[-3,0],[-1,-1]],[[3281,2928],[0,-4],[-1,0],[-4,4],[-1,3],[0,1],[3,-1],[2,-1],[1,-2]],[[3259,3903],[1,-1],[0,-2],[2,-4],[5,-5],[5,-10],[4,-14],[3,-11],[4,-7],[3,-5],[3,-3],[2,-3],[0,-2],[3,-3],[5,-6],[4,-6],[1,-5],[6,-6],[9,-6],[7,-3],[4,0],[6,-5],[8,-10],[5,-7],[1,-4],[6,-6],[12,-13],[6,-3],[3,-3],[1,-4],[2,-1],[2,2],[3,-2],[5,-4],[4,-5],[4,-11],[2,-4],[1,-4],[-1,-4],[-1,-4],[-3,-4],[-1,-1],[0,-2],[0,-3],[-3,-7],[0,-4],[0,-2],[-2,-3],[-4,-5],[-1,-2],[0,-3],[0,-1],[-1,-1],[0,-2],[-1,-5],[0,-5],[0,-7],[0,-2],[-1,-1],[0,-2],[0,-3],[-1,-2],[-1,-2],[-1,-1],[1,-2],[-1,-2],[-3,-2],[-1,-3],[0,-3],[-2,-3],[-2,-3],[0,-4],[1,-6],[12,2],[10,-3],[11,-6],[8,-2],[4,2],[3,-1],[2,-2],[2,-1],[3,2],[3,-1],[2,-4],[2,1],[1,5],[2,5],[3,2],[2,1],[3,-1],[3,-2],[2,-3],[2,0],[2,3],[1,4],[0,5],[1,3],[2,2],[1,3],[1,3],[2,2],[4,1],[2,2],[0,2],[1,3],[3,2],[1,3],[1,3],[1,2],[2,1],[2,7],[2,12],[1,18],[1,25]],[[3483,3711],[2,0],[1,-2],[1,-1],[2,2],[1,1],[3,0],[1,2],[1,1],[1,-2],[1,-1],[2,0],[2,-4],[2,-2],[0,-4],[2,-12],[2,-8],[2,-8],[0,-3],[-1,-4],[-1,-5],[0,-13],[0,-5],[0,-3],[1,-5],[-2,-5],[-2,-8],[-2,-3],[-1,0],[-2,-4],[-3,-2],[-1,1],[-1,-2],[-2,-5],[-1,-3],[-4,-1],[-1,-1],[-2,0],[-1,-1],[-2,-3],[-1,-1],[-2,1],[-1,-1],[-2,-3],[0,-3],[-1,-3],[-1,-2],[-2,-2],[-1,-1],[0,-3],[-1,-1],[-4,-2],[-3,-3],[-2,-5],[-1,-3],[-3,-2],[-4,-5],[-1,-3],[2,-2],[0,-3],[0,-2],[-1,0],[-3,1],[-1,1],[-1,-1],[0,-2],[0,-2],[-1,-2],[-1,-1],[-1,-2],[-1,-3],[-2,-4],[-3,-5],[-3,-7],[-2,-8],[-2,-6],[-3,-3],[-2,-3],[-1,-5],[-2,-8],[-5,-10],[-4,-7],[-4,-4],[-2,-4],[0,-5],[-3,-5],[-4,-6],[-2,-3]],[[3399,3445],[-1,-2],[0,-4],[-1,-5],[-4,-7],[-1,-5],[2,-7],[0,-9],[-1,-3],[-1,-1],[-1,-2],[1,-4],[0,-4],[0,-5],[-2,-6],[-2,-7],[-1,-4],[1,-3],[1,-2],[0,-2],[-1,-4],[-1,-5],[-1,-4],[-2,-2],[-1,-3],[1,-4],[0,-3],[0,-4],[0,-4],[1,-4],[0,-4],[-2,-9]],[[3383,3313],[-1,-5],[2,-23],[-1,-3],[-1,-3],[-2,-1],[-2,1],[-1,-2],[-1,-10],[-3,-22],[1,-5],[2,-9],[1,-5],[0,-4],[1,-8],[-2,-3],[-1,-1],[-1,-2],[2,-9],[1,-4],[4,-9],[14,-12],[6,-7],[7,-10],[4,-10],[0,-8],[-5,-13],[-1,-10],[1,-7],[2,-7],[5,-9],[4,-3],[5,0],[1,-2],[1,-2],[1,-18],[-1,-7],[-1,-6],[-10,-28],[-9,-17],[-3,-10],[-1,-10],[-3,-5],[-14,-15],[-23,-14],[-19,-7],[-4,-2],[-30,-8],[-6,-1],[-7,1],[-7,-1],[-6,2],[-6,2],[-4,6],[-4,1],[-1,-3],[2,-8],[-1,-9],[1,-6],[3,-1],[2,-2],[2,-4],[-4,0],[2,-3],[1,-2],[0,-6],[-1,-15],[-4,-3],[-1,-1],[-1,-3],[-2,-14],[0,-10],[1,-6],[4,-12],[-2,-8],[-3,-4],[-11,-9],[-4,-4],[-7,-3],[-12,0],[-4,1],[-10,8],[-7,5],[-6,4],[-7,2],[1,1],[1,2],[-2,1],[-2,1],[-4,-5],[-2,-4],[0,-4],[0,-9],[1,-7],[3,-19],[0,-11],[-2,-13],[3,-7],[2,-4],[5,-3],[3,-2],[2,0],[1,-1],[-1,-2],[-1,-3],[0,-3],[4,-1],[5,0],[4,2],[1,2],[0,5],[-5,1],[1,2],[4,2],[5,3],[3,1],[1,-2],[2,-2],[1,-6],[1,-7],[0,-8],[0,-8],[-1,-3],[-2,-4],[-9,-4],[-3,1],[-2,6],[-1,6],[-2,5],[-5,3],[-4,-1],[-5,-6],[-4,-2],[-2,-5],[11,-9],[6,-2],[1,0],[2,-1],[-2,-3],[-1,-2],[-8,-5],[-3,-3],[-4,-6],[-6,-13],[-2,-3],[-1,-3],[0,-9],[2,-15],[-2,-7],[1,-7],[-1,-4],[-2,-7],[-8,-11],[-1,-7],[2,-5],[0,-4],[-1,-4],[-3,0],[-12,3],[-4,-4],[-4,-5],[-1,-2],[-2,-2],[-8,-2],[-2,-2],[-9,-18],[-3,-12],[-5,-11],[-1,-5],[0,-6],[0,-6],[1,-5],[2,-5],[3,-7],[17,-26],[3,-2],[18,-3],[4,-3],[3,-6],[1,-5],[-1,-13],[-1,-4],[-2,-4],[-5,-4],[-5,-3],[2,-2],[2,1],[4,1],[2,-1],[2,-6],[-3,-2],[-1,-2],[-2,-4],[-11,-15],[-5,-4],[-5,-6],[-7,-6],[-3,-4],[-4,-7],[-5,-8],[-6,-17],[-1,-3],[1,-2],[-3,-30],[-1,-3],[-3,-4],[-6,-6],[-3,-1],[-4,3],[-3,4],[-2,7],[-3,6],[0,-2],[1,-4],[-1,-4],[-7,-2],[-1,-2],[6,1],[4,-2],[2,-1],[2,-3],[1,-4],[-1,-2],[-4,-2],[-4,-3],[-5,-6],[-3,-7],[-1,-5],[-2,-9],[0,-7],[-3,-5],[-3,-4],[0,-1],[3,2],[1,1],[2,-6],[2,-12],[1,-8],[0,-3],[-1,-3],[-4,-1],[-4,0],[-3,-1],[2,-2],[2,1],[4,-4],[4,2],[2,-3],[1,-2],[7,-17],[5,-11],[3,-6],[-2,-3]],[[3098,2168],[0,4],[-4,1],[-3,1],[-6,3],[-8,4],[-8,0],[-6,3],[-7,4],[-14,1],[-13,0],[-13,0],[-8,0],[-6,0],[-1,2],[0,5],[-2,3],[-3,4],[-4,3],[-2,5],[-2,4],[2,4],[1,10],[0,4],[-1,3],[-1,5],[1,2],[1,1],[1,7],[-1,7],[-1,7],[-1,2],[-2,2],[-1,0],[-4,-2],[-5,0],[-1,-1],[-3,-2],[-3,-4],[-2,1],[-1,4],[-1,4],[-1,3],[-1,5],[-1,6],[-2,8],[-3,6],[0,5],[-1,7],[2,7],[-1,5],[-2,7],[1,7],[1,4],[1,4],[9,1],[0,7],[1,5],[2,5],[1,2],[4,2],[3,2],[3,4],[1,2],[0,4],[0,4],[0,8],[1,3],[2,3],[4,3],[2,8],[-1,7],[-3,5],[-2,3],[-1,5],[2,6],[1,5],[2,7],[0,4],[2,3],[5,6],[2,6],[1,1],[2,1],[0,3],[-1,4],[0,4],[0,4],[0,6],[3,3],[3,5],[1,3],[0,4],[-1,9],[-1,6],[0,2],[-2,4],[-1,3],[2,3],[3,4],[2,5],[-1,4],[-2,3],[-1,6],[1,9],[1,2],[5,1],[1,5],[4,6],[0,6],[-3,3],[-2,6],[-2,5],[-6,3],[-6,1],[-1,5],[0,3],[3,-1],[5,1],[3,0],[3,1],[3,0],[3,-2],[2,2],[1,7],[2,4],[0,4],[-1,3],[-4,1],[-13,2],[-1,3],[0,6],[1,5],[0,2],[1,3],[2,4],[1,4],[-1,4],[-3,6],[2,2],[0,4],[0,3],[-3,4],[-2,5],[0,5],[3,1],[1,2],[1,3],[-1,4],[-3,2],[-5,2],[-1,2],[-1,5],[1,12],[-1,7],[0,4],[1,4],[1,2],[0,7],[-2,3],[1,3],[1,3],[1,3],[1,1],[1,-2],[3,1],[2,3],[1,3],[-1,4],[-2,12],[-2,7],[1,2],[0,3],[0,10],[0,5],[0,18],[0,5],[-2,6],[1,6],[1,4],[1,6],[1,5],[1,2],[2,1],[0,3],[-1,2],[-2,3],[0,4],[0,3],[1,1],[2,0],[1,5],[1,5],[0,2],[-1,3],[-1,8],[-1,4],[1,2],[1,0],[2,-1],[1,1],[1,2],[0,2],[0,2],[2,5],[1,7],[0,5],[0,12],[0,3],[2,3],[2,2],[2,2],[3,3],[4,2],[1,3],[1,4],[1,4],[-2,2],[-2,3],[-1,8],[0,7],[0,9],[-2,7],[-2,9],[-1,7],[1,4],[1,7],[-1,3],[-1,5],[1,5],[1,6],[0,3],[-1,8],[-1,5],[1,4],[1,5],[2,2],[-1,4],[1,3],[2,2],[2,4],[2,1],[1,0],[1,1],[1,3],[0,3],[3,4],[2,4],[3,1],[1,4],[0,5],[0,5],[1,6],[-1,10],[0,5],[-1,4],[0,4],[-1,3],[-2,1],[0,4],[1,1],[1,2],[2,2],[2,13],[1,4],[0,5],[0,2],[1,4],[1,5],[2,5],[1,4],[2,4],[0,3],[1,2],[2,0],[2,1],[0,2],[0,2],[0,6],[0,8],[-1,12],[1,7],[1,8],[1,4],[0,3],[-1,4],[-2,2],[-2,-2],[-1,0],[-2,4],[-1,5],[1,6],[1,3],[1,5],[-1,1],[-2,3],[-2,11],[1,8],[-2,3],[-1,7],[-2,2],[0,5],[-1,6],[0,2],[2,1],[1,4],[-1,2],[-1,3],[-2,-1],[-1,3],[-2,10],[-2,5],[1,9],[0,6],[1,5],[0,5],[1,2],[1,-1],[1,0],[2,4],[1,2],[0,2],[-1,2],[0,3],[0,4],[2,9],[2,10],[1,3],[0,4],[0,1],[1,-2],[4,2],[2,5],[0,4],[2,2],[-1,3],[-2,1],[-1,1],[1,4],[0,8],[0,6],[-1,13],[-1,13],[0,4],[3,6],[2,3],[0,3],[2,15],[1,8],[1,5],[1,8],[3,8],[1,4],[2,1],[1,2],[2,5],[2,6],[2,2],[1,5],[1,6],[2,10],[1,7],[2,2],[1,9],[1,6],[2,2],[2,1],[2,-3],[1,1],[2,3],[4,2],[1,1],[1,3],[0,6],[-2,4],[-3,8],[-2,8],[-1,3],[0,3],[1,4],[1,4],[3,7],[0,5],[-2,19],[-1,5],[-2,10],[0,4],[2,10],[1,4],[2,1],[1,2],[0,2],[-1,2],[-1,3],[0,4],[-2,2],[-1,3],[0,5],[2,7],[1,2],[1,3],[2,3],[1,2],[2,4],[5,5],[5,3],[9,8],[6,4],[0,4],[1,2],[2,18],[4,22],[2,14],[-5,10]],[[3133,3869],[1,3],[3,7],[1,6],[1,2],[5,6],[1,4],[1,4],[1,3],[2,1],[3,3],[4,2],[1,4],[2,6],[0,6],[1,2],[2,0],[2,-2],[1,-2],[5,-9],[3,-4],[2,-1],[5,1],[1,0],[12,0],[1,-1],[4,-2],[3,-1],[1,-1],[3,-3],[2,-8],[2,-6],[1,-6],[2,-10],[1,-4],[0,2],[2,11],[1,6],[2,8],[5,16],[1,3],[2,1],[1,0],[1,-1],[2,0],[1,1],[11,1],[12,0],[1,-3],[2,-7],[2,-3],[0,-1]],[[6265,7523],[-1,-1],[-1,1],[0,2],[0,1],[1,0],[1,-1],[0,-2]],[[6291,7425],[-5,0],[-4,-2],[-2,0]],[[6280,7423],[-1,5],[-1,3],[-2,9],[1,4],[-2,2],[-3,4],[-1,2],[0,2],[1,4],[-1,4],[-1,1],[-2,0],[-2,-1],[-4,-3],[-3,2],[-2,2],[-1,1],[-2,-1],[0,1],[0,4],[-1,2],[-1,3],[-2,1],[-4,-2],[-3,-1]],[[6243,7471],[-1,2],[-5,8],[-4,6],[-3,3],[-3,0],[-5,-1],[-2,0],[-4,3],[-4,3],[1,1],[1,1],[-1,5],[-2,6],[0,2],[-1,3],[0,3],[2,5],[2,4],[0,4],[-1,4],[-2,8],[-1,3],[-2,2],[-2,3],[0,3]],[[6206,7552],[1,0],[5,0],[4,1],[3,1],[5,2],[2,1],[2,1],[7,-2],[2,1],[8,1],[-1,2],[5,1],[0,1]],[[6249,7562],[1,-3],[2,-2],[2,-2],[1,-1],[0,-1],[-4,-2],[0,-1],[1,-1],[5,-3],[3,0],[1,-1],[1,-3],[2,-3],[2,-2],[0,-1],[-1,-2],[-4,-6],[-1,-1],[0,-3],[2,-6],[3,-6],[5,-5],[6,-6],[0,-3],[-1,-4],[-1,-3],[0,-2],[-1,-1],[-6,1],[-1,-1],[0,-1],[-1,-1],[3,-1],[3,-4],[2,-4],[2,-2],[3,-3],[2,-4],[3,-4],[3,2],[5,-4],[0,-2],[-1,-2],[-2,-3],[-1,-1],[0,-1],[1,-1],[1,-2],[2,-3],[2,-4],[-1,-1],[-2,0],[-1,0],[-1,-1],[0,-1],[2,-3],[1,-3],[0,-4],[0,-5]],[[6249,7547],[0,-1],[1,1],[0,1],[0,2],[-1,0],[-1,0],[0,-2],[1,-1]],[[258,4357],[-2,0],[-1,2],[3,3],[1,1],[3,-1],[-2,-1],[-2,-4]],[[500,396],[-9,-1],[-20,3],[-6,2],[-2,2],[-6,2],[-2,1],[0,2],[0,2],[-2,1],[-1,1],[-2,1],[28,-1],[11,-2],[2,-1],[19,-6],[-5,-1],[-5,-5]],[[611,455],[-2,-1],[-2,3],[-11,7],[-6,4],[-5,3],[-1,2],[2,0],[15,-7],[3,-2],[12,-5],[-5,-4]],[[543,484],[-3,0],[-75,7],[-14,2],[-4,1],[-1,1],[0,1],[0,2],[2,2],[19,2],[20,-2],[25,-5],[17,-3],[9,-4],[4,-2],[1,-2]],[[724,574],[-5,0],[-7,0],[-5,2],[-11,2],[-3,4],[-13,3],[-6,1],[2,3],[14,-4],[17,-5],[14,-3],[3,-3]],[[3340,556],[-1,-12],[0,-6],[-1,-4],[-3,-3],[-5,-3],[-4,-3],[-9,-4],[-40,4],[-18,3],[-8,4],[-1,2],[-2,6],[-2,2],[-16,-2],[-10,-2],[-2,-1],[-2,-3],[-2,-1],[-26,8],[-27,9],[-11,5],[-4,3],[-1,1],[2,2],[3,1],[3,1],[3,0],[2,-1],[2,-1],[2,-5],[1,-1],[4,-1],[96,0],[8,1],[17,1],[9,2],[3,3],[-8,1],[-3,2],[-3,4],[-1,4],[1,3],[11,1],[1,1],[-2,2],[0,3],[6,2],[2,3],[13,4],[20,-2],[4,-6],[-1,-4],[-1,-3],[0,-6],[8,-1],[2,-2],[3,-2],[-3,0],[-3,-1],[-2,-3],[-2,-3],[-2,-2]],[[4135,588],[4,-2],[4,3],[-1,3],[3,4],[3,-5],[22,-5],[7,-5],[-3,-1],[-2,0],[-7,0],[-10,-5],[-12,4],[-21,3],[-6,3],[-5,6],[9,6],[2,-1],[13,-8]],[[4101,595],[-5,-1],[-1,2],[2,3],[3,4],[7,0],[6,-2],[-1,-2],[-1,0],[-10,-4]],[[3162,571],[-3,0],[-2,1],[-1,1],[-1,4],[-14,4],[-1,2],[-1,5],[-3,2],[-17,8],[-2,2],[-1,2],[3,1],[7,-2],[13,0],[3,-1],[3,-1],[14,-1],[7,0],[4,-7],[8,-2],[1,-4],[1,-6],[-11,-5],[-2,-1],[-5,-2]],[[3131,607],[-4,-2],[-21,1],[-7,1],[-3,1],[3,6],[3,2],[2,1],[6,3],[9,1],[6,0],[12,-3],[-3,-2],[-2,-1],[-2,-4],[1,-4]],[[4057,615],[-3,-2],[-68,4],[-3,0],[1,4],[9,1],[5,1],[7,2],[6,3],[2,0],[31,-7],[11,-4],[2,-1],[0,-1]],[[582,587],[-35,-2],[-14,2],[-29,6],[-41,11],[-11,4],[-7,3],[-7,4],[-1,4],[1,7],[1,5],[2,3],[9,4],[4,4],[9,4],[2,4],[4,0],[7,-1],[7,-1],[6,-1],[6,-2],[15,-6],[10,-6],[14,-7],[15,-8],[8,-3],[7,-5],[8,-6],[1,-2],[3,-3],[2,-2],[2,-2],[2,-1],[1,-3],[0,-2],[-1,-2]],[[3046,594],[-6,0],[-12,1],[-12,2],[-3,1],[-5,3],[-1,2],[-1,2],[0,3],[3,11],[6,7],[5,4],[18,9],[2,1],[16,5],[6,2],[10,5],[53,18],[13,3],[5,-2],[3,-2],[-2,-2],[-7,-5],[-3,-4],[-9,-6],[-19,-11],[-13,-8],[-17,-12],[-4,-4],[-8,-9],[1,-4],[-2,-6],[-11,-3],[-6,-1]],[[9656,683],[-4,-4],[-4,-2],[-12,1],[-8,-3],[-10,-2],[-4,2],[-2,4],[-1,5],[0,1],[2,1],[13,-3],[5,-3],[3,0],[8,4],[6,4],[2,3],[2,1],[2,-2],[2,-5],[0,-2]],[[3743,644],[4,0],[15,1],[14,0],[9,-1],[3,-2],[2,-3],[3,-5],[2,-5],[3,-5],[1,-8],[3,-3],[4,-7],[1,-6],[-2,-13],[-2,-5],[-5,-5],[-7,1],[-2,-1],[-3,-1],[-1,0],[-1,-1],[8,-5],[0,-1],[1,-2],[-1,-1],[-1,-1],[-158,-26],[-6,-1],[-6,-3],[-2,-2],[-2,-2],[-122,-5],[-1,0],[-1,1],[-3,5],[-1,8],[1,3],[6,3],[2,2],[11,12],[5,5],[2,5],[2,-1],[5,-2],[3,-1],[7,1],[6,3],[3,2],[3,-1],[1,-2],[1,-1],[16,9],[15,9],[14,11],[8,7],[1,2],[2,3],[-1,3],[-2,2],[-1,1],[-1,0],[-8,2],[3,3],[2,4],[1,4],[1,4],[-1,3],[1,1],[3,2],[2,2],[2,3],[-3,1],[-1,2],[3,5],[2,5],[2,3],[5,6],[17,13],[6,8],[1,2],[39,12],[6,2],[12,1],[6,0],[16,-1],[7,-1],[13,-3],[19,-6],[7,-3],[7,-3],[7,-5],[6,-5],[2,-1],[0,-3],[1,-3],[-1,-3],[-1,-5],[-3,-4],[-31,-4],[-4,-1],[-3,-3],[-1,-3],[3,-2]],[[855,729],[8,-3],[-14,1],[-6,4],[4,2],[4,0],[3,-2],[1,-2]],[[822,727],[-2,0],[-24,5],[-5,1],[8,3],[6,0],[14,-7],[4,0],[-1,-2]],[[9640,730],[11,-4],[27,0],[23,-3],[2,-4],[-6,-3],[-10,-5],[-7,-2],[-5,0],[-12,3],[-14,-1],[-3,-3],[-7,-3],[-9,-5],[-2,4],[-3,4],[-8,9],[-1,2],[5,1],[2,3],[5,4],[-1,2],[-4,3],[-1,2],[2,4],[6,1],[8,-1],[3,-5],[-1,-2],[0,-1]],[[872,748],[-11,0],[-7,1],[-1,5],[1,0],[15,-2],[6,-1],[2,-1],[-1,-1],[-4,-1]],[[855,742],[-2,-1],[-12,0],[-3,1],[-1,1],[-17,1],[-7,4],[-2,2],[3,2],[6,1],[2,2],[15,1],[2,-1],[1,-2],[7,-4],[2,-3],[0,-2],[4,-1],[2,-1]],[[928,751],[-11,-3],[-3,1],[1,4],[-1,2],[-1,1],[1,2],[6,0],[18,-3],[2,-3],[-12,-1]],[[852,765],[11,-1],[7,1],[8,-2],[2,-1],[-1,-1],[-9,-1],[-4,-2],[-5,0],[-7,1],[-6,4],[4,2]],[[827,762],[-12,-1],[-5,1],[-1,2],[1,1],[18,2],[2,-2],[1,-1],[-4,-2]],[[900,769],[1,-1],[-5,1],[-6,3],[-1,1],[3,1],[3,-1],[4,-2],[1,-2]],[[922,770],[-3,-5],[-9,3],[-3,3],[2,3],[4,2],[5,-2],[2,0],[2,-4]],[[925,792],[-5,-1],[-8,4],[-5,3],[-2,2],[0,1],[0,1],[2,1],[11,-2],[7,-9]],[[9526,831],[-5,-7],[-4,0],[-2,1],[4,5],[3,1],[3,1],[1,-1]],[[966,823],[-4,0],[-5,1],[-14,5],[-3,2],[2,2],[5,2],[4,-1],[10,-4],[2,-3],[2,-2],[1,-2]],[[9554,874],[-4,0],[-2,1],[-1,4],[0,2],[8,4],[5,2],[-3,-8],[-1,-1],[-2,-4]],[[1322,896],[-4,-3],[-9,2],[1,2],[8,2],[5,-1],[-1,-2]],[[1359,888],[-3,-1],[-12,3],[-6,0],[-3,2],[-2,1],[-1,2],[-3,2],[6,4],[5,2],[4,0],[1,-3],[9,-2],[8,0],[0,-3],[0,-3],[-3,-4]],[[1462,886],[-4,-1],[-9,3],[-2,2],[-3,3],[-2,1],[0,1],[-1,8],[2,1],[5,-2],[11,-4],[7,-1],[2,-3],[-2,-6],[-4,-2]],[[1757,912],[-14,-2],[-3,2],[-1,2],[0,3],[28,12],[5,-1],[1,-1],[-8,-7],[-4,-2],[2,-1],[0,-1],[-1,-2],[-5,-2]],[[1679,915],[-6,-1],[-2,1],[-1,1],[-1,1],[3,3],[3,1],[1,1],[-4,10],[4,1],[4,1],[8,0],[7,-2],[2,-1],[1,-2],[-3,-6],[-2,-1],[-11,-5],[-3,-2]],[[1651,936],[5,-6],[2,-4],[1,-4],[-20,-10],[-1,0],[-1,-5],[1,-2],[1,0],[0,-2],[-2,-1],[-34,-4],[-16,4],[-2,2],[-1,4],[2,0],[4,1],[-1,2],[-2,2],[-1,3],[5,6],[3,2],[-9,5],[-2,1],[-1,1],[-4,-1],[-4,1],[1,2],[1,4],[4,3],[3,0],[3,0],[13,0],[13,-2],[13,-1],[21,-1],[5,0]],[[4427,928],[-1,-13],[0,-2],[1,-3],[5,-7],[1,-5],[-1,-2],[-2,-3],[-6,1],[-3,1],[0,1],[-4,13],[-2,2],[-3,3],[-13,2],[-12,-1],[3,3],[18,4],[5,3],[3,3],[1,6],[3,6],[5,3],[3,0],[2,-5],[0,-5],[-3,-5]],[[9717,944],[-4,-1],[-5,4],[-1,1],[5,7],[-1,2],[1,2],[2,2],[1,-1],[3,-7],[2,-4],[-3,-3],[0,-2]],[[1491,963],[7,-2],[3,-2],[3,-2],[3,-1],[3,-3],[2,-5],[2,-1],[5,-3],[1,-3],[0,-2],[-9,-1],[-3,1],[-3,-1],[-1,-2],[0,-2],[1,-1],[4,-1],[3,0],[7,1],[2,0],[4,-1],[3,-1],[8,5],[2,1],[2,0],[12,-6],[2,-3],[-1,-1],[-2,-2],[1,-2],[5,-2],[3,-3],[1,-1],[0,-2],[-1,-3],[0,-3],[-3,-2],[-1,0],[-6,2],[-19,1],[-6,1],[-9,6],[-4,1],[-3,1],[-6,5],[-10,4],[-6,4],[0,4],[-1,3],[-1,1],[-1,1],[-4,0],[-3,0],[-2,-1],[-3,-3],[-3,0],[-3,0],[0,1],[0,7],[-3,1],[-2,3],[-1,4],[1,4],[4,5],[4,0],[4,-1],[4,1],[6,1],[8,0]],[[2948,959],[-3,-2],[-2,1],[-3,3],[0,2],[2,2],[1,1],[6,7],[4,0],[4,-1],[-4,-6],[-1,-4],[-4,-3]],[[2096,970],[-3,-3],[-7,1],[-4,4],[-2,6],[-1,2],[2,1],[3,2],[12,-13]],[[2934,973],[-4,-7],[0,-1],[-4,-2],[1,-2],[1,-1],[1,-2],[2,-3],[3,-3],[-2,-5],[-4,-3],[-37,16],[-2,3],[-2,1],[-1,3],[0,3],[1,3],[1,1],[3,2],[4,0],[7,-3],[1,0],[2,3],[4,0],[1,3],[-6,0],[-4,3],[-3,2],[-1,2],[10,3],[25,-4],[4,-1],[1,-2],[2,-3],[-4,-6]],[[2394,984],[-4,0],[-4,2],[0,1],[1,2],[2,0],[5,-3],[1,-2],[-1,0]],[[2468,969],[-6,-2],[-4,1],[1,13],[3,3],[-1,3],[-4,6],[-4,8],[2,2],[9,2],[9,0],[4,-3],[2,-5],[-1,-2],[-3,-6],[3,-1],[1,-4],[-1,-4],[-3,-6],[-3,-3],[-4,-2]],[[2360,998],[-5,0],[-2,1],[2,3],[13,5],[5,3],[1,-1],[0,-1],[3,-5],[0,-2],[-17,-3]],[[4552,998],[-2,-2],[-4,0],[-3,3],[-2,4],[0,3],[1,3],[3,1],[2,-1],[3,-7],[2,-4]],[[6901,1019],[-1,0],[0,3],[4,4],[3,5],[1,1],[4,-5],[-1,-3],[-4,-3],[-6,-2]],[[4652,1027],[-2,-2],[-4,1],[-4,3],[-2,2],[-1,2],[2,3],[1,1],[2,-1],[5,-3],[2,-4],[1,-2]],[[6941,1041],[-3,-7],[-1,0],[-2,5],[1,2],[2,2],[3,-1],[0,-1]],[[2275,1042],[-2,-6],[0,-6],[7,0],[3,11],[6,2],[3,-6],[-3,-6],[2,-3],[2,-2],[3,0],[3,3],[1,2],[1,3],[2,6],[6,5],[13,1],[8,-3],[-5,-9],[-12,-5],[-7,-5],[2,-2],[3,0],[2,0],[7,3],[16,5],[6,3],[2,0],[0,-6],[2,-5],[-1,-9],[-7,-2],[-7,0],[2,-5],[-1,-1],[0,-2],[-18,2],[-3,0],[-3,-2],[-3,1],[-7,3],[-3,0],[-6,-2],[-7,0],[-9,0],[-7,0],[-6,4],[-7,0],[-7,1],[-8,3],[-7,2],[-9,4],[-3,1],[-2,1],[-5,0],[-34,6],[-6,-1],[-3,0],[-3,0],[-7,3],[-1,3],[0,3],[2,1],[3,2],[48,6],[5,2],[4,0],[2,-6],[5,-6],[1,0],[1,1],[5,5],[9,-2],[4,3],[4,4],[9,5],[7,-1],[5,-2],[3,-5]],[[4917,1082],[-3,-1],[-3,0],[-3,2],[-3,3],[0,1],[0,3],[0,1],[4,0],[1,-1],[1,-1],[6,-7]],[[3318,1091],[-3,0],[-4,1],[-3,2],[-1,2],[1,2],[3,1],[5,0],[2,-3],[1,-2],[-1,-2],[0,-1]],[[4929,1108],[3,-2],[5,0],[4,-1],[0,-2],[-3,-3],[-2,-6],[-2,-2],[-7,-6],[-5,-1],[-1,3],[0,3],[1,2],[0,2],[-5,3],[0,3],[-1,2],[-13,7],[-3,1],[1,2],[14,0],[8,-1],[6,-4]],[[2952,1115],[5,-5],[-4,-4],[-15,-7],[-8,-3],[-8,-2],[-38,-7],[-3,0],[-3,1],[-1,1],[-3,6],[1,3],[3,2],[4,2],[6,2],[23,3],[2,2],[2,2],[0,3],[1,3],[2,1],[1,0],[3,-2],[6,-10],[2,2],[1,2],[0,8],[2,1],[5,-2],[3,-3],[0,5],[2,1],[2,0],[3,-1],[4,-4]],[[3312,1111],[-2,0],[-2,1],[-2,4],[0,1],[1,4],[1,1],[10,1],[2,-2],[1,-4],[-2,-2],[-7,-4]],[[4836,1120],[-7,-3],[-1,1],[-3,2],[-4,6],[5,0],[5,3],[3,-1],[0,-1],[2,-7]],[[5084,1118],[-10,-2],[-2,2],[-1,3],[2,2],[12,7],[3,-1],[1,0],[1,-3],[-1,-4],[-1,-2],[-4,-2]],[[4908,1121],[-4,0],[-1,2],[-1,1],[6,8],[3,2],[7,2],[4,-1],[2,-2],[1,-3],[0,-5],[-2,-2],[-15,-2]],[[3008,1137],[1,-2],[6,2],[3,-2],[0,-1],[-3,-5],[-3,-2],[-4,-1],[-2,8],[-1,1],[3,2]],[[6999,1115],[-2,0],[-2,1],[-3,4],[-2,3],[-1,3],[0,7],[2,3],[3,1],[1,-3],[0,-3],[1,-2],[3,-3],[2,-3],[0,-1],[1,-3],[-1,-2],[-2,-2]],[[5125,1124],[-4,-1],[-5,3],[-2,2],[-1,5],[0,2],[1,2],[4,1],[6,-1],[3,-2],[1,-4],[-1,-4],[-2,-3]],[[5745,1130],[-1,-2],[-5,0],[-4,-2],[-3,1],[-10,3],[-1,5],[-1,2],[1,3],[9,8],[3,0],[5,-1],[3,-2],[1,-4],[4,-8],[-1,-3]],[[5036,1137],[-3,-7],[-1,0],[-2,4],[-3,5],[-1,3],[0,4],[2,3],[8,2],[3,-1],[1,-6],[-4,-7]],[[3301,1153],[-4,0],[-2,2],[-1,1],[0,2],[2,2],[5,-1],[1,-5],[-1,-1]],[[2917,1168],[5,-2],[7,-6],[2,-3],[1,-2],[-1,-1],[-3,-2],[-3,-8],[-4,-2],[-12,1],[-13,3],[-1,1],[-1,3],[0,3],[1,4],[2,2],[10,2],[1,1],[1,4],[2,1],[2,0],[4,1]],[[5450,1151],[-2,-3],[-8,5],[-5,1],[-2,1],[-1,4],[0,1],[1,2],[3,3],[5,3],[10,1],[9,-1],[1,-2],[-8,-5],[-3,-10]],[[3000,1169],[-6,-2],[-4,2],[-12,3],[-5,7],[1,4],[2,2],[4,1],[7,-3],[4,-2],[9,-12]],[[3278,1168],[-3,-1],[-2,6],[-2,8],[-7,12],[-2,6],[1,2],[2,0],[6,-2],[3,-2],[4,-5],[5,-4],[0,-4],[0,-4],[-3,-1],[0,-3],[-2,-6],[0,-2]],[[3054,1199],[-1,-7],[5,2],[1,0],[4,-3],[8,-15],[2,-5],[4,-14],[3,-10],[11,-19],[4,-10],[3,-5],[0,-8],[3,-2],[1,-4],[1,-10],[1,-13],[0,-23],[0,-6],[-4,-9],[-2,-6],[-2,-4],[-3,-3],[-14,-13],[-2,-6],[-23,-5],[-14,-3],[-5,3],[-5,0],[-7,0],[-19,-1],[-15,-2],[-1,1],[-2,2],[-1,2],[-4,-1],[-3,1],[-3,2],[-3,4],[-2,2],[0,2],[6,6],[3,2],[4,0],[6,-1],[7,-2],[15,-2],[20,0],[6,0],[6,2],[7,6],[-3,2],[-4,1],[-3,0],[-3,0],[-8,-3],[-6,-2],[-7,-2],[-7,2],[-6,6],[0,2],[22,4],[2,1],[4,2],[1,3],[0,2],[-14,4],[-3,0],[-3,-1],[-7,2],[-7,5],[-5,5],[-3,1],[-2,-2],[-14,-15],[-1,0],[-6,1],[-6,3],[-7,1],[-4,-1],[-1,-1],[4,-3],[3,-3],[1,-3],[-10,-7],[-3,-1],[-4,1],[-2,1],[-3,4],[-3,1],[-6,-1],[-4,0],[-3,2],[-3,2],[-3,2],[-4,3],[-2,2],[-1,3],[0,2],[1,2],[0,2],[0,2],[0,2],[1,2],[6,3],[6,1],[6,-4],[5,-2],[2,0],[0,1],[1,1],[0,2],[-2,4],[0,3],[2,2],[2,1],[2,1],[1,0],[4,-1],[3,-2],[6,-4],[5,-4],[2,0],[1,1],[1,2],[-6,5],[0,2],[0,3],[4,2],[2,0],[10,-3],[6,-1],[5,0],[12,3],[-6,3],[-13,3],[-3,3],[-2,3],[10,3],[10,0],[18,-4],[5,2],[6,6],[3,1],[13,0],[10,2],[1,0],[2,-1],[10,-9],[1,0],[1,2],[0,3],[0,4],[0,3],[-1,2],[-2,0],[-2,-1],[-2,1],[-3,2],[-3,1],[-10,1],[-7,2],[-4,1],[-3,3],[-1,3],[4,7],[14,8],[6,2],[7,1],[3,-1],[8,-3],[1,0],[1,1],[-7,5],[-7,4],[-3,4],[-3,1],[-11,1],[-5,-3],[-3,-1],[-3,1],[-16,7],[-1,1],[-2,3],[-1,2],[-1,3],[0,4],[1,2],[2,9],[2,7],[-1,6],[-3,3],[-3,3],[-4,3],[0,3],[-1,2],[0,4],[1,3],[1,3],[2,2],[3,2],[14,4],[27,5],[3,-3],[4,-5],[1,-2],[2,-11],[0,-2]],[[2485,1221],[-1,0],[-1,0],[-1,0],[0,1],[0,1],[0,1],[0,1],[0,1],[1,0],[1,0],[1,0],[0,-1],[0,-1],[0,-1],[0,-1],[0,-1]],[[3315,1223],[-1,-2],[-4,1],[-2,1],[-3,3],[2,2],[3,-1],[3,-1],[2,-3]],[[3129,1281],[-6,-2],[-4,2],[0,4],[-1,1],[0,1],[5,3],[4,1],[5,-1],[2,-1],[0,-2],[-3,-3],[-1,-2],[-1,-1]],[[9578,1294],[-3,-2],[-1,0],[-2,4],[2,5],[-1,7],[1,2],[4,-4],[0,-2],[2,-3],[0,-2],[-1,-3],[-1,-2]],[[3129,1331],[-2,-1],[-3,1],[-2,1],[3,4],[-1,3],[3,1],[2,-1],[2,-4],[0,-1],[-2,-3]],[[7383,1327],[-5,-1],[0,1],[0,1],[-8,5],[-1,5],[1,3],[6,-1],[7,-2],[3,-7],[-3,-4]],[[6348,1337],[-5,-1],[-2,0],[0,2],[0,1],[0,2],[2,1],[7,0],[4,-1],[0,-1],[1,-2],[-1,-1],[-6,0]],[[9535,1335],[0,-3],[-2,0],[-2,3],[-2,7],[2,1],[2,-2],[1,-3],[1,-2],[0,-1]],[[7403,1338],[-3,-1],[-2,0],[-3,3],[1,2],[3,1],[4,0],[1,-1],[2,-1],[-3,-3]],[[3111,1297],[-3,-3],[-2,-1],[-2,1],[-2,0],[-2,-1],[-1,-6],[-2,-3],[-2,-2],[-1,1],[-2,0],[-2,-1],[-2,-1],[-2,1],[-2,4],[-4,4],[0,1],[-1,4],[0,4],[2,2],[7,10],[2,5],[3,5],[2,4],[4,8],[2,3],[12,8],[3,2],[3,0],[1,-5],[-2,-2],[-5,-5],[-1,-8],[0,-3],[0,-1],[2,-1],[2,-1],[1,-2],[2,-2],[-4,-4],[-3,-2],[-2,-3],[-4,-2],[-2,-2],[3,0],[4,-2],[1,-2],[-1,-2]],[[7370,1347],[-3,-2],[-3,1],[-1,1],[-1,2],[2,3],[1,0],[1,-2],[4,-3]],[[7745,1355],[-3,0],[-2,1],[-2,3],[0,1],[4,1],[6,-3],[-3,-3]],[[9516,1355],[-1,-3],[-2,0],[-6,7],[1,3],[-1,3],[0,2],[1,1],[7,-11],[1,-2]],[[7784,1370],[-3,-1],[-2,2],[3,4],[3,1],[0,-4],[-1,-2]],[[3150,1371],[-6,-7],[-1,1],[-1,0],[0,1],[2,3],[1,7],[4,2],[1,0],[-1,-3],[1,-3],[0,-1]],[[7683,1380],[3,-1],[6,0],[2,-2],[0,-3],[0,-1],[-2,-2],[-15,-2],[-3,3],[3,6],[3,2],[3,0]],[[7572,1393],[-4,0],[-4,0],[-2,3],[0,1],[1,2],[6,0],[3,-1],[1,-2],[0,-1],[-1,-2]],[[3171,1391],[-6,-2],[-4,1],[0,2],[1,3],[3,2],[-1,5],[2,1],[1,4],[4,3],[5,-2],[0,-4],[0,-2],[-4,-1],[0,-1],[-1,-3],[0,-4],[0,-2]],[[7804,1401],[-12,-1],[-1,1],[-4,0],[-2,1],[0,3],[1,5],[2,3],[4,3],[2,1],[8,1],[5,-1],[4,-4],[1,-3],[-1,-3],[-7,-6]],[[7871,1414],[-1,-1],[-5,1],[-1,1],[0,5],[-1,2],[-1,1],[-8,3],[0,4],[1,2],[2,0],[7,-3],[2,-3],[-1,-4],[0,-1],[3,-3],[3,-3],[0,-1]],[[3241,1448],[-4,-3],[-3,0],[3,7],[2,0],[5,3],[1,0],[-2,-3],[-2,-4]],[[3410,1465],[-3,0],[-3,1],[0,3],[0,2],[2,1],[2,0],[8,5],[3,1],[-1,-2],[0,-3],[-1,-2],[-7,-6]],[[3245,1470],[-3,-6],[4,1],[3,2],[3,1],[2,-3],[-5,-3],[-5,-4],[-2,-2],[-2,-1],[-3,1],[-3,-1],[-2,-4],[-3,-2],[-1,2],[-1,1],[-5,1],[-3,2],[-2,2],[-3,0],[2,4],[1,3],[9,4],[-1,1],[-1,2],[7,2],[0,2],[0,3],[2,1],[2,3],[1,0],[4,0],[3,-3],[-1,-3],[3,-6]],[[3268,1473],[-2,-2],[-1,-1],[-2,1],[-2,-3],[-4,1],[-1,1],[1,0],[0,2],[3,3],[3,8],[1,2],[-3,4],[-1,2],[1,2],[1,2],[3,2],[3,0],[2,-2],[0,-3],[6,-2],[-1,-6],[-2,-4],[-1,-4],[-3,-2],[-1,-1]],[[3279,1493],[-3,0],[1,3],[2,2],[4,1],[-2,-3],[-1,-2],[-1,-1]],[[3393,1494],[1,0],[1,0],[1,1],[1,2],[3,2],[3,1],[-1,-3],[7,-5],[0,-4],[1,-3],[-3,-1],[-2,-4],[2,-1],[1,-3],[-2,0],[-6,1],[-3,0],[1,3],[-1,1],[-4,-1],[-1,-6],[-1,0],[-1,1],[1,3],[-2,1],[-1,0],[-4,-3],[-1,0],[-3,3],[8,5],[-3,2],[-1,2],[0,4],[-2,-1],[-3,-1],[-1,0],[-2,1],[1,3],[2,4],[2,4],[4,3],[2,1],[2,1],[2,2],[2,0],[2,-4],[0,-2],[-2,-3],[0,-6]],[[3406,1509],[0,-1],[6,0],[1,-1],[-3,-2],[-1,0],[-2,-1],[-8,2],[-2,2],[7,2],[2,-1]],[[3315,1505],[-4,-2],[-2,1],[-3,2],[5,1],[0,7],[2,3],[4,-2],[-2,-4],[-1,-2],[1,-3],[0,-1]],[[3448,1524],[-3,-2],[-6,4],[-1,2],[0,2],[10,2],[3,-1],[1,-4],[-4,-3]],[[0,325],[45,1],[9,-1],[9,-2],[21,0],[19,-2],[5,-3],[7,-2],[13,2],[11,1],[9,0],[82,-5],[85,-8],[17,-2],[15,-6],[17,0],[95,-4],[15,0],[59,-5],[102,-12],[9,0],[10,0],[-5,6],[-10,6],[-13,4],[9,1],[18,0],[-4,3],[-10,2],[-36,2],[-147,14],[-3,1],[-2,1],[-4,1],[-6,2],[-22,1],[-6,1],[-3,2],[1,0],[2,0],[34,1],[4,2],[0,1],[-2,1],[-5,1],[-14,5],[-5,2],[3,3],[2,1],[11,1],[3,3],[-2,4],[-24,8],[-16,3],[-11,-2],[-20,0],[-25,-2],[-7,2],[-7,3],[-8,5],[-5,2],[-7,5],[-11,4],[-56,11],[-10,3],[-70,18],[-3,3],[-2,3],[32,-7],[7,0],[7,2],[5,-1],[8,2],[8,1],[22,-6],[44,-8],[12,-4],[6,-2],[6,0],[5,-2],[6,1],[4,-1],[9,1],[42,1],[16,-1],[20,-5],[8,-7],[5,-3],[11,3],[9,3],[17,2],[6,-1],[9,-4],[10,-6],[45,2],[19,0],[13,-3],[48,9],[8,2],[11,7],[-9,2],[-7,0],[-2,4],[4,1],[14,2],[28,3],[16,2],[8,7],[37,11],[12,5],[11,8],[-25,16],[-23,13],[8,4],[7,4],[3,2],[3,4],[-7,4],[-7,4],[-12,3],[-44,8],[-15,3],[6,5],[8,4],[17,2],[108,6],[108,7],[3,4],[-14,4],[-13,1],[-4,2],[-2,2],[0,4],[-1,1],[-5,0],[-19,5],[-5,1],[-6,4],[-2,4],[4,8],[6,3],[11,2],[7,1],[23,0],[8,1],[4,1],[-1,4],[-2,2],[0,2],[4,1],[4,0],[2,3],[-3,5],[-7,2],[-17,5],[-40,6],[-16,5],[-9,4],[-7,4],[-8,2],[-5,3],[1,2],[-2,5],[-3,1],[-13,-2],[-22,1],[-28,4],[-19,5],[-26,12],[-9,7],[7,4],[8,3],[33,6],[5,2],[7,6],[-11,3],[-10,-1],[-8,2],[-34,0],[-20,0],[-16,7],[-12,7],[-3,4],[-3,6],[4,9],[4,7],[-1,8],[1,12],[6,3],[4,1],[11,-9],[9,0],[13,1],[8,5],[5,2],[8,0],[15,-2],[8,1],[8,-1],[25,-5],[5,-3],[3,-2],[1,-3],[3,-3],[11,-2],[30,2],[8,-1],[21,-8],[18,-9],[6,-3],[10,-1],[4,1],[3,4],[10,4],[21,5],[5,5],[-2,3],[-9,3],[-5,1],[-3,3],[1,5],[1,5],[6,1],[10,-6],[13,-6],[5,-1],[3,0],[7,2],[8,2],[15,-12],[8,-1],[11,0],[2,1],[-1,4],[-2,3],[-2,1],[0,3],[5,3],[3,1],[-2,2],[-5,4],[-3,0],[-3,2],[1,2],[4,1],[5,3],[-2,4],[0,5],[-2,3],[-11,5],[-17,9],[-16,4],[-35,-3],[-12,2],[-8,2],[-9,3],[10,3],[11,3],[3,2],[4,4],[5,3],[4,0],[13,-1],[29,-11],[6,-1],[20,-5],[5,0],[7,1],[-6,5],[-6,3],[-14,10],[1,4],[10,8],[24,0],[11,3],[14,6],[18,9],[15,2],[19,3],[7,-3],[16,-9],[10,-3],[4,0],[4,0],[-10,11],[6,2],[8,1],[7,3],[5,3],[17,11],[15,3],[42,5],[15,-5],[12,0],[3,1],[2,6],[7,11],[5,4],[19,5],[14,0],[11,-5],[9,-3],[9,-2],[9,0],[14,3],[17,1],[9,1],[9,-2],[24,-1],[18,-4],[12,0],[15,4],[8,0],[30,6],[24,1],[17,-2],[29,1],[29,-1],[11,-2],[66,1],[51,6],[8,2],[11,6],[6,5],[4,2],[9,1],[14,-2],[21,-4],[18,2],[33,-3],[3,2],[4,11],[5,16],[5,5],[8,-1],[23,-10],[0,-4],[-2,-2],[-4,-2],[-1,-8],[3,-2],[5,1],[4,-4],[-8,-6],[-5,-3],[-3,-2],[-2,-11],[-4,-4],[0,-4],[5,0],[5,2],[4,0],[14,3],[26,4],[8,1],[5,1],[3,2],[-4,6],[-1,5],[2,3],[-1,7],[-2,7],[5,5],[5,-1],[7,1],[5,-3],[7,-2],[6,-1],[7,-5],[2,-9],[-2,-10],[-7,-8],[-12,-6],[-13,-11],[3,-5],[7,2],[31,-1],[19,1],[13,-1],[16,-3],[12,-4],[15,0],[9,1],[9,-2],[34,9],[14,4],[8,-2],[12,2],[8,-2],[13,3],[8,0],[10,-1],[30,0],[2,-6],[9,-8],[7,-3],[9,1],[7,3],[11,-1],[15,3],[15,-1],[7,1],[3,2],[2,5],[-5,3],[-13,3],[-12,8],[-6,1],[-9,-1],[-4,2],[-4,2],[6,3],[7,9],[-3,9],[-4,2],[-8,-1],[-9,-3],[-4,2],[-7,2],[-2,7],[-7,15],[-4,4],[-10,4],[-10,2],[-9,2],[-3,6],[2,8],[11,2],[10,-1],[6,-2],[7,0],[8,-2],[5,-2],[4,-1],[7,-1],[26,3],[4,1],[3,3],[5,1],[5,-1],[8,2],[-9,2],[-9,5],[-14,5],[-11,3],[-21,2],[-11,-1],[-6,1],[-24,0],[-7,2],[-4,5],[-7,14],[-2,8],[5,2],[3,3],[7,0],[10,-1],[3,-1],[3,-4],[-3,-5],[-3,-2],[2,-2],[11,-1],[5,-1],[4,-1],[10,2],[14,1],[7,-2],[9,-1],[12,2],[45,-1],[5,-1],[6,-4],[4,-2],[5,1],[15,-5],[7,-3],[8,-2],[7,-1],[7,1],[10,3],[8,1],[6,-1],[12,0],[10,-4],[7,2],[8,4],[24,3],[17,-1],[29,-8],[7,0],[14,4],[4,7],[0,8],[4,2],[3,-1],[6,6],[8,0],[5,-2],[3,4],[3,8],[10,0],[7,-1],[9,-5],[0,-4],[-4,-4],[-6,-11],[4,-6],[6,0],[7,-1],[9,3],[6,0],[10,-9],[7,-1],[5,1],[17,8],[5,1],[6,-4],[9,-9],[8,-5],[12,-3],[9,-1],[12,-4],[6,-4],[15,0],[6,-1],[18,-7],[16,3],[8,4],[4,6],[-2,9],[-1,9],[3,4],[4,1],[19,-11],[-1,6],[-2,5],[-5,8],[1,6],[4,2],[8,-3],[10,-2],[8,-3],[15,-13],[5,-11],[11,-3],[7,1],[8,1],[11,2],[9,0],[8,2],[2,-7],[-7,-8],[-3,-6],[2,-2],[5,2],[4,2],[13,-1],[10,4],[9,1],[8,4],[7,0],[5,-1],[8,-3],[7,2],[4,-1],[5,0],[30,14],[7,0],[8,1],[11,3],[8,2],[7,0],[12,5],[19,-1],[10,3],[19,3],[13,4],[23,10],[9,6],[10,13],[6,12],[7,18],[-3,11],[-4,5],[-3,5],[-7,11],[-2,14],[1,13],[-3,12],[-3,9],[-5,16],[-7,10],[-7,13],[0,12],[-2,9],[-5,7],[-2,6],[4,1],[3,1],[9,2],[21,-3],[2,5],[6,4],[3,5],[-1,8],[-5,3],[-5,7],[2,5],[5,0],[2,5],[-2,6],[2,7],[5,9],[2,3],[-5,6],[-5,7],[2,5],[2,6],[3,8],[4,6],[3,1],[-1,2],[-6,2],[-6,1],[-10,-4],[-2,1],[0,2],[-1,4],[1,9],[2,9],[1,1],[4,2],[4,6],[4,1],[2,-2],[1,-10],[1,-2],[-1,-4],[2,-2],[2,3],[4,2],[2,-3],[2,-2],[0,3],[0,7],[-1,3],[0,5],[0,2],[1,4],[-1,8],[0,3],[4,4],[2,1],[3,0],[7,-3],[3,0],[2,1],[1,3],[1,10],[-2,4],[0,3],[1,2],[3,7],[4,0],[4,-1],[4,2],[-1,2],[-1,5],[4,2],[3,0],[8,-2],[3,-2],[3,4],[-1,3],[-3,2],[-1,3],[1,4],[5,-2],[1,1],[1,3],[-1,2],[0,2],[6,0],[1,1],[1,3],[2,1],[6,0],[1,1],[1,3],[-4,1],[-4,3],[0,8],[1,6],[3,5],[5,3],[7,-3],[6,1],[3,-3],[3,-1],[1,3],[-2,3],[-1,5],[10,6],[3,-1],[4,1],[-2,5],[2,6],[3,0],[2,-4],[3,-2],[3,2],[7,5],[3,1],[4,1],[3,3],[1,4],[2,3],[6,4],[3,2],[5,10],[-1,2],[2,2],[16,9],[8,1],[14,5],[8,6],[5,2],[4,7],[6,1],[13,5],[9,8],[14,5],[6,0],[2,-2],[2,-6],[2,-8],[4,-4],[-1,-3],[-4,0],[-4,-1],[-1,4],[2,3],[-2,3],[-4,-1],[-4,-1],[-4,-2],[-4,-4],[-3,-3],[-12,-6],[-7,-9],[-6,-9],[-3,-6],[-4,-1],[-2,-2],[2,-2],[2,-1],[3,0],[0,-3],[-3,-1],[1,-2],[2,-3],[1,-5],[-3,0],[-5,5],[-5,0],[-3,2],[-3,4],[-2,-1],[-2,-5],[1,-5],[-2,-3],[-3,1],[0,7],[-3,1],[-3,0],[-8,-7],[-2,0],[-2,-4],[-4,-3],[-3,-3],[-7,-11],[-4,-4],[-8,-2],[-3,0],[-2,1],[-3,1],[-2,0],[-1,-3],[4,-9],[-2,-3],[-6,0],[-2,3],[-2,-2],[-2,-3],[-2,-3],[3,-7],[4,-4],[3,0],[1,-3],[-6,-1],[-5,-6],[-2,-5],[-2,-4],[0,-4],[4,-7],[4,-4],[5,-1],[6,2],[1,1],[6,1],[3,4],[2,1],[1,-1],[3,0],[2,3],[2,1],[2,-1],[6,0],[1,-3],[-1,-3],[-4,-4],[-3,3],[-3,-1],[-1,-2],[3,-5],[-1,-4],[-3,-4],[-2,3],[-1,4],[-4,3],[-4,1],[-2,-5],[-5,-1],[0,-5],[-2,-5],[-2,1],[-1,6],[-7,5],[-3,1],[-7,-1],[-3,0],[-2,-1],[-3,-5],[3,-3],[1,-4],[0,-3],[0,-1],[-1,-3],[3,-3],[1,-5],[-3,0],[-2,1],[-8,13],[-5,6],[-2,5],[-6,1],[-4,0],[-4,-2],[2,-2],[1,-4],[-3,-1],[-4,-6],[-2,-5],[-2,-1],[-1,-2],[7,-7],[1,-2],[1,-4],[-3,-2],[-5,-1],[-10,4],[-4,0],[-2,3],[-2,0],[-2,-5],[-1,-5],[-2,-3],[0,-4],[2,-1],[-1,-2],[-4,-2],[-2,-2],[5,-1],[1,-2],[0,-2],[-7,-2],[-5,0],[-3,2],[-2,-1],[-2,-3],[0,-4],[0,-5],[1,-3],[1,-1],[1,-3],[-5,-8],[0,-1],[-1,-4],[2,-3],[2,-4],[-2,-3],[-3,-4],[3,-1],[4,-1],[5,1],[7,4],[2,1],[1,-2],[1,-2],[-2,-3],[-13,-6],[-2,-3],[3,-2],[7,0],[2,-2],[-1,-3],[-3,-2],[-3,-5],[3,-2],[7,-4],[13,-4],[10,-1],[-2,5],[-1,6],[7,4],[4,2],[16,3],[4,0],[4,-1],[-2,-3],[-4,1],[-6,-2],[-10,-5],[-2,-2],[1,-4],[8,-4],[3,-3],[-4,-8],[1,-5],[4,-6],[6,-6],[3,-4],[4,-3],[7,-6],[4,-6],[1,-14],[6,-12],[7,-5],[0,-5],[-2,-4],[-6,2],[-3,-2],[-1,-5],[4,-4],[6,-4],[14,1],[1,-5],[-4,-3],[-2,-3],[-3,-2],[-5,-1],[-2,-4],[3,-6],[7,3],[5,0],[6,-1],[1,-8],[7,-9],[1,-5],[-1,-4],[-4,-1],[-2,-4],[-4,-3],[-4,-1],[-8,-8],[-3,-1],[-1,-2],[6,0],[5,-1],[9,7],[4,-2],[2,-4],[2,-5],[-3,-4],[-17,-2],[-8,-3],[-9,-6],[10,-3],[8,1],[4,-1],[5,-3],[5,1],[5,3],[3,0],[3,-1],[0,-5],[1,-7],[1,-5],[-2,-4],[-9,-2],[-7,0],[0,-8],[10,-6],[6,3],[5,-1],[0,-9],[4,-10],[4,-1],[3,5],[4,0],[1,-6],[-1,-9],[-3,-5],[-8,2],[-5,2],[-3,-3],[-6,-3],[-5,-1],[-4,5],[-6,3],[-8,2],[-8,1],[3,-4],[3,-3],[2,-7],[3,-7],[6,2],[9,-4],[6,-4],[2,-6],[-3,-9],[-5,-3],[-3,-2],[-6,4],[-4,0],[-4,-2],[-1,-4],[-3,-2],[14,-1],[5,-1],[3,-4],[-5,-4],[-10,0],[-4,-2],[-3,-3],[14,-2],[6,1],[9,4],[2,-4],[-3,-4],[-5,-6],[-10,-2],[-8,0],[-9,2],[-3,1],[-4,1],[0,-4],[3,-2],[6,-10],[1,-3],[-2,-5],[-5,-4],[-7,-1],[-5,3],[-4,9],[-5,3],[-5,0],[-3,0],[0,-5],[1,-4],[-2,-4],[-4,2],[-6,-2],[-5,-2],[-5,-3],[10,-2],[6,0],[5,-5],[-2,-2],[-9,-1],[-8,-2],[-12,-5],[9,-2],[8,0],[5,0],[5,-1],[2,-3],[-3,-3],[-20,-7],[-20,-10],[-7,-2],[-8,-2],[-18,-8],[-11,-3],[-32,-6],[-49,-14],[-17,-10],[-5,-7],[-4,-2],[-9,-2],[-10,-1],[-25,-1],[-25,4],[-21,0],[-12,-1],[-38,7],[-5,0],[-6,-2],[-5,0],[-3,1],[-8,1],[-26,-3],[-3,-4],[3,-8],[10,-9],[16,-16],[8,-4],[6,-3],[10,-5],[22,0],[31,-3],[17,-3],[-1,-6],[-10,-12],[-7,-4],[-15,-8],[-21,-4],[-17,1],[-29,7],[-36,6],[-54,5],[-11,3],[-14,2],[-8,-2],[-6,-3],[-13,0],[3,-2],[54,-16],[46,-11],[5,-3],[7,-2],[-1,-7],[-2,-6],[-9,-5],[-24,0],[-29,-4],[-15,0],[-14,4],[-31,11],[-19,8],[-13,10],[-9,8],[-10,7],[0,-5],[2,-4],[5,-6],[7,-6],[1,-3],[-4,0],[-5,3],[-4,-3],[-2,-3],[2,-5],[3,-4],[9,-9],[8,-3],[11,-6],[25,-10],[5,-4],[8,-8],[1,-6],[8,-5],[5,-1],[5,0],[1,5],[0,6],[2,2],[7,1],[20,-2],[82,-1],[8,-4],[3,-4],[2,-10],[-9,-11],[-6,-5],[-10,-2],[-8,-3],[-14,-1],[-27,1],[-27,0],[21,-5],[20,-5],[28,1],[12,1],[9,2],[4,-3],[8,-8],[5,-3],[3,-2],[4,-9],[2,-5],[4,-5],[3,-5],[4,-4],[8,-1],[8,3],[16,1],[15,-5],[10,-1],[13,4],[11,5],[22,5],[4,2],[6,1],[9,0],[4,-1],[4,-5],[5,-7],[6,-4],[7,-2],[3,-1],[13,-2],[16,2],[8,-2],[1,-4],[4,-3],[5,-1],[66,-18],[23,-4],[35,-2],[28,0],[4,-1],[5,-3],[-11,-3],[-11,0],[-17,1],[-6,-1],[-13,1],[-6,0],[-6,1],[-9,-3],[-17,-2],[4,-2],[6,-1],[12,-1],[18,1],[1,-5],[-16,-1],[-33,-1],[-4,0],[-2,-3],[5,-1],[3,-1],[1,-3],[-3,-8],[5,-5],[4,-1],[4,1],[7,-3],[7,-3],[15,0],[17,4],[9,0],[23,3],[20,-1],[29,5],[5,0],[4,-1],[-8,-4],[-35,-11],[-13,-2],[-5,-2],[3,-5],[5,-6],[9,-6],[6,-9],[6,-1],[11,4],[2,-3],[1,-7],[-3,-4],[-4,-3],[-3,-3],[-1,-4],[4,-3],[13,-1],[16,-1],[15,0],[9,-1],[35,19],[13,10],[7,3],[6,3],[28,12],[7,4],[8,5],[14,1],[19,9],[17,6],[7,1],[5,1],[6,1],[15,0],[11,1],[19,4],[14,3],[16,2],[17,1],[46,4],[13,-2],[15,-5],[10,1],[12,1],[9,2],[4,-6],[2,-6],[-5,-7],[-7,-4],[-1,-6],[9,-4],[11,1],[20,4],[17,4],[4,2],[7,0],[11,3],[13,15],[17,14],[15,10],[9,11],[8,6],[8,5],[6,2],[13,1],[19,7],[28,9],[21,-4],[22,-6],[11,5],[9,1],[7,2],[8,2],[5,4],[7,4],[5,5],[27,3],[29,4],[4,1],[3,-1],[10,1],[13,3],[17,1],[9,0],[8,8],[16,2],[18,3],[7,2],[6,1],[141,6],[6,3],[13,3],[4,6],[-19,3],[-5,2],[-7,1],[-4,-1],[-16,1],[-130,9],[-3,1],[-5,6],[1,10],[-4,8],[-9,2],[-9,0],[-12,-1],[-31,-4],[-13,-1],[-33,7],[-22,8],[-15,2],[-10,6],[-10,4],[-1,9],[3,8],[18,25],[12,12],[8,0],[7,6],[7,12],[6,5],[14,7],[5,2],[22,8],[5,0],[10,-1],[11,7],[33,15],[7,6],[9,4],[27,13],[24,6],[11,2],[15,4],[16,6],[14,6],[49,11],[30,3],[21,3],[14,-2],[14,1],[13,2],[5,3],[8,6],[28,-3],[18,4],[7,0],[8,2],[-3,2],[-3,0],[-3,3],[-3,6],[3,7],[3,4],[8,4],[5,7],[4,9],[13,19],[4,2],[9,1],[7,0],[8,0],[21,-5],[4,2],[7,5],[5,7],[12,10],[3,3],[-1,5],[-18,-2],[-14,-3],[-13,1],[-2,3],[3,2],[5,1],[2,3],[-5,3],[-8,2],[-3,2],[0,5],[2,8],[4,2],[4,3],[10,10],[5,4],[17,2],[19,-4],[4,1],[5,6],[-5,9],[-4,4],[0,2],[10,-1],[10,-2],[11,0],[12,9],[19,8],[8,3],[8,2],[4,7],[7,15],[4,7],[0,5],[-1,4],[-5,-1],[-4,-1],[-10,4],[-13,6],[-4,7],[-2,6],[4,3],[4,2],[4,1],[8,-3],[9,-6],[5,-2],[5,-5],[4,0],[4,7],[4,8],[3,3],[5,3],[6,4],[-3,4],[-5,2],[-1,2],[2,3],[5,1],[6,-6],[8,-4],[5,-1],[5,-4],[7,-10],[9,-18],[4,-1],[8,2],[9,1],[5,5],[1,13],[3,5],[-1,6],[-4,6],[-3,5],[0,3],[3,2],[4,1],[6,3],[10,-3],[6,-1],[8,2],[8,3],[9,3],[6,-2],[3,-6],[-3,-7],[-5,-5],[-5,-6],[-2,-6],[1,-3],[4,-1],[42,0],[5,0],[8,0],[7,-2],[14,1],[11,2],[6,0],[10,-2],[7,-5],[14,2],[4,1],[4,6],[4,1],[5,-5],[1,-11],[2,-5],[6,-5],[6,4],[4,5],[10,9],[10,8],[9,4],[20,7],[10,4],[19,6],[25,3],[45,11],[14,1],[24,3],[13,3],[12,2],[8,8],[17,-6],[6,0],[8,4],[9,12],[14,-5],[7,-7],[9,-6],[21,-11],[7,-2],[14,-2],[3,1],[7,7],[6,10],[5,5],[6,3],[7,6],[-2,3],[-4,1],[-4,1],[1,3],[12,1],[7,-10],[6,-4],[8,-3],[19,3],[16,0],[14,-2],[7,0],[6,8],[9,3],[6,-4],[4,-11],[12,-3],[27,-5],[3,1],[3,6],[2,7],[6,1],[7,4],[3,0],[6,-5],[-2,-11],[-3,-11],[3,-8],[4,-5],[4,-1],[6,0],[8,0],[6,0],[26,4],[3,10],[4,10],[10,14],[4,-1],[4,-1],[7,-7],[4,-3],[1,-5],[-5,-5],[1,-3],[5,-3],[15,-4],[4,1],[8,4],[7,9],[4,10],[6,-1],[6,-2],[4,-5],[0,-10],[5,-6],[5,-4],[12,-5],[13,-1],[9,-3],[15,1],[7,3],[4,1],[8,2],[9,6],[5,2],[19,6],[15,5],[15,11],[15,6],[23,3],[6,1],[9,0],[22,7],[8,4],[5,2],[5,5],[3,10],[2,7],[-1,6],[-2,8],[-4,7],[-5,10],[2,12],[4,5],[9,5],[10,1],[11,0],[9,-1],[1,-5],[-4,-6],[-5,-5],[-3,-3],[1,-4],[6,-1],[15,1],[5,-4],[10,-19],[3,-8],[4,-3],[5,1],[13,0],[9,2],[7,0],[3,-1],[4,-4],[7,-5],[8,3],[5,2],[6,0],[10,-6],[10,-13],[11,-7],[0,4],[-1,6],[4,4],[6,8],[7,10],[6,11],[2,15],[3,11],[5,6],[4,4],[8,4],[9,0],[9,9],[6,3],[13,5],[16,5],[12,13],[4,2],[6,2],[10,0],[18,5],[5,0],[9,4],[8,7],[6,3],[10,-1],[9,5],[7,0],[7,2],[1,5],[-3,3],[0,5],[4,5],[3,2],[9,0],[7,-5],[6,0],[1,-3],[-5,-3],[-3,-6],[6,-6],[5,-3],[5,0],[8,4],[7,-3],[3,-5],[0,-7],[1,-4],[5,3],[3,8],[-1,10],[0,6],[12,9],[5,8],[-9,1],[-5,-1],[-4,3],[-3,7],[10,6],[11,0],[7,-5],[14,-8],[8,0],[8,-1],[1,2],[-3,12],[1,7],[-6,4],[-2,9],[2,9],[8,5],[9,2],[21,14],[6,3],[13,3],[16,1],[20,5],[36,-3],[9,-2],[6,-3],[6,-4],[7,-8],[11,-9],[14,-3],[4,-3],[5,-8],[-6,-5],[-4,-1],[-9,3],[-6,4],[-4,-2],[4,-5],[4,-4],[1,-4],[-2,-7],[-17,-13],[10,-4],[6,3],[6,6],[5,2],[4,1],[13,1],[7,2],[6,-2],[5,-3],[8,-4],[12,-4],[14,-14],[11,1],[6,3],[17,2],[15,-7],[8,-2],[24,-2],[15,-5],[9,5],[6,2],[13,1],[6,-1],[18,-5],[32,-6],[21,-2],[19,-1],[9,-2],[17,-2],[6,-3],[16,2],[8,2],[7,5],[4,-1],[2,-6],[-1,-10],[3,-7],[2,-7],[3,-6],[2,-5],[-1,-4],[-5,-3],[-6,-8],[0,-7],[3,-5],[-3,-5],[2,-7],[0,-5],[-2,-3],[-5,-3],[-8,0],[-5,-2],[0,-6],[2,-4],[5,-2],[1,-4],[-1,-7],[-2,-5],[-4,-3],[-5,-1],[-9,2],[-7,3],[-4,-3],[-3,-3],[-10,-8],[-4,-5],[-4,-6],[11,-3],[8,-5],[17,0],[5,3],[8,2],[3,0],[3,-6],[-2,-9],[0,-7],[-9,-19],[-2,-3],[-4,-5],[-5,-4],[-4,-2],[-8,-6],[-4,-11],[-5,-9],[-8,-15],[-4,-17],[-2,-10],[-2,-10],[-7,-18],[-4,-3],[-7,-7],[2,-5],[6,0],[7,-2],[8,-3],[12,7],[6,5],[2,10],[-2,9],[4,6],[9,8],[20,6],[5,0],[6,2],[6,7],[6,7],[9,5],[8,7],[1,5],[3,1],[10,5],[2,4],[3,2],[2,7],[1,12],[2,8],[5,12],[4,9],[4,5],[10,3],[4,3],[6,8],[3,4],[0,9],[2,8],[6,5],[8,10],[10,1],[7,5],[8,-4],[10,-4],[16,1],[7,-2],[6,3],[5,7],[2,8],[7,5],[6,0],[12,9],[12,8],[9,1],[8,7],[5,10],[6,8],[8,7],[2,13],[4,7],[9,6],[7,3],[30,10],[22,7],[24,8],[7,0],[9,4],[15,1],[4,0],[6,9],[11,9],[7,3],[9,7],[7,1],[11,-2],[8,-2],[8,0],[11,7],[18,1],[5,3],[4,2],[25,9],[9,-2],[14,2],[8,-1],[7,-1],[10,0],[16,3],[7,2],[14,8],[14,1],[7,2],[8,2],[6,-3],[5,-3],[3,0],[4,-1],[10,3],[8,0],[10,-4],[6,-2],[4,0],[6,2],[8,6],[7,2],[6,-1],[5,-3],[8,-3],[13,1],[12,1],[10,3],[8,3],[8,-5],[10,-2],[15,8],[5,-1],[4,-2],[3,-2],[4,-6],[15,1],[12,6],[11,4],[10,3],[9,4],[12,15],[0,4],[1,3],[3,1],[19,0],[6,1],[8,4],[14,-3],[13,-5],[4,1],[5,0],[9,-3],[11,-6],[9,-1],[38,-14],[22,-4],[11,-5],[3,-1],[3,-5],[6,0],[5,1],[6,-7],[14,-5],[16,-3],[10,4],[17,13],[5,5],[-1,12],[9,14],[15,7],[19,3],[12,3],[15,3],[7,-3],[4,-2],[6,-3],[7,-7],[10,-17],[8,-7],[7,0],[6,-1],[6,-4],[9,-12],[-5,-11],[-5,-4],[-19,-5],[-9,-3],[-7,-2],[-3,-9],[4,-5],[8,2],[9,1],[8,2],[6,3],[6,4],[14,2],[9,3],[9,2],[5,4],[6,0],[6,-4],[4,0],[13,-1],[6,3],[5,0],[5,-2],[5,-3],[6,0],[7,1],[10,5],[12,4],[12,2],[3,0],[2,-1],[-12,-6],[-18,-7],[-10,-7],[5,-3],[36,8],[16,6],[14,2],[3,2],[12,9],[4,3],[13,3],[16,3],[12,4],[9,4],[6,1],[5,-3],[6,-3],[6,0],[8,3],[5,8],[3,5],[6,2],[7,1],[6,-1],[10,-4],[7,-2],[5,-15],[14,-14],[5,-3],[12,1],[13,-5],[5,1],[5,1],[5,-1],[7,3],[7,17],[7,16],[7,7],[4,4],[5,1],[7,3],[11,1],[7,-1],[17,-1],[14,4],[15,-1],[8,5],[8,1],[11,-5],[3,-2],[6,-5],[2,-4],[1,-7],[3,0],[11,7],[5,1],[11,12],[6,-3],[12,-5],[5,-2],[10,-8],[5,2],[5,4],[12,-1],[12,-3],[4,-3],[6,-5],[4,-1],[3,1],[24,-2],[10,-3],[8,-5],[28,-2],[11,-5],[6,3],[13,-1],[5,-4],[5,-4],[10,-4],[5,1],[8,3],[8,4],[8,0],[3,-4],[2,-9],[5,1],[7,4],[5,-1],[2,-6],[-3,-9],[-7,-11],[-3,-9],[-6,-9],[1,-4],[6,-2],[6,6],[14,4],[6,6],[12,2],[12,-2],[8,-8],[16,-12],[0,-4],[2,-5],[-1,-4],[-2,-5],[8,-5],[7,-1],[6,1],[25,-6],[12,2],[10,0],[13,1],[10,0],[7,-1],[9,2],[8,2],[3,-1],[2,-14],[0,-8],[5,-3],[4,3],[3,4],[20,-2],[7,0],[8,-2],[7,-5],[8,2],[4,3],[6,2],[1,5],[1,9],[0,8],[3,1],[4,-1],[4,-4],[11,-12],[8,-8],[3,-4],[5,-3],[10,-8],[14,-3],[13,-6],[15,0],[13,-7],[8,6],[4,1],[6,-2],[8,-5],[6,-1],[20,-8],[12,-4],[4,-6],[5,-6],[0,-6],[2,-8],[13,-6],[4,-6],[6,-7],[11,-30],[6,-5],[8,1],[7,-8],[3,1],[0,3],[-7,20],[0,11],[5,6],[13,1],[10,-11],[9,-7],[6,-1],[12,0],[11,8],[8,-3],[14,-1],[18,-4],[8,0],[14,-1],[16,-7],[10,-2],[2,-2],[4,-4],[2,-5],[3,-5],[6,-5],[5,-1],[12,-5],[24,-13],[9,-4],[5,-3],[2,4],[1,7],[4,1],[5,-10],[5,-9],[2,-7],[-5,-5],[-7,1],[-6,0],[-5,-10],[-2,-16],[5,0],[3,1],[1,-6],[-2,-5],[-4,-2],[-8,4],[-9,3],[-11,1],[-9,5],[-4,0],[-4,0],[5,-6],[5,-4],[13,-4],[15,-6],[1,-4],[-4,-5],[-4,-10],[-15,-8],[-8,6],[-10,1],[-5,-3],[-9,0],[-20,-1],[-7,7],[-12,5],[0,-4],[10,-13],[11,-3],[11,-3],[3,-4],[-5,-3],[-7,1],[-8,-6],[-16,1],[-7,-1],[-5,-2],[-4,-1],[3,-2],[4,-6],[-5,-5],[-5,-3],[-5,1],[-6,-2],[-3,6],[0,12],[-3,11],[-3,1],[-6,-2],[-2,-9],[4,-16],[3,-5],[-2,-5],[-4,-1],[7,-14],[7,-9],[3,-3],[1,-5],[-3,-2],[-9,2],[-4,-1],[-4,1],[-8,2],[-7,0],[-6,-2],[-6,0],[-5,8],[-4,3],[-4,-3],[-3,-10],[-5,-3],[-6,-5],[-4,-5],[-2,-20],[-4,-4],[-5,0],[-4,-1],[-4,1],[-7,1],[-21,-6],[3,-4],[6,1],[18,-1],[8,-4],[2,-9],[3,-4],[6,-4],[5,-2],[2,-3],[-2,-6],[-3,-6],[-6,-6],[2,-3],[6,-1],[3,-13],[-4,-6],[2,-6],[0,-5],[-4,-4],[-3,-3],[-1,-5],[6,-3],[5,-1],[6,0],[5,-6],[6,-8],[4,-7],[0,-11],[4,-7],[8,-4],[0,-4],[5,-2],[5,0],[2,-4],[-1,-5],[-9,-6],[-4,-5],[9,0],[9,-5],[12,5],[6,6],[4,5],[3,-2],[0,-5],[4,-8],[15,-9],[8,-3],[8,-1],[8,0],[2,-5],[-3,-4],[-5,0],[-9,-1],[-7,4],[-5,3],[-41,-2],[-9,-1],[-11,-5],[-11,-3],[-17,-5],[-7,-3],[-19,12],[-6,9],[-2,0],[-5,-2],[0,-6],[9,-13],[4,-4],[0,-3],[-3,-2],[-3,0],[-6,3],[-9,2],[-9,-4],[-11,-9],[2,-6],[3,-3],[-1,-4],[-12,-7],[-4,-1],[-2,-1],[3,-3],[6,0],[1,-3],[-2,-3],[-11,-3],[1,-4],[6,-2],[7,1],[5,-3],[0,-5],[-5,-2],[-6,-2],[-39,-12],[-5,-3],[0,-4],[14,-2],[41,1],[2,-1],[-1,-3],[-2,-5],[2,-3],[6,-2],[1,-3],[-3,-1],[-7,-2],[-6,0],[0,-4],[9,-3],[3,0],[1,-12],[-1,-5],[-4,-3],[-2,-1],[0,-4],[12,-3],[18,-13],[5,0],[7,-2],[12,-7],[4,-4],[7,-2],[1,-3],[4,-2],[17,-9],[2,-4],[-35,-7],[-35,-6],[3,-4],[38,0],[10,-3],[5,1],[2,3],[21,4],[20,2],[7,-1],[28,-15],[13,-5],[8,-2],[6,0],[4,-2],[4,-5],[-1,-4],[2,-2],[3,-1],[6,-3],[6,1],[7,4],[5,-1],[10,-5],[-4,-3],[-2,-2],[-2,-3],[-3,-1],[-7,-1],[-4,0],[-4,1],[-1,-3],[5,-2],[8,-3],[48,-2],[13,-4],[14,2],[6,-1],[5,-1],[2,-5],[7,-1],[11,-4],[14,-2],[12,0],[15,-5],[7,0],[4,-3],[33,-1],[5,-2],[4,-4],[8,-2],[8,0],[47,-6],[17,-3],[4,0],[4,0],[13,-3],[12,-1],[6,-4],[-9988,-5]],[[3457,1545],[2,-1],[7,0],[2,-1],[1,-2],[1,-5],[-2,-1],[-13,1],[-4,2],[-2,0],[-5,-3],[-2,-2],[-8,-3],[-3,1],[-1,4],[0,1],[1,1],[0,1],[0,1],[2,3],[10,4],[13,2],[1,-2],[0,-1]],[[3442,1551],[-5,-6],[-3,0],[-5,4],[-2,3],[0,1],[4,3],[9,-1],[2,-1],[1,-2],[-1,-1]],[[3319,1557],[-1,-1],[-2,1],[0,-1],[1,-1],[-1,-1],[-2,1],[-2,3],[1,3],[2,0],[4,-4]],[[3260,1551],[-1,0],[1,2],[3,6],[6,3],[-1,-2],[-2,-3],[-6,-6]],[[3316,1580],[1,0],[12,1],[4,-4],[4,0],[-10,-7],[-3,2],[-1,2],[0,3],[-7,-1],[-2,1],[-3,-2],[-6,-1],[-2,0],[-2,2],[0,3],[5,0],[4,3],[1,3],[2,-1],[3,-4]],[[3350,1587],[-4,0],[-2,3],[-2,2],[5,0],[3,0],[1,-3],[-1,-2]],[[3365,1595],[-6,-2],[-3,2],[-1,1],[4,3],[2,-1],[1,0],[2,-1],[1,-2]],[[3389,1618],[4,-2],[3,1],[2,-1],[1,-3],[0,-1],[-5,0],[-4,-4],[-6,1],[0,-3],[1,-2],[-2,-1],[-4,3],[-3,-1],[-2,-5],[-1,-1],[-1,-1],[-1,2],[-3,0],[0,1],[-2,2],[-5,-2],[1,2],[7,7],[1,2],[7,4],[4,-1],[8,3]],[[3498,1653],[-2,0],[-1,2],[-1,1],[2,3],[2,3],[1,1],[0,-7],[-1,-3]],[[3467,1658],[-3,-2],[-2,2],[0,4],[-2,2],[1,2],[20,-2],[-1,-2],[-10,-1],[-3,-3]],[[3730,1698],[6,-2],[3,-2],[1,-2],[3,-1],[1,0],[0,-2],[1,-1],[0,-2],[-6,4],[-9,1],[-2,3],[-4,-2],[-1,1],[0,2],[1,3],[2,-1],[4,1]],[[6924,2358],[-2,0],[0,2],[0,2],[-1,2],[-1,2],[1,2],[2,0],[3,0],[1,-4],[-2,-4],[-1,-2]],[[6921,2355],[2,0],[2,0],[6,8],[1,0],[0,-6],[2,-2],[-2,-1],[-4,0],[-1,-3],[4,-4],[2,-1],[1,0],[3,1],[3,2],[3,3],[2,2],[5,0],[2,3],[1,1],[2,0],[2,-1],[1,-3],[1,-4],[0,-4],[-2,-3],[-2,-3],[0,-2],[-1,-2],[-1,0],[-1,1],[-2,3],[-2,2],[-4,0],[-3,-1],[0,-2],[-1,-2],[-1,-1],[-2,1],[0,-1],[1,-3],[2,-3],[3,-2],[3,0],[0,4],[2,0],[3,-1],[1,-3],[-1,-1],[-1,-2],[0,-2],[-3,-2],[-1,0],[-4,1],[-3,2],[-1,2],[-1,1],[-2,-3],[-2,0],[-4,2],[-3,3],[-2,1],[-4,1],[-2,-7],[-2,-3],[-4,0],[-1,0],[-1,3],[0,3],[1,3],[1,3],[0,3],[0,3],[-1,2],[1,4],[-2,3],[1,2],[2,2],[-1,1],[-1,1],[-1,2],[0,2],[0,4],[1,4],[0,4],[2,4],[2,5],[1,2],[2,0],[0,-1],[1,-3],[-1,-1],[1,-1],[1,-6],[-1,-2],[0,-2],[-2,-5],[0,-3],[4,-2]],[[6439,2509],[-2,-1],[-2,2],[-1,3],[3,2],[1,-1],[1,-2],[0,-3]],[[3285,6165],[-1,-2],[-3,1],[0,3],[0,2],[2,4],[2,-2],[1,-2],[0,-2],[0,-1],[-1,-1]],[[3284,6196],[0,-1],[-2,2],[-1,5],[0,2],[1,0],[0,-1],[2,0],[0,-2],[0,-5]],[[9412,2033],[-1,-3],[0,3],[2,11],[2,2],[-1,-6],[-2,-7]],[[9092,2684],[-1,-6],[-2,1],[-2,-1],[-2,4],[0,1],[2,-1],[1,2],[0,1],[1,1],[0,2],[1,3],[1,0],[1,-4],[0,-3]],[[9095,2693],[-2,0],[-1,1],[0,3],[-1,1],[0,1],[1,1],[0,2],[1,-2],[2,-7]],[[9113,2724],[-1,-1],[-1,0],[0,3],[0,2],[1,3],[2,-2],[1,-2],[-2,-2],[0,-1]],[[9028,2835],[3,-1],[2,2],[2,0],[2,-4],[2,-2],[1,1],[2,-1],[1,-2],[3,-2],[1,-2],[1,-2],[2,-1],[8,-6],[5,-2],[8,1],[2,2],[2,2],[1,-2],[2,-3],[0,3],[0,3],[2,2],[2,2],[3,0],[4,0],[1,2],[1,0],[2,-2],[2,-1],[1,2],[3,5],[1,2],[5,-1],[2,0],[2,5],[2,0],[5,-4],[2,-6],[0,-9],[0,-4],[1,-3],[0,-7],[-1,-7],[0,-5],[0,-5],[0,-10],[1,-6],[0,-5],[0,-2],[0,-2],[1,-2],[-1,-3],[1,-3],[-1,-2],[-1,0],[0,2],[0,3],[0,2],[-1,2],[-2,2],[1,1],[1,1],[-1,3],[-1,-2],[-1,-3],[1,-1],[-1,-1],[-2,-4],[-1,-5],[-1,-5],[0,-5],[-1,-4],[-1,-4],[0,-5],[0,-9],[1,-9],[1,-11],[-1,-1],[-3,-1],[-2,-2],[-2,6],[-2,6],[2,2],[2,-1],[1,1],[0,2],[0,1],[-3,3],[-4,2],[-1,-2],[1,-5],[-1,-2],[-2,-2],[-1,8],[-3,6],[0,-3],[1,-5],[0,-2],[-1,-3],[-1,-1],[0,-2],[0,-3],[-1,-5],[-2,-3],[-5,6],[0,-2],[0,-2],[3,-3],[-2,-2],[0,-3],[-2,-8],[-2,-6],[-1,-1],[-4,1],[-4,6],[-4,-1],[-6,1],[-4,-2],[-1,5],[-1,3],[1,1],[3,2],[3,0],[-1,2],[0,1],[-2,-1],[-4,2],[-3,-1],[-2,3],[-3,10],[-2,4],[-1,2],[-2,1],[-1,1],[-6,22],[-1,5],[-1,13],[5,-6],[2,-4],[1,-5],[2,6],[-1,2],[-4,8],[-1,2],[0,2],[-1,-2],[-2,-1],[1,5],[-1,6],[-5,11],[-3,10],[-4,13],[-1,2],[0,3],[-2,8],[0,7],[-1,5],[2,12],[0,6],[3,-3],[6,-3]],[[9117,2850],[-2,-4],[-1,3],[-1,1],[3,1],[1,-1]],[[9021,2851],[-1,-5],[-1,6],[1,1],[1,2],[0,-4]],[[9119,2862],[3,-3],[1,-4],[-2,-3],[-1,-1],[-1,4],[-3,-1],[-3,0],[-2,3],[-1,1],[2,1],[4,0],[3,3]],[[9110,2894],[5,-11],[3,-1],[0,-1],[0,-5],[-1,-2],[2,-2],[0,-2],[-3,-4],[-3,-1],[-1,1],[0,2],[-1,2],[-4,9],[1,3],[-1,3],[-2,0],[-1,2],[2,3],[2,6],[2,-2]],[[8997,2873],[-1,0],[0,3],[0,5],[-1,4],[0,5],[0,5],[1,2],[1,3],[1,4],[1,0],[3,-3],[0,-9],[0,-5],[1,-4],[-1,-4],[-2,-4],[-3,-2]],[[9036,2967],[1,-3],[0,-1],[-3,2],[-4,0],[3,4],[2,-1],[1,-1]],[[9040,2975],[-4,-4],[-1,2],[0,2],[0,2],[4,0],[1,-2]],[[8821,3125],[7,-1],[2,2],[4,-2],[2,-5],[-2,-3],[-1,0],[-5,2],[-5,-2],[-1,-2],[-1,-5],[-4,-3],[-2,3],[-4,2],[-2,-3],[-4,1],[-3,-1],[-4,0],[-5,6],[-1,3],[1,4],[2,4],[12,5],[7,4],[5,-1],[2,-1],[1,-2],[-1,-4],[0,-1]],[[9264,3604],[-2,-16],[-1,0],[-1,2],[0,10],[1,5],[3,-1]],[[9261,3610],[-1,5],[-1,6],[1,5],[1,1],[1,-1],[-1,-9],[0,-7]],[[8143,3683],[-1,-2],[-5,18],[-1,12],[1,2],[1,1],[3,-17],[1,-4],[0,-4],[0,-1],[1,-5]],[[9251,3701],[0,-2],[-2,3],[-1,10],[1,6],[2,5],[0,3],[-1,7],[4,7],[1,4],[1,4],[-2,5],[-1,2],[1,2],[1,2],[1,0],[1,0],[0,-10],[2,-4],[0,-5],[-6,-26],[-2,-9],[0,-4]],[[9198,3831],[1,-2],[1,0],[0,-4],[1,-4],[1,-3],[-1,-3],[-1,-1],[-1,2],[-5,12],[1,5],[3,-2]],[[9180,3898],[-1,0],[0,1],[0,2],[0,3],[1,-1],[1,-4],[-1,-1]],[[9164,3906],[-1,-2],[-1,4],[0,4],[1,2],[1,-6],[0,-2]],[[8206,3986],[-2,-4],[-2,1],[0,2],[1,4],[3,4],[0,-2],[0,-5]],[[9139,4015],[0,-1],[-1,0],[-2,1],[1,8],[1,-4],[1,-3],[0,-1]],[[9136,4023],[-1,1],[0,2],[1,2],[1,1],[0,-5],[-1,-1]],[[9062,4134],[1,-6],[1,-4],[0,-3],[-1,-2],[-2,2],[-1,5],[-2,4],[-1,3],[3,-1],[1,1],[1,1]],[[8873,4198],[-1,-1],[0,2],[1,3],[1,3],[2,-3],[0,-3],[-3,-1]],[[8874,4229],[-2,-5],[-1,1],[-1,-3],[-2,-1],[-1,0],[-2,-1],[-1,1],[1,5],[2,6],[1,3],[5,2],[4,2],[3,-6],[-4,-1],[-2,-3]],[[8807,4275],[-1,-3],[-1,3],[-1,3],[-1,1],[1,2],[0,1],[1,4],[1,-4],[1,-5],[0,-2]],[[8793,4284],[-1,-1],[-1,1],[0,2],[0,3],[2,0],[1,-1],[-1,-4]],[[8801,4284],[-1,0],[0,4],[1,3],[1,-5],[-1,-2]],[[8460,4297],[-1,-2],[-1,1],[0,2],[-1,2],[1,3],[0,1],[1,0],[0,-2],[1,-3],[0,-2]],[[8477,4344],[-2,-4],[-1,3],[1,6],[1,2],[1,-1],[0,-4],[0,-2]],[[8797,4389],[1,-3],[1,0],[1,6],[1,-1],[1,-1],[0,-3],[-2,-4],[-1,-2],[-1,-8],[0,-2],[1,-3],[2,-2],[2,1],[0,-4],[-1,-2],[-4,1],[-3,-1],[-5,3],[-3,0],[-1,1],[2,2],[1,3],[-1,7],[1,8],[3,4],[1,4],[2,3],[1,0],[0,-3],[1,-4]],[[8783,4388],[0,-1],[-3,1],[0,2],[1,2],[0,1],[2,4],[1,-3],[1,-5],[-2,-1]],[[8786,4516],[-4,-5],[2,6],[5,5],[1,1],[0,-2],[-3,-4],[-1,-1]],[[8623,4511],[2,-1],[1,-2],[1,-2],[0,-3],[-3,-1],[-5,4],[-5,-3],[-2,0],[-1,2],[1,6],[2,-1],[2,2],[-1,7],[-1,4],[3,6],[1,2],[2,0],[1,-5],[0,-5],[1,-5],[1,-5]],[[8627,4529],[4,-1],[5,4],[2,-1],[1,0],[3,4],[2,1],[1,3],[2,-3],[3,-4],[1,-4],[2,-2],[0,-1],[-2,-4],[0,-5],[-2,1],[-3,-8],[-9,-12],[-9,10],[-4,8],[-2,10],[-1,8],[-1,5],[1,1],[0,1],[1,0],[3,-6],[1,-1],[1,-4]],[[8794,4528],[-2,-3],[-1,3],[1,2],[3,8],[1,2],[1,1],[0,3],[0,5],[2,0],[-2,-10],[-3,-11]],[[8682,4533],[0,-1],[-2,9],[0,3],[-1,4],[2,1],[1,3],[0,-2],[0,-6],[1,-4],[-1,-7]],[[8976,4495],[0,-7],[-2,-5],[0,-3],[0,-5],[3,-3],[1,-2],[1,-6],[3,-8],[0,-6],[2,-7],[2,-13],[0,-12],[2,-9],[-1,-17],[1,-7],[1,-5],[2,-12],[1,-11],[2,-3],[4,-3],[4,4],[3,5],[3,1],[4,3],[3,-7],[2,-8],[8,-10],[4,-7],[3,-4],[3,-5],[0,-5],[-1,-4],[1,-6],[0,-7],[-1,-9],[3,-13],[0,-10],[3,-10],[-1,-10],[0,-4],[0,-6],[2,-7],[1,-6],[3,-6],[3,-8],[2,-2],[2,0],[0,-9],[4,-18],[2,-15],[-1,-20],[-2,-11],[1,-6],[5,-13],[3,-3],[-1,-6],[0,-10],[2,-8],[3,-6],[3,-4],[3,-2],[4,-3],[5,-1],[2,-5],[1,-3],[4,-1],[2,0],[2,2],[2,-3],[1,-3],[2,-8],[4,-9],[3,-1],[2,-5],[2,-1],[2,0],[3,-4],[5,-7],[5,-1],[2,-3],[4,-8],[2,-4],[2,-7],[-2,0],[-3,1],[-1,-7],[3,-9],[4,-6],[4,-7],[4,-9],[1,-7],[1,-3],[1,-10],[4,-6],[0,-11],[2,-15],[2,-13],[1,-4],[2,-7],[1,1],[2,2],[3,-6],[1,-3],[1,2],[-2,12],[1,7],[1,1],[2,0],[2,-6],[2,-6],[5,-5],[4,-6],[1,1],[-1,4],[1,6],[1,0],[1,-2],[3,-10],[0,-18],[1,-16],[1,-16],[3,-5],[1,-4],[3,-5],[2,-5],[2,-2],[7,-11],[3,-1],[3,-1],[4,-5],[2,-4],[4,-17],[2,-6],[4,-6],[2,-2],[3,-4],[1,-6],[0,-3],[2,-6],[2,-8],[4,-4],[4,-9],[0,-15],[2,-7],[1,-3],[3,-3],[1,-3],[-3,-19],[3,-39],[-2,-13],[3,-12],[5,-21],[1,-7],[1,-9],[3,-11],[0,-17],[1,-8],[0,-10],[-4,-11],[-3,-14],[0,-12],[-2,-23],[-2,-6],[-1,-10],[-4,-23],[0,-9],[0,-10],[0,-11],[-1,-7],[-1,-13],[-5,-20],[-6,-15],[-1,-11],[0,-5],[-2,-7],[-3,-6],[-3,-3],[-1,-4],[-2,0],[0,-2],[2,-1],[-1,-2],[-6,-4],[-4,-4],[-4,-12],[-2,-6],[-2,-5],[-1,-3],[-1,-3],[0,-7],[-3,-1],[-1,-2],[0,-7],[0,-8],[-1,-5],[-1,-4],[-1,2],[-1,-1],[-1,-2],[2,0],[1,-1],[-4,-8],[-4,-8],[0,-5],[-2,-6],[-1,-15],[-2,-8],[1,-6],[0,-1],[-1,0],[-2,-2],[0,-2],[0,-2],[1,-1],[0,-1],[-1,-1],[-2,0],[-1,-2],[-6,-22],[-2,-5],[-3,-9],[-1,-8],[-1,-9],[-1,-14],[-1,-10],[-2,-10],[0,-7],[-1,-14],[1,-10],[0,-6],[0,-5],[-1,-5],[-4,-1],[-2,-4],[-4,-6],[-3,-3],[-5,-2],[-10,1],[-19,-2],[-3,-2],[-7,-4],[-7,-7],[-7,-10],[-15,-25],[-11,-3],[-2,0],[-2,1],[-2,-2],[0,-3],[2,-3],[1,-3],[3,4],[1,-1],[0,-8],[0,-5],[-1,-3],[-1,-2],[-2,1],[0,3],[-2,7],[-3,5],[-2,2],[-2,-2],[-2,-2],[-2,7],[-2,7],[-3,0],[-2,0],[-2,3],[-4,4],[1,4],[1,3],[2,1],[-1,5],[-1,4],[-3,1],[-2,-1],[-1,-3],[-2,-5],[-6,-7],[-3,4],[-4,5],[2,0],[3,0],[3,5],[2,3],[1,7],[-2,4],[-2,4],[-2,3],[-10,-10],[-2,-2],[-2,-2],[3,-2],[2,1],[3,-3],[-4,-4],[-2,-1],[-4,-3],[-6,-7],[-8,-13],[-4,-4],[-4,-3],[-5,3],[-3,1],[-4,6],[-7,4],[-6,7],[-5,4],[-3,1],[-4,-2],[-8,7],[-5,0],[-4,-6],[-3,0],[-1,1],[-6,11],[-6,6],[-11,2],[-6,8],[-5,15],[-9,16],[-3,7],[-1,5],[0,5],[1,9],[2,9],[0,5],[-4,17],[-5,16],[-2,5],[-6,10],[-6,8],[-1,4],[-1,2],[3,-1],[1,4],[2,1],[2,-5],[1,0],[0,7],[1,3],[0,2],[-1,1],[-2,2],[-3,-3],[-2,-3],[-3,-2],[-1,-3],[-3,0],[-1,-1],[-6,-5],[-4,0],[-5,2],[1,7],[3,4],[2,5],[3,17],[-1,15],[-1,7],[-5,12],[-2,8],[-3,8],[-1,-5],[-1,-5],[-3,-7],[-1,-15],[-5,-24],[-4,-1],[-3,1],[-5,-2],[-3,-4],[-3,0],[-2,-1],[-3,1],[4,19],[3,-1],[4,1],[1,0],[3,0],[1,8],[1,10],[0,6],[-1,7],[1,7],[0,5],[5,18],[3,9],[5,7],[-1,6],[-1,9],[-1,6],[2,3],[2,4],[-2,18],[-1,6],[-3,5],[0,-7],[1,-7],[-3,-9],[-4,-6],[-3,-6],[-2,-14],[-4,-11],[-3,-4],[-2,-1],[-3,-2],[-4,-5],[-4,-4],[-3,-5],[-3,-2],[-9,-23],[-4,-8],[0,-3],[-2,-3],[0,-3],[2,-3],[1,-10],[-1,-2],[-1,1],[-4,6],[-2,-2],[-2,-3],[-5,11],[-1,2],[-3,4],[-2,4],[-2,0],[-1,0],[0,3],[1,2],[1,0],[2,-3],[3,-3],[1,0],[1,1],[-3,12],[-1,10],[-1,3],[-2,11],[-1,3],[-4,7],[-4,9],[-1,10],[-2,7],[-2,4],[-3,4],[-8,2],[-4,10],[-2,14],[2,0],[2,1],[0,4],[0,6],[-9,8],[-4,8],[-3,4],[-3,1],[-4,0],[-6,0],[-12,13],[-3,1],[-9,-5],[-3,1],[-14,18],[-9,9],[-3,1],[-4,2],[-3,-2],[-2,-2],[-5,-3],[-18,2],[-16,-3],[-10,-2],[-7,-2],[-11,-11],[-13,-10],[-11,-5],[-10,-7],[-7,-1],[-8,-1],[-18,3],[-6,-2],[-10,-12],[-3,-3],[-5,-4],[-14,-15],[-7,-3],[-4,-2],[-4,-3],[-3,-6],[-4,-19],[-3,-8],[-6,-14],[-4,-5],[-4,1],[-4,-5],[-4,5],[-3,1],[-5,0],[-18,-6],[-2,7],[-3,1],[-6,-1],[-9,2],[-17,-2],[-8,-3],[-3,-2],[-6,1],[-10,-2],[-3,-4],[-3,-3],[-5,-16],[-5,-5],[-5,0],[-5,-1],[-11,-15],[-10,-14],[-4,-2],[-4,-2],[-5,-1],[-3,-2],[-12,4],[-8,0],[-9,3],[-9,7],[-6,4],[-7,15],[-5,6],[-8,7],[-2,0],[-2,-2],[-3,5],[0,6],[-1,6],[0,14],[0,16],[3,-3],[3,-4],[5,0],[4,6],[2,10],[3,10],[-1,11],[-1,19],[1,4],[1,2],[1,10],[0,29],[-1,11],[-7,23],[-4,19],[-3,9],[-3,15],[-3,19],[0,10],[-1,19],[1,10],[-1,6],[-2,17],[-7,16],[-1,6],[0,6],[-1,7],[-5,14],[-6,12],[0,6],[-1,25],[-2,12],[-9,28],[-11,25],[-3,10],[-1,4],[1,0],[1,-1],[1,-3],[1,0],[1,2],[0,5],[0,3],[1,-2],[1,-5],[3,-14],[1,-7],[4,-2],[2,2],[1,3],[1,10],[-2,4],[-2,2],[-4,8],[-2,11],[-3,11],[0,4],[2,2],[2,-1],[2,-6],[3,-6],[-1,-10],[0,-3],[0,-2],[1,-2],[1,-2],[2,3],[1,5],[1,0],[1,-14],[2,-3],[2,-4],[3,3],[1,3],[0,9],[0,9],[0,7],[-6,17],[-6,22],[-3,11],[-3,17],[-2,5],[-2,9],[0,11],[0,7],[2,15],[1,8],[6,18],[0,8],[0,6],[1,9],[0,6],[-1,6],[-2,10],[3,18],[5,22],[1,3],[3,4],[1,-5],[-2,-16],[2,-8],[0,-9],[2,1],[2,2],[2,5],[1,5],[6,18],[3,7],[4,5],[8,6],[8,8],[4,8],[5,6],[3,8],[4,4],[16,19],[3,3],[4,1],[4,-1],[4,1],[4,-4],[3,-1],[8,5],[4,4],[7,9],[3,2],[8,3],[8,4],[10,15],[7,-1],[6,-1],[5,4],[12,3],[7,4],[12,10],[3,4],[5,7],[5,9],[4,12],[3,11],[1,6],[2,9],[2,7],[1,4],[5,4],[7,14],[3,3],[0,4],[-1,2],[-2,2],[-2,14],[-1,10],[0,7],[1,7],[2,10],[2,4],[3,5],[3,2],[2,4],[3,5],[1,4],[3,9],[2,7],[1,0],[3,-16],[2,-8],[3,-10],[3,-15],[3,-7],[1,-4],[1,-2],[1,2],[-1,4],[2,11],[-1,8],[0,3],[1,1],[1,-1],[3,-4],[1,-2],[1,1],[0,7],[1,4],[0,3],[-3,0],[0,4],[-2,5],[-2,3],[-3,7],[-1,3],[1,1],[2,0],[1,3],[1,4],[-1,7],[1,3],[2,-1],[4,-11],[1,1],[2,5],[2,1],[2,-1],[2,-3],[3,-3],[4,0],[2,-1],[5,1],[2,-1],[0,2],[-3,2],[-3,0],[-3,0],[-1,2],[-1,6],[1,4],[1,1],[2,0],[2,0],[0,5],[1,5],[1,4],[0,3],[-2,-1],[-2,-8],[-2,7],[-2,5],[1,8],[1,7],[2,1],[1,-1],[3,5],[1,3],[-1,3],[1,2],[1,-1],[7,-6],[1,-4],[1,1],[1,4],[-1,4],[-1,0],[-3,0],[-1,2],[0,2],[-1,5],[2,2],[2,1],[1,2],[0,2],[0,2],[1,-2],[4,-1],[3,-3],[1,-1],[1,2],[0,4],[-4,4],[0,4],[-2,5],[0,4],[3,4],[0,4],[2,1],[2,0],[2,3],[2,2],[1,7],[0,4],[1,2],[2,-2],[-1,-6],[0,-5],[0,-3],[1,0],[0,1],[1,4],[2,-2],[1,-3],[0,-4],[1,-1],[2,5],[2,2],[0,7],[0,5],[1,4],[1,2],[0,4],[-1,3],[0,5],[1,1],[2,-3],[1,-6],[1,-3],[1,2],[1,4],[2,2],[3,-3],[2,-5],[3,4],[3,8],[-1,5],[1,5],[3,2],[3,-2],[3,-5],[5,-4],[5,-5],[2,-4],[4,-6],[2,-6],[4,-11],[8,-13],[0,-2],[-1,-4],[-1,-6],[-1,-9],[0,-14],[1,1],[1,5],[1,-1],[2,-3],[0,3],[-1,2],[-1,6],[0,3],[1,3],[2,3],[2,2],[1,2],[0,3],[2,2],[3,1],[1,-1],[12,-6],[3,-5],[0,-8],[1,-2],[1,4],[0,10],[1,2],[3,-1],[2,-2],[3,-7],[1,-3],[1,-2],[1,3],[-1,4],[-1,5],[1,4],[4,1],[2,1],[-1,1],[-2,1],[-2,4],[-2,4],[3,4],[0,1],[-3,0],[-3,4],[-3,6],[2,10],[5,10],[2,4],[0,3],[2,6],[0,6],[1,4],[1,4],[3,4],[3,2],[2,1],[2,4],[1,5],[-3,9],[0,5],[1,5],[4,5],[2,11],[2,2],[3,-1],[1,1],[0,9],[1,4],[1,1],[2,-1],[1,-4],[2,-4],[1,2],[0,4],[0,5],[2,2],[2,0],[0,4],[0,3],[0,2],[5,0],[1,4],[1,3],[1,-2],[1,-6],[2,-4],[8,0],[5,2],[2,-1],[3,-2],[3,4],[2,2],[3,-3],[1,-3],[1,6],[2,3],[2,1],[3,-1],[1,1],[-3,5],[0,4],[0,7],[1,6],[1,5],[-6,9],[-5,1],[-4,-2],[-2,2],[-4,7],[-3,3],[0,2],[4,5],[1,-1],[3,-5],[1,-2],[1,1],[1,3],[1,2],[2,-1],[6,-8],[4,-8],[2,2],[3,5],[2,-1],[2,-3],[3,-10],[2,-4],[4,-2],[3,-2],[2,-3],[4,0],[7,-1],[6,-6],[3,-4],[3,-1],[2,-1],[3,-1],[6,5],[2,-5],[1,-2],[5,-6],[5,-1],[4,5],[5,4],[4,6],[3,3],[3,5],[1,0],[-2,-5],[-1,-3],[2,-1],[0,-1],[-3,-4],[-2,-5],[0,-3],[1,-2],[1,1],[2,2],[2,2],[2,-2],[1,-8],[1,-6],[3,0],[2,0],[2,7],[-1,6],[-1,2],[0,2],[5,10],[3,0],[2,-10],[3,-5],[3,0],[2,-1],[1,-7],[-11,-25],[-1,-2],[2,-5],[0,-5],[-3,-13],[-2,-1],[-1,4],[-2,2],[-2,-1],[-1,-1],[-7,-8],[0,-18],[2,-11],[-1,-7],[-2,-12],[-2,-5],[-2,-3],[-6,-17],[-2,-4],[-2,-6],[1,-6],[1,-4],[2,-4],[8,-9],[4,-7],[7,-7],[1,-6],[1,-4],[5,-5],[3,-3],[1,1],[1,1],[1,0],[0,-1],[0,-3],[0,-3],[0,-2],[3,-4],[4,0],[2,1],[2,-3],[2,-3],[4,-5],[6,-5],[5,-4],[6,-14],[4,-8],[5,-6],[7,-4],[4,0],[5,-4],[6,-3],[2,-6],[1,-5],[1,-4],[2,-9],[5,-3],[7,-10],[6,-4],[2,-2],[2,-3],[5,0],[8,5],[4,4],[5,8],[2,13],[2,10],[7,21],[2,11],[2,13],[1,9],[0,10],[1,17],[4,24],[1,8],[0,11],[-3,22],[1,8],[1,11],[-1,7],[-2,6],[0,7],[2,14],[1,8],[2,9],[-1,18],[3,7],[2,3],[2,0],[1,-2],[1,4],[-1,3],[-1,4],[-1,2],[-1,1],[-1,2],[-2,2],[0,8],[3,16],[2,6],[1,-2],[1,-3],[1,5],[-1,5],[3,15],[2,20],[1,19],[5,4],[2,5],[1,5],[3,0],[1,-2],[-1,-4],[0,-4],[5,-7],[1,-6],[1,-6],[1,-5],[0,-8],[0,-11],[1,-11],[1,-4],[2,-2],[2,0],[3,-2]],[[8951,4567],[-2,-3],[-2,2],[0,3],[0,2],[2,3],[2,-7]],[[8953,4597],[-2,-4],[-1,1],[-1,2],[1,3],[2,1],[1,-3]],[[8948,4599],[-1,-2],[-1,4],[2,4],[1,-2],[-1,-4]],[[5470,7983],[0,-1],[0,-2],[-1,-2],[-1,-4],[0,-3],[3,-11],[3,-7],[0,-2],[2,-2]],[[5476,7949],[-2,-3],[0,-3],[-1,-2],[0,-2],[0,-2],[0,-2],[1,-3],[-3,-1],[-3,0],[-1,0],[-1,-1],[-1,0],[-3,3],[-2,1],[-1,0],[-1,-1],[-1,-2],[-1,-1],[0,-1],[6,-3],[1,-4],[-1,-4],[-1,-1],[-1,-2],[-2,-1],[-2,0],[0,-2],[1,-5],[-1,-2],[-1,-1],[1,-5],[1,0],[1,-1],[-1,-2],[0,-2],[0,-2],[-1,-1],[-3,0],[-2,-2],[-5,-6]],[[5446,7883],[-1,-1],[-2,-3],[0,-5],[0,-1],[0,-1],[-6,2],[-3,0],[-3,-3],[-3,-1],[-6,0],[-6,-1],[-1,0],[-2,-1],[-1,-1],[-1,-2],[-2,-3],[-2,-2],[-2,-2],[-1,-1],[0,-1],[-2,1],[-1,0],[-1,1],[-4,1],[-5,1],[-2,1],[-3,1],[-2,1],[-3,0],[-1,0]],[[5380,7863],[-6,2],[-4,0],[-5,1],[-10,3],[-3,2],[-3,0],[-3,1],[-2,2],[-2,3],[-2,4],[-3,6],[-1,3],[1,3],[1,1],[0,1],[0,1],[-6,-3],[-5,-3],[-3,0],[-2,1],[-2,0],[-3,-1],[-5,0],[-3,-3],[-2,-4],[-1,-4],[-1,-1],[-2,0],[-3,0],[-2,1],[-2,3],[-3,0],[-2,1],[-1,0]],[[5290,7883],[0,2],[-1,4],[-2,1],[-5,-7],[-1,-1],[-4,2],[-3,3],[-1,3],[0,1],[-3,2],[-3,1],[-1,0]],[[5266,7894],[0,1],[0,2],[0,2],[-1,1],[0,2],[0,1],[0,1],[-1,2],[0,1]],[[5264,7907],[2,6],[1,5],[-2,2],[-1,1]],[[5264,7921],[1,1],[3,-1],[1,2],[1,1],[3,-1],[3,-3],[2,-2],[1,-1],[0,-1],[0,-2],[1,-1],[2,-1],[1,0],[-1,-3],[0,-2],[2,0],[2,2],[2,3],[0,3],[1,7],[0,1],[2,-1],[5,0],[2,-1],[4,0],[-1,-1],[1,-2],[2,-2],[0,-2],[2,0],[3,0],[1,1],[1,0],[2,0],[2,2],[1,2],[2,1],[3,3],[4,2],[13,2],[0,1],[0,4],[1,0],[1,-1],[3,0],[2,-2],[1,-1],[1,0],[2,1],[3,0],[2,-1],[1,-2],[0,-1],[0,-2],[0,-1],[2,-2],[3,-2],[1,0],[0,2],[1,4],[0,5],[0,2],[-2,1],[-1,0],[-1,1],[0,1],[1,3],[0,5],[-3,6],[-2,5],[0,2],[1,3],[3,2],[5,4],[1,1],[3,1],[3,2],[1,1],[1,2],[1,10],[1,0],[0,1],[5,-3],[1,0],[1,1],[1,2],[1,2],[0,4],[0,4],[0,1]],[[5383,7993],[1,-1],[2,-2],[2,-2],[2,-5],[4,-1],[5,0],[1,2],[2,1],[2,-1],[4,-1],[0,4],[2,5],[1,1],[3,0],[1,3],[0,9],[1,1],[2,0],[2,-2],[1,-1],[1,0],[1,1],[2,1],[2,-1],[6,-4],[3,-2],[1,0],[2,0],[6,-6],[5,-1],[4,0],[1,2],[2,2],[2,-1],[2,0],[3,-3],[1,-1],[2,0],[1,-1],[2,-5],[0,-1]],[[6280,7423],[-5,2],[-10,4],[-2,1],[-3,6],[-1,2],[-3,3],[-1,2],[-2,2],[0,3],[-2,3],[-2,4],[-4,11],[-1,2]],[[6244,7468],[-1,2],[0,1]],[[6349,7594],[2,-3],[5,-9],[6,-15],[1,-4],[1,-5],[1,-6],[2,-5],[6,-13],[3,-5],[4,-6],[2,-2],[2,0],[4,0],[4,-2],[1,-2],[2,-3],[2,-3],[1,-7],[-6,2],[-6,0],[-4,-2],[-3,-2],[-3,-3],[-2,-6],[-2,-14],[-3,-14],[1,-6],[1,-6],[0,-3],[-2,-1],[-1,-2],[-2,-13],[-1,-2],[-1,-2],[-1,2],[1,3],[-3,3],[-2,-3],[-1,-7],[-2,-7],[0,-1],[1,-22]],[[6357,7398],[-1,0],[-6,-2],[-1,0],[-5,10],[-1,1],[-2,1],[-1,2],[-1,2],[-1,2],[-5,6],[0,2],[0,1],[0,2],[1,1],[3,2],[2,1],[1,1],[1,1],[0,3],[-1,2],[-4,4],[0,2],[0,2],[0,2],[0,2],[4,3],[2,2],[-1,3],[-4,6],[-4,8],[-3,0],[-4,-3],[-5,-6],[-3,-2],[-4,-4],[-4,-5],[-3,-5],[-2,-4],[-4,-2],[-2,-4],[-6,-10],[-2,0]],[[6249,7562],[6,8],[2,1],[4,-1],[8,-5],[0,-3],[1,-2],[1,-2],[4,-2],[3,-1],[2,1],[2,1],[3,-3],[3,-3],[1,-1],[1,-1],[2,1],[3,5],[1,4],[0,3],[-2,3],[-3,4],[-3,3],[-2,3],[-2,5],[-1,1],[-1,0],[0,2],[0,3],[1,2],[1,1],[2,0],[1,2],[1,4],[1,2]],[[6289,7597],[3,-2],[0,-3],[1,-1],[1,1],[2,1],[2,-1],[2,-4],[3,-4],[2,-3],[0,-2],[2,-2],[2,-2],[2,-3],[1,-9],[2,-1],[5,-3],[2,-1],[6,-1],[2,1],[3,7],[2,7],[3,1],[4,4],[3,3],[1,4],[2,6],[2,4]],[[5848,5046],[0,-2],[-3,-11],[0,-1],[0,-1],[1,-2],[-1,-4],[0,-1],[0,-3],[0,-3],[0,-1],[2,-1],[3,-1],[2,-3],[2,0],[1,-2],[0,-3],[0,-3],[0,-5],[0,-4],[-3,-2],[-2,-2],[0,-1],[0,-1],[0,-2],[-3,-4],[-2,-6],[-1,-4],[-1,-4],[-1,-3],[-2,-4],[-2,-8],[-1,-6],[-6,-12],[-5,-7],[-1,-2],[-9,1]],[[5816,4928],[0,8],[-2,12],[-3,11],[0,4],[0,9],[0,12],[0,6],[0,5],[0,8],[0,5],[-2,6],[-2,6],[-2,3],[0,2],[0,2]],[[5805,5027],[1,3],[1,4],[1,0],[2,-1],[3,-3],[2,-7],[1,-1],[2,0],[5,1],[1,0],[3,1],[2,3],[1,3],[0,7],[1,12],[1,0],[3,-4],[1,0],[1,0],[1,2],[1,2],[1,0],[4,2],[2,-4],[1,-1],[1,0]],[[5158,8108],[0,1],[3,1],[2,-3],[3,0]],[[5166,8107],[0,-1],[3,-3],[1,-3],[3,-2],[-2,-3],[0,-1],[1,-2],[2,0],[2,-2],[0,-3],[0,-5],[-5,-5],[-1,-5],[-1,-1]],[[5169,8071],[0,2],[-1,0],[-3,0],[-3,-5],[-1,-4],[-1,-3],[-1,-2],[0,-2],[0,-2],[0,-1],[0,-1],[1,-3],[1,-2],[2,-5],[-1,-2],[0,-2],[-1,-1],[-1,-1]],[[5160,8037],[-2,0],[-3,0],[-2,-1],[-1,0],[-2,2],[-2,4],[-1,2],[-1,1],[-2,1],[-2,2],[-2,2],[-1,1],[-3,1],[-1,0],[-1,3],[0,4],[-1,2],[2,11],[-2,1],[-1,-1],[-2,-3],[-1,-3],[0,-2],[-3,-3],[-5,0],[-6,0],[0,1],[-1,1],[0,1],[1,1],[1,2],[0,2],[-1,2],[-1,1],[1,2],[0,2],[0,2],[-3,4],[-3,1],[-2,0],[-2,1],[-1,0],[-1,-2],[-1,-1],[-1,1],[-1,8],[-1,1],[-3,1],[-4,1],[-2,1],[0,4],[-1,4],[-1,4],[-1,1],[-1,2],[-3,-1],[-2,-2],[-2,-1],[-1,0],[-2,2],[-2,3],[-2,4],[-1,2],[1,3],[-1,2],[-1,3],[0,3]],[[5070,8127],[12,10],[7,5],[4,1]],[[5093,8143],[0,-5],[1,-1],[1,-2],[1,0],[1,2],[2,1],[3,-1],[2,-1],[1,-1],[1,-1],[2,-1],[4,3],[3,3],[1,2],[1,3]],[[5117,8144],[2,-2],[2,0],[1,0],[-1,4],[2,2],[2,1],[0,-2],[2,-1],[1,0],[4,4],[0,-1],[1,-2],[0,-1],[0,-1],[1,0],[3,0],[1,2],[1,1],[1,-1],[0,-2],[1,-4],[3,-4],[3,-1],[3,1],[2,1],[1,-1],[0,-2],[2,-2],[4,-2],[2,-1],[0,-1],[0,-3],[-2,-5],[0,-2],[0,-1],[0,-1],[-3,-3],[0,-2],[1,-2],[1,-2]],[[5099,5857],[-1,-3],[-2,-8],[0,-6],[5,-12],[0,-2],[1,-2],[1,-2],[0,-6],[1,-7],[0,-5],[2,-7],[0,-2],[-1,-10],[-1,-1],[-2,0],[-1,-1],[-1,-3],[-1,-3],[0,-2],[2,-6],[-1,-9],[-2,-6],[-2,-3],[-2,-1],[-1,-1],[-1,-2],[0,-6],[-3,-6],[-2,-4],[0,-3],[0,-7],[-1,-8],[-2,-6],[-4,-1],[-3,-1],[-2,-15],[0,-10],[0,-10],[0,-4],[0,-6],[0,-13],[-1,-10],[1,-2],[0,-6],[0,-7],[1,-4],[1,-4],[0,-1],[-1,-2],[0,-1],[0,-15],[0,-4],[0,-3],[-1,-2],[0,-7],[1,-5],[1,-4],[-1,-2],[-1,-4],[0,-10],[0,-3]],[[5075,5551],[-12,-3],[-13,-4],[-5,-2]],[[5045,5542],[-1,2],[5,2],[-1,8],[-3,9],[-1,2],[-1,4],[1,3],[0,2],[-1,6],[-1,7],[3,0],[0,21],[0,21],[0,17],[0,14],[-1,17],[0,12],[0,16],[-1,5],[-4,9],[-1,4],[0,6],[-1,6],[0,10],[0,13],[-1,2],[-4,5],[-6,9],[-4,6],[-1,0],[0,2],[0,19],[1,2],[2,8],[1,6]],[[5025,5817],[1,2],[1,3],[1,-1],[1,0],[1,1],[0,2],[0,2],[1,1],[0,3],[0,2],[1,1],[2,-1],[1,1],[1,1],[1,5],[1,2],[0,1],[1,1],[2,1],[2,-1],[1,-3],[7,3],[4,-2],[6,13],[2,3],[2,9],[1,3]],[[5066,5869],[1,6],[-2,11],[0,2],[3,2],[4,2],[1,0],[1,1],[1,2],[2,2],[2,0],[0,-1],[8,-14],[3,-7],[1,-4],[2,-3],[2,-2],[3,-3],[1,-6]],[[5006,6043],[-1,-3],[0,-5],[0,-7],[-1,-9],[2,-6],[3,-6],[1,-3],[-1,-6],[1,-3],[1,-6],[3,-8],[3,-8],[2,-1],[1,-1],[1,-1],[2,-1],[1,-1],[2,-2],[1,-2],[1,-4],[3,-4],[2,-3],[-1,-1],[-3,0],[-2,2],[0,-3],[0,-9],[0,-7],[0,-1],[3,-1],[6,-10],[5,-9],[2,-2],[3,-1],[3,-1],[2,1],[3,5],[2,0],[1,0],[1,-1],[1,-3],[2,-6],[0,-4],[0,-2],[0,-1],[-3,-1],[-1,-1],[0,-1],[0,-3],[1,-2],[2,-8],[5,-11],[1,-3]],[[5025,5817],[-8,-1],[-2,-1],[-2,0],[0,1],[0,1],[-9,4],[-6,3]],[[4998,5824],[-7,3],[0,-3],[-1,-2],[-1,0],[-1,1],[-1,-2],[-1,-3],[-2,-2],[-1,-1],[-1,-2],[-1,0],[-1,4],[-2,0],[-4,0],[-1,0],[-2,1],[-6,-1],[-8,2],[-2,-1],[0,-1],[-8,0],[-9,0],[-8,0],[-7,0],[-2,0],[0,-1],[-2,-14],[0,-8],[1,-5],[1,-3],[1,-1],[0,-2],[-1,-2],[0,-3],[1,-2],[1,-2],[-1,-3],[0,-6],[1,-10],[0,-7],[-1,-3],[1,-5],[1,-7],[1,-3]],[[4925,5730],[-1,-1],[-1,-2],[-2,0],[-1,4],[-1,2],[-1,4],[-1,5],[-2,2],[-1,2],[-2,5],[-2,3],[-2,-1],[-3,1],[-5,1],[-6,0],[-2,-1],[-3,-2],[-6,-5],[-2,-2],[-2,-6],[-2,1],[-2,1],[-1,3],[-3,-1],[-3,3],[-2,5],[-2,1],[-3,4],[0,6],[-2,5],[-1,7],[-2,3],[-3,1],[-3,0],[-2,2],[-2,4]],[[4846,5784],[1,4],[0,4],[0,5],[1,7],[0,9],[-1,7],[2,2],[2,3],[1,4],[2,10],[0,8],[0,4],[-1,2],[0,4],[-1,4],[1,4],[1,4],[2,3],[2,1],[3,2],[5,2],[3,2],[2,3],[1,2],[1,4],[2,3],[1,3],[1,9],[0,5],[-1,3],[-1,3],[7,7],[0,5],[-1,5],[-1,5],[-1,3],[2,5],[2,3],[1,3],[3,5],[3,1],[2,-2],[8,-10],[2,-1],[1,1],[2,3],[3,2],[1,7],[0,10],[0,4],[2,1],[4,-2],[1,0],[2,1],[0,2],[0,3],[0,3],[2,9],[2,7],[6,9],[1,2],[2,1],[10,-6],[1,1],[3,15],[2,2],[3,0],[2,1],[1,2],[5,5],[8,8],[4,3],[1,2],[3,5],[4,7],[3,1],[4,0],[2,-1],[0,-2],[1,-1],[5,3],[7,-4],[6,-4]],[[7553,6423],[-1,-1],[-1,2],[0,2],[0,8],[1,1],[1,0],[0,-2],[1,-5],[-1,-5]],[[7551,6441],[-1,-4],[0,3],[0,4],[1,3],[1,-3],[-1,-3]],[[7531,6461],[-3,-4],[1,24],[2,-9],[1,-5],[-1,-6]],[[7542,6473],[-1,-2],[-1,2],[-2,5],[1,7],[1,1],[0,-2],[2,-5],[0,-4],[0,-2]],[[7521,6456],[-5,-2],[-2,1],[4,15],[0,7],[-1,5],[-2,5],[0,3],[-1,4],[-1,5],[3,2],[2,-3],[0,-2],[1,-4],[1,-4],[3,-9],[0,-6],[-1,-13],[-1,-4]],[[7517,6506],[1,-2],[-2,1],[-1,2],[-1,2],[1,2],[2,-5]],[[7571,6450],[0,-2],[0,-20],[0,-8],[1,-6],[0,-3],[-1,-2],[-1,3],[-2,2],[-3,3],[-1,2],[-1,-1],[-2,-4],[-1,-4],[0,-5],[1,-5],[1,-3],[0,-3],[1,-5],[0,-3],[1,-5]],[[7564,6381],[-1,0],[-1,6],[-2,5],[-4,11],[-1,20],[0,10],[-3,11],[-1,16],[-1,4],[1,5],[0,2],[-2,-3],[-2,6],[-1,6],[-4,12],[-2,5],[0,5],[-2,-5],[-2,-4],[-3,-5],[-2,-2],[-5,-1],[-4,8],[-5,17],[0,4],[0,10],[-1,10],[0,5],[0,4],[-1,-1],[0,-2],[0,-4],[0,-3],[-4,0],[-4,2],[3,-5],[4,-1],[2,-5],[0,-4],[0,-4],[-2,-3],[-2,-1],[1,-4],[2,-5],[-3,-1],[-1,-3],[0,-5],[2,-4],[0,-2],[0,-3],[1,-3],[2,-6],[0,-4],[0,-6],[-1,-2],[-2,-3],[-4,-7],[-2,-9],[-1,-4],[-2,-1],[-1,2],[-2,2],[0,5],[1,3],[3,8],[-2,-1],[-2,-2],[-3,-5],[-1,6],[-1,5],[0,6],[3,9],[-3,-5],[-1,-5],[1,-7],[-1,-5],[-1,-6],[-1,-4],[-3,-2],[-1,-4],[-2,-2],[0,5],[0,7],[-2,17],[0,-4],[0,-10],[0,-7],[-1,-5],[-3,-6],[-2,-1],[-1,1],[-2,4],[-2,5],[0,8],[-1,4]],[[7473,6456],[0,6],[0,5],[-2,13],[-2,7],[0,3],[0,1],[0,9],[-1,5],[-1,6],[2,8],[0,2],[-3,1],[-2,1],[-1,2],[1,9],[-1,3],[-2,3],[0,2],[-1,1],[-1,4],[2,9],[2,10],[1,4],[0,7],[0,2],[0,3],[-2,3],[-4,1],[-3,3],[-2,3],[-1,2],[-2,-1],[-2,1],[-2,4],[-2,4],[1,2],[0,3],[3,12],[1,0],[2,-2],[1,0],[2,5],[2,13],[4,0],[3,-1],[1,-1],[2,1],[2,1],[2,2],[0,2],[0,2],[-3,2],[-1,2],[0,5],[-1,2],[-5,0],[-2,3],[-2,2],[-2,7],[-3,5],[-3,1],[-1,2],[-1,3],[0,4],[1,3],[1,4],[2,6],[3,4],[1,3],[2,4],[0,1],[0,3],[-2,2],[-1,0],[0,1],[1,4],[1,0],[3,-3],[3,-5],[2,-4],[0,-4],[1,0],[1,-1],[2,-1],[2,0],[1,-1],[1,1],[0,2],[-1,3],[-1,2],[1,2],[1,1],[1,-1],[1,-2],[1,-4],[0,-6],[3,-6],[3,-3],[2,-2],[2,-2],[3,2],[1,4],[-1,3],[1,3],[1,2],[1,0],[1,-3],[3,-13],[0,-6],[0,-16],[0,-11],[0,-2],[0,-2],[1,0],[1,0],[3,-2],[4,-3],[3,-2],[5,-1],[4,0],[1,0],[4,0],[8,1],[7,0],[3,-2],[2,0],[8,1],[8,1],[4,-4],[5,-5],[3,-4],[0,-3],[0,-2],[-1,-1],[-2,0],[-3,3],[-1,-1],[0,-6],[-1,-5],[-2,-11],[0,-5],[-1,-2],[-2,0],[-2,-1],[0,-2],[-1,-4],[-1,-4],[0,-1],[-3,2],[-1,0],[-1,-1],[-2,-2],[-1,-3],[-1,-1],[-4,1],[-1,0],[0,-2],[-1,-3],[-3,-5],[-1,-9],[-1,-6],[1,-5],[2,-12],[2,-15],[0,-2],[1,0],[0,3],[0,4],[1,1],[1,-1],[1,-3],[1,-6],[1,-3],[2,-1],[2,2],[2,3],[1,3],[-1,6],[0,4],[1,4],[4,7],[0,2],[0,5],[0,5],[1,0],[2,0],[2,2],[1,0],[1,-3],[2,1],[1,-11],[1,-10],[0,-4],[0,-10],[1,-9],[1,-1],[1,-5],[1,-5],[0,-3],[1,-9],[1,-6],[0,-21],[1,-4]],[[5793,7703],[0,-14],[-3,-6],[-4,2],[-5,-2],[-3,-7],[-1,-2],[-2,-3],[-1,-9],[0,-16],[-2,-2],[-2,0],[-7,-14],[4,-4],[2,-3],[3,-8],[5,-9],[1,-5]],[[5778,7601],[-4,1],[-1,0],[-1,-2],[-2,1],[-2,0],[-2,-2],[-2,-1],[-1,2],[-3,4],[-2,4],[-2,0],[-1,-1],[-5,-1],[-1,-2],[-3,-2],[-2,0],[-3,-1],[-2,0],[-1,-1],[-1,-3],[-1,-3],[0,-1],[-4,-1],[-1,-2],[-1,-2],[1,-1]],[[5731,7587],[-4,1],[-2,-1],[-1,-1],[-1,-2],[1,-2],[1,-2],[1,-5],[0,-5],[-1,-2],[-2,-2],[-3,-3],[-4,1],[-2,-1],[-3,0],[-2,0],[-5,-2],[-3,-2],[-3,5],[-4,2],[-4,2],[-2,-1],[0,-1],[-4,4],[-1,1],[-1,1],[-2,5],[-3,-2],[-3,1],[-1,0],[-5,0],[-1,-4],[-1,0],[-1,-1],[-2,1],[-3,-3],[-4,-1],[-3,0],[-3,0],[-1,0],[-4,0],[-2,-4],[-4,0],[-3,1]],[[5636,7565],[0,1],[1,14],[1,7],[0,1],[0,1],[-1,1],[-1,3],[-2,10],[-1,1],[-3,2],[-3,3],[-3,3],[-4,9]],[[5620,7621],[2,1],[1,2],[2,4],[0,3],[0,1],[-1,2],[-1,5],[0,5],[0,2],[0,3],[1,2],[1,2],[1,1],[4,0],[3,6],[1,2],[2,3],[1,1],[0,3],[1,2],[-4,4],[-1,3],[-1,3],[-2,2],[-4,4],[-2,3],[0,5],[-1,4],[-1,2],[-1,2],[0,3],[0,4],[1,6],[0,3],[2,0],[3,3],[0,5],[1,2],[1,2],[1,1]],[[5630,7732],[2,-3],[5,-4],[2,-2],[0,-2],[-1,-2],[-2,-2],[-1,-2],[-1,-3],[1,-2],[1,-1],[9,2],[8,-1],[12,-4],[7,-1],[6,1],[11,-3],[9,-3],[10,-1],[5,3],[4,3],[3,6],[8,8],[7,4],[10,4],[7,1],[1,-1],[8,-8],[4,0],[3,-1],[1,-2],[1,0],[4,1],[2,-4],[3,-5],[4,-3],[5,-2],[1,0],[4,0]],[[6405,6675],[-1,-5],[-1,2],[-2,7],[1,6],[-1,7],[0,3],[3,1],[1,-1],[-1,-2],[1,-4],[0,-8],[0,-6]],[[2971,6404],[-1,-4],[-3,-8],[-6,-2],[-7,0],[-1,2],[0,2],[0,3],[0,1],[0,1],[3,2],[1,3],[3,1],[4,-3],[1,0],[3,3],[2,6],[2,0],[-1,-7]],[[2974,6423],[-3,-3],[-1,3],[2,3],[2,-3]],[[2971,6476],[2,-1],[4,-2],[2,-2],[0,-1],[-1,-2],[-3,4],[-3,0],[-3,0],[-2,1],[1,4],[3,-1]],[[2938,6463],[-2,-1],[1,3],[4,5],[2,4],[1,2],[0,1],[2,1],[1,3],[0,3],[-2,4],[0,2],[0,2],[3,1],[0,-3],[1,-8],[-4,-10],[-3,-3],[-4,-6]],[[2943,6493],[0,-1],[-2,-3],[-4,3],[-1,3],[-1,2],[1,2],[2,-1],[1,-3],[4,-2]],[[2921,6502],[0,-1],[-4,12],[-4,2],[-3,3],[1,2],[1,0],[1,4],[-1,4],[-2,8],[-2,5],[0,2],[0,4],[2,-7],[2,-6],[1,-6],[2,-11],[3,-3],[3,-5],[0,-7]],[[2898,6534],[-1,0],[-2,2],[-5,7],[-2,0],[0,4],[2,-1],[4,-6],[1,-3],[3,-3]],[[2932,6570],[-2,-6],[-1,0],[1,8],[1,1],[1,0],[0,-3]],[[2843,6581],[0,-2],[-3,-3],[2,-3],[2,6],[1,-5],[1,-9],[0,-1],[0,-1],[0,-2],[0,-2],[-1,-8],[-6,1],[0,6],[-1,1],[-1,9],[-2,3],[-2,8],[1,2],[2,-1],[1,1],[3,1],[1,1],[2,-2]],[[2908,6578],[0,-3],[-2,0],[-3,-1],[-1,0],[1,2],[2,3],[0,2],[-2,4],[-3,9],[-1,3],[-1,3],[-2,4],[0,2],[1,0],[1,-1],[4,-13],[0,-1],[6,-13]],[[2851,6625],[-3,-2],[-2,2],[-1,0],[1,2],[2,1],[4,1],[1,-2],[0,-1],[-2,-1]],[[2840,6607],[0,-7],[0,-5],[0,-2],[-3,-4],[-1,-2],[-2,-2],[-2,-2],[-1,4],[-2,3],[0,5],[-1,-2],[-2,1],[-3,4],[-2,4],[3,1],[0,-3],[2,4],[0,2],[-1,0],[0,4],[3,9],[1,6],[-2,10],[2,0],[3,-3],[2,-3],[0,-5],[1,-4],[2,-8],[3,-5]],[[2871,6652],[4,-7],[4,-2],[4,-8],[2,-3],[0,-3],[0,-12],[-1,-7],[0,-6],[-1,1],[-1,5],[-2,2],[0,1],[3,1],[0,6],[1,5],[0,6],[-3,6],[-3,5],[-3,1],[-4,6],[-2,0],[-2,-1],[1,3],[0,5],[1,0],[2,-4]],[[2819,6723],[4,-1],[2,0],[1,1],[5,0],[4,1],[0,-3],[0,-1],[-8,-2],[-8,-4],[-5,-3],[-2,-1],[-1,2],[-5,9],[1,-1],[4,-5],[2,1],[2,3],[1,3],[-1,1],[1,4],[3,-4]],[[2855,6676],[-1,-1],[-2,6],[-2,2],[3,4],[1,3],[0,8],[1,4],[-1,4],[1,4],[-1,4],[-2,3],[-5,13],[-8,3],[-4,0],[2,3],[2,-1],[3,-1],[4,-1],[2,-3],[3,-6],[2,-2],[0,-1],[0,-1],[1,-2],[2,-2],[3,-4],[1,-11],[-4,-6],[0,-16],[-1,-3]],[[5527,7768],[1,0],[3,2],[3,1],[2,-1],[1,-1],[0,-1],[0,-5],[-2,-5],[-2,-5],[-2,-4],[0,-3],[0,-4],[0,-3],[0,-2],[0,-1],[3,-2],[3,-3],[2,-4],[3,-5],[1,-1],[0,-2],[-1,-2],[-2,0],[-3,0],[-1,1],[-1,-1],[-1,-1],[0,-1],[3,-6],[4,-8],[0,-3],[0,-3],[-1,-2],[-2,0],[-1,2],[-1,0],[-2,-1],[-1,-3]],[[5533,7691],[-1,0],[-2,0],[-1,-1],[-1,1],[-1,1],[-1,-1],[0,-2],[1,-3],[1,-5],[0,-4],[-1,0],[-2,3],[-1,1],[-1,-1],[-3,-3],[-2,-3],[0,-2],[-1,-3],[0,-1],[0,-6],[-4,-1],[-1,-1],[0,-1],[0,-7],[0,-4],[3,-6],[0,-2],[-1,-1],[-1,-3],[-1,-1]],[[5512,7635],[-3,2],[-1,0],[-5,6],[-2,3],[-4,3],[-2,3],[-1,3],[-2,1],[-2,-1]],[[5490,7655],[-2,2]],[[5488,7657],[2,1],[0,1],[0,2],[-1,2],[-6,9],[-3,6],[-1,2],[0,6],[0,2],[-5,2],[-5,8],[-5,7],[-1,2],[-3,6],[-3,5],[-3,4],[-2,3],[-2,6],[-1,7],[-1,7],[-1,3],[-2,1],[-4,8],[-4,5],[0,5],[0,9],[1,10],[1,1],[2,1],[2,0],[2,-1],[3,-7],[2,-3],[2,-1],[2,3],[3,6],[2,3],[7,-1],[3,5],[6,-6],[3,-1],[1,1],[2,-1],[4,-2],[1,0],[1,0],[3,2],[1,0],[3,-5],[2,0],[2,2],[1,2],[4,-1],[3,0],[1,0],[2,0],[2,-1],[2,-1],[5,-1],[2,-3],[1,-3],[0,-1],[0,-2],[2,-2],[3,-1],[1,0]],[[3254,6213],[0,1],[-1,1],[0,1],[2,-1],[0,-1],[-1,-1]],[[5781,8418],[4,-5],[1,-1],[2,2],[1,0],[4,1],[2,-2],[1,-4],[2,-2],[1,-1],[5,3],[2,2],[1,0],[6,-4],[2,-1],[1,-2],[0,-2],[-1,-2],[0,-3],[1,-4],[2,-2],[4,4],[2,1],[2,0],[2,2],[1,2],[2,0],[3,0],[5,0],[6,-3],[1,-1],[3,-4],[1,-2],[1,-1],[2,-1],[2,-2],[2,1],[0,-1],[1,-1],[0,-3],[0,-7],[-1,-3],[-1,-1],[-1,-2],[0,-1],[2,-3],[2,-5],[1,-3],[0,-2],[-3,-7],[-1,-1],[-1,-3],[0,-3],[0,-2],[5,-5],[4,-3],[1,-1],[0,-1],[-2,-5],[0,-2],[3,-2],[1,-3],[2,-6],[3,-6],[6,-4],[5,-4],[0,-1],[1,-2],[-1,-4],[-1,-4],[-1,-3],[2,-1],[5,0],[6,0],[7,-6],[0,-2],[-1,-2],[1,-2],[0,-2],[6,-6],[1,-1],[0,-3],[0,-2],[-2,-1],[-2,0],[-3,-3],[-1,-3],[-5,-5],[-3,-2],[-2,0],[-6,1],[-2,2],[-1,2],[-2,1],[-3,0],[-4,0],[-1,-1],[0,-2],[-2,-5],[-1,-3],[1,-1],[1,-3],[3,-4],[2,-4],[1,-2],[0,-2],[-1,-2],[0,-4],[3,-5],[-1,0],[0,-7],[0,-6],[0,-2],[2,-1],[1,-2],[2,-6],[0,-1]],[[5882,8185],[-6,0],[-6,0],[-3,-3],[-2,1],[-2,0],[-3,-1],[-4,-6],[-2,-3],[-3,-5],[0,-2],[-2,-5],[-1,-5],[0,-4],[1,-4],[1,-3],[0,-3],[-1,-2],[-1,-3],[-3,0],[-3,3],[-1,4],[-2,3],[-2,2],[-2,0],[-5,-1],[-5,-1],[-5,-1],[-2,-1],[-3,-2],[-2,2],[-2,5],[-1,5],[-1,2],[-1,0],[-1,0],[-2,-1],[-1,-2],[-1,0],[-2,-2],[-2,-1],[-1,-5],[-2,1],[-1,1],[-1,5],[-2,1],[-3,0],[-4,1],[-3,1],[-1,0],[-2,-2],[-1,0],[-5,1],[-1,0],[-1,-3],[-1,-3],[-1,0],[-1,1],[1,4],[-3,2],[-4,0],[-3,0],[-1,0],[-1,1],[-4,8],[-2,0],[-3,0],[-5,1],[-6,2],[-3,0],[-1,2],[-4,1],[-9,3],[-4,1],[-6,0],[-9,0],[-5,0],[-3,-1],[-3,-1],[-5,-1],[-2,1],[-3,-1],[-4,-1],[-1,-1],[-1,-4],[-4,-6],[-4,-5],[-1,0],[-3,2],[-2,1],[-2,0],[-2,0],[-1,-2],[0,-4],[0,-1]],[[5655,8151],[-2,6],[0,5],[1,3],[2,3],[-1,4],[1,5],[0,4],[0,2],[-1,2],[-3,2],[-1,2],[-4,2],[-3,3],[-1,1],[0,2],[1,1],[3,6],[3,5],[2,2],[10,6],[1,2],[1,4],[0,3],[0,5],[-1,7],[-1,5],[-2,9],[-5,19],[-3,20]],[[5652,8291],[2,-2],[5,0],[4,1],[2,1],[1,-1],[3,1],[2,0],[2,-1],[2,-2],[4,2],[4,3],[4,0],[1,1],[1,7],[1,1],[5,0],[2,1],[2,3],[3,3],[2,0],[3,2],[1,-2],[1,-2],[-1,-3],[0,-1],[2,-1],[3,0],[2,1],[0,1],[0,3],[0,2],[-2,2],[-2,1],[-2,0],[0,1],[1,3],[1,5],[2,4],[1,2],[0,1],[0,3],[0,4],[2,7],[2,5],[3,2],[3,1],[3,2],[1,3],[0,2],[1,2],[1,1],[8,-1],[2,4],[0,2],[2,1],[1,1],[0,2],[-2,0],[-6,1],[-1,1],[1,2],[1,5],[1,5],[1,5],[0,2]],[[5738,8390],[1,1],[4,1],[1,1],[4,6],[3,1],[7,-2],[3,0],[1,0],[3,0],[1,0],[1,6],[2,2],[5,8],[4,3],[2,1],[1,0]],[[2559,6187],[-2,-8],[0,3],[1,6],[1,2],[1,2],[0,2],[1,-1],[0,-2],[-2,-4]],[[2557,6216],[-2,-1],[1,3],[1,3],[1,8],[1,0],[1,0],[-3,-13]],[[2530,6099],[-1,0],[-5,1],[-3,-1],[0,15],[1,22],[0,16],[0,16],[0,12],[1,16],[0,14]],[[2523,6210],[0,5],[1,4],[2,2],[3,-4],[1,-1],[1,0],[2,3],[2,6],[4,12],[2,9],[1,2],[3,0],[2,0]],[[2547,6248],[-1,-7],[1,-1],[1,1],[4,0],[1,-7],[0,-6],[-3,-16],[-1,-6],[-1,-8],[2,-5],[-2,-7],[-1,-5],[0,-7],[1,-13],[-1,-19],[-3,-8],[-2,-4],[-2,-8],[-4,-2],[-5,-14],[-1,-3],[0,-4]],[[3202,7044],[-3,-2],[-1,0],[0,1],[2,2],[3,4],[-1,-5]],[[3384,4022],[1,10],[-1,8],[0,2],[-9,10],[-7,9],[-10,12],[-12,0],[-13,-1],[-13,-5],[-12,-5],[-5,-3],[-12,-4],[-7,-3],[-2,-9],[-2,-14],[-3,-9],[-3,-8],[-4,-13],[0,-14],[0,-15],[-3,-19],[-3,-17],[-2,-17],[-2,-11],[-1,-3]],[[3133,3869],[-4,-2],[-7,-2],[-3,0],[-2,1],[-1,1],[-2,2],[0,2],[0,4],[0,5],[0,8],[-2,9],[0,3],[0,5],[-1,8],[-2,5],[-1,7],[0,6],[-2,8],[-1,9],[0,9],[-3,10],[-3,10],[-3,2],[-1,1],[0,3],[0,5],[0,2],[2,5],[0,1],[0,1],[-6,6],[-1,2],[0,3],[0,2],[1,2],[1,2],[-2,5],[1,4],[-1,2],[0,2],[1,1],[3,1],[1,5],[0,3],[0,3],[-4,7],[0,1],[4,9],[2,6],[1,2],[0,1],[-1,1],[-1,3],[-2,2],[-2,3],[-2,5],[-3,4],[-2,4],[-1,3],[0,4],[0,5],[-2,9],[0,6],[-1,7],[0,4],[-1,5],[0,4],[-1,4],[1,2],[1,2],[-1,1],[-5,5],[-1,1],[-1,10],[-4,9],[0,6]],[[3069,4175],[0,1],[0,2],[0,4],[-2,3],[-1,3],[-1,2],[1,3],[3,6],[2,1],[0,2],[1,3],[4,8],[1,5],[2,3],[3,2],[0,2],[0,6],[0,4],[1,2],[2,3],[2,2],[0,1],[0,1],[-2,3],[-3,3],[-3,-1],[-1,3],[-1,2],[-5,23],[-1,6],[0,2],[4,12],[1,4],[2,5],[0,2],[-4,10],[-1,4],[0,4],[0,6],[2,2],[1,5],[1,4],[0,1],[2,3],[1,3],[2,3],[1,3],[0,6],[1,2],[2,2],[1,2],[-1,4],[-1,5],[-1,2],[-2,11],[-1,6],[1,2],[1,3],[0,5],[1,7],[0,24],[0,5],[1,3],[2,4],[1,2],[2,2],[0,5],[1,2],[1,4],[-4,13],[-3,12],[-3,11],[-4,13],[-2,8],[-3,10],[-3,9],[-3,13]],[[3067,4553],[3,0],[7,0],[6,-2],[4,-1],[2,-2],[0,-3],[2,-2],[1,1],[2,0],[3,3],[3,2],[2,3],[1,2],[3,9],[3,4],[2,2],[4,1],[2,-2],[2,0],[1,5],[2,6],[5,6],[2,2],[2,3],[2,0],[2,2],[11,17],[4,5],[3,0],[2,1],[4,3],[9,2],[6,1],[2,-2],[3,0],[1,4],[2,1],[1,0],[2,-4],[1,-5],[-1,-3],[0,-6],[1,-7],[-1,-6],[-2,-8],[-1,-3],[0,-3],[0,-5],[1,-7],[2,-11],[0,-7],[-1,-5],[-1,-4],[0,-4],[1,-2],[1,-2],[0,-3],[0,-4],[1,-4],[2,-4],[1,-4],[0,-4],[0,-2],[1,-1],[0,1],[1,1],[1,0],[1,-6],[0,-1],[1,-4],[0,-3],[3,-2],[2,-1],[1,-2],[3,-5],[2,-3],[3,-3],[1,-4],[1,-7],[5,-2],[5,-1],[4,-2],[4,4],[3,-1],[2,-2],[2,-2],[2,-3],[3,-5],[3,-1],[2,2],[1,1],[2,-1],[1,-5],[0,-3],[2,-2],[3,-6],[2,-3],[2,0],[5,-4],[5,-4],[2,0],[3,0],[1,-1],[1,-5],[4,-9],[2,-4],[2,-3],[6,0],[2,-1],[3,1],[8,1],[1,1],[5,-4],[5,-6],[3,-5],[3,-2],[1,-5],[1,-4],[1,-5],[-1,-4],[-1,-2],[0,-3],[0,-5],[2,-4],[1,-5],[1,-8],[1,-3],[0,-27],[-3,-1],[-5,0],[1,-2],[4,-11],[4,-9],[1,-15],[0,-9],[1,-13],[0,-8],[10,-1],[11,-1],[13,-1],[12,-1],[1,0],[2,1],[1,2],[1,0],[0,-3],[0,-4],[0,-5],[-4,-9],[0,-3],[1,-12],[1,-10],[1,-9],[1,-3],[4,-4],[6,-9],[2,-1],[2,1],[1,-3],[1,-6],[3,-16],[2,-10],[1,-4],[2,-1],[-1,-2],[-1,0],[-1,-2],[-1,-11],[-3,-15],[-1,-11],[1,0],[0,-3],[0,-4],[-1,-1],[-1,-1],[-2,-9],[-3,-11],[-2,-12],[-2,-6],[3,-6],[4,-8],[0,-2],[-2,-2],[-2,0],[-1,-4],[-1,-2],[-2,-1]],[[3653,3584],[-2,-2],[0,14],[1,4],[1,4],[2,2],[1,-3],[-1,-7],[-2,-8],[0,-4]],[[3650,3663],[0,-1],[-2,8],[3,6],[1,-2],[0,-6],[-1,-4],[-1,-1]],[[3742,3808],[0,-3],[-1,1],[-3,-1],[-1,2],[4,10],[1,-1],[1,-2],[0,-3],[0,-1],[-1,-2]],[[3774,3851],[1,-2],[-2,0],[-2,-1],[-2,-1],[-2,2],[3,3],[1,3],[0,-1],[1,-1],[2,-2]],[[3919,4408],[-1,-4],[-1,1],[-1,2],[0,2],[0,2],[1,1],[2,0],[0,-4]],[[3923,4429],[-1,-1],[0,4],[3,4],[0,6],[2,-3],[0,-2],[0,-2],[-4,-6]],[[3764,5014],[-3,-5],[1,6],[-1,5],[1,3],[1,4],[1,0],[0,-4],[0,-1],[0,-8]],[[3753,5108],[-2,-3],[0,-1],[-2,1],[0,1],[1,0],[0,5],[3,-1],[0,-2]],[[3560,5101],[-3,-1],[4,15],[3,6],[0,14],[4,11],[3,5],[5,2],[3,-8],[-4,-20],[-1,0],[-4,-11],[-5,-7],[-5,-6]],[[3621,5171],[3,-1],[3,1],[3,3],[3,1],[2,-1],[9,-3],[6,-1],[2,0],[2,-2],[1,-1],[1,-4],[-2,-5],[-1,-5],[-1,-7],[0,-2],[-1,0],[0,-6],[0,-3],[-1,-3],[-1,-5],[-2,-7],[-1,-1],[-2,-3],[-1,-3],[0,-3],[1,-3],[-1,-3],[-2,-6],[-2,-1],[-2,0],[-1,0],[-2,5],[-1,-4],[0,-4],[-1,-2],[-3,0],[-2,2],[-3,3],[0,-7],[-2,-5],[-2,-1],[-2,-1],[-2,-2],[-3,1],[-3,3],[-1,1],[-1,-3],[-7,0],[-3,-3],[-1,1],[-3,5],[0,3],[-2,7],[-1,9],[-1,7],[0,7],[2,0],[2,-1],[1,0],[0,2],[-1,2],[-3,0],[-2,4],[0,6],[0,12],[0,3],[2,3],[0,3],[0,4],[0,6],[2,5],[5,7],[6,2],[17,-6]],[[3593,5176],[-8,-11],[-3,4],[0,2],[0,2],[0,1],[1,4],[4,3],[2,0],[3,-1],[1,-2],[0,-2]],[[3626,5177],[-7,-1],[-4,2],[1,3],[3,4],[3,2],[3,2],[2,-2],[1,-3],[0,-3],[-2,-4]],[[3618,5199],[1,-3],[-4,-12],[-2,-2],[-2,0],[-3,4],[-5,-1],[-2,1],[0,6],[2,5],[4,0],[7,4],[4,-2]],[[3599,5192],[-1,-9],[-5,4],[1,9],[2,2],[2,5],[1,5],[0,8],[1,1],[0,1],[1,-1],[0,-11],[1,-7],[-3,-7]],[[3607,5206],[-4,-2],[0,2],[0,8],[1,4],[4,1],[0,1],[1,1],[1,-3],[0,-4],[-3,-8]],[[3602,5295],[-2,-2],[-2,1],[-1,7],[0,5],[2,2],[2,0],[0,-1],[2,-9],[-1,-3]],[[3431,5296],[1,-1],[1,0],[5,-3],[6,-2],[1,1],[1,2],[0,5],[0,3],[-1,3],[-1,4],[-2,5],[-2,1],[1,2],[1,3],[1,1],[1,2],[0,6],[1,1],[1,0],[1,-2],[5,-5],[2,1],[7,1],[1,3],[2,1],[3,3],[1,0],[1,-1],[1,1],[2,2],[1,-2],[1,-3],[1,-3],[1,-1],[2,1],[2,-1],[0,-2],[0,-2],[1,-2],[2,0]],[[3483,5318],[0,-1],[1,-1],[1,-3],[3,-2],[4,-3],[1,0],[2,-1],[1,-1],[1,2],[4,4],[2,3],[1,2],[1,2],[1,0],[1,-1],[0,-1],[1,-1],[4,-2],[1,0],[2,1],[2,3],[1,1],[2,-3],[0,-4],[1,-1],[1,0],[3,0],[2,-2],[1,1],[2,1],[1,3],[2,3],[3,3],[1,4],[2,5],[1,3],[0,4],[3,13],[1,2],[0,4],[1,5],[0,3],[1,4],[2,3],[1,2],[2,6],[1,5],[3,11],[0,3],[2,2],[0,2],[2,3],[1,3],[1,3],[1,4],[2,2],[1,2]],[[3565,5418],[2,10],[1,4],[2,0],[4,-5],[3,-7],[4,-25],[1,-22],[1,-12],[5,-24],[0,-5],[1,-5],[1,-6],[2,-10],[0,-2],[-1,-2],[1,0],[2,-2],[1,-6],[1,-4],[2,-6],[4,-2],[4,0],[3,-4],[3,-4],[2,-13],[-1,-9],[1,-6],[-2,-3],[-3,-4],[0,-2],[-6,-10],[-2,-5],[-3,-6],[-3,-13],[-5,-11],[-2,-3],[-3,-1],[-1,-2],[-4,-9],[-5,-3],[0,-5],[-3,-13],[-3,-7],[-1,-2],[-5,-12],[0,-5],[0,-10],[-3,-6],[-3,-3],[0,-8],[-1,-3],[-1,-2],[-6,2],[-9,-8],[-3,-3],[10,0],[3,-5],[7,3],[8,11],[3,3],[7,7],[2,5],[5,6],[1,3],[3,3],[1,-4],[0,-2],[-2,-4],[1,-3],[1,-4],[1,-5],[0,-3],[1,-7],[3,-9],[0,-3],[0,-4],[1,-3],[1,-2],[6,-9],[4,5],[2,2],[2,2],[3,1],[2,-2],[6,-3],[3,3],[8,8],[-3,-14],[-1,-12],[-2,-6],[-1,-13],[-1,-4],[-1,-4],[2,1],[1,2],[2,6],[1,9],[6,24],[1,3],[5,2],[8,20],[3,0],[2,-4],[1,-3],[1,5],[3,2],[-3,3],[-1,3],[0,4],[2,5],[-1,5],[4,6],[-1,4],[2,4],[2,4],[2,2],[0,3],[1,2],[1,0],[2,-4],[3,5],[2,2],[1,-1],[1,-2],[1,-1],[1,0],[3,3],[2,-4],[1,-1],[0,2],[-1,3],[1,1],[1,2],[4,-1],[2,-2],[2,-4],[2,0],[3,0],[1,-2],[2,0],[1,-3],[4,-5],[1,-3],[3,-2],[2,-2],[3,0],[3,0],[0,-4],[2,-1],[3,1],[2,-5],[5,-3],[4,-6],[2,1],[3,-1],[3,-12],[0,-9],[2,1],[1,4],[2,7],[3,2],[1,-2],[3,-5],[2,-4],[1,-4],[2,0],[-1,-4],[1,1],[2,2],[2,-5],[1,-6],[0,-6],[-1,-4],[-1,-2],[-1,-5],[-1,0],[-2,-2],[2,-3],[1,-3],[2,8],[2,3],[2,1],[2,-6],[0,-5],[-4,-3],[0,-4],[-1,-3],[-1,-2],[-1,-6],[0,-5],[-3,-22],[0,-4],[3,4],[5,11],[2,12],[2,12],[2,3],[1,0],[2,-1],[1,-4],[-1,-2],[-2,-6],[-1,-3],[1,-3],[5,10],[2,3],[2,-1],[4,5],[8,1],[0,5],[2,2],[4,-1],[8,-4],[3,-4],[4,-3],[2,-4],[10,-8],[7,-1],[3,4],[5,-4],[2,-4],[4,-2],[5,-1],[3,3],[9,1],[11,4],[7,-1],[7,-3],[6,-7],[4,-4],[3,-4],[4,-4],[10,-11],[3,-7],[6,-9],[6,-3],[3,-9],[3,-5],[6,-15],[7,-11],[4,-11],[9,-7],[4,-11],[6,-2],[3,-1],[3,-5],[4,-3],[6,1],[6,-1],[5,3],[12,-5],[2,-2],[2,-5],[5,-18],[2,-20],[2,-15],[3,-12],[1,-23],[2,-7],[0,-6],[1,-1],[1,-15],[-1,-6],[-1,-8],[0,-4],[0,-2],[0,-3],[0,-3],[1,-8],[0,-5],[-2,-7],[-2,-18],[-5,-31],[-5,-17],[-7,-18],[-5,-9],[-2,-1],[-1,2],[1,-5],[-1,-4],[-5,-14],[-5,-8],[-4,-15],[-1,0],[-6,-6],[-4,-5],[-4,-8],[-5,-14],[-1,-2],[-1,1],[0,-7],[-4,-10],[-1,-2],[0,3],[1,2],[0,3],[0,3],[-1,-2],[-2,-8],[0,-6],[-1,-9],[-6,-26],[-8,-22],[-1,-6],[-7,-15],[-4,-7],[-1,0],[-2,1],[-1,11],[-3,6],[-1,2],[-2,-7],[-1,-2],[-2,-1],[2,-3],[1,-4],[-2,-7],[0,-6],[-4,-8],[-2,-5],[-1,-7],[0,-6],[1,2],[1,-1],[1,-2],[-1,-3],[-1,-6],[0,-13],[0,-3],[1,-3],[1,5],[1,-1],[-3,-36],[1,-16],[0,-19],[2,-18],[1,-16],[1,-1],[-3,-19],[-2,-18],[-2,-15],[-1,-16],[-1,-8],[-1,-8],[2,-18],[0,-4],[-3,-8],[-4,-4],[-2,-4],[-5,-16],[-2,-22],[0,-12],[1,-25],[-1,-10],[-1,-7],[-2,-4],[-5,-5],[-3,-13],[-2,-14],[-3,-5],[0,-8],[-2,-8],[-6,-12],[-4,-4],[-1,-3],[-2,-8],[-3,-11],[-3,-16],[1,-5],[0,-1],[1,-18],[0,-4],[-4,-5],[-12,-9],[-4,-4],[-8,-16],[0,-3],[0,-6],[2,-3],[-2,-3],[-1,-6],[-2,0],[-13,0],[-7,-1],[-4,0],[-1,1],[-2,3],[-1,3],[1,4],[0,3],[-2,0],[-2,-1],[-1,-3],[1,-2],[0,-3],[1,-3],[-1,-3],[-4,-1],[-5,-3],[-5,-1],[-5,-2],[-2,3],[2,1],[3,-1],[3,2],[0,3],[-5,3],[-5,-2],[-3,-4],[-6,1],[-7,-3],[-2,-3],[1,-6],[1,-1],[2,-3],[-2,-2],[-1,-1],[-8,-3],[-7,-11],[-3,-2],[-3,-4],[0,-5],[-1,-2],[-2,0],[-4,2],[-5,0],[-3,-2],[-19,-18],[-6,-7],[-8,-15],[-12,-17],[-7,-9],[-1,-3],[-1,0],[-2,-2],[0,-2],[2,0],[-1,-6],[-2,-4],[-5,-10],[-1,1],[1,5],[-2,0],[-4,2],[-1,-2],[0,-5],[-1,-3],[-2,0],[-3,1],[-2,4],[1,-7],[5,-2],[2,-2],[1,-3],[-4,-12],[-3,-2],[-1,-2],[2,0],[1,-3],[-1,-14],[-2,-3],[-1,0],[0,-2],[1,-5],[1,-3],[0,-7],[0,-5],[-1,-5],[2,-10],[1,-11],[1,-3],[0,-5],[-1,-4],[0,-6],[-2,-10],[1,-16],[0,-14],[-1,-8],[-1,-6],[-3,-7],[0,-8],[-6,-7],[-7,-10],[-6,-12],[-7,-16],[-8,-26],[-8,-36],[-8,-27],[-4,-10],[-5,-11],[-6,-12],[-9,-13],[-9,-12],[-4,-5],[-3,-7],[-1,3],[1,5],[0,4],[-1,4],[2,1],[3,-3],[2,2],[1,2],[3,2],[7,12],[4,5],[3,8],[1,4],[-1,8],[2,3],[4,-1],[0,2],[0,3],[1,6],[4,5],[3,6],[-1,16],[1,1],[2,-2],[1,1],[1,7],[-1,3],[-2,1],[-8,-8],[-3,1],[0,6],[-4,3],[-2,5],[0,3],[-1,2],[0,-6],[0,-6],[4,-7],[-1,-3],[-2,-3],[-1,-7],[0,-9],[-1,2],[-1,2],[0,-10],[-3,-4],[0,-3],[0,-5],[-1,-3],[-6,-8],[-6,-5],[-1,-3],[-1,-6],[-1,-6],[-2,-6],[-2,-11],[0,-4],[1,-7],[1,-5],[-2,-3],[-2,-6],[-2,-7],[-5,-25],[-4,-15],[-3,-7],[-4,-8],[-13,-20]],[[3517,3240],[-1,1],[-1,1],[-2,2],[0,1],[-1,2],[1,7],[0,19],[0,4],[1,2],[2,3],[3,5],[2,6],[3,5],[-1,3],[-2,4],[-4,2],[-3,5],[-3,5],[-2,6],[-1,7],[-1,5],[-1,2],[-1,1],[-2,3],[-1,2],[-2,2],[-3,1],[-3,3],[-5,6],[-3,7],[-1,5],[-2,3],[-8,6],[-4,6],[-2,-2],[-2,2],[-2,3],[-1,3],[-1,2],[-1,3],[0,3],[-3,4],[-3,5],[-1,2],[-1,-1],[0,-2],[-1,-1],[-1,-2],[-1,-2],[-2,-3],[-1,-2],[-3,0],[-1,0],[0,1],[0,4],[0,9],[-1,3],[-2,4],[-2,5],[-6,10],[-9,15],[-3,5],[-3,0],[-3,0],[-2,-2],[-2,-7],[-1,-1],[-4,0],[-5,1],[-2,4]],[[3483,3711],[0,8],[4,12],[1,6],[-1,3],[1,11],[3,20],[1,13],[-1,6],[0,4],[1,4],[1,1],[-4,4],[-2,4],[-2,3],[-3,2],[-1,-1],[-1,-1],[-3,-2],[-3,-4],[-2,-1],[-2,-1],[-4,-2],[-2,1],[-2,1],[-2,2],[0,5],[0,4],[-1,6],[-2,4],[0,3],[0,3],[0,3],[0,3],[0,3],[-1,3],[1,4],[-1,5],[-1,4],[0,4],[0,4],[-1,4],[0,4],[0,4],[1,4],[-1,3],[-2,2],[-1,4],[0,6],[-1,3],[-2,3],[-1,0],[-3,1],[-2,0],[-3,0],[-2,1],[-1,2],[-2,3],[-1,5],[-1,1],[-2,-1],[-1,-2],[-1,-3],[-1,-3],[-2,0],[-2,-1],[-2,-1],[-3,0],[-2,2],[-4,1],[-2,1],[-3,-1],[-2,1],[-2,1],[-2,0],[-2,3],[-3,2],[-1,-1],[-1,-2],[-2,1],[-2,1],[-1,4],[0,2],[1,3],[0,3],[0,3],[0,3],[1,3],[0,3],[0,3],[0,3],[-1,3],[0,3],[1,4],[1,4],[0,3],[0,2],[0,3],[1,5],[0,7],[-1,5],[0,1],[-1,2],[1,1],[-1,2],[0,2],[1,2],[-1,3],[-1,1],[-1,1],[0,4],[-1,4],[0,3],[0,3],[-1,2],[-1,3],[-1,2],[0,3],[-1,4]],[[3067,4553],[-3,0],[-4,1],[-4,0],[-3,-3],[-4,-4],[-2,0],[-1,-1],[-2,1],[-1,2],[-3,4],[-1,-1],[-2,-2],[0,9],[0,15],[0,13],[1,10],[0,12],[0,9],[1,3],[1,4],[-1,5],[0,4],[0,3],[1,3],[-2,-1],[0,-1],[-1,-2],[-3,-4],[-1,-3],[-2,-2],[-3,-6],[-2,-3],[-2,-2],[-3,-6],[-3,-2],[-7,-1],[-8,0],[-7,1],[-1,0],[0,5],[0,4],[-3,4],[0,5],[0,3],[-1,4],[-2,3],[-2,1],[-4,2],[-6,3],[-5,0],[-6,0],[3,8],[4,8],[0,8],[-3,6],[-1,4],[-3,6],[-2,3],[-2,5],[0,3],[0,2],[-1,2],[-1,1],[-2,2],[-1,3],[0,3],[-1,3],[-1,3],[0,3],[-1,4],[-1,3],[-1,2],[-2,3],[0,2],[2,1],[0,3],[0,3],[-1,1],[-2,1],[-2,5],[-1,2],[-1,2],[-1,2],[1,1],[0,1],[0,3],[0,3],[0,2],[1,0],[1,0],[1,1],[2,1],[1,0],[1,2],[0,2],[-1,6],[-1,2],[0,3],[0,6],[1,4],[2,4],[5,9],[5,6],[2,1],[2,2],[1,3],[0,4],[0,3],[-1,5],[-1,6],[-1,4],[1,4],[1,5],[3,8],[2,9],[1,3],[0,5],[1,11],[1,6],[0,3],[0,2],[2,1],[3,2],[3,3],[4,6],[3,7],[3,2],[4,6],[3,4],[1,2],[3,2],[5,1],[4,1],[2,2],[4,1],[2,2],[2,0],[5,2],[2,3],[1,4],[2,3],[2,1],[3,0],[3,0],[3,1],[2,-3],[0,-3],[3,-3],[1,0],[2,1],[2,-3],[1,1],[1,1],[0,4]],[[3056,4940],[1,2],[1,12],[1,19],[2,18],[2,19],[1,20],[2,21],[2,16],[1,15],[1,8],[1,12],[0,10],[1,3],[0,2],[-1,4],[0,1],[0,2],[0,2],[-2,2],[0,1],[-1,2],[0,2],[-1,3],[0,2],[-1,2],[0,2],[0,3],[1,2],[-1,2],[0,3],[-1,2],[-1,2],[-2,2],[-2,4],[-3,4],[-3,6],[-1,4],[0,9],[0,10],[1,15],[0,7],[2,1],[1,0],[2,0],[2,1],[1,1],[1,1],[1,1],[1,0],[1,1],[1,1],[1,1],[2,1],[1,-2],[1,-2],[1,-1],[1,1],[1,-1],[0,-1],[1,0],[1,0],[1,0],[1,1],[0,1],[-1,1],[0,2],[0,2],[0,3],[0,4],[0,2],[-1,3],[-1,3],[-2,2],[-1,1],[-1,-1],[-1,0],[-1,1],[-1,0],[-2,0],[-1,1],[-3,-1],[-1,1],[-1,0],[-2,-1],[0,14],[0,14],[0,9],[2,0],[1,2],[3,0],[2,2],[1,0],[2,-1],[2,-2],[2,0],[6,0],[5,0],[7,0],[6,0],[6,0],[2,0],[-1,3],[-1,4],[0,3],[1,4],[0,1],[2,-2],[2,-5],[1,-4],[1,-2],[2,0],[1,0],[2,2],[3,8],[3,6],[1,2],[2,2],[1,1],[1,0],[2,-2],[1,-3],[3,-11],[2,-8],[1,-5],[0,-13],[0,-11],[0,-1],[1,0],[5,2]],[[3142,5254],[7,-13],[5,-10],[3,-3],[1,-1],[3,1],[4,1],[1,1],[2,4],[4,4],[2,2],[1,0],[1,0],[2,-3],[2,-5],[-1,-5],[0,-4],[2,1],[2,5],[1,5],[3,3],[2,6],[2,5],[2,3],[4,3],[2,2],[3,0],[1,2],[3,5],[1,3],[1,1],[3,0],[2,1],[3,4],[3,5],[1,9],[1,7],[1,2],[1,1],[1,1],[2,1],[5,4],[3,4],[3,1],[1,1],[1,4],[0,7],[0,4],[-6,1],[-3,0],[-6,1],[-3,2],[0,1],[0,1],[0,3],[1,6],[-1,7],[-3,12],[-2,11],[0,8],[0,9],[0,5],[-2,5],[-8,13],[-3,7],[-1,4],[-3,9],[1,2],[2,0],[1,-2],[2,-5],[1,-1],[1,0],[8,0],[2,0],[1,-2],[1,-2],[1,-5],[1,-3],[3,0],[5,0],[3,1],[1,-2],[2,-1],[4,3],[1,0],[1,-1],[5,-10],[2,-4],[3,-5],[3,0],[2,4],[1,16],[1,4],[1,1],[2,1],[1,2],[2,3],[2,1],[7,-3],[2,1],[7,5],[8,5],[2,6],[3,2],[2,5],[2,-1],[3,0],[2,1],[1,1],[1,2],[2,7],[2,2],[2,3],[2,3],[2,4],[0,3],[0,2],[-1,6],[-1,4],[-1,2],[-1,0]],[[3312,5483],[3,2],[2,-2],[3,0],[2,1],[2,-1],[2,4],[2,-1],[1,0],[1,-3],[1,-3],[2,-3],[0,-6],[0,-5],[-1,-5],[0,-4],[-1,-4],[-1,-4],[-1,-2],[0,-2],[1,-1],[2,-1],[2,0],[2,-1],[2,0],[2,-4],[1,-2],[0,-1],[0,-4],[-1,-4],[1,-2],[1,-2],[2,-7],[0,-3],[1,-1],[0,-2],[0,-3],[-1,-3],[-2,-4],[0,-3],[-2,-2],[-3,-5],[1,-7],[0,-3],[0,-3],[-1,-4],[-2,-11],[-1,-6],[-1,-13],[0,-4],[1,-6],[2,-13],[1,-2],[3,-3],[0,-9],[0,-9],[0,-4],[0,-1],[1,-1],[1,-1],[0,-3],[0,-3],[2,-1],[2,-1],[1,-4],[3,-6],[1,-1],[1,-3],[2,-5],[4,-2],[4,-2],[1,-3],[2,-3],[1,0],[1,0],[1,3],[2,2],[2,-1],[2,1],[1,1],[0,2],[-1,6],[1,1],[3,1],[0,3],[0,1],[1,2],[1,0],[1,-1],[1,0],[2,-1],[1,-2],[1,0],[2,0],[0,1],[1,2],[0,5],[1,0],[2,1],[2,2],[3,0],[3,0],[1,1],[1,3],[3,8],[1,2],[2,1],[1,0],[2,1],[2,2],[1,-1],[1,-4],[1,-1],[1,0],[4,-2],[2,1],[2,1],[2,1],[1,-1],[2,1],[1,1]],[[3347,5937],[-1,-1],[-2,2],[-1,3],[0,9],[1,1],[3,-7],[2,-3],[-2,-4]],[[8194,5466],[4,0]],[[8198,5466],[0,-2],[2,-7],[1,-6],[0,-11],[2,-4],[-1,-1],[-2,-1],[-2,1],[-1,2],[-2,11],[-1,6],[0,7],[0,5]],[[8194,5466],[-2,-2],[-2,-4],[-2,-2],[-1,-2],[0,-3],[0,-7],[1,-5],[1,-2],[0,-2],[0,-2],[-1,-5],[-1,-6],[-1,-4],[-2,-4],[-1,0],[-1,1],[-2,4],[-2,5],[-1,3],[-2,0],[-1,3],[0,3],[-1,3],[-1,4],[-1,3],[-3,2],[0,1]],[[8168,5448],[3,0],[3,1],[4,3],[3,4],[3,4],[2,5],[3,4],[5,4],[1,0],[0,-3],[-1,-4]],[[7545,6783],[-1,-2],[0,-3],[-1,-4],[1,-3],[1,-4],[3,-3],[3,0],[2,1],[2,0],[1,-5],[1,-4],[-1,-5],[-1,-4],[0,-2],[0,-1],[1,-3],[1,-3],[0,-4],[-1,-2],[-1,-1],[-2,0],[-1,0],[-2,-1],[-2,-1],[-2,-1],[-5,0],[-1,3],[-1,0],[-4,-4],[-4,1],[-8,-2],[-3,0],[-4,0],[-1,1],[-3,3],[-3,3],[-3,-2],[-1,-1],[-2,-5],[-5,-2],[-5,-1],[-2,0],[-3,1],[0,1],[0,1],[0,1],[-1,1],[-2,1],[-3,1],[-1,1],[-5,-2],[-3,3],[-4,4],[-1,2],[-1,6],[-1,2],[-1,2],[-1,2],[1,3],[3,4],[0,1]],[[7468,6757],[2,9],[2,3],[2,4],[2,7],[3,7],[3,7],[3,6],[1,3],[4,3],[2,1],[2,4],[2,2],[3,1],[3,0],[3,-1],[4,-2],[0,-2],[0,-3],[0,-3],[0,-1],[0,-1],[4,0],[4,0],[2,0],[5,-3],[2,-2],[2,-1],[1,0],[2,3],[2,3],[2,0],[1,-1],[1,-2],[4,-2],[3,-2],[1,-2],[0,-7],[0,-2]],[[5701,4159],[0,-3],[-1,-4],[1,-3],[1,-4],[1,-4],[2,-2],[1,-6],[1,-6],[2,-5],[6,-12],[1,-5],[0,-4],[4,-8],[1,-3],[-1,-5],[4,-17],[2,-10],[2,-1],[7,-11],[5,-8],[7,-6],[5,-3],[2,-3],[2,-3],[1,-5],[0,-8],[0,-6],[5,0],[5,0],[1,-1],[1,-2],[0,-3],[0,-6],[0,-4],[0,-5],[-1,-6],[0,-6],[1,-3],[4,-9],[2,-5],[1,-9],[2,-3],[0,-1],[4,-1],[10,-3],[6,-4],[5,-3],[2,-1],[1,-1],[-1,-8],[1,-2],[0,-2],[1,-2],[1,-1],[4,-1],[2,-4],[1,-3]],[[5815,3905],[-6,-1],[-4,-3],[-2,-7],[-2,-5],[-4,-3],[-5,-2],[-4,-2],[-5,-5],[-5,-11],[-3,-6],[0,-3],[-1,-2],[-2,-2],[-1,-3],[-1,-2],[-1,-2],[-2,0],[-1,-2],[-1,-4],[-2,-2],[-2,-1],[-3,-2],[-2,-4],[-1,-2],[-2,0],[-1,-3],[-3,-8],[0,-3],[-4,-27],[-2,-4],[-4,-5],[-3,-7],[-2,-4],[-1,-2],[-8,-3],[-2,-2],[-4,-3],[-1,-2],[0,-8],[-3,-13],[-2,-9],[-1,-7],[-2,-10],[-2,-3],[-2,-3],[-3,-2],[-3,-1],[-4,1],[-2,-1],[-4,-3],[-3,0],[-5,2],[-5,2],[-2,0],[-4,6],[-2,0],[-4,1],[-2,1],[-2,3],[-4,7],[-4,5],[-4,3],[-3,1],[-4,-1],[-2,-1],[-1,-1],[-2,-2],[-2,-6],[-2,-7],[0,-5],[-2,-11],[-3,-12],[-1,-3],[-1,-3],[-2,-2],[-7,-10],[-4,-11],[-2,-3],[-3,-2],[-2,-1],[-1,-2],[-2,-5],[-1,-2],[-1,-1],[-4,1],[-2,0],[-10,-1],[-4,2],[-2,1],[-3,-3],[-2,2],[-1,4],[-1,10],[0,8],[2,6],[2,4],[2,6],[0,2],[0,3],[-1,4],[0,5],[-2,11],[-3,14],[-4,15],[-1,4],[-2,7],[-9,13],[-2,2]],[[5554,3757],[0,1],[0,13],[0,16],[0,17],[0,16],[0,17],[0,16],[0,17],[0,16],[0,17],[0,14],[7,0],[8,0],[9,0],[4,0],[0,2],[0,10],[0,24],[0,23],[0,24],[0,23],[0,24],[0,23],[0,24],[0,23],[0,12],[7,0],[8,3],[14,4],[12,4],[8,3],[10,3],[3,1],[1,0],[2,-2],[4,-11],[3,-9],[0,-4],[1,0],[1,0],[2,2],[4,9],[1,2],[3,4],[4,5],[3,3],[3,2],[2,0],[1,-3],[2,-1],[7,11],[3,2],[9,2],[1,0]],[[5634,5813],[2,-7],[1,-3],[8,-17],[2,-4],[4,-12],[2,-8],[3,-12],[1,-7],[-1,-5],[0,-16],[-1,-5],[-4,-8],[0,-4],[1,-3],[1,-2],[1,-1],[-1,-7],[2,-3],[2,-2],[7,-2],[3,-1],[3,-1]],[[5670,5683],[2,-1],[0,-2],[-1,-9],[1,-5],[2,-5],[3,-2],[2,-1],[8,-2],[3,-3],[4,-10],[5,-9],[2,-5],[0,-5],[-2,-5],[0,-2],[3,-5],[2,-6],[6,-6],[9,-9],[4,-7],[1,-4],[2,-6],[4,-4],[2,-4],[-2,-10],[1,-4],[0,-3],[2,-4],[1,-5],[2,-7],[2,-3],[4,-1],[2,-3],[4,-5],[4,-4],[1,-4],[1,-2],[1,-4],[1,-3],[0,-7],[1,-9],[2,-5],[2,-5]],[[5761,5478],[-8,5],[-2,0],[-1,-1],[-4,-6],[-2,-1],[-1,1],[-4,1],[-13,5],[-9,4],[-3,2],[-6,2],[-3,-3],[-3,-12],[-1,-2],[-5,-3],[-3,1],[-6,-3],[-9,4],[-3,-1],[-3,-2],[-6,-5],[-4,-3],[-5,-2],[-4,-4],[-3,-3],[-3,0],[-3,3],[-2,2],[-4,0],[-3,-1],[-3,-5],[-2,-3],[-2,-8],[-3,-14],[-2,-3],[-1,-1],[-14,7],[-6,1],[-4,-2],[-5,4],[-3,1],[-1,-1],[-3,1],[-4,5],[-5,2],[-4,-1],[-2,2],[-2,4],[-3,9],[-5,8],[-6,7],[-4,5],[-1,3],[-4,2],[-5,0],[-5,-3],[-7,-10],[-6,-22],[-4,-8],[-3,-2],[-1,-5],[2,-8],[0,-9],[-1,-16],[0,-12]],[[5516,5384],[-1,2],[-2,5],[0,1],[-5,-2],[-2,-2],[-1,-2],[-1,-1],[-1,3],[-2,1],[-1,-1],[-2,0],[-1,1],[-1,-1],[-2,2],[-7,5],[-2,1],[-1,0],[-4,-4],[-2,-1],[-6,-2],[-7,-2],[-2,0],[-2,-1],[-1,-3],[-1,-5],[-1,-9],[-1,-3],[0,-4],[0,-6],[0,-5],[0,-4],[-2,-8],[-2,-9],[-2,-8],[-2,-7]],[[5449,5315],[-1,5],[-1,6],[0,8],[0,1],[-1,3],[0,6],[0,3],[0,4],[-2,4],[-1,3],[-1,3],[-1,1],[-1,1],[-2,1],[-3,6],[-3,6],[-3,7],[-3,6],[-3,8],[-3,7],[-2,7],[-1,4],[1,1],[1,0],[1,0],[0,2],[-1,6],[-1,7],[-1,4],[-4,6],[-3,5],[-1,3],[-1,4],[-1,23],[-1,6],[-1,3],[-1,1],[0,2],[0,4],[1,4],[0,1],[0,3],[0,22],[0,1],[-1,2],[-1,-1],[-1,1],[-1,3],[-1,4],[1,2],[1,3],[1,2],[1,1],[4,4],[1,2],[1,2],[0,2],[2,11],[4,11],[1,3],[2,7],[1,9],[1,4],[1,4],[1,3],[4,6],[2,9]],[[5429,5617],[3,0],[4,-2],[4,-1],[3,2],[2,4],[4,3],[5,3],[1,5],[2,3],[1,3],[1,0],[0,-2],[1,-5],[2,-5],[4,-6],[1,0],[2,4],[5,3],[1,1],[4,7],[4,4],[1,0],[1,1],[5,5],[3,-1],[5,1],[8,2],[6,0],[3,1],[1,1],[1,6],[1,2],[2,3],[5,9],[3,8],[0,2],[0,1],[1,0],[1,3],[-1,4],[-5,7],[0,1],[0,1],[0,1],[2,3],[3,3],[2,1],[7,0],[6,1],[2,-1],[4,2],[4,2],[3,3],[8,0],[6,8],[2,2],[0,1],[1,1],[2,4],[4,7],[2,6],[1,4],[7,15],[3,0],[1,2],[3,10],[0,2],[2,0],[1,2],[2,2],[1,5],[0,5],[-1,5],[0,2],[1,2],[1,2],[6,5],[1,3],[1,2],[1,1],[2,-1],[1,2],[1,2],[4,4],[3,2],[4,-1],[3,-1],[2,-2],[1,0]],[[3339,7715],[-4,-2],[-3,0],[-2,2],[5,0],[2,0],[4,3],[-2,-3]],[[3159,7735],[-2,-2],[1,2],[1,5],[2,1],[-2,-6]],[[3145,7757],[-4,-3],[2,8],[1,3],[2,-1],[-1,-5],[0,-2]],[[3306,7804],[-1,-1],[0,1],[-2,3],[0,1],[2,1],[3,-1],[-1,-3],[-1,-1]],[[2953,7809],[-4,-1],[-1,1],[4,5],[4,2],[-3,-7]],[[2956,7803],[-2,-1],[-4,1],[-4,-2],[-1,0],[3,4],[5,3],[4,8],[2,0],[-2,-9],[0,-3],[-1,-1]],[[3027,7884],[-3,-1],[1,2],[3,4],[3,2],[1,0],[-2,-5],[-3,-2]],[[3302,7830],[1,0],[4,2],[2,0],[0,-2],[-3,-2],[-2,-1],[2,-2],[0,-1],[-2,-2],[-1,-3],[1,-3],[3,3],[2,0],[2,-1],[2,1],[1,1],[6,10],[0,2],[-7,-3],[0,2],[4,6],[0,3],[2,5],[2,3],[2,2],[2,1],[1,-2],[1,-4],[3,0],[4,-1],[3,-1],[0,-2],[0,-1],[-1,-3],[-1,-3],[3,-3],[-1,-1],[-4,-4],[-3,-3],[-3,-4],[-5,-6],[-8,-3],[-2,0],[-3,1],[-3,0],[-3,-2],[-3,0],[-1,0],[-2,0],[-1,1],[-2,4],[-1,3],[-2,13],[1,7],[2,6],[3,4],[2,4],[7,20],[1,4],[2,4],[3,4],[4,7],[1,1],[2,0],[3,0],[-1,-2],[0,-2],[3,-9],[0,-2],[-2,-7],[-2,-12],[-1,-6],[0,-2],[-1,-3],[-1,-3],[-5,-4],[-2,-1],[-2,-2],[-6,-6]],[[3227,7860],[1,0],[1,1],[2,5],[4,-2],[2,-2],[1,1],[1,0],[3,-3],[4,-2],[5,0],[7,1],[1,1],[7,1],[7,0],[2,-1],[1,-1],[1,-1],[-4,-4],[-4,-5],[-6,-4],[-1,-2],[0,-4],[0,-4],[1,0],[1,-2],[-1,-1],[-6,-1],[-2,1],[-2,1],[-1,4],[-2,0],[-1,0],[4,3],[-2,5],[-2,-1],[-1,2],[0,3],[2,1],[0,2],[-2,-2],[-2,-2],[-2,-1],[-2,-2],[3,-1],[-1,-1],[-2,-1],[-8,3],[-2,2],[-3,3],[-2,4],[1,1],[1,0],[0,1],[-3,1],[-5,0],[-2,1],[0,8],[-1,2],[-3,2],[-4,0],[0,3],[1,5],[2,3],[2,4],[2,3],[4,6],[0,-4],[0,-4],[-3,-8],[6,-8],[0,-2],[1,-2],[-1,-2],[0,-1],[2,-1],[0,-2]],[[3280,7907],[1,-1],[2,0],[1,0],[-2,-2],[-3,0],[-2,0],[3,11],[2,3],[6,7],[2,2],[2,1],[2,0],[-2,-5],[-3,0],[-3,-3],[-2,-4],[-2,-2],[-1,-3],[-1,-4]],[[3493,7916],[-1,-2],[-1,0],[0,2],[1,4],[1,2],[0,1],[1,2],[1,1],[1,2],[0,-4],[-3,-8]],[[3208,7942],[-1,-4],[-2,-4],[-2,0],[1,3],[-1,4],[2,0],[1,0],[2,1]],[[3209,7946],[-4,-3],[2,5],[0,1],[1,0],[1,0],[0,-3]],[[1571,7992],[-1,-2],[-1,1],[0,1],[-2,10],[1,0],[2,-4],[0,-1],[1,-3],[1,-2],[-1,0]],[[1573,8000],[-1,-1],[-4,4],[-3,5],[-1,4],[6,-8],[3,-3],[0,-1]],[[2924,7776],[4,2],[9,9],[6,3],[8,9],[5,1],[2,2],[0,8],[1,2],[3,7],[3,6],[2,9],[5,5],[7,5],[7,10],[4,3],[3,2],[2,4],[2,2],[5,5],[7,1],[6,4],[5,2],[3,4],[5,1],[13,11],[3,5],[5,10],[4,5],[2,5],[6,9],[6,11],[3,9],[5,4],[8,13],[5,6],[2,0],[5,5],[4,5],[5,5],[10,6],[9,7],[12,6],[15,9],[11,5],[9,1],[10,2],[3,0],[16,-4],[7,-5],[9,-10],[1,-3],[0,-4],[-4,2],[-4,0],[2,-2],[5,-7],[0,-8],[-3,-7],[-8,-4],[-2,-3],[-1,-4],[-2,-2],[-4,-2],[-2,-3],[-6,-5],[-3,-1],[-3,1],[-8,5],[-5,4],[-2,-2],[-2,-3],[-5,1],[-2,-1],[-3,1],[-7,-5],[2,-1],[5,3],[2,0],[5,-4],[10,-5],[2,-3],[3,-9],[1,-1],[4,0],[4,5],[3,3],[6,2],[-1,-3],[5,0],[4,-4],[-1,-3],[-3,-6],[-1,-12],[-5,-8],[-7,-7],[2,-2],[2,-1],[4,2],[3,0],[3,-2],[-1,-6],[-1,-4],[0,-3],[2,-7],[3,-2],[1,-9],[1,-5],[0,-4],[2,-3],[1,-4],[9,-1],[2,-2],[6,-1],[1,-1],[2,-2],[-7,-5],[5,-4],[5,-6],[4,1],[2,0],[4,-4],[1,-1],[1,-2],[2,0],[3,2],[5,-1],[6,-2],[0,-3],[-1,-2],[4,1],[3,-2],[1,1],[1,1],[5,4],[8,8],[1,-1],[0,-3],[1,-5],[3,-4],[3,0],[5,2],[1,-2],[2,-4],[3,-6],[-1,-2],[-2,-2],[-3,-2],[10,-1],[1,-1],[1,-2],[-1,-3],[-1,-1],[-1,1],[-4,-1],[-3,-3],[-3,-1],[-2,0],[-2,-2],[-2,-2],[-2,0],[-6,-6],[-7,-3],[-7,-5],[-7,-4],[-7,-4],[-2,0],[-2,0],[-4,-4],[-2,1],[-2,-1],[-2,1],[-2,1],[1,-4],[1,-4],[-1,-1],[-1,-2],[-4,0],[-2,2],[-2,2],[-1,3],[-2,2],[-1,-3],[0,-2],[-2,-4],[-2,6],[-3,-2],[-1,-6],[0,-2],[1,-5],[-1,-2],[-2,1],[-2,-7],[-3,-3],[-3,-7],[-4,-5],[-1,-3],[-6,-9],[-3,1],[-1,-1],[-3,-3],[0,-7],[-2,1],[-1,0],[0,-2],[-1,-1],[-3,2],[-2,-1],[-2,2],[-3,10],[-2,3],[-2,1],[-1,-2],[-1,-2],[-2,4],[-2,16],[0,3],[3,13],[6,12],[-2,0],[-6,-8],[1,2],[1,2],[2,3],[3,4],[4,1],[2,1],[2,1],[3,3],[0,2],[-2,-2],[-4,-2],[1,3],[1,1],[21,21],[4,3],[8,4],[2,3],[-2,2],[4,-1],[-1,-3],[0,-2],[0,-2],[0,-3],[3,-2],[3,-5],[-1,7],[2,4],[10,6],[8,0],[2,3],[-6,1],[-8,0],[-6,1],[-6,-1],[-8,1],[-2,-1],[-2,-4],[-2,2],[-1,0],[-1,1],[2,6],[7,9],[5,7],[1,2],[1,3],[-2,-1],[-2,-1],[-2,4],[-3,4],[0,-2],[1,-5],[-5,-10],[-3,-1],[-4,-5],[-7,-4],[-7,-8],[-9,-6],[-2,0],[-5,5],[2,2],[1,4],[-1,-1],[-1,-2],[-3,-2],[2,-4],[-1,-2],[-3,-2],[-2,-4],[-3,-2],[-2,3],[-5,-3],[-5,-1],[-1,1],[0,3],[-2,1],[-3,-1],[-1,1]],[[3135,7785],[-1,1],[-1,1],[-1,0],[-1,-1],[0,-1],[-1,0],[-2,1],[-1,2],[-1,2],[-1,2],[1,2],[0,1],[1,2],[-1,3],[-1,1],[0,2],[0,2],[1,0],[1,1],[0,2],[0,2],[-2,1],[-1,0],[-2,0],[-2,2],[-1,1],[-1,1],[-1,1],[-1,2],[0,2],[1,2],[0,1],[0,1],[0,1],[0,1],[0,1],[0,2],[0,2],[0,5],[0,9],[0,8],[-1,9],[0,7],[0,9],[0,9],[0,9],[-3,5],[-5,6],[-4,4],[-2,0],[-1,0],[-1,-2],[-3,-2],[-5,-1],[-4,-3],[-2,0],[-1,0],[-2,2],[-1,2],[-1,3],[1,5],[-3,2],[-3,1],[-1,-4],[-2,-3],[-3,-6],[-4,-9],[-3,-5],[-4,-9],[-4,-8],[-1,-8],[-1,-7],[-3,-6],[-2,-5],[0,-6],[-1,-5],[0,-5],[0,-2],[0,-2],[-1,-2],[-2,-4],[0,-4],[-2,-2],[-3,-3],[-3,-6],[0,-3],[0,-2],[0,-2],[0,-1],[-2,0],[-1,0],[-1,-2],[0,-3],[-1,-3],[-1,0],[0,1],[-1,3],[-2,0],[-1,-1],[-2,-3],[-2,0],[-4,1],[-2,-5],[-3,-11],[-11,0],[-12,0],[-12,0],[-11,0],[-12,0],[-11,0],[-12,0],[-6,0],[-2,0]],[[1497,8027],[1,-6],[-3,1],[-2,1],[0,3],[1,2],[3,-1]],[[3484,8040],[-4,-3],[-1,-2],[-1,0],[-1,1],[-1,3],[0,1],[1,1],[1,-1],[0,-1],[1,0],[3,3],[2,0],[1,0],[-1,-2]],[[3497,8049],[2,-4],[1,-1],[-7,-4],[-1,0],[0,4],[0,3],[0,1],[2,-2],[2,3],[1,0]],[[1551,8037],[1,-1],[-7,4],[-2,3],[-1,2],[-1,1],[-3,2],[-1,2],[1,1],[2,-1],[4,-2],[3,-3],[4,-8]],[[1482,8041],[-1,0],[-2,0],[-2,2],[-3,5],[-1,0],[1,1],[1,1],[0,1],[-1,3],[3,2],[2,-1],[1,-2],[2,-4],[0,-4],[0,-3],[0,-1]],[[3283,8012],[-12,-1],[-9,3],[-7,2],[-6,3],[-15,10],[-2,4],[-1,4],[-3,4],[-3,3],[-15,10],[-2,3],[4,2],[3,2],[3,-1],[11,-3],[13,-4],[5,-2],[7,-4],[6,-5],[14,-12],[2,-1],[7,-7],[2,-4],[1,-4],[-1,-2],[-2,0]],[[1528,8065],[-1,6],[1,3],[0,1],[0,1],[1,-3],[1,-2],[0,-2],[0,-1],[-2,-3]],[[1523,8069],[-1,-3],[-2,5],[-2,11],[0,2],[1,4],[1,0],[2,-2],[2,-3],[0,-1],[1,-3],[1,-3],[-2,-3],[-1,-4]],[[3457,8105],[-1,0],[-1,0],[-1,0],[0,1],[1,3],[2,1],[2,0],[0,-2],[-1,-2],[-1,-1]],[[1467,8101],[13,-8],[14,-3],[10,-4],[7,-2],[2,-1],[1,-1],[2,-4],[3,-8],[2,-6],[5,-9],[3,-7],[1,-2],[0,-1],[0,-2],[2,-6],[6,-6],[4,-3],[8,-5],[6,-4],[1,-3],[2,-3],[1,-2],[2,-8],[4,-7],[3,-14],[1,1],[0,4],[1,1],[1,1],[0,-2],[1,-4],[2,-8],[0,-3],[-1,0],[-3,1],[-1,-1],[-2,-4],[-1,-1],[0,1],[-9,3],[-6,3],[-7,4],[-9,5],[-5,3],[-4,4],[-3,2],[0,3],[0,1],[5,8],[3,4],[1,3],[0,3],[0,4],[-1,-4],[-1,-3],[-1,-3],[0,-1],[-7,-1],[-5,0],[-3,-3],[-1,-1],[-1,1],[-4,5],[-4,3],[0,1],[3,2],[2,3],[-1,0],[-1,0],[-1,1],[-1,3],[-2,1],[-2,-2],[-1,0],[-1,3],[2,5],[0,1],[-3,-2],[0,1],[-1,2],[-1,0],[-2,0],[-2,2],[-1,-1],[0,-2],[-1,-1],[-3,4],[-2,-3],[-1,0],[0,1],[-1,7],[0,2],[1,1],[3,2],[7,2],[1,1],[-6,-1],[-1,1],[-2,3],[-2,0],[-1,0],[-1,2],[-2,7],[-2,1],[-3,1],[-1,2],[-1,-1],[0,-2],[-1,-1],[-2,-1],[-2,1],[-2,2],[0,2],[-1,2],[1,4],[0,1],[0,1],[-1,2],[-1,1],[0,-1],[0,-2],[-1,-1],[-2,-1],[-1,2],[-1,2],[-1,2],[-6,0],[-2,-2],[-2,0],[-1,0],[0,1],[1,4],[0,5],[-1,1],[-2,1],[-1,1],[2,5],[1,1],[1,1],[5,0],[2,0],[3,-4],[-1,1],[0,4],[-1,3],[2,2],[-2,1],[-6,1],[0,-2],[1,-2],[-4,-3],[-3,0],[-2,0],[-2,2],[-4,5],[-2,5],[0,3],[1,2],[2,2],[3,2],[6,0],[5,-2],[15,-10]],[[3459,8152],[-2,-6],[-1,-2],[-2,-1],[-2,-1],[-6,-1],[-3,-1],[0,-4],[0,-2],[1,-1],[1,-1],[3,1],[1,0],[0,-1],[1,-1],[0,-2],[0,-3],[0,-3],[-2,-7],[-3,-4],[-3,-3],[-1,-2],[0,-1],[-1,-5],[-1,-4],[-6,-9],[-2,-2],[0,-2],[0,-5],[-2,-3],[-4,-9],[-1,-3],[-1,-2],[0,-4],[0,-1],[-1,-3],[-1,-3],[0,-1],[0,-2],[1,-1],[0,-2],[-1,-4],[2,3],[4,7],[3,5],[2,2],[2,2],[1,5],[2,4],[2,1],[1,0],[1,-3],[0,-2],[-1,-4],[0,-1],[2,3],[4,2],[2,-1],[3,-3],[2,1],[4,2],[1,-1],[-1,-3],[-1,-2],[-4,-4],[-9,-7],[-3,-5],[1,0],[2,2],[2,1],[2,0],[1,0],[-1,-2],[0,-3],[-5,-8],[1,0],[6,4],[4,-5],[5,2],[3,1],[0,-1],[1,-2],[0,-3],[2,1],[0,1],[0,6],[2,-1],[0,-1],[0,-4],[0,-5],[-1,-3],[-3,-6],[1,-3],[-1,-2],[1,0],[2,2],[0,1],[0,2],[0,2],[2,2],[3,3],[1,1],[1,-1],[-1,-2],[1,1],[2,2],[2,2],[2,1],[2,2],[2,3],[2,2],[2,2],[1,1],[-1,-4],[1,-4],[0,-3],[0,-1],[2,4],[1,1],[1,1],[1,-1],[9,2],[2,-1],[3,-3],[4,-3],[2,-4],[0,-4],[0,-3],[-3,-3],[-3,-3],[-1,-2],[0,-3],[-1,-1],[-2,-2],[-7,-6],[2,0],[4,1],[3,0],[0,-1],[-1,-1],[-2,-2],[-1,-1],[1,-1],[2,-1],[3,1],[2,-1],[0,-2],[-2,-4],[-1,-3],[-2,-3],[-5,-3],[-2,-2],[1,0],[4,3],[3,0],[1,0],[2,3],[3,1],[2,-2],[4,5],[1,1],[3,-1],[1,1],[3,3],[2,1],[1,-1],[0,-4],[-1,-3],[0,-2],[-2,-4],[-2,-2],[-1,-1],[-2,1],[-1,-1],[-2,-4],[-3,-3],[-3,-2],[2,-1],[0,-4],[0,-1],[-4,-2],[-2,-1],[-3,-1],[2,-1],[4,1],[1,-1],[-1,-2],[-1,-3],[-5,-7],[0,-1],[1,-3],[1,-3],[1,-2],[3,0],[2,1],[2,5],[7,14],[5,4],[5,5],[1,-1],[0,-1],[0,-1],[-2,-4],[-2,-3],[-3,-9],[-1,-5],[0,-4],[0,-9],[0,-1],[1,-2],[2,2],[3,4],[2,4],[2,6],[0,2],[2,0],[0,-1],[1,-3],[1,-4],[0,-4],[0,-5],[-1,-3],[-6,-18],[1,-3],[0,-2],[0,-3],[-3,-8],[-1,-6],[-2,-2],[-1,-2],[-1,0],[-2,0],[-1,3],[-1,1],[-1,0],[-1,-1],[-4,-4],[-1,0],[-1,0],[-1,3],[1,12],[0,3],[-1,4],[1,5],[0,2],[-1,0],[-2,-3],[-2,-4],[-2,-5],[-5,-5],[-1,-1],[-1,0],[-1,1],[-1,2],[0,2],[0,3],[2,7],[3,10],[3,7],[1,3],[-1,2],[-1,2],[-1,8],[-1,6],[-2,3],[-4,3],[-1,-5],[-5,-12],[0,-5],[-1,-2],[-1,-2],[-2,-1],[1,2],[2,7],[-1,0],[-2,-5],[-2,-3],[-3,0],[-2,0],[-1,-1],[-7,-12],[0,-4],[-1,-3],[-3,-6],[-2,-3],[-2,0],[-2,1],[-2,0],[-3,-2],[-4,-1],[-2,1],[-1,0],[-2,3],[0,1],[0,1],[1,3],[3,3],[1,1],[5,2],[3,2],[3,4],[1,2],[5,11],[6,4],[3,3],[2,4],[0,1],[-3,-2],[-2,0],[-2,0],[-1,2],[-4,-1],[-4,1],[-1,-1],[-1,-5],[0,-3],[-1,-1],[-1,-1],[-2,0],[-6,2],[-1,1],[-1,0],[-6,-1],[-1,0],[1,1],[6,4],[0,11],[0,2],[-2,-1],[-2,-2],[-2,0],[-1,1],[-1,0],[-2,-6],[-1,-1],[-2,0],[-4,-3],[-7,-1],[-1,-2],[-5,1],[-15,3],[-5,0],[-6,2],[-1,1],[-9,-1],[-3,1],[0,2],[0,1],[-2,-3],[-3,-1],[-2,-2],[-10,-3],[-4,0],[-3,2],[-1,1],[-2,6],[-1,8],[0,1],[0,3],[2,3],[9,10],[7,9],[3,5],[3,2],[4,4],[0,1],[-4,-1],[-3,1],[-4,1],[-6,-1],[-6,0],[0,2],[3,4],[6,7],[1,0],[-2,-4],[-1,-2],[1,-2],[1,-1],[4,0],[0,1],[2,8],[2,8],[2,6],[2,5],[2,1],[1,-1],[3,-1],[4,-5],[1,0],[1,0],[-2,2],[-1,2],[0,2],[1,5],[2,2],[0,1],[-3,0],[-3,2],[-1,3],[1,4],[0,3],[3,4],[2,2],[2,0],[3,-4],[1,1],[0,1],[-3,6],[0,4],[0,1],[6,19],[2,10],[4,15],[1,3],[2,4],[1,2],[3,0],[1,0],[-2,2],[-1,2],[0,1],[1,1],[1,2],[3,2],[2,4],[1,5],[0,1],[-1,2],[0,1],[2,1],[4,6],[1,1],[1,7],[2,3],[2,2],[3,2],[8,5],[5,5],[4,0],[1,-3],[5,-3],[1,3],[-2,3],[1,1],[4,1],[1,-1],[1,-1],[0,-2]],[[1446,8149],[0,-1],[-1,0],[-2,1],[-1,2],[-2,6],[0,2],[1,1],[2,2],[1,0],[1,-2],[1,-4],[1,-1],[0,-5],[-1,-1]],[[3462,8173],[-1,0],[-1,0],[1,2],[1,3],[2,1],[0,-4],[-2,-2]],[[2795,8176],[-2,0],[-2,0],[-2,2],[-2,1],[9,6],[2,-1],[0,-1],[-2,-3],[0,-2],[0,-1],[-1,-1]],[[1360,8177],[-1,1],[-1,2],[0,5],[0,2],[0,1],[3,-4],[-1,-7]],[[1434,8202],[-2,-1],[1,3],[0,2],[-1,2],[0,3],[0,8],[2,5],[3,0],[0,-2],[-1,-12],[-1,-5],[0,-2],[-1,-1]],[[1418,8208],[-1,-2],[-3,6],[-2,2],[-2,7],[-1,2],[0,2],[1,1],[1,-1],[0,-1],[6,-7],[1,-3],[0,-6]],[[1408,8236],[-1,0],[-1,0],[-1,2],[-2,4],[0,2],[-1,3],[1,0],[1,0],[3,-7],[1,-4]],[[2757,8222],[-2,-1],[-6,2],[-2,1],[-7,4],[-14,6],[-4,3],[-1,2],[2,5],[2,2],[1,1],[14,2],[6,-1],[6,-9],[4,-7],[2,-5],[0,-3],[-1,-2]],[[1340,8248],[3,-6],[1,-4],[-1,-6],[-4,-2],[-2,2],[-1,-1],[-2,-1],[2,-1],[2,-3],[3,-4],[3,0],[4,-3],[-3,-4],[0,-3],[4,-7],[0,-2],[1,0],[3,0],[1,0],[0,-2],[-2,-4],[0,-1],[2,0],[3,0],[1,-4],[-3,-4],[-6,5],[-2,4],[-2,5],[-1,2],[-6,6],[-7,12],[-2,2],[-2,5],[-1,2],[0,2],[1,1],[2,0],[0,2],[-9,5],[-1,1],[-1,2],[1,1],[5,-1],[5,2],[3,1],[1,1],[3,2],[1,0],[3,-2]],[[1429,8233],[1,-18],[0,-6],[-2,-4],[-1,-7],[-2,-2],[-1,3],[0,7],[-1,5],[0,2],[1,10],[-1,-1],[-2,-4],[-2,0],[-3,4],[-2,4],[0,4],[-2,4],[-1,2],[1,2],[1,4],[1,3],[1,5],[1,3],[1,-1],[3,-2],[4,-3],[3,-4],[2,-10]],[[1412,8243],[-3,0],[-1,0],[0,2],[-1,2],[1,2],[2,4],[0,2],[0,1],[1,-3],[1,-2],[0,-8]],[[2779,8254],[0,-2],[-2,1],[-1,1],[0,1],[-1,1],[1,2],[2,-1],[1,-3]],[[1393,8246],[-1,0],[-1,1],[-6,9],[-5,4],[-3,5],[-3,3],[2,5],[2,-1],[5,-4],[5,-4],[2,-2],[6,-11],[-1,-2],[-2,-3]],[[1382,8292],[-1,-2],[-2,-4],[-1,-1],[-1,1],[-1,0],[-2,3],[-2,2],[-1,0],[0,-1],[0,-2],[0,-2],[0,-1],[-1,0],[0,1],[-1,2],[0,2],[0,1],[2,3],[4,4],[1,1],[2,0],[2,-2],[0,-1],[2,-4]],[[1315,8301],[3,-3],[6,2],[1,0],[1,-1],[1,-3],[2,-4],[0,-5],[-1,-2],[-1,-2],[-9,-7],[-1,-1],[1,-1],[2,0],[8,2],[0,1],[1,6],[1,3],[0,2],[-1,6],[0,2],[6,1],[3,2],[4,3],[0,-7],[-1,-2],[-3,-8],[-2,-7],[-1,-8],[0,-12],[-1,-4],[-1,-2],[-9,-5],[-5,1],[-5,4],[-2,2],[2,4],[1,0],[3,-1],[2,-1],[1,0],[0,1],[-6,6],[-5,3],[-2,3],[0,2],[0,2],[-4,8],[-1,4],[0,5],[0,4],[1,8],[0,1],[2,0],[2,-1],[7,-1]],[[1363,8322],[-1,0],[0,1],[0,2],[1,5],[1,1],[3,-1],[1,-1],[0,-2],[-2,-2],[-3,-3]],[[1373,8338],[2,4],[5,7],[3,4]],[[1383,8353],[0,-4],[-4,-8],[-5,-4],[-1,1]],[[3305,8412],[1,-2],[-5,1],[-1,1],[0,1],[0,1],[1,2],[2,1],[1,0],[2,-2],[0,-1],[-1,-2]],[[2810,8418],[-1,-1],[-1,0],[0,2],[1,4],[1,3],[0,3],[1,2],[1,3],[1,1],[1,0],[1,-7],[-1,-4],[-1,-2],[-1,-3],[-2,-1]],[[2778,8421],[-1,0],[-2,1],[1,4],[1,2],[4,1],[1,1],[1,1],[1,0],[2,2],[2,3],[1,0],[-1,-4],[-2,-4],[-8,-7]],[[2807,8425],[-2,-6],[-2,-6],[-3,-10],[-1,-1],[-1,3],[3,12],[1,2],[-1,1],[-1,2],[-1,-3],[-5,-13],[-1,-3],[-1,-1],[-1,0],[-3,0],[-4,-4],[7,17],[1,1],[-2,1],[0,-1],[-6,-10],[-4,-4],[-2,1],[-1,1],[0,1],[6,11],[6,7],[2,5],[1,5],[0,3],[0,3],[1,1],[0,-1],[0,-4],[-1,-8],[-1,-3],[-1,-4],[3,1],[1,4],[2,6],[1,5],[1,8],[0,-2],[1,-1],[2,-1],[1,-1],[0,-2],[1,-2],[2,-1],[1,0],[1,-3],[0,-2],[0,-1],[1,0],[-1,-3]],[[2791,8447],[-1,-1],[-1,0],[1,6],[-1,1],[0,1],[0,1],[1,0],[1,-1],[1,-2],[0,-2],[0,-1],[-1,-1],[0,-1]],[[2781,8454],[-1,-1],[-1,1],[0,3],[1,2],[1,0],[1,-1],[0,-2],[-1,-2]],[[3285,8499],[2,-2],[1,-6],[-5,0],[-5,4],[-1,4],[1,1],[1,-1],[1,1],[2,0],[3,-1]],[[2785,8497],[0,-1],[-1,1],[-1,-4],[0,-1],[-1,3],[1,2],[0,1],[0,1],[1,2],[1,1],[0,-3],[0,-2]],[[3079,8584],[-2,-4],[-2,1],[-1,-1],[-1,0],[1,4],[0,2],[0,3],[1,1],[3,1],[0,-4],[0,-1],[1,0],[0,-2]],[[2770,8618],[-1,0],[-1,1],[1,2],[1,0],[2,3],[1,-1],[-1,-2],[-1,-2],[-1,-1]],[[2776,8627],[-3,-1],[1,4],[1,1],[1,1],[3,1],[1,-2],[-1,-2],[-3,-2]],[[3211,8661],[-1,-4],[-4,1],[-5,3],[-2,2],[0,3],[0,3],[1,0],[4,0],[3,-4],[1,-1],[3,-3]],[[3104,8654],[-2,-1],[-1,1],[0,4],[0,2],[3,6],[3,6],[1,2],[3,-1],[2,-2],[2,-3],[1,-2],[-1,-4],[-2,-3],[-3,-2],[-6,-3]],[[2818,8682],[-4,-1],[0,1],[2,2],[6,2],[4,1],[-1,-2],[-2,-2],[-5,-1]],[[3199,8718],[-1,0],[-1,0],[-2,3],[-2,1],[-1,1],[-9,7],[-1,2],[0,3],[3,1],[6,1],[4,0],[5,-2],[1,-1],[2,-3],[0,-3],[0,-4],[-1,-1],[-2,-2],[-1,-3]],[[2415,8746],[-1,0],[-2,3],[-1,1],[3,1],[3,-2],[-1,-2],[-1,-1]],[[3193,8748],[1,-1],[1,1],[1,-2],[0,-1],[2,-2],[0,-1],[0,-1],[-1,-1],[-1,-1],[-6,4],[-2,4],[0,2],[0,2],[1,1],[2,0],[1,-1],[1,-3]],[[2790,8779],[2,-2],[4,-5],[1,-3],[1,-3],[-1,-5],[-1,-5],[-1,-3],[-3,-4],[-2,-5],[-2,-6],[-1,-4],[-2,-1],[-1,-1],[-1,0],[-3,2],[-3,4],[-2,2],[-3,2],[-2,2],[0,3],[0,7],[0,4],[0,3],[1,3],[2,3],[4,8],[3,3],[1,0],[4,0],[2,0],[2,1],[1,0]],[[3199,8787],[5,-1],[4,1],[1,-1],[1,-3],[-1,-4],[-2,-2],[-3,0],[-5,1],[-2,1],[-2,2],[1,2],[3,0],[0,1],[-1,1],[0,1],[1,1]],[[2944,8791],[-1,-1],[-6,1],[-7,2],[-3,3],[0,1],[1,0],[2,0],[3,-2],[8,-1],[3,-1],[0,-1],[0,-1]],[[3046,8787],[-2,-1],[-4,1],[-4,1],[-2,1],[-2,3],[0,3],[-4,5],[-4,2],[-3,3],[3,0],[3,0],[5,-2],[5,-2],[6,-4],[2,-4],[2,-3],[1,-2],[-1,-1],[-1,0]],[[2722,8810],[1,-2],[0,-2],[0,-3],[-1,-3],[-1,-3],[-2,-5],[-8,-7],[-3,-4],[-2,-3],[-12,-11],[-2,-1],[-1,1],[-4,1],[-3,1],[-9,-5],[-1,1],[0,5],[-1,2],[-4,6],[0,1],[0,2],[0,1],[5,6],[10,19],[2,1],[5,-2],[2,-1],[2,0],[7,4],[7,0],[6,2],[3,0],[3,0],[1,-1]],[[2836,8840],[3,-3],[2,0],[2,-2],[3,-6],[0,-1],[0,-2],[-2,-3],[-1,-1],[-4,-2],[-4,-1],[-3,1],[-6,6],[-6,7],[-2,4],[1,1],[2,2],[6,1],[8,-1],[1,0]],[[2870,8835],[-3,0],[-4,1],[-4,2],[-8,8],[6,6],[10,-6],[3,-4],[0,-7]],[[2843,8870],[-2,-3],[-6,1],[-1,1],[0,1],[1,1],[6,1],[3,0],[1,0],[0,-1],[-2,-1]],[[2641,8943],[1,-1],[1,0],[2,3],[4,8],[2,1],[1,0],[7,-5],[2,-3],[2,-4],[1,-2],[5,-2],[5,-1],[7,-2],[2,-1],[5,-8],[1,-1],[5,-3],[9,-7],[3,-1],[8,-2],[4,-2],[3,-3],[3,-5],[4,-7],[3,-13],[0,-2],[0,-2],[-1,-1],[-5,-5],[0,-1],[5,0],[10,3],[7,-2],[2,0],[1,0],[2,4],[2,-1],[4,-3],[3,-4],[1,-2],[-1,-1],[-2,-1],[6,-2],[5,-3],[-1,-3],[-5,-5],[-6,-4],[-7,-7],[-2,-1],[-1,0],[-3,1],[-6,3],[-16,8],[-5,1],[-7,1],[0,2],[-2,11],[-3,2],[-10,2],[-3,1],[0,3],[1,3],[-2,2],[-3,0],[-3,-1],[-6,-2],[-2,-3],[-1,-2],[-1,-6],[0,-2],[-2,-4],[-8,-8],[-4,-3],[-3,-1],[-1,-1],[-2,-3],[-4,-8],[-1,-2],[-2,-3],[-5,-3],[-4,-3],[-8,-3],[-4,-2],[-3,2],[-2,7],[-4,22],[-1,2],[-1,1],[-1,0],[-14,-3],[-7,1],[-8,-5],[-2,-1],[-3,0],[-3,1],[-1,1],[0,2],[0,2],[1,3],[3,6],[3,4],[1,2],[13,7],[3,2],[2,3],[0,3],[-1,3],[-2,8],[-1,7],[0,4],[1,5],[4,14],[1,6],[2,24],[1,6],[1,7],[2,3],[4,8],[3,3],[4,2],[1,-1],[1,0],[1,-4],[6,-2],[2,-3],[1,-3],[1,-4],[-1,-2],[-3,-3],[0,-1],[0,-1],[5,-4],[4,-10]],[[2648,8961],[-2,-1],[-1,1],[-2,1],[-1,3],[-1,2],[-4,3],[-1,1],[-1,4],[0,4],[-1,3],[0,2],[0,2],[4,1],[2,-1],[1,-1],[1,-1],[0,-2],[3,-5],[2,-4],[3,-7],[0,-2],[-1,-2],[-1,-1]],[[2674,8974],[4,-3],[3,-1],[6,-1],[1,0],[0,-1],[-1,-2],[-2,-2],[-1,0],[-4,1],[-1,1],[-1,2],[-1,0],[-1,-1],[1,-1],[-1,0],[-4,0],[0,1],[0,2],[3,2],[-3,1],[0,1],[-4,-2],[-2,0],[-3,1],[0,6],[-1,2],[-1,2],[-1,2],[-1,1],[-3,1],[-2,3],[-1,1],[1,1],[1,2],[8,-3],[5,-3],[4,-4],[3,-2],[0,-2],[-1,-2],[-1,-1],[1,-2]],[[2691,9002],[3,-1],[2,0],[0,-1],[-2,-3],[-1,0],[-3,2],[-2,2],[0,2],[0,1],[0,1],[3,-3]],[[1997,9043],[4,0],[4,0],[-1,-5],[-1,-2],[-2,-1],[0,1],[-3,4],[-1,3]],[[3259,9046],[-4,-1],[-2,1],[2,1],[1,2],[3,2],[1,2],[4,1],[2,0],[0,-1],[-2,-2],[-5,-5]],[[2003,9066],[-2,-5],[0,1],[-1,2],[-2,1],[-2,3],[0,5],[0,3],[0,3],[2,2],[2,-2],[1,-4],[-1,-3],[2,-2],[1,-2],[0,-2]],[[1967,9099],[4,0],[2,0],[2,-2],[0,-2],[0,-1],[-1,0],[-5,2],[-1,2],[-1,1]],[[2955,9088],[-14,0],[-7,0],[-3,1],[-3,2],[-3,4],[-2,5],[0,2],[1,1],[1,1],[9,2],[7,-2],[6,-2],[9,-1],[2,0],[1,-1],[1,-1],[1,-5],[0,-3],[0,-2],[-6,-1]],[[1963,9100],[-1,0],[-4,3],[1,3],[4,-3],[0,-2],[0,-1]],[[2594,9085],[-1,0],[-2,1],[-4,4],[-1,1],[0,2],[0,2],[0,2],[1,4],[-2,3],[-1,2],[0,1],[2,3],[0,1],[2,3],[3,4],[4,-1],[3,-4],[1,-2],[0,-3],[0,-3],[1,-5],[0,-4],[0,-2],[-2,-4],[-1,-2],[-1,-2],[-2,-1]],[[2898,9119],[14,-5],[2,-2],[0,-2],[1,-1],[0,-4],[-1,-2],[-1,-3],[0,-2],[1,-12],[0,-7],[-1,-5],[-2,-5],[-3,-3],[-3,-2],[-10,-5],[-8,-1],[-8,0],[-10,-2],[-4,1],[-3,0],[-1,1],[-2,3],[-3,5],[-1,6],[-3,10],[0,2],[2,8],[3,5],[5,9],[6,8],[1,1],[3,2],[6,2],[6,-1],[2,1],[3,1],[3,0],[6,-1]],[[2806,9112],[-2,-1],[-4,3],[0,2],[1,4],[6,1],[2,-3],[1,-2],[-4,-4]],[[2096,9124],[-2,0],[-3,1],[-4,2],[-3,2],[-2,2],[0,2],[1,1],[3,0],[5,0],[3,-1],[4,-4],[1,-1],[0,-2],[-1,-1],[-2,-1]],[[2920,9121],[-2,-1],[-4,4],[-6,4],[-3,3],[0,1],[0,2],[1,3],[2,3],[3,1],[3,-1],[3,-2],[3,-6],[1,-3],[1,-2],[-1,-1],[0,-1],[1,-1],[-1,-1],[0,-1],[-1,-1]],[[2171,9134],[-1,0],[-2,1],[-9,4],[-1,1],[1,1],[3,2],[2,2],[2,3],[5,-1],[2,-2],[1,-1],[0,-2],[0,-4],[-2,-1],[-1,-3]],[[2216,9147],[-1,-2],[-1,0],[-2,-3],[-1,0],[-1,2],[-1,2],[-1,0],[-2,-1],[-1,0],[0,1],[0,1],[0,3],[0,5],[0,1],[0,2],[0,1],[1,1],[2,0],[3,0],[2,-2],[1,-2],[2,-2],[1,-1],[-1,-6]],[[2222,9159],[0,-4],[-4,1],[-1,2],[-2,2],[0,1],[0,1],[2,3],[1,1],[2,-1],[1,-2],[1,-2],[0,-2]],[[2486,9171],[-2,-1],[-2,3],[-1,0],[0,2],[-3,0],[0,2],[1,2],[2,1],[2,-1],[2,-2],[1,-2],[0,-3],[0,-1]],[[2799,9149],[-1,0],[-3,1],[-1,2],[0,2],[0,1],[1,1],[2,2],[2,3],[2,2],[6,2],[1,1],[3,6],[1,1],[3,0],[0,1],[-1,1],[0,2],[1,1],[1,1],[4,2],[4,-1],[1,0],[0,-1],[2,-3],[-2,-3],[-4,-3],[-3,-3],[0,-1],[-1,-2],[0,-1],[-4,-4],[-2,-4],[-2,-2],[-5,-2],[-5,-2]],[[2494,9182],[1,-3],[-3,-5],[0,-1],[-1,0],[-1,0],[-3,4],[-1,2],[1,2],[2,1],[2,1],[2,-1],[0,1],[1,-1]],[[2861,9166],[-4,0],[-2,0],[-2,1],[-1,2],[-2,5],[1,2],[0,4],[0,1],[1,1],[4,1],[2,0],[3,-1],[7,-1],[2,-1],[0,-1],[0,-1],[0,-1],[-4,-4],[-2,-2],[-1,-3],[-2,-2]],[[2189,9181],[-2,-1],[0,1],[0,1],[0,1],[-1,1],[2,1],[0,1],[-3,2],[-1,1],[0,1],[2,1],[1,0],[4,-2],[2,-2],[1,-2],[-1,-1],[-1,0],[-1,-2],[-2,-1]],[[2347,9191],[3,-4],[0,-2],[0,-3],[-1,-2],[-2,-2],[-2,-1],[-3,0],[-1,1],[1,3],[0,2],[0,4],[-1,2],[-1,1],[-2,0],[0,-1],[1,-2],[-1,-3],[-1,-4],[-1,-2],[-2,1],[-1,2],[1,2],[-1,2],[1,2],[1,4],[2,2],[2,1],[2,0],[3,-1],[3,-2]],[[1138,9191],[-3,-2],[-3,2],[-1,2],[4,3],[2,-1],[4,-1],[1,-2],[-4,-1]],[[3113,9189],[-1,0],[-7,3],[0,2],[3,2],[3,1],[2,0],[3,0],[2,-3],[-3,-2],[-2,-3]],[[2832,9199],[2,-3],[0,-1],[-2,-2],[-7,-3],[-5,-3],[-2,-1],[-3,1],[-4,-1],[-2,0],[2,2],[6,7],[5,1],[1,1],[2,0],[1,1],[0,1],[1,2],[2,0],[3,-2]],[[2793,9203],[1,-3],[1,-1],[-1,-1],[-4,-4],[-9,-1],[-5,2],[2,-5],[1,-2],[-1,-1],[-2,1],[-3,1],[-2,1],[0,2],[-1,1],[-1,-1],[-1,0],[-2,3],[-1,1],[-9,1],[-1,1],[1,1],[1,2],[2,0],[6,0],[0,2],[1,1],[3,0],[3,0],[1,-1],[1,-2],[2,0],[2,0],[3,1],[4,2],[4,1],[4,-2]],[[2293,9195],[1,-1],[2,1],[1,2],[1,0],[1,0],[4,-3],[3,-4],[3,-3],[5,-2],[11,-7],[3,-5],[3,-8],[3,-6],[3,-4],[3,-3],[5,-3],[4,2],[1,1],[2,-1],[1,-3],[0,-1],[-2,-2],[-3,-1],[-4,-1],[-2,0],[-3,-3],[-3,-3],[-4,-2],[-6,-5],[-4,-2],[-6,-1],[-11,5],[-7,-1],[-6,1],[-6,5],[-5,2],[-10,4],[-1,1],[0,1],[0,2],[-1,1],[0,1],[-2,0],[-1,-1],[-3,-2],[-5,1],[-2,1],[-1,1],[-1,1],[0,2],[-1,1],[-1,1],[-1,0],[-3,-1],[-1,-1],[1,-1],[-1,-1],[-4,0],[-2,1],[-3,2],[-2,3],[-2,4],[0,1],[2,3],[1,2],[10,1],[5,1],[5,3],[7,5],[1,1],[0,1],[0,2],[-2,3],[-1,2],[1,1],[2,0],[-1,1],[-1,1],[-1,1],[0,2],[2,0],[3,0],[4,-5],[2,-1],[3,-1],[-3,4],[-3,6],[-1,3],[0,1],[1,4],[1,1],[1,1],[3,2],[6,2],[2,0],[3,-1],[3,-3],[5,-3],[1,-2],[0,-1],[-2,-1],[-1,-1],[1,-1]],[[2585,9222],[4,0],[3,0],[2,0],[1,-2],[1,-2],[1,-1],[-2,-2],[-5,-1],[-3,1],[-3,1],[-2,0],[-4,1],[-2,1],[-2,2],[0,2],[4,1],[2,1],[5,-2]],[[2213,9244],[-6,2],[-2,1],[-1,1],[-1,2],[0,3],[1,1],[3,0],[3,-1],[4,-3],[-1,-1],[0,-2],[1,-2],[-1,-1]],[[2924,7776],[-1,0],[-3,0],[-4,-2],[-5,-4],[-6,-7],[-11,-16],[0,-2],[-2,-3],[-4,-3],[-4,-3],[-1,-4],[-1,-2],[-6,-9],[-4,-7],[-3,-8],[-3,-9],[-7,0],[-6,0],[-9,0],[-8,0],[-9,0],[-7,0],[-7,0],[-3,-3],[-5,-3],[-4,-4],[2,-7],[1,-3],[-1,-10],[1,-1],[0,-2],[1,-2],[0,-2],[1,-1],[1,-1],[0,-1],[1,-2],[-1,-2],[-3,-4],[-4,-3],[-7,-6],[-9,-6],[-7,-6],[-6,-4],[-12,-4],[-10,-3],[-7,-2],[-6,-6],[-7,-7],[-6,-5],[-7,-7],[-6,-6],[-7,0],[-5,5],[-5,4],[-3,9],[0,9],[1,6],[1,3],[2,2],[4,3],[3,6],[3,4],[3,4],[1,7],[2,16],[1,3],[2,11],[4,12],[1,5],[-2,15],[-1,11],[-1,10],[-1,12],[-1,10],[-1,10],[-1,10],[-2,10],[0,7],[-1,8],[-6,6],[-5,4],[-7,6],[-6,6],[-5,5],[3,10],[0,2],[-1,2],[-3,3],[-1,0],[-3,0],[-4,-2],[-2,0],[-1,4],[-2,4],[-1,4],[0,5],[-1,4],[1,2],[0,1],[0,2],[-1,1],[-1,0],[-4,-2],[-2,0],[-1,-1],[-2,-2],[-1,0],[-3,5],[-3,5],[-2,7],[-1,8],[-5,5],[-6,4],[-5,5],[-5,5],[-6,4],[-5,5],[-6,4],[-5,5],[-2,2],[-5,4],[-7,5],[-8,7],[-8,6],[-7,6],[-4,4],[-2,2],[-5,4],[-6,4],[-7,-2],[-8,-7],[-4,-3],[-4,-3],[-2,-1],[-5,-2],[-3,1],[-6,0],[-3,-1],[-3,1],[-1,4],[-2,2],[-6,-1],[-8,1],[-4,0],[-1,1],[-2,4],[-2,1],[-3,-1],[-5,-5],[-5,-3],[-3,0],[-4,3],[-6,5],[-4,6],[-5,2],[-3,-1],[-1,-3],[-2,0],[-2,6],[-1,4],[-2,1],[-4,4],[-3,2],[-4,3],[-2,0],[-3,1],[-3,0],[-3,-1],[-2,-3],[-3,-2],[-4,0],[-3,1],[-1,4],[-6,2],[-10,3],[-6,2],[-1,2],[-1,2],[0,3],[-3,8],[-1,7],[0,8],[0,3],[-1,0],[-1,2],[-6,1],[-1,-9],[0,-12],[-6,0],[-12,0],[-12,0],[-12,0],[-12,0],[-11,0],[-12,0],[-12,0],[-12,0],[-12,0],[-12,0],[-11,0],[-12,0],[-12,0],[-12,0],[-12,0],[-12,0],[-11,0],[-12,0],[-12,0],[-12,0],[-12,0],[-12,0],[-12,0],[-11,0],[-12,0],[-12,0],[-12,0],[-12,0],[-12,0],[-11,0],[-12,0],[-12,0],[-12,0],[-12,0],[-12,0],[-12,0],[-11,0],[-12,0],[-12,0],[-12,0],[-12,0],[-12,0],[-11,0],[-12,0],[-12,0],[-12,0],[-12,0],[-12,0],[-11,0],[-12,0],[-12,0],[-12,0],[-12,0],[-12,0],[-12,0],[-11,0],[-12,0],[-12,0],[-12,0],[-12,0],[-12,0],[-11,0],[-12,0],[-12,0],[-3,0]],[[1589,8006],[-1,2],[-3,2],[-1,0],[-1,0],[-1,-2],[0,-2],[-1,-1],[0,1],[-1,3],[0,2],[1,2],[0,1],[-2,-1],[-1,1],[0,1],[0,4],[-1,2],[1,1],[3,1],[4,0],[1,2],[1,4],[-3,-4],[-1,0],[-5,1],[-3,0],[0,1],[0,1],[1,1],[0,3],[1,8],[1,3],[0,2],[-4,-6],[0,-1],[0,-2],[0,-3],[-2,-1],[-1,0],[-2,-3],[-1,0],[-9,5],[-1,1],[-1,2],[-2,4],[-1,3],[1,3],[1,2],[1,0],[1,-2],[2,-4],[0,-3],[3,0],[3,4],[1,1],[-3,-1],[-2,0],[-2,2],[-1,3],[-1,3],[0,11],[1,2],[1,1],[1,3],[0,1],[-1,2],[-1,2],[-2,1],[0,-1],[2,-4],[0,-2],[-2,-5],[-1,-1],[0,-4],[0,-1],[-2,-2],[-3,-3],[-3,-1],[-4,0],[-2,2],[-6,8],[-2,4],[0,3],[-5,11],[0,2],[-1,3],[-2,1],[0,3],[3,7],[2,5],[1,2],[0,3],[-1,6],[1,3],[-3,-4],[0,-2],[1,-3],[-1,-3],[-1,-4],[-2,-5],[-4,-2],[-8,1],[0,1],[-1,1],[0,7],[-1,-1],[-1,-3],[0,-5],[-1,-1],[-2,-1],[-1,1],[-1,2],[-2,0],[-3,-1],[-2,0],[-2,0],[-4,2],[-4,0],[-2,1],[0,3],[1,1],[5,1],[5,2],[5,1],[0,1],[-3,1],[-10,-3],[-4,0],[0,1],[-1,2],[2,3],[2,2],[0,2],[-1,1],[-2,-1],[-1,2],[1,5],[-1,6],[-1,-6],[-2,-3],[-9,-1],[-1,-1],[-2,0],[-5,2],[-3,2],[-2,3],[-4,5],[-4,4],[0,7],[1,4],[2,5],[5,10],[2,2],[2,1],[9,1],[6,1],[2,1],[-10,1],[-8,-1],[-3,-2],[-4,-6],[-1,-3],[-1,-2],[-2,1],[-1,3],[-2,3],[-1,4],[0,6],[0,3],[1,3],[3,7],[-4,-1],[1,6],[1,6],[3,3],[4,3],[3,3],[5,3],[2,-5],[5,-1],[1,-2],[2,-4],[2,-4],[2,-3],[1,-1],[-1,3],[-4,7],[0,2],[-1,3],[-5,3],[-1,2],[-1,3],[-1,3],[1,2],[5,7],[1,3],[0,2],[0,2],[-1,3],[0,-5],[0,-2],[-1,-2],[-1,-1],[-1,-2],[-11,-15],[-1,-1],[-5,-2],[-2,-1],[-1,-3],[-2,-5],[-3,-12],[-3,-9],[-2,12],[-5,9],[9,9],[0,2],[0,5],[0,1],[1,2],[2,3],[0,1],[-3,-1],[-4,-8],[-1,-2],[-1,0],[0,4],[2,11],[2,10],[0,3],[2,3],[-2,0],[-7,-5],[-2,3],[-2,16],[-4,6],[-6,4],[-6,3],[-1,4],[-1,5],[1,6],[3,3],[2,2],[3,-1],[0,-2],[-2,-6],[2,-1],[8,-7],[2,-1],[3,3],[2,0],[5,-2],[1,-3],[4,-6],[0,4],[-5,6],[-2,2],[-5,1],[-3,-1],[-1,0],[-2,2],[-2,2],[-3,7],[0,2],[0,3],[1,1],[0,2],[2,1],[3,1],[1,1],[-4,3],[-1,0],[-5,-5],[-1,0],[-1,1],[-2,-3],[-1,-1],[-4,-8],[-1,-3],[0,-6],[-1,-3],[0,-2],[-5,-3],[-3,-5],[-4,5],[-3,4],[-3,8],[-4,2],[-6,4],[-2,4],[3,8],[4,7],[1,7],[1,2],[7,2],[4,3],[-5,1],[-2,-1],[-6,-2],[-5,5],[-3,4],[-1,4],[1,4],[0,3],[0,5],[1,2],[1,2],[3,2],[2,6],[1,3],[4,11],[2,5],[3,7],[6,10],[-2,0],[-1,-1],[-1,0],[-1,1],[-1,2],[-1,4],[0,-2],[0,-6],[-1,-6],[-1,-4],[-3,-8],[-2,-3],[-1,3],[1,5],[2,4],[0,5],[-1,7],[-1,5],[-1,4],[0,4],[0,3],[1,4],[1,3],[0,1]],[[1388,8403],[0,3],[0,4],[-1,3],[-1,3],[-3,-2],[-6,2],[-1,7],[-5,1],[-3,5],[-5,2],[-4,2],[-4,2],[-3,3],[-4,3],[-3,3],[-2,0],[-5,-1],[0,6],[-2,3],[1,3],[-3,1],[-4,3],[1,5],[1,4],[-3,2],[-5,1],[1,4],[2,3],[-2,5],[-4,7],[-3,6],[-4,8],[-3,7],[-3,6],[-3,5],[-3,7],[-4,8],[-4,7],[0,4],[-4,6],[-3,5],[-4,6],[-4,3],[-3,2],[-4,3],[-3,3],[-1,3],[0,1],[-1,3],[-1,2],[-1,2],[-5,4],[-1,3],[-4,3],[-3,1],[-1,1],[-3,9],[0,3],[1,3],[-1,1],[-5,7],[-3,3],[-3,3],[-7,-4],[-6,-4],[-5,-1],[-6,-2],[2,-4],[-1,-3],[-2,-2],[-3,1],[0,-11],[-3,-7],[-6,0],[-4,-3],[-5,-4],[-4,-3],[-5,-4],[-2,0],[1,5],[-2,7],[-1,6],[-3,3],[-5,6],[-3,4],[-6,5],[-3,4],[-4,4],[-5,6],[-2,7],[-5,3],[-4,2],[-4,6],[1,5],[2,6],[0,4],[-5,-1],[-6,0],[-6,0],[-4,-5],[-4,-4],[-6,3],[-8,4],[-2,-5],[-6,3],[-7,2],[0,17],[0,17],[0,16],[0,17],[0,17],[0,17],[0,17],[0,17],[0,16],[0,17],[0,17],[0,17],[0,17],[0,17],[0,16],[0,17],[0,17],[0,17],[0,17],[0,17],[0,16],[0,17],[0,17],[0,17],[0,17],[0,17],[0,16],[0,17],[0,17],[0,17],[0,17],[0,17]],[[1083,9196],[4,-1],[13,-2],[12,1],[22,-6],[13,-12],[11,-5],[5,-4],[7,-4],[17,-7],[5,-1],[10,-3],[6,0],[11,-1],[7,-3],[14,-7],[3,-1],[-4,8],[-1,1],[-6,3],[-6,1],[-1,1],[-1,3],[0,1],[2,0],[5,0],[2,1],[1,1],[-2,0],[-3,1],[-3,2],[-1,2],[6,11],[2,-1],[3,3],[6,-2],[1,1],[0,6],[1,1],[2,1],[8,1],[10,-1],[1,1],[-1,3],[0,2],[0,4],[1,1],[1,1],[5,0],[1,-2],[2,-3],[2,-2],[4,-1],[1,-2],[-2,-4],[-2,-3],[-4,-6],[0,-1],[6,2],[7,4],[6,2],[5,1],[4,1],[2,2],[2,2],[3,7],[2,2],[9,-1],[2,0],[1,1],[0,1],[-2,1],[-3,0],[0,1],[1,1],[2,1],[4,0],[3,-2],[2,0],[6,2],[10,8],[4,2],[3,0],[3,-1],[2,0],[3,5],[1,2],[2,2],[7,4],[5,1],[3,-1],[3,-2],[3,0],[4,0],[2,0],[2,1],[4,5],[2,0],[1,-2],[3,-3],[0,-2],[-3,-4],[-23,-13],[-7,-5],[-3,-2],[-4,-2],[-7,0],[-3,-2],[-4,-1],[-11,-1],[-2,-1],[-1,-1],[-4,-7],[-2,-2],[-4,-3],[-4,-2],[-6,-1],[-4,-3],[-4,-6],[-3,-4],[-4,-4],[-4,-4],[-1,-3],[1,-3],[1,-1],[4,-2],[2,0],[-2,2],[-3,3],[-1,1],[1,0],[17,-2],[3,2],[1,2],[0,1],[-4,0],[-1,2],[-1,3],[0,2],[0,1],[1,3],[5,3],[5,2],[4,2],[2,2],[6,3],[3,2],[1,2],[0,1],[-1,1],[1,2],[4,2],[2,0],[6,-2],[2,-1],[-1,-3],[1,0],[2,4],[1,1],[2,1],[1,-1],[2,-1],[0,-4],[0,-6],[1,-3],[1,4],[1,3],[6,9],[4,5],[5,5],[6,4],[16,6],[8,1],[4,2],[3,1],[1,2],[2,2],[1,0],[-1,-4],[-1,-2],[-5,-2],[-1,-2],[1,-3],[1,-2],[1,-1],[2,1],[4,2],[4,4],[9,8],[0,2],[3,7],[5,3],[9,3],[2,3],[-8,2],[-2,1],[0,1],[2,2],[-4,2],[-1,1],[0,3],[1,3],[2,2],[2,1],[3,-2],[3,-2],[11,-8],[4,-4],[2,-4],[6,-10],[3,-6],[2,-6],[2,-4],[2,-3],[10,-11],[5,-4],[4,-3],[5,-2],[6,-2],[4,0],[6,5],[0,3],[-3,5],[-2,3],[0,2],[4,4],[-1,2],[1,4],[2,-1],[1,0],[2,2],[2,3],[2,2],[2,2],[1,1],[-3,1],[-1,0],[-1,0],[-1,1],[1,1],[6,2],[1,2],[2,2],[2,0],[1,0],[2,-2],[0,-3],[-1,-4],[0,-4],[2,-9],[2,-2],[6,-2],[0,-2],[-8,-9],[-1,-3],[-1,-1],[0,-2],[2,-1],[2,-1],[6,0],[2,1],[12,0],[3,1],[1,1],[3,5],[3,1],[1,1],[2,6],[1,6],[1,2],[1,2],[2,0],[5,0],[2,0],[9,0],[9,0],[9,-1],[6,-1],[5,-2],[11,-5],[4,-2],[14,-12],[5,-2],[8,-2],[27,-5],[3,-1],[8,-6],[5,-3],[5,-2],[8,-3],[14,-4],[3,-1],[2,0],[3,0],[13,-2],[4,0],[2,0],[3,-2],[5,0],[0,1],[-5,6],[0,1],[2,0],[6,-1],[2,1],[2,0],[5,0],[5,-2],[6,-3],[7,-3],[10,-6],[6,-5],[5,-6],[3,-4],[1,-2],[1,-2],[1,0],[1,-1],[-1,-5],[-1,-1],[-2,-1],[-4,-1],[-14,1],[-3,-4],[-7,-4],[-2,-1],[0,-2],[1,-3],[-1,-2],[-6,-4],[-1,-1],[4,-2],[5,-3],[3,-1],[4,1],[6,-1],[6,-3],[5,-1],[2,0],[4,0],[4,-1],[6,-1],[13,0],[4,-1],[5,0],[11,0],[2,0],[3,2],[2,1],[4,0],[11,2],[3,-1],[4,2],[4,2],[3,0],[1,-1],[2,-1],[3,0],[5,3],[12,7],[4,0],[3,2],[1,0],[1,-1],[3,-5],[1,-1],[2,0],[2,-3],[2,-4],[2,-1],[11,0],[4,-1],[1,-1],[1,-3],[1,-6],[0,-3],[2,-3],[1,-1],[1,1],[3,8],[1,2],[2,-1],[3,-6],[4,-5],[10,-8],[2,-3],[0,-3],[0,-2],[-2,-2],[-3,-1],[-3,-1],[-4,0],[-3,2],[-1,0],[1,-1],[7,-7],[1,-3],[2,-2],[1,-1],[2,-2],[1,-2],[5,-5],[2,-3],[6,-8],[3,-4],[2,-2],[1,0],[0,2],[-8,11],[-4,7],[-1,2],[0,2],[0,9],[0,1],[3,1],[4,-4],[1,0],[1,0],[0,1],[2,-1],[4,-3],[1,0],[-2,6],[-2,2],[-1,2],[2,3],[-1,1],[-5,4],[-2,5],[-2,6],[0,3],[0,2],[0,2],[-3,5],[-3,3],[-3,3],[0,2],[0,5],[2,2],[3,3],[1,3],[-1,3],[-1,2],[1,-1],[7,2],[2,-1],[3,1],[3,2],[3,1],[4,0],[2,0],[2,1],[1,1],[3,3],[1,1],[3,0],[3,-1],[1,0],[-1,5],[1,2],[4,4],[4,0],[2,1],[3,2],[2,2],[2,3],[1,4],[0,1],[-5,1],[-2,-1],[-6,-2],[-6,-4],[-3,-3],[0,-4],[-2,-2],[-4,2],[-2,0],[-3,-1],[-3,-2],[-2,-2],[-5,0],[-5,1],[-4,1],[-3,-3],[0,-2],[2,-3],[-2,-2],[-8,0],[-2,0],[-4,-1],[-2,0],[-1,2],[-9,5],[-1,2],[2,4],[8,13],[1,1],[15,2],[9,2],[17,7],[4,1],[10,4],[5,1],[4,0],[6,-3],[3,-2],[2,-2],[2,-4],[2,-8],[1,-7],[2,-3],[5,-4],[2,-2],[2,-1],[1,1],[1,0],[1,0],[1,-3],[4,0],[3,-1],[0,-1],[0,-4],[0,-2],[4,-3],[4,-1],[5,-1],[8,1],[6,1],[6,3],[4,-3],[8,-7],[5,-5],[4,-2],[9,-3],[2,-2],[3,0],[4,1],[5,0],[5,-2],[4,-1],[13,4],[1,0],[5,2],[3,0],[4,0],[3,1],[1,1],[7,0],[12,-1],[9,-2],[5,-2],[4,-1],[3,-1],[3,1],[3,1],[3,2],[7,1],[1,0],[0,1],[-1,2],[-4,3],[-3,4],[-1,2],[1,2],[0,1],[2,1],[3,-2],[3,-3],[10,-13],[2,-2],[1,-1],[9,-5],[5,-1],[5,3],[2,2],[1,2],[0,1],[0,3],[0,1],[-1,2],[-4,3],[-6,3],[-5,1],[-5,-1],[-6,-3],[-2,1],[-7,8],[-1,3],[0,1],[3,-1],[0,1],[-2,4],[-1,1],[-4,7],[-1,1],[3,1],[1,1],[2,0],[6,-4],[4,1],[8,3],[-3,3],[-1,4],[1,1],[2,0],[6,-3],[2,0],[2,1],[2,0],[2,-1],[2,-1],[4,-5],[1,-2],[2,-4],[1,-1],[10,0],[5,3],[0,-1],[-1,-3],[-7,-10],[0,-1],[4,0],[1,1],[1,1],[1,3],[1,1],[10,5],[3,1],[-2,-5],[-4,-19],[0,-7],[-1,-2],[-4,-7],[0,-3],[4,-6],[1,-1],[0,-5],[1,-1],[4,-1],[3,2],[5,1],[1,-1],[-3,-6],[4,1],[2,0],[1,0],[3,-3],[1,-2],[0,-4],[-1,-2],[-1,-2],[-1,0],[-2,-1],[-1,0],[-4,0],[-3,1],[-3,2],[-1,0],[-3,-1],[-3,0],[-4,4],[-1,0],[-1,-1],[0,-1],[2,-3],[13,-14],[2,-3],[1,-4],[1,4],[-1,2],[-6,8],[-1,3],[0,1],[2,1],[10,-2],[3,1],[3,1],[1,2],[1,10],[2,6],[-1,6],[-3,9],[-2,5],[-5,5],[0,2],[5,17],[1,1],[1,1],[4,0],[3,1],[5,-2],[3,0],[3,2],[7,6],[3,3],[4,4],[4,5],[5,5],[7,4],[5,3],[1,1],[-4,0],[-1,1],[-1,3],[0,6],[0,3],[0,3],[-1,2],[-2,2],[-1,2],[-1,0],[-1,0],[0,-1],[-2,-5],[-1,-4],[-2,-2],[-4,-2],[-8,-1],[-3,2],[0,2],[1,6],[2,3],[7,5],[4,4],[0,1],[-4,0],[0,1],[-1,5],[0,2],[1,2],[2,2],[9,2],[6,2],[0,-1],[-5,-7],[0,-1],[2,-2],[5,4],[3,4],[0,1],[-2,0],[-1,2],[1,2],[0,2],[-4,2],[-4,-1],[-3,-3],[-3,0],[-4,0],[-3,0],[-2,1],[-2,3],[-3,4],[-3,4],[-1,0],[-1,-1],[-2,-3],[-1,-1],[-13,6],[-6,2],[-2,3],[-4,1],[-4,0],[-3,1],[-2,2],[-2,2],[-2,3],[-2,4],[-7,8],[-1,5],[0,2],[0,5],[6,8],[1,2],[2,2],[3,1],[2,0],[4,-1],[-2,3],[-1,1],[3,5],[-8,-4],[-2,1],[-3,2],[-5,7],[0,5],[1,6],[1,4],[-1,4],[0,1],[2,0],[0,1],[0,4],[1,2],[4,4],[3,3],[2,1],[2,0],[2,-1],[2,-2],[4,-2],[2,0],[2,1],[3,7],[2,2],[-1,0],[-7,0],[-3,1],[-1,1],[-1,2],[1,2],[6,5],[3,5],[8,7],[9,4],[4,1],[4,0],[1,0],[2,-4],[0,-4],[5,-5],[4,0],[2,1],[8,-1],[2,-1],[0,-1],[-1,-3],[0,-2],[5,-4],[5,-3],[4,-3],[7,-7],[1,-2],[1,-3],[1,-8],[1,-3],[-1,-9],[0,-1],[-2,-2],[1,-1],[4,-2],[4,-5],[2,-1],[5,-3],[1,-1],[1,-1],[3,-7],[5,-6],[0,-1],[-1,-3],[1,-1],[2,-1],[1,1],[2,2],[1,0],[2,-1],[1,-1],[2,-4],[2,-3],[0,-1],[-1,-1],[-7,-1],[-4,1],[-3,1],[-3,2],[-2,3],[-1,-1],[-1,-2],[-2,-3],[-2,-2],[2,-2],[9,1],[2,-1],[2,-2],[-3,-3],[-6,-6],[-13,-10],[-3,-2],[0,-1],[2,0],[4,0],[4,1],[6,0],[2,-1],[-1,-1],[1,-2],[9,-4],[5,1],[5,4],[4,1],[5,0],[2,0],[-1,-1],[-3,-2],[-4,-3],[0,-1],[4,1],[9,-1],[5,-1],[3,1],[3,-1],[3,-2],[1,-1],[-3,0],[-2,0],[-2,-1],[-2,-2],[-1,-3],[-1,-3],[-2,-2],[-3,1],[-1,1],[0,1],[-1,0],[-2,0],[-2,-1],[-1,0],[14,-11],[4,-9],[3,-4],[1,-1],[-2,-2],[0,-2],[1,-6],[-1,-4],[-1,-8],[1,-3],[3,-2],[2,-3],[1,0],[1,-3],[1,-1],[1,-1],[1,1],[0,2],[2,2],[3,3],[3,6],[0,2],[0,4],[0,2],[3,6],[1,4],[1,7],[1,5],[3,4],[6,8],[2,2],[2,1],[4,-1],[3,-2],[4,-5],[5,-5],[9,-6],[2,-2],[5,-6],[2,-6],[2,-8],[1,-5],[1,-2],[1,-2],[-1,-4],[0,-2],[-1,-2],[-1,-1],[-2,-1],[-4,1],[-1,1],[-2,4],[-3,-3],[-1,-2],[1,-5],[0,-10],[1,-2],[3,-11],[5,-8],[14,-16],[1,-1],[1,-7],[1,-1],[1,-1],[1,0],[2,0],[5,5],[4,5],[3,3],[2,0],[2,1],[2,2],[1,2],[1,2],[1,7],[1,4],[2,5],[1,1],[10,13],[1,2],[5,14],[1,7],[1,4],[-1,4],[0,3],[1,2],[2,2],[2,1],[1,3],[1,0],[2,0],[2,-2],[2,0],[11,2],[0,1],[-6,3],[0,2],[0,2],[2,2],[3,1],[1,1],[0,2],[0,3],[0,1],[-7,5],[-3,-1],[-1,1],[-3,3],[-1,5],[0,2],[0,4],[0,1],[0,1],[-1,2],[0,2],[1,2],[0,2],[-2,2],[0,2],[1,5],[0,2],[-1,2],[-1,1],[1,1],[2,0],[3,-1],[4,-2],[4,0],[5,2],[5,1],[10,0],[2,-1],[9,-5],[7,-3],[3,1],[15,-1],[7,0],[4,0],[7,-3],[-1,-2],[-3,-4],[-4,-1],[-3,-1],[3,-3],[9,-2],[3,-5],[0,-2],[-1,-2],[1,-1],[2,0],[5,2],[6,-1],[9,-3],[1,-1],[2,-3],[0,-1],[-8,-7],[-4,-2],[-6,-3],[0,-2],[8,0],[6,-1],[2,-1],[2,-1],[1,-3],[1,-2],[0,-3],[-1,-2],[-7,-5],[-3,-2],[-5,-2],[-3,-2],[-2,0],[-3,2],[-3,1],[-5,-2],[-3,0],[-1,-1],[0,-1],[2,-3],[1,-2],[1,-1],[-1,-2],[1,-1],[5,-8],[1,-1],[1,1],[2,2],[1,1],[1,0],[0,-2],[-3,-7],[0,-1],[0,-2],[1,-4],[3,-3],[3,-4],[4,-4],[6,-5],[2,-3],[4,-5],[0,-3],[-1,-6],[-2,-9],[-2,-6],[0,-1],[-5,-4],[-2,-1],[-5,0],[-1,-1],[-2,-3],[-3,-5],[-3,-4],[-1,-1],[-3,-2],[-5,-5],[-3,-2],[-8,-2],[-7,-7],[-3,-2],[-3,-1],[-3,0],[-2,1],[-1,4],[-1,1],[-2,3],[-5,8],[-3,3],[-1,1],[-3,-1],[-1,1],[-4,2],[-1,2],[0,1],[3,1],[-1,1],[-5,4],[-1,2],[-1,0],[-4,3],[-4,1],[-5,-5],[-3,-2],[1,-1],[2,-1],[1,0],[2,3],[2,0],[3,0],[3,-2],[1,-1],[0,-1],[8,-9],[2,-1],[1,-2],[1,-4],[2,-3],[3,-6],[4,-8],[1,-3],[-2,-1],[-1,-1],[-3,2],[-8,3],[-1,0],[-2,-2],[-1,-4],[-1,0],[-4,1],[-8,4],[-5,3],[-3,3],[-3,4],[-4,5],[-4,2],[-5,-2],[-8,-1],[-16,1],[-2,-1],[-1,0],[2,-3],[-1,-1],[-1,-1],[0,-1],[2,-3],[3,-2],[7,-3],[6,-3],[3,-2],[1,-2],[0,-2],[-1,-4],[-1,-1],[-19,-21],[-7,-8],[-3,-5],[-3,-3],[-3,-2],[-4,-1],[-7,0],[-8,1],[-4,2],[-8,7],[-5,5],[-2,1],[-2,4],[-2,1],[-4,0],[-4,2],[-9,7],[-5,3],[-4,2],[-4,0],[-2,-1],[3,-3],[-1,0],[-3,1],[-3,0],[-6,2],[-6,0],[-3,0],[-5,2],[-5,0],[-9,0],[-2,0],[-1,-1],[4,-3],[7,-4],[-1,4],[0,1],[2,1],[11,-2],[12,-4],[3,-1],[4,-1],[4,-3],[5,-5],[10,-12],[3,-3],[4,-2],[22,-4],[7,0],[15,-1],[8,-2],[2,-2],[1,-5],[-1,-3],[-4,-8],[-3,-5],[-17,-25],[-2,-5],[-1,-4],[-3,-3],[-7,-6],[-8,-4],[-4,-1],[-4,1],[-3,1],[-4,5],[0,-1],[3,-7],[-1,-1],[-2,1],[-6,3],[-1,0],[-1,-1],[-2,0],[-2,1],[-3,3],[-1,1],[0,4],[-1,0],[-6,-2],[-1,-1],[2,-1],[1,-1],[3,-6],[0,-1],[-2,-1],[-6,2],[-1,0],[3,-6],[1,-3],[0,-1],[-4,-7],[-2,-3],[-3,-1],[-3,1],[-2,2],[-2,0],[-1,-3],[-2,-1],[-3,-1],[-4,0],[-4,2],[-12,6],[-4,1],[-7,1],[-1,1],[0,1],[1,1],[-1,1],[-2,-1],[-1,-1],[-3,-1],[-4,1],[-6,2],[-12,7],[-13,5],[-7,7],[3,-7],[0,-2],[-2,-1],[0,-2],[3,-5],[4,-1],[4,0],[0,1],[-2,1],[-1,1],[-1,3],[1,0],[3,-1],[3,-2],[18,-8],[5,-1],[4,-2],[1,-1],[-1,-2],[-8,-5],[0,-1],[5,1],[6,4],[3,2],[4,2],[4,-3],[5,-5],[5,-3],[6,-2],[4,-2],[6,-5],[1,-3],[1,-11],[-1,-3],[0,-2],[-2,-3],[-2,-2],[-4,0],[-3,-1],[-7,-6],[-2,-1],[-12,2],[-5,2],[-2,0],[-1,-2],[-1,0],[-5,-1],[-1,-1],[1,-2],[1,-2],[1,-1],[1,-2],[3,-1],[5,-1],[1,-3],[0,-1],[-2,-2],[-2,0],[-4,3],[-1,0],[-2,-2],[-2,0],[-3,0],[-1,-1],[0,-2],[-1,-2],[-3,-3],[-2,-2],[0,-2],[2,-1],[2,-3],[2,-4],[1,-2],[-2,0],[-2,2],[-2,3],[-4,3],[-8,3],[-1,0],[0,-1],[6,-4],[2,-2],[0,-2],[-4,-3],[-1,-2],[2,-1],[0,-1],[-2,-2],[-2,-1],[-5,0],[-1,-1],[2,-2],[1,-1],[-2,-2],[-1,0],[-6,1],[2,-4],[1,-2],[1,-2],[4,-2],[0,-1],[-1,-1],[-2,-2],[-8,-6],[-6,-7],[-1,-2],[2,-5],[0,-1],[-2,-2],[-3,1],[-1,-1],[1,-2],[0,-4],[0,-4],[-3,-6],[-4,-9],[-3,-8],[-2,-7],[-2,-4],[-3,0],[-3,-3],[2,-1],[1,-1],[1,-2],[-1,-7],[-2,-11],[-1,-9],[0,-27],[0,-12],[-1,-7],[-2,-4],[-2,-1],[3,-1],[2,-2],[1,-2],[1,-4],[1,-2],[1,0],[2,0],[1,-2],[3,-6],[4,-1],[0,-4],[-2,-18],[0,-2],[2,4],[2,15],[2,6],[2,1],[8,1],[8,-2],[3,0],[3,1],[2,-2],[1,-1],[1,-8],[1,-4],[5,-16],[2,-8],[3,-13],[1,-4],[6,-18],[1,-5],[0,-4],[0,-2],[-1,-4],[-2,-6],[-2,-4],[-2,-3],[-1,-2],[-2,-1],[0,-1],[2,1],[2,2],[4,3],[2,1],[4,1],[0,-2],[-2,-3],[3,2],[7,4],[25,10],[6,1],[8,-2],[7,-5],[8,-5],[8,-4],[12,-4],[4,-2],[7,-2],[3,-2],[4,-5],[7,-7],[5,-4],[5,-4],[6,-7],[9,-16],[2,-2],[5,-3],[10,-4],[15,-8],[7,-3],[4,-1],[5,-2],[4,-4],[3,-3],[2,-4],[2,-2],[4,-3],[2,-2],[0,-3],[-4,-12],[-1,-1],[5,9],[2,2],[2,1],[4,0],[6,-1],[5,0],[5,1],[3,1],[3,-1],[3,1],[1,1],[2,0],[7,-3],[2,0],[10,-3],[7,1],[1,0],[2,-4],[2,0],[3,0],[3,-1],[5,-4],[2,-4],[3,-9],[0,-2],[-4,-19],[-2,-7],[0,-7],[1,-3],[4,-7],[0,-1],[2,-9],[1,-4],[0,-5],[-1,-7],[0,-6],[1,-8],[0,-6],[-2,-3],[-1,-3],[-1,-6],[0,-2],[1,-4],[1,-2],[3,-3],[2,-3],[5,-10],[3,-5],[4,-7],[1,-4],[-1,-2],[-2,-2],[-3,-2],[-1,-2],[0,-1],[5,2],[2,0],[3,-2],[2,-4],[3,-3],[4,-2],[5,-5],[7,-10],[1,-2],[2,-5],[3,-8],[1,-6],[0,-2],[-1,-3],[-5,-4],[-5,-8],[1,0],[4,3],[5,7],[3,1],[3,0],[5,-2],[4,-3],[3,-4],[5,-9],[6,-8],[3,-6],[-1,4],[-2,5],[-5,7],[-3,4],[0,2],[0,2],[0,4],[1,5],[1,4],[2,2],[1,3],[1,2],[0,2],[5,4],[1,-1],[1,-4],[1,-1],[2,0],[2,-2],[1,-2],[1,-2],[1,-2],[1,-8],[1,-3],[0,4],[1,6],[1,3],[3,4],[0,2],[-2,2],[-5,10],[0,2],[1,1],[1,3],[1,4],[1,3],[4,4],[3,6],[1,4],[1,2],[2,1],[-2,2],[-1,1],[0,5],[0,5],[-2,3],[-3,5],[-1,2],[0,6],[0,3],[1,2],[0,3],[-4,4],[-1,4],[-1,9],[-1,12],[-2,9],[-2,5],[0,4],[1,1],[1,5],[1,1],[2,-1],[0,1],[-3,2],[-1,3],[0,1],[2,3],[0,1],[-2,2],[-4,3],[1,1],[1,2],[0,1],[-2,1],[-2,2],[-2,2],[-2,5],[-1,3],[-1,5],[-2,7],[-1,1],[-1,1],[-2,1],[0,1],[2,1],[21,11],[2,1],[10,6],[5,4],[4,4],[7,5],[3,3],[2,4],[11,12],[4,6],[3,5],[4,7],[4,7],[4,6],[1,6],[1,9],[1,8],[0,12],[0,11],[-1,16],[-1,6],[-2,6],[-3,12],[-1,4],[-2,6],[-8,15],[-9,10],[-2,2],[-3,3],[-6,4],[-3,2],[-10,11],[-3,1],[-1,3],[0,2],[0,5],[1,3],[0,3],[1,1],[5,8],[3,6],[2,4],[2,2],[4,4],[3,4],[-1,2],[-2,2],[0,2],[3,4],[0,2],[0,4],[1,1],[3,0],[6,-6],[1,0],[-2,2],[-2,5],[1,1],[4,5],[0,2],[-1,3],[-1,2],[3,6],[-1,1],[-6,1],[-1,2],[0,1],[3,1],[0,1],[-5,13],[-1,3],[2,5],[3,2],[0,1],[-4,0],[-2,1],[-2,4],[1,2],[0,1],[2,5],[2,1],[0,1],[-7,-2],[-4,2],[-3,-1],[-2,1],[1,2],[6,8],[3,5],[2,4],[1,3],[0,2],[-1,9],[0,2],[3,3],[4,4],[-6,4],[-3,4],[-2,2],[-1,2],[-3,4],[-1,5],[-2,11],[0,6],[0,4],[1,2],[1,2],[5,4],[8,7],[6,2],[5,-1],[9,-2],[7,-3],[23,-9],[4,-4],[-4,-3],[0,-1],[9,6],[2,2],[2,0],[6,-3],[3,0],[3,-2],[8,-6],[-2,3],[1,2],[6,4],[6,2],[5,3],[5,4],[3,2],[1,0],[2,-1],[6,-5],[4,-2],[3,-3],[4,-5],[1,-1],[3,-3],[4,0],[2,0],[0,-1],[1,-2],[0,-1],[0,-2],[-1,-4],[-3,-6],[2,0],[1,1],[3,3],[2,0],[4,-2],[3,-3],[2,-2],[1,-2],[1,-2],[2,-3],[-2,-2],[-4,-2],[1,-1],[5,2],[2,1],[1,2],[1,1],[7,-4],[1,-2],[-1,-1],[-1,-1],[-3,-1],[-2,-4],[0,-1],[1,-1],[5,-1],[0,-1],[-3,-1],[0,-2],[5,-7],[4,-4],[2,0],[5,0],[4,-1],[8,-5],[5,0],[5,1],[2,0],[3,-1],[1,-2],[0,-2],[0,-3],[2,-3],[2,-1],[3,0],[3,3],[2,0],[1,2],[1,4],[1,2],[2,1],[1,-1],[1,-2],[2,-5],[0,-2],[0,-3],[-1,-1],[-2,-2],[-2,-3],[-2,-3],[-2,-7],[-1,-4],[0,-3],[0,-3],[0,-3],[1,-3],[2,-4],[1,-1],[0,-3],[0,-1],[-2,-3],[-3,-3],[-5,0],[-15,0],[-4,0],[1,-2],[4,-1],[4,0],[15,-1],[2,-2],[1,-3],[2,-3],[1,-5],[0,-3],[-1,-3],[-1,-3],[-1,-5],[-1,-5],[1,-3],[8,0],[1,-2],[0,-2],[-2,-6],[-1,-1],[2,-4],[-1,-1],[0,-1],[-1,-3],[-1,-4],[-1,-3],[-2,-3],[-1,0],[-1,0],[-2,7],[-1,1],[-1,-1],[0,-1],[0,-1],[0,-2],[-1,-1],[-3,-2],[-5,-2],[0,-2],[3,-1],[5,-2],[2,-1],[4,2],[7,8],[4,1],[2,1],[3,0],[4,0],[6,1],[2,-1],[2,-2],[3,-2],[1,-2],[1,-3],[2,-8],[2,-2],[0,-2],[0,-3],[0,-4],[-2,-10],[-1,-4],[-3,-5],[-4,-2],[-6,-3],[-3,-1],[-3,-3],[0,-1],[7,4],[8,2],[2,2],[2,3],[2,5],[3,13],[2,4],[2,0],[1,-1],[3,-8],[0,-1],[-1,-2],[-4,-7],[2,0],[4,7],[1,2],[0,4],[2,2],[0,-1],[1,-8],[0,-6],[1,-2],[-1,-6],[1,-1],[1,5],[0,4],[1,2],[1,2],[5,5],[6,4],[4,3],[3,2],[5,2],[3,3],[2,5],[1,4],[1,2],[3,3],[2,0],[2,-1],[2,-3],[2,-4],[1,-3],[1,-2],[0,-8],[2,6],[0,2],[0,3],[0,2],[-2,5],[-1,3],[0,2],[2,1],[3,0],[1,1],[-2,2],[0,1],[2,4],[1,0],[3,-1],[-1,2],[0,1],[1,1],[4,-1],[1,1],[3,0],[0,2],[-3,1],[-3,1],[-1,1],[0,2],[-1,3],[0,1],[1,0],[1,-1],[1,2],[1,5],[1,1],[3,-2],[0,1],[-2,7],[0,1],[3,1],[3,-1],[5,-5],[1,0],[-1,2],[-3,3],[-2,2],[-2,1],[-2,1],[-2,5],[0,1],[0,3],[1,5],[1,1],[1,1],[2,0],[2,0],[5,-4],[0,1],[-2,2],[-1,2],[-1,2],[0,2],[2,5],[1,4],[4,11],[1,2],[1,1],[1,2],[3,0],[6,-4],[2,-2],[0,-3],[-3,-5],[-5,-3],[-1,-2],[1,0],[4,2],[5,1],[3,0],[3,-5],[0,-7],[-1,-6],[2,3],[2,1],[2,-3],[1,-4],[1,-3],[2,-4],[3,-3],[-3,-4],[-3,-2],[0,-2],[5,-2],[1,-2],[-1,-2],[1,0],[3,4],[3,-1],[3,-8],[-2,-4],[-4,-2],[-3,-1],[-5,0],[-1,-1],[1,-1],[4,0],[6,1],[5,2],[2,0],[2,-1],[0,-1],[-2,-1],[1,-2],[2,-4],[0,-1],[-2,-3],[3,0],[3,1],[1,-1],[3,-5],[1,-6],[-6,-7],[-3,-2],[-5,-3],[-1,-4],[-3,-3],[2,0],[4,6],[3,1],[2,0],[0,-1],[0,-2],[2,0],[6,4],[3,1],[4,0],[0,-1],[-2,-9],[-4,-7],[-7,-4],[-3,-3],[-3,-4],[2,0],[6,5],[5,2],[6,2],[3,-1],[5,-10],[3,-1],[2,0],[5,-3],[1,-2],[0,-3],[-2,-1],[0,-2],[1,-6],[-1,-3],[-3,-3],[-2,-1],[-3,-1],[-2,-2],[-1,-1],[-3,1],[1,-1],[1,-1],[3,-1],[3,1],[3,0],[5,-2],[2,-2],[0,-1],[-1,-1],[-2,-4],[-1,-2],[1,-1],[2,-2],[2,0],[2,0],[3,-1],[8,-9],[0,-6],[-2,-4],[1,-4],[0,-5],[-5,-2],[-14,3],[-9,3],[0,2],[2,2],[-2,0],[-2,-1],[-1,-1],[2,-4],[8,-3],[4,-5],[3,0],[2,-1],[2,-2],[-1,-1],[-4,-1],[-3,-3],[2,-1],[7,-2],[5,0],[2,-2],[-2,-2],[-5,-2],[-1,-3],[5,-2],[4,1],[1,0],[1,-8],[1,-2],[-4,-1],[0,-2],[2,-1],[5,-1],[2,-2],[0,-2],[1,-1],[2,-1],[3,3],[2,3],[2,-1],[1,-3],[2,-4],[2,0],[0,-5],[3,4],[2,-1],[2,0],[-1,-4],[-1,-4],[1,-2],[1,-3],[4,-5],[-1,-2],[-4,-4],[-2,-7],[0,-3],[-2,-4],[-3,-4],[2,1],[6,7],[3,2],[8,2],[2,2],[3,1],[1,-3],[1,-4],[2,-1],[2,1],[3,-1],[-2,-3],[-7,-11],[-2,-4],[0,-3],[2,4],[9,10],[1,1],[2,5],[2,2],[4,-1],[3,-2],[1,-5],[2,-6],[3,-7],[8,-3],[2,0],[5,2],[1,3],[4,1],[3,0],[1,-6],[2,-3],[3,-3],[3,-1],[4,-1],[2,-3],[0,-1],[-2,-3],[-2,-5],[-4,-3],[-5,0],[-8,-2],[0,-1],[-2,-2],[-3,-2],[-3,-2],[-3,-7],[-2,-3],[-2,-1],[-4,1],[-2,-1],[-2,-1],[-1,-2],[0,-1],[-5,-2],[-8,-5],[-4,-1],[-3,1],[-2,0],[-1,-2],[-4,-3],[-2,-1],[0,-2],[-1,-4],[0,-1],[-1,-1],[-3,1],[-4,2],[1,-2],[6,-5],[1,-2],[-1,-3],[-4,-3],[0,-2],[1,-1],[-1,-1],[-2,-2],[1,-1],[5,2],[4,5],[3,5],[2,2],[6,1],[3,3],[5,4],[5,5],[6,8],[7,6],[9,4],[7,2],[4,0],[1,1],[-4,1],[-3,1],[-4,-1],[-1,2],[0,1],[1,2],[3,1],[16,-2],[6,-2],[6,-13],[1,-5],[1,-3],[-1,-2],[-2,-2],[-7,-5],[-1,-1],[0,-1],[3,-1],[1,-1],[1,-5],[3,3],[6,8],[5,4],[4,1],[5,1],[1,0],[1,-3],[2,-6],[3,-1],[4,-1],[4,-6],[2,-5],[1,-3],[0,-1],[0,-2],[1,-2],[1,-2],[-1,-5],[-2,-7],[2,-7],[-1,-4],[0,-5],[1,-3],[1,-2],[-2,-1],[-9,-3],[-3,0],[-1,-2],[3,0],[5,0],[6,-2],[2,-2],[1,-2],[0,-3],[-2,-1],[-3,0],[-3,2],[0,-2],[5,-3],[1,-2],[3,-2],[0,-3],[0,-3],[-9,-12],[-8,-8],[-7,-6],[-12,-13],[-1,-1],[-2,0],[-6,2],[-4,-1],[-9,-2],[-2,-2],[-5,-4],[-2,-1],[-5,-1],[-5,1],[-2,-1],[-2,-2],[-1,-1],[0,-4],[-12,-17],[-3,-5],[-6,-6],[-6,-11],[-6,-4],[-2,-6],[-5,-4],[-10,-1],[-5,-1],[-5,2],[-5,-2],[-6,-1],[-3,0],[-12,-5],[-3,5],[-2,2],[-7,0],[-6,3],[-5,0],[-4,1],[-4,0],[-3,0],[-5,0],[-3,-3],[-10,1],[-4,2],[-3,1],[-5,-1],[-4,-2],[-9,3],[-10,-2],[-9,1],[-2,1],[-14,-3],[-5,2],[-5,-6],[-3,1],[-4,0],[-1,1],[-2,-1],[-2,-3],[-2,0],[-3,-6],[-6,-4],[-8,-22],[-1,-9],[-3,-6],[-2,-1],[-3,0],[-14,-4],[-6,-4],[2,-2],[-2,-2],[-4,-1],[-3,-3],[-3,-2],[-1,-4],[-7,-7],[-8,-14],[-4,-11],[-5,-8],[-4,-3],[-2,0],[-3,0],[-4,4],[-3,1],[-7,5],[-18,5],[3,-2],[2,-3],[5,-1],[4,0],[10,-6],[5,-3],[3,-2],[3,-4],[-2,-8],[-2,-7],[-3,-5],[-8,-14],[-4,-5],[-7,-16],[-8,-8],[-4,-4],[-4,-8],[-10,-5],[-4,-2],[-3,1],[-4,-5],[-5,-2],[-1,-5],[-12,-11],[-5,-2],[-4,-3],[-1,-5],[-3,-3],[-1,-2],[-3,-7],[-5,-10],[-7,-1],[-2,-4],[-3,-5],[-4,-3],[-8,1],[2,-2],[7,-3],[1,-5],[-4,-2],[-7,-6],[-10,-12]],[[2311,9385],[-4,-1],[-4,4],[0,4],[0,2],[0,2],[2,2],[4,1],[2,-1],[1,-2],[3,-2],[1,-1],[0,-2],[-1,-3],[-1,-2],[-1,-1],[-2,0]],[[1819,9365],[1,-1],[4,1],[4,2],[6,1],[8,2],[2,-2],[1,0],[2,3],[0,1],[0,2],[0,4],[1,3],[5,5],[2,1],[4,1],[9,0],[8,-3],[11,-3],[17,-7],[5,-3],[1,-3],[-3,-5],[-7,-8],[-6,-3],[-2,-2],[3,-1],[3,-2],[3,3],[3,3],[4,3],[1,0],[0,-2],[0,-1],[0,-1],[0,-1],[2,-1],[2,1],[5,4],[5,6],[7,3],[2,2],[7,2],[-1,1],[1,5],[-2,2],[-8,4],[-4,4],[1,4],[4,-1],[12,0],[2,0],[11,-7],[4,-4],[3,-1],[7,-3],[2,-3],[1,0],[1,-1],[-1,-1],[0,-3],[1,-1],[5,0],[1,-1],[1,-3],[2,-5],[2,-6],[3,-10],[5,-14],[2,-8],[1,-2],[1,-1],[3,-2],[3,-2],[3,-1],[1,1],[1,1],[1,4],[10,5],[0,1],[-1,2],[0,1],[2,1],[-6,7],[-5,7],[-2,9],[-1,3],[0,5],[-1,2],[-2,1],[0,2],[0,2],[0,2],[-2,3],[-7,27],[0,2],[1,2],[3,1],[3,0],[2,1],[-2,1],[-2,3],[-1,1],[2,3],[9,-2],[6,-2],[10,-5],[2,0],[1,3],[2,1],[3,0],[10,-4],[11,-7],[8,-4],[5,-5],[3,-4],[3,-4],[0,-1],[-1,-1],[1,-2],[1,-3],[1,-2],[1,-4],[1,-5],[1,-3],[10,-25],[1,-5],[2,-2],[7,-9],[3,-7],[1,-5],[0,-2],[0,-2],[0,-3],[-1,-2],[-1,-2],[-2,-3],[-2,-7],[0,-2],[2,-2],[9,-8],[6,-9],[3,-2],[7,-6],[8,-3],[3,-2],[3,-2],[1,0],[1,0],[1,1],[0,1],[-3,4],[0,2],[1,0],[9,-7],[4,-3],[6,-4],[11,-7],[1,0],[6,0],[1,0],[1,-1],[1,-1],[0,-4],[2,-3],[9,1],[2,0],[2,0],[1,-2],[2,-5],[2,-9],[0,-3],[-1,-6],[-1,-2],[-2,0],[-5,0],[-3,2],[-2,2],[-1,5],[-1,1],[-1,-1],[-1,-4],[-2,-2],[-1,-2],[-2,1],[-4,2],[-6,5],[-3,1],[-1,0],[-3,-2],[-5,-3],[-2,-3],[1,-1],[0,-2],[1,-2],[-1,-2],[0,-1],[-2,-1],[-3,0],[-5,1],[-4,1],[-7,5],[-1,1],[-2,-1],[-1,-2],[1,-2],[4,-2],[4,-4],[1,-1],[1,0],[0,-1],[1,-2],[0,-4],[-2,-7],[-1,-2],[1,0],[6,8],[3,2],[6,3],[3,3],[8,0],[3,-1],[2,-2],[0,-1],[-2,-3],[0,-1],[-1,-2],[1,-2],[0,-1],[2,-1],[2,0],[1,0],[1,-1],[1,-2],[0,-3],[-2,-7],[-3,-2],[-11,-3],[-3,-2],[-7,-2],[-3,-2],[-1,0],[-8,0],[-8,-1],[-10,2],[-7,1],[-8,4],[-3,-1],[-3,-2],[-15,3],[-2,2],[1,1],[4,4],[0,1],[0,1],[-7,1],[-8,2],[-7,1],[-6,0],[-4,0],[-3,2],[-2,2],[0,2],[-1,1],[1,4],[-1,2],[-1,2],[-4,2],[-3,-1],[-3,-1],[-2,-4],[-5,-9],[-3,-2],[-6,-7],[-3,-2],[-11,-3],[-14,-1],[-6,-2],[-4,-4],[-6,-4],[-15,-5],[-14,-2],[-14,-1],[-10,-2],[-3,1],[-5,-1],[-5,-2],[-6,-1],[-22,-1],[-10,-2],[-5,0],[-5,0],[-3,1],[-2,2],[-3,4],[-6,10],[-2,4],[0,7],[0,4],[-2,9],[-11,4],[-7,1],[-10,0],[-13,-1],[-13,1],[-7,2],[-6,2],[-12,5],[-1,2],[-1,3],[-3,3],[-8,9],[-3,4],[-1,2],[0,3],[-1,6],[-1,4],[1,2],[1,0],[16,5],[29,4],[26,4],[12,-1],[6,-1],[7,-1],[13,0],[16,-2],[3,0],[7,1],[2,2],[12,-1],[2,1],[2,1],[-3,3],[-10,5],[-29,10],[-7,2],[-10,2],[-6,1],[-7,-1],[-3,0],[-7,-2],[-7,-2],[-13,-1],[-19,-1],[-3,1],[-4,1],[-2,1],[-19,-2],[-16,2],[-19,15],[-3,4],[0,2],[3,2],[9,6],[3,1],[14,4],[14,3],[11,4],[5,1],[5,0],[5,1],[-1,1],[-4,2],[0,1],[2,1],[7,1],[7,-1],[4,0],[1,2],[-1,1],[-7,2],[-33,-6],[-16,-1],[-10,-2],[-6,0],[-7,2],[-1,1],[0,1],[2,4],[7,2],[4,5],[-4,0],[-13,-1],[-6,1],[-8,2],[-2,2],[-1,2],[-1,3],[1,6],[0,3],[1,1],[10,11],[6,2],[4,3],[0,1],[-1,2],[-4,3],[-1,2],[-1,2],[0,2],[3,4],[6,5],[17,12],[8,5],[8,2],[11,6],[28,9],[25,9],[10,-2],[2,-2],[2,-2],[1,-2],[1,-3],[1,-6],[0,-4],[0,-3],[-1,-3],[-1,-3],[-2,-3],[-3,-4],[-6,-6],[0,-2]],[[2075,9384],[-1,0],[-3,1],[-4,3],[-6,6],[-8,6],[-1,3],[-2,3],[-9,6],[-6,3],[-5,1],[-1,2],[3,5],[4,4],[2,2],[7,1],[24,3],[5,0],[6,-2],[8,-5],[3,-1],[2,-1],[2,-2],[0,-2],[1,-5],[-1,-6],[-1,-3],[-5,-8],[-5,-4],[-1,-3],[-2,-3],[-3,-3],[-3,-1]],[[2790,9426],[5,-1],[30,2],[6,-1],[19,-7],[5,-2],[3,-3],[2,-4],[1,-1],[7,-3],[2,-3],[1,-2],[2,-3],[3,-2],[3,-2],[2,-1],[-1,-5],[2,-2],[3,-3],[1,-1],[-2,-3],[-7,-1],[-17,1],[-22,4],[-14,-1],[-6,-2],[-16,-5],[-6,0],[-5,-1],[-9,4],[-3,3],[-1,1],[-2,5],[-2,6],[-1,5],[-1,3],[-3,2],[-9,1],[-3,2],[-1,2],[-1,2],[0,3],[0,3],[1,0],[1,0],[-2,3],[-1,4],[0,4],[0,3],[1,1],[1,1],[4,1],[6,0],[8,-4],[7,0],[9,-3]],[[2594,9274],[2,-1],[6,1],[5,2],[9,5],[5,1],[15,0],[3,-1],[-2,-2],[0,-1],[0,-1],[2,-2],[3,-2],[2,2],[0,4],[3,15],[1,5],[0,4],[0,4],[-1,3],[-4,1],[-5,0],[-3,0],[-3,1],[-3,1],[-1,2],[-4,5],[-2,3],[-6,5],[-3,2],[2,2],[5,3],[3,2],[4,6],[3,1],[8,-1],[12,-5],[7,-4],[2,-1],[0,1],[-2,2],[-8,6],[-4,4],[-2,3],[1,1],[4,1],[1,2],[-6,1],[-3,0],[-3,-1],[-3,0],[-5,2],[-1,1],[-3,4],[-2,4],[-1,2],[-1,1],[0,5],[0,3],[0,3],[2,2],[3,4],[2,1],[3,1],[8,-2],[20,-7],[0,2],[-23,10],[-8,2],[-2,4],[12,13],[11,3],[6,4],[9,0],[8,-3],[1,1],[-4,5],[0,1],[5,3],[9,3],[11,2],[2,2],[3,1],[5,1],[12,0],[7,0],[10,-2],[5,-4],[2,-2],[3,-7],[3,-9],[3,-4],[6,-3],[4,-2],[2,-3],[0,-3],[-1,-4],[1,-4],[3,-4],[2,-2],[4,-3],[0,-1],[-1,-2],[-3,-2],[-7,-7],[-9,-8],[-7,-6],[0,-2],[13,10],[5,0],[0,-2],[-3,-5],[-3,-4],[-4,-3],[1,-1],[6,-5],[-1,-1],[-3,0],[-1,0],[-1,-1],[-1,-1],[0,-2],[1,-3],[0,-2],[-1,-1],[1,0],[2,0],[1,1],[3,3],[9,9],[5,4],[2,0],[5,-2],[2,0],[-6,7],[-1,2],[2,3],[0,1],[4,2],[2,1],[2,-1],[2,-3],[1,-3],[2,-1],[4,1],[3,3],[4,-2],[5,-4],[0,-5],[0,-5],[0,-4],[7,-6],[4,-3],[1,0],[0,1],[-1,2],[-3,2],[-2,4],[-2,4],[1,9],[4,5],[3,-1],[4,-3],[4,0],[5,0],[11,-6],[5,0],[0,2],[-4,2],[-7,3],[-10,4],[-5,4],[0,2],[0,2],[0,2],[1,2],[2,1],[10,5],[7,3],[5,0],[9,0],[10,-1],[5,-1],[6,-4],[8,-3],[3,-1],[3,0],[4,1],[4,0],[11,-5],[3,-3],[2,-3],[1,-4],[1,-3],[0,-2],[-10,-11],[-4,-2],[-2,-4],[-4,-7],[-4,-5],[0,-1],[3,2],[3,6],[3,4],[4,4],[8,5],[7,2],[6,-1],[5,0],[4,-1],[2,-1],[1,-1],[1,-3],[0,-3],[-1,-2],[-2,-3],[-8,-3],[-5,-3],[-3,-1],[-8,-1],[0,-1],[7,-1],[7,0],[0,-1],[-4,-5],[-1,-4],[1,-3],[0,-2],[-3,-6],[-3,-4],[1,-1],[7,7],[2,7],[3,7],[3,4],[2,1],[7,1],[4,3],[4,2],[1,0],[3,-2],[0,-1],[-4,-7],[-9,-11],[3,1],[3,3],[3,2],[4,4],[3,-3],[4,-3],[2,-6],[4,-3],[2,-2],[0,3],[-4,8],[1,3],[3,2],[8,6],[5,-2],[4,-2],[1,1],[5,-1],[6,-1],[7,-1],[7,-3],[5,-3],[3,-3],[2,-3],[1,-1],[1,-4],[-1,-2],[-5,-5],[-2,-3],[-3,-1],[-7,1],[-3,0],[-2,-2],[-8,-7],[-4,-3],[-4,-2],[-1,-1],[9,0],[2,2],[3,4],[3,4],[8,2],[10,-4],[5,0],[4,4],[5,3],[1,1],[1,-1],[4,-3],[1,-2],[0,-6],[-1,-2],[-3,-5],[-7,-6],[-5,-3],[-5,-1],[-6,-3],[-2,-2],[-2,-2],[-2,-2],[-2,-1],[3,-3],[1,0],[1,2],[4,5],[2,2],[2,0],[1,0],[1,-1],[2,-1],[0,-5],[-4,-17],[3,5],[7,18],[2,3],[4,4],[8,5],[6,3],[7,2],[4,1],[4,0],[3,-3],[3,-1],[5,1],[3,0],[3,-1],[3,-2],[5,-3],[11,-4],[1,-1],[2,-2],[1,-2],[0,-3],[-2,-2],[-2,-1],[-2,-1],[-2,-1],[-4,-4],[-2,0],[-6,-2],[-6,0],[-4,-2],[-7,-3],[-10,-7],[0,-2],[4,-1],[3,1],[4,5],[5,2],[6,1],[9,2],[4,-1],[1,0],[0,-1],[1,-2],[-2,-2],[-2,-2],[-4,-6],[3,-1],[4,-1],[3,2],[2,3],[2,2],[3,1],[2,1],[2,1],[1,1],[-3,2],[0,1],[1,3],[2,3],[2,2],[2,0],[6,-2],[4,-4],[9,-10],[2,-2],[3,-8],[1,-4],[-1,-2],[-1,-2],[-1,0],[-2,0],[-13,3],[-6,-1],[-2,0],[-2,-2],[-2,-2],[-1,-2],[-3,-1],[-8,0],[-4,-1],[-8,-3],[-3,-1],[-1,-2],[5,0],[8,3],[8,0],[12,-5],[4,-1],[3,0],[2,1],[11,-1],[3,0],[5,-3],[8,-5],[1,-1],[1,-1],[1,-2],[-1,-4],[0,-1],[-3,-1],[-11,1],[-4,1],[-4,-1],[-3,0],[-5,2],[-4,2],[-8,-2],[-5,1],[-6,-1],[-12,-6],[1,-1],[16,5],[3,0],[5,-2],[8,-4],[3,-2],[0,-6],[-2,-4],[-2,-4],[-4,0],[-8,3],[-4,0],[-2,0],[-4,-2],[-1,0],[-14,4],[-3,0],[0,-1],[13,-6],[9,0],[6,-1],[3,-2],[2,-1],[0,-4],[3,-4],[3,-1],[1,0],[3,1],[3,0],[3,-1],[3,-2],[4,0],[3,-2],[2,0],[8,1],[3,-1],[1,-1],[-2,-1],[-6,-3],[-1,-3],[3,-3],[2,-3],[0,-2],[-2,-5],[0,-2],[5,4],[1,-1],[0,-5],[1,0],[2,5],[-1,6],[3,2],[8,2],[-1,-9],[0,-5],[-4,-8],[-3,-3],[2,-1],[1,0],[2,1],[3,6],[7,6],[1,1],[0,-3],[-1,-4],[3,-2],[3,2],[2,2],[3,-1],[2,0],[0,-2],[-1,-8],[0,-2],[4,-5],[0,3],[-1,6],[1,3],[3,3],[6,5],[3,1],[1,-1],[3,-2],[-1,-2],[-3,-1],[-2,-3],[-1,-4],[2,-2],[5,0],[5,3],[3,-1],[4,-4],[7,-7],[3,2],[5,-6],[-6,-4],[2,-8],[-9,0],[-4,0],[-3,0],[-4,0],[4,-2],[5,-1],[1,-2],[5,0],[3,0],[6,0],[1,3],[4,2],[2,2],[2,-1],[6,-2],[8,-6],[-4,-3],[-1,-3],[-1,-3],[0,-3],[-2,-1],[-11,-10],[2,0],[5,2],[9,4],[5,1],[3,-1],[2,0],[2,1],[3,-1],[6,-2],[7,9],[4,-2],[4,-5],[9,-9],[4,-5],[2,-2],[0,-3],[-4,-2],[-2,-1],[-6,5],[-5,2],[-3,0],[-3,-2],[1,-1],[12,-7],[2,-5],[0,-2],[-8,-4],[-2,0],[-6,2],[-3,3],[-3,1],[-4,0],[-1,0],[4,-6],[0,-1],[-2,-1],[-1,-3],[8,-4],[6,-5],[1,-2],[-4,-1],[-3,0],[-7,0],[-3,1],[-1,-1],[4,-2],[1,-2],[1,-2],[1,-2],[0,-2],[-3,-2],[-3,-5],[-2,-4],[-3,-1],[-1,1],[-4,-1],[-6,2],[-2,2],[-6,9],[0,-1],[1,-5],[0,-2],[-6,-2],[0,-1],[4,-2],[4,-1],[0,-4],[0,-18],[-1,-6],[-3,-6],[-3,-5],[-4,3],[-1,4],[-1,1],[-2,2],[-2,1],[-3,0],[-2,-3],[-3,2],[-3,4],[1,8],[1,5],[-2,-2],[-3,-7],[-3,-8],[-3,3],[-2,4],[-3,4],[-3,4],[-4,5],[-2,6],[-1,2],[-2,5],[-1,1],[0,1],[-2,3],[1,3],[2,4],[3,3],[4,3],[5,1],[2,4],[3,6],[3,5],[4,3],[-2,0],[-4,-2],[-3,-3],[-4,-6],[-3,-3],[-8,-4],[-3,-1],[-4,0],[-8,0],[-2,1],[1,4],[6,7],[-1,1],[-2,-3],[-3,-2],[-2,0],[-3,0],[-4,4],[-2,1],[-4,2],[-2,1],[-6,11],[-2,3],[-1,2],[-2,3],[-3,1],[-1,0],[1,-2],[0,-2],[-3,-1],[-3,0],[-3,2],[0,-3],[3,-5],[0,-6],[-1,-1],[-2,0],[-2,1],[-5,4],[-5,4],[-4,2],[0,-2],[2,-6],[3,-5],[4,-5],[7,-6],[3,-3],[-2,-4],[-2,-2],[-1,0],[-5,0],[-7,2],[-4,3],[-5,7],[-9,7],[-2,0],[-6,-3],[1,-1],[4,0],[3,-1],[7,-5],[0,-2],[-1,-3],[0,-3],[2,-4],[2,-3],[4,-1],[2,-1],[1,-1],[-3,-8],[0,-3],[1,-1],[6,4],[2,1],[2,0],[2,-1],[2,-2],[2,-3],[0,-2],[1,-1],[5,-3],[0,-1],[-5,-4],[-1,0],[1,-1],[4,-2],[3,-3],[2,-4],[0,-2],[0,-2],[0,-1],[2,-1],[1,1],[1,-1],[1,-3],[2,-9],[1,-3],[1,0],[0,9],[1,2],[3,-2],[5,-4],[3,-3],[1,-1],[-3,-3],[1,-1],[1,-2],[2,0],[1,4],[3,3],[2,2],[5,-2],[4,-5],[0,-1],[3,-2],[2,1],[4,-6],[-2,-2],[-4,-4],[-1,-1],[2,0],[8,0],[3,-1],[0,-3],[-4,-7],[-3,0],[-5,0],[-2,0],[0,-1],[6,-4],[2,-2],[3,-3],[1,-3],[0,-1],[-1,-2],[5,-1],[3,1],[3,0],[3,0],[0,-1],[0,-3],[-3,-3],[1,0],[3,0],[2,-1],[2,-6],[2,-5],[-1,-1],[-3,0],[1,-7],[1,-6],[0,-6],[0,-5],[-2,-1],[-3,0],[0,1],[-6,16],[-1,3],[-2,3],[-5,7],[0,-2],[1,-3],[2,-5],[1,-9],[1,-6],[0,-3],[-1,0],[-1,-1],[1,-2],[4,-6],[2,-4],[2,-4],[1,-3],[1,-1],[0,-1],[-2,-1],[-3,0],[-2,0],[-6,4],[0,-1],[3,-14],[0,-3],[-2,-1],[-2,1],[-2,4],[-4,4],[-5,5],[-4,4],[-2,-1],[0,-1],[-1,0],[-1,1],[-1,3],[-2,2],[-7,6],[-1,0],[1,-2],[1,-4],[-1,-1],[-2,0],[-3,2],[-2,4],[-3,7],[-2,3],[0,-2],[1,-7],[0,-2],[-2,0],[-1,0],[0,2],[-1,3],[-2,2],[-2,2],[-2,1],[0,3],[-1,1],[-4,-1],[-3,2],[-6,8],[-6,9],[-4,5],[-1,1],[2,-6],[2,-8],[1,-4],[-1,0],[-3,1],[-11,11],[-7,5],[-4,1],[-6,1],[-2,-3],[4,-6],[3,-5],[3,-3],[5,-6],[5,-8],[2,-3],[6,-3],[3,-1],[4,0],[0,-1],[-2,-3],[0,-1],[8,-3],[2,-2],[3,-4],[2,-1],[6,-8],[2,-1],[6,-3],[1,-1],[4,-6],[2,-2],[2,-7],[3,-3],[5,-3],[2,-1],[1,-1],[-1,-3],[0,-1],[-3,-2],[0,-3],[2,-5],[0,-3],[-2,-1],[-4,-2],[-2,0],[-2,2],[-4,2],[-7,5],[-10,3],[-4,2],[-2,2],[-2,1],[-26,4],[-4,2],[-3,1],[-2,2],[-10,5],[-1,1],[-7,9],[-5,10],[-2,1],[-5,1],[-5,0],[-3,-1],[-4,0],[-3,1],[-7,5],[-6,2],[-6,4],[-2,2],[0,1],[4,5],[-1,0],[-8,-4],[-2,1],[-4,4],[-4,3],[-6,10],[-4,3],[0,1],[5,1],[3,-1],[2,1],[5,4],[2,2],[0,2],[-4,0],[-1,1],[0,2],[-2,2],[-3,2],[-3,1],[-10,-1],[-2,1],[0,2],[2,5],[1,2],[0,1],[-2,0],[-6,-4],[-1,0],[-3,4],[-1,5],[-1,2],[-2,1],[-5,5],[-7,9],[-3,3],[-3,3],[-2,1],[1,1],[4,8],[0,2],[-4,-1],[-5,2],[-3,-2],[-2,0],[-2,1],[-1,-1],[-1,-6],[-1,-2],[-2,-1],[-1,1],[-1,1],[0,1],[0,8],[-3,1],[-5,1],[-2,0],[-1,2],[-1,2],[-1,4],[-1,3],[-2,0],[-1,0],[-1,-1],[-1,-1],[-3,0],[0,-2],[2,-3],[3,-4],[2,-5],[-1,-3],[-6,-2],[-4,-1],[-5,1],[-3,1],[-4,3],[-6,-1],[-2,-7],[-1,-1],[-6,0],[-3,0],[-8,-4],[-2,-1],[-2,0],[-2,-1],[-2,-2],[-4,0],[-5,2],[-4,1],[-3,-1],[-3,1],[-4,3],[-3,1],[-3,0],[-1,0],[-6,6],[-1,2],[-4,7],[0,2],[-1,3],[1,2],[1,4],[1,7],[2,3],[1,2],[3,3],[12,5],[3,2],[0,1],[-3,7],[0,1],[1,1],[2,4],[1,1],[2,0],[4,-1],[4,-1],[5,0],[8,-3],[12,-5],[6,-3],[5,-5],[4,-5],[0,-3],[-1,-3],[-1,-1],[0,-2],[1,-1],[3,-2],[1,0],[-1,3],[1,2],[1,2],[0,2],[-1,3],[-1,2],[-2,2],[-7,8],[-1,2],[3,1],[11,-2],[4,0],[1,3],[2,2],[2,1],[4,0],[5,-1],[2,0],[2,0],[3,2],[5,5],[2,1],[4,0],[4,1],[5,-2],[4,0],[-1,3],[-2,6],[-3,7],[-2,2],[-6,4],[-7,8],[-3,5],[-1,2],[1,2],[1,2],[12,9],[10,8],[4,5],[2,3],[2,2],[2,2],[5,1],[1,2],[1,4],[0,3],[5,9],[3,2],[5,2],[4,2],[4,7],[-1,1],[-2,2],[-1,2],[-6,18],[-4,9],[-5,7],[-5,10],[-7,9],[0,2],[1,3],[-1,1],[-7,-4],[-2,-1],[-3,2],[-2,2],[-1,4],[0,2],[1,2],[1,5],[0,2],[0,2],[-1,2],[-1,1],[-2,0],[-4,1],[-1,-1],[4,-7],[-1,-2],[-5,-1],[-2,1],[-3,1],[-2,1],[-6,7],[-1,3],[0,2],[0,1],[-2,-1],[-1,0],[-3,1],[0,1],[4,4],[1,1],[-3,1],[-3,1],[0,1],[1,1],[4,2],[1,2],[-2,1],[-2,0],[-2,-2],[-5,-5],[-3,-2],[-4,2],[-2,1],[-2,-1],[-3,-3],[-6,-3],[-11,-7],[-5,-2],[-5,1],[-1,1],[0,2],[1,2],[0,2],[1,1],[-1,8],[1,2],[2,1],[3,1],[8,-1],[4,0],[3,2],[2,2],[3,3],[0,3],[-2,5],[-1,1],[-8,4],[-4,2],[-3,0],[-3,1],[-1,2],[-2,3],[0,2],[0,2],[2,2],[6,2],[-5,2],[-3,-1],[-2,-1],[-2,-4],[-2,-1],[-5,2],[-3,1],[-2,1],[-1,1],[1,1],[2,1],[4,3],[1,2],[-3,3],[-2,0],[-6,1],[-7,-1],[-3,1],[-1,3],[-1,4],[0,4],[-1,8],[-2,3],[-2,1],[-8,-2],[-2,0],[-2,1],[-6,5],[-2,2],[-1,0],[-4,5],[-2,1],[-2,3],[-2,4],[-3,1],[-2,-1],[-3,-3],[-2,-3],[-2,-2],[0,-2],[2,-2],[9,-3],[2,-1],[2,-3],[2,-4],[1,-4],[-1,-4],[-1,-2],[-2,-2],[-5,-3],[-6,-1],[-6,-1],[-3,1],[-15,5],[-3,1],[-3,0],[-8,3],[-4,0],[-8,2],[-13,1],[-2,-1],[3,-3],[3,-1],[3,0],[3,-2],[5,-5],[3,-3],[2,-3],[0,-1],[-2,-3],[-18,12],[-11,-4],[-5,-1],[-4,-1],[-6,2],[-12,6],[-4,2],[-2,0],[-11,-2],[-9,0],[-18,2],[-7,2],[-2,1],[-2,1],[-4,0],[-10,2],[-10,-4],[-12,4],[-3,2],[-1,2],[-4,6],[0,4],[1,3],[1,2],[1,1],[-6,-3],[-3,-1],[-3,0],[-8,1],[-2,0],[1,-2],[2,-1],[0,-2],[-5,0],[-7,0],[-3,0],[-2,0],[-3,-3],[-1,-1],[-2,0],[-8,7],[-6,4],[-7,2],[-3,1],[-2,2],[-10,13],[-2,3],[-3,11],[-1,2],[-1,2],[2,0],[10,-1],[9,0],[5,-1],[6,-3],[7,-2],[6,0],[8,1],[10,2],[1,1],[-6,2],[-6,3],[-5,5],[-3,1],[-5,1],[-15,1],[-14,3],[-9,4],[-8,4],[-3,2],[-1,2],[-1,5],[-1,9],[-2,6],[-1,3],[0,3],[3,6],[7,6],[0,1],[-1,0],[-3,2],[-1,2],[-1,4],[0,3],[1,3],[1,3],[3,6],[5,7],[5,6],[0,2],[1,6],[1,4],[0,3],[1,3],[3,4],[4,4],[6,3],[1,2],[0,2],[0,1],[1,1],[15,11],[6,4],[6,3],[7,2],[20,5],[10,1],[12,-1],[24,-2],[2,-2],[1,-1],[1,-2],[-1,-1],[-6,-6],[-8,-4],[-5,-4],[-9,-9],[-3,-3],[-11,-17],[-2,-3],[-2,-2],[-1,-6],[1,-2],[1,-4],[6,-8],[2,-4],[0,-3],[-1,-8],[0,-4],[0,-4],[2,-6],[2,-7],[5,-7],[8,-8],[6,-5],[6,-3],[6,-6],[2,-2],[-3,-3],[-8,-5],[-9,-2],[-6,-1],[-6,-4],[-8,-3],[-4,-2]],[[2222,9443],[23,-12],[4,1],[7,0],[7,2],[10,2],[7,2],[2,1],[5,1],[2,0],[7,-2],[3,-1],[2,-1],[1,-2],[3,-5],[0,-2],[-2,-3],[-2,-1],[-4,-2],[-3,0],[-2,-2],[-3,0],[-1,-2],[0,-1],[1,0],[2,0],[1,1],[4,-1],[1,-1],[2,-2],[-1,-2],[-6,-3],[-9,-3],[-10,-10],[-6,-4],[-1,-1],[-1,-2],[1,-2],[0,-1],[1,0],[6,3],[3,2],[3,1],[6,0],[3,-1],[4,-2],[4,-3],[1,-1],[0,-1],[-2,-2],[4,-2],[4,-4],[0,-3],[-2,-2],[0,-2],[1,-1],[2,1],[5,2],[5,2],[3,0],[1,-1],[2,-4],[1,-4],[0,-4],[-1,-3],[-1,-2],[-4,-3],[-3,-2],[-1,0],[4,-2],[1,-2],[1,-2],[-1,-2],[0,-2],[-4,-5],[0,-1],[1,-1],[3,-3],[0,-8],[-9,-2],[-2,-2],[-3,-3],[-3,-2],[-6,-2],[-4,0],[-16,1],[-2,2],[-1,2],[-1,2],[0,3],[0,1],[0,1],[-2,-1],[-2,-3],[1,-3],[5,-10],[1,-3],[0,-2],[0,-1],[-6,-6],[-3,-1],[-4,-1],[-3,0],[-3,3],[-3,1],[-5,-1],[-1,2],[-2,2],[-3,7],[-5,6],[-5,6],[-10,9],[-6,5],[-8,9],[-3,2],[-2,0],[-5,1],[-1,1],[-2,3],[-4,2],[-1,0],[-2,0],[-5,-2],[-6,2],[-1,2],[-1,2],[-1,1],[-2,2],[-2,3],[-12,6],[-7,7],[-1,3],[0,1],[0,3],[2,4],[2,4],[1,2],[5,3],[4,1],[5,0],[3,-1],[2,-2],[1,-3],[1,-2],[4,-2],[2,-1],[3,-4],[2,-4],[3,-2],[5,0],[5,1],[12,2],[0,1],[1,1],[1,10],[1,0],[4,-4],[1,-1],[1,1],[1,2],[0,1],[-2,6],[-2,2],[-1,1],[-1,1],[-3,-1],[-3,1],[0,2],[0,2],[1,2],[2,1],[3,1],[3,-1],[4,-2],[3,-1],[4,1],[-5,1],[-7,6],[-3,1],[-4,-2],[-2,-1],[-5,-1],[-4,-1],[-15,9],[-1,1],[-1,2],[0,2],[1,1],[4,2],[6,2],[4,0],[3,-2],[5,-4],[5,-3],[0,1],[-1,3],[-2,4],[-1,1],[-4,1],[-3,2],[-1,2],[-1,2],[0,3],[0,1],[2,1],[12,2],[8,-2],[5,-1],[2,3],[0,1],[-3,-1],[-3,0],[-2,2],[0,1],[2,2],[4,1]],[[2270,9439],[-8,-2],[-4,1],[-2,-2],[-1,0],[-4,-1],[-9,3],[-3,1],[-1,1],[1,1],[1,1],[7,1],[3,1],[1,1],[1,1],[3,1],[6,1],[15,4],[7,1],[3,-1],[1,-1],[0,-1],[0,-1],[-3,-3],[-3,-2],[-8,-4],[-3,-1]],[[2412,9455],[11,-2],[5,-2],[3,-1],[4,-4],[3,-2],[10,3],[6,1],[16,-1],[12,-4],[5,-2],[3,-2],[-1,-3],[-2,-4],[-3,-4],[-5,-6],[-5,-3],[-1,-2],[-1,-2],[-2,-3],[-5,-6],[-1,-1],[-7,-3],[2,-1],[1,-1],[-1,-3],[-4,-7],[-5,-6],[-3,-4],[-6,-6],[-3,-1],[-5,-1],[-26,5],[-7,0],[-17,-3],[1,-1],[7,-2],[4,-2],[6,-6],[0,-2],[1,-1],[-1,-4],[0,-1],[-9,-10],[-3,-7],[-1,-5],[-3,-2],[-10,2],[-3,0],[-11,-1],[-5,0],[0,9],[0,10],[-2,9],[-8,16],[-1,3],[-1,3],[0,3],[0,3],[0,7],[1,4],[-1,8],[-1,14],[0,4],[0,2],[0,2],[2,1],[3,2],[2,0],[11,-4],[5,-1],[3,0],[-2,1],[-3,2],[-5,5],[-2,4],[0,2],[0,1],[0,2],[1,1],[2,2],[2,1],[6,3],[7,2],[15,1],[5,-1],[6,3],[4,0],[7,-1]],[[1674,9453],[0,-1],[7,6],[5,0],[3,-1],[1,0],[0,-1],[0,-3],[1,-5],[0,-1],[1,0],[2,2],[7,8],[4,2],[2,1],[10,1],[6,0],[7,0],[6,-2],[8,-3],[7,-4],[7,-4],[21,-16],[9,-5],[3,-3],[2,-2],[1,-2],[0,-3],[0,-2],[-1,-1],[-2,-2],[-13,-5],[-7,-2],[-7,-2],[-16,-8],[-11,-4],[-14,-8],[-28,-13],[-3,-2],[-1,-2],[-8,-14],[-3,-4],[-7,-3],[-9,-1],[-2,-1],[-1,-5],[-3,-8],[-2,-6],[-2,-14],[0,-2],[-2,-3],[-3,-3],[-8,-3],[-7,-2],[-8,-1],[-2,1],[-3,2],[-2,0],[-1,0],[-11,-10],[-11,-5],[-5,-3],[-3,-2],[-3,-1],[-4,1],[-4,1],[-3,3],[-2,3],[-5,12],[-3,4],[-2,2],[-5,7],[-2,1],[-21,9],[-10,5],[-2,2],[-3,1],[-13,0],[-1,0],[-1,1],[2,2],[0,2],[1,2],[-1,2],[0,1],[5,2],[0,1],[-1,1],[0,2],[0,1],[2,0],[1,3],[2,4],[2,2],[2,2],[4,4],[3,2],[2,2],[0,1],[-1,0],[0,2],[0,5],[0,3],[1,2],[0,1],[2,2],[9,3],[1,1],[0,1],[0,2],[-1,1],[-1,1],[-3,0],[-2,2],[-1,1],[1,3],[4,4],[2,2],[5,11],[8,6],[3,7],[6,7],[0,1],[-2,2],[-6,2],[-3,2],[-2,3],[-9,17],[-1,2],[-1,2],[-1,1],[0,1],[34,5],[24,2],[24,4],[7,0],[5,0],[5,-3],[7,-4],[9,-4],[17,-5],[11,-2],[-5,-4],[0,-1],[0,-1]],[[2295,9476],[-8,-3],[-2,1],[-1,1],[7,6],[3,1],[2,-1],[1,-2],[0,-1],[-2,-2]],[[2352,9475],[-1,0],[-2,0],[-10,3],[-1,1],[-1,1],[2,1],[1,1],[3,1],[4,0],[4,-3],[2,-3],[0,-1],[-1,-1]],[[2108,9506],[-6,-1],[-9,2],[-5,4],[-2,1],[0,1],[1,1],[2,2],[3,6],[1,2],[5,3],[3,1],[8,0],[4,-2],[2,-1],[1,-1],[2,-4],[0,-2],[2,-2],[1,-2],[0,-1],[-1,-1],[-1,-2],[-3,-2],[-8,-2]],[[2401,9505],[2,-4],[0,-2],[1,-4],[-1,-4],[-1,-1],[0,-1],[-1,-1],[0,-2],[0,-1],[-2,-1],[-10,-1],[-6,0],[-9,0],[-5,0],[-3,1],[-4,2],[-9,6],[-5,0],[-11,2],[-7,6],[-2,1],[-2,-2],[-1,0],[-1,2],[0,2],[-2,1],[-4,-1],[-1,1],[-1,2],[1,1],[0,2],[5,7],[3,0],[3,2],[2,3],[0,3],[4,5],[3,2],[5,3],[18,5],[4,1],[7,0],[6,-2],[5,-3],[9,-7],[5,-4],[2,-5],[2,-2],[3,-5],[-1,-3],[-1,-2],[0,-2]],[[2331,9533],[-2,-2],[-2,0],[-3,2],[-4,-1],[-4,-3],[-2,-3],[-1,0],[-4,-1],[-1,1],[-2,1],[-1,4],[1,2],[3,2],[10,2],[2,2],[1,1],[0,1],[1,0],[6,-2],[3,-2],[2,-1],[0,-1],[-3,-2]],[[1637,9547],[-3,-1],[-2,1],[1,1],[5,4],[0,2],[0,1],[0,1],[1,1],[2,1],[1,-1],[0,-1],[0,-4],[-1,-1],[-1,-2],[-1,-1],[-2,-1]],[[2374,9547],[-3,0],[-3,1],[-1,1],[-1,2],[0,2],[-1,2],[-1,1],[0,1],[0,1],[1,1],[3,0],[6,2],[1,0],[1,-1],[0,-3],[1,-2],[2,-4],[1,-2],[0,-1],[-6,-1]],[[1713,9537],[-8,-4],[-6,1],[-7,2],[-6,1],[-2,1],[-1,1],[2,3],[3,2],[6,4],[11,8],[7,3],[6,2],[7,5],[4,2],[3,0],[4,-1],[0,-1],[-4,-7],[-2,-2],[-5,-7],[-9,-11],[-3,-2]],[[2804,9557],[0,-3],[-2,0],[-7,-2],[-5,-1],[-2,1],[-2,3],[4,4],[5,3],[5,5],[5,3],[2,-1],[3,-2],[-3,-4],[-3,-3],[0,-3]],[[2160,9562],[6,-3],[0,-1],[-1,-1],[-7,-2],[-3,-1],[-3,-4],[-2,-1],[-10,-1],[-10,0],[2,3],[6,6],[-5,2],[-16,-4],[-6,2],[5,6],[-5,1],[-7,0],[-4,4],[1,4],[10,2],[12,2],[13,3],[10,0],[4,-1],[2,-5],[1,-6],[2,-1],[5,-4]],[[2110,9595],[2,0],[4,1],[3,0],[3,-2],[0,-2],[11,-3],[4,-2],[1,-1],[-2,-1],[-3,-2],[-3,-2],[-4,-1],[-23,0],[-2,1],[-1,1],[-3,7],[-2,3],[-1,3],[1,1],[2,2],[8,2],[4,0],[2,-1],[1,-1],[0,-1],[-2,-2]],[[2286,9588],[0,-2],[0,-2],[-1,-2],[0,-1],[1,-2],[3,-5],[2,-2],[0,-3],[0,-1],[-3,-4],[-1,-4],[0,-2],[2,-4],[0,-1],[-3,-3],[-5,-3],[0,-1],[12,-3],[1,-1],[0,-7],[2,-7],[-1,0],[-3,2],[-5,3],[-6,-5],[1,-9],[4,-4],[1,-3],[0,-1],[-4,-1],[-1,1],[-4,2],[-2,2],[-1,-1],[0,-2],[3,-2],[1,-3],[-1,-1],[-4,0],[-5,0],[-7,-2],[-4,0],[-4,1],[-4,0],[-5,0],[-2,0],[-2,2],[-3,-1],[-6,-3],[-9,1],[-8,0],[-1,1],[-2,3],[-3,7],[0,1],[9,1],[0,1],[-6,2],[-7,2],[-3,2],[0,2],[0,1],[12,3],[9,6],[5,3],[1,1],[4,1],[11,1],[0,2],[-20,-1],[-27,-4],[-9,-1],[-7,1],[-30,-6],[-1,0],[-3,2],[-3,3],[2,2],[9,5],[4,3],[0,2],[3,4],[6,1],[10,-3],[5,-3],[4,-2],[4,1],[4,2],[-1,0],[-7,-1],[-1,0],[-3,3],[-2,2],[-1,3],[0,1],[2,3],[-8,1],[-3,2],[-1,2],[0,1],[3,3],[7,4],[-1,1],[-10,0],[-2,0],[-4,3],[1,2],[3,4],[3,3],[2,0],[3,0],[8,-1],[2,-1],[5,-4],[2,-2],[0,-2],[1,-2],[4,-2],[19,-11],[3,-3],[2,-1],[5,-1],[2,0],[2,1],[1,1],[-8,4],[-2,2],[-2,3],[1,1],[2,0],[6,0],[7,1],[-8,1],[-5,2],[-5,0],[-6,2],[-1,1],[2,1],[9,1],[1,1],[1,0],[-3,2],[-3,1],[-13,2],[-5,2],[-1,2],[-1,1],[2,2],[7,4],[5,2],[9,1],[7,0],[4,-1],[10,-6],[4,-4],[8,1],[-2,4],[-2,5],[2,1],[7,3],[5,-1],[7,-4],[1,-2],[7,-2],[5,-1],[2,-1],[1,-2]],[[2188,9595],[-7,-1],[-4,1],[0,1],[3,1],[10,3],[5,4],[2,0],[8,1],[4,-1],[6,0],[-14,-5],[-13,-4]],[[1992,9565],[3,-1],[4,1],[5,0],[2,-2],[1,-2],[1,-1],[-1,-1],[0,-1],[-6,-6],[-2,-2],[2,0],[1,0],[6,4],[5,2],[3,0],[6,-1],[2,-1],[1,-1],[1,-1],[2,-4],[2,-5],[0,3],[1,3],[5,1],[0,1],[-2,1],[-1,2],[-2,3],[1,1],[1,2],[4,3],[4,1],[3,1],[14,-3],[5,-3],[3,-1],[0,-1],[1,-3],[3,-7],[0,-3],[-1,-4],[-5,-7],[0,-6],[-5,-12],[-3,-4],[-3,-2],[-14,-4],[-10,-5],[-3,0],[-3,-1],[-8,2],[-10,3],[-6,-1],[-5,-2],[-4,-1],[-3,1],[-4,0],[-4,2],[2,1],[1,1],[-1,1],[-4,1],[-5,-3],[-14,-7],[-19,-3],[-5,-1],[-5,-2],[-2,-2],[-4,-3],[-5,-3],[-10,-3],[-12,-5],[-22,-5],[-14,-1],[-13,2],[-5,1],[-4,2],[-10,5],[-2,2],[-3,4],[1,2],[5,3],[8,3],[15,3],[13,6],[5,1],[13,1],[7,0],[5,0],[3,1],[5,2],[6,4],[5,4],[2,2],[-2,1],[-3,1],[-8,-4],[-4,-2],[-4,0],[-6,-1],[-6,-1],[-1,0],[-7,4],[-3,1],[-1,-1],[-2,-1],[-3,-2],[-1,-1],[-3,-1],[-11,-1],[-10,-1],[-2,1],[-2,1],[0,1],[0,3],[-1,2],[1,3],[1,2],[2,1],[7,5],[1,1],[-3,-1],[-8,-2],[-2,1],[-1,2],[-1,1],[-1,-1],[-1,-2],[-1,-6],[-2,-3],[-3,1],[-4,2],[-1,0],[-1,0],[0,-1],[4,-5],[0,-2],[-2,-3],[-12,-5],[-4,-2],[-2,1],[-1,1],[-1,2],[-3,4],[-2,0],[-2,0],[-2,0],[-2,-2],[-1,-1],[-1,-3],[-2,-2],[-1,0],[-11,4],[-10,8],[-10,-2],[-4,1],[-14,2],[-2,2],[-1,2],[0,2],[1,1],[2,2],[3,4],[2,1],[2,1],[3,1],[7,0],[19,0],[3,1],[21,7],[2,1],[3,3],[1,1],[-25,-5],[-11,-2],[-17,1],[-3,1],[-1,2],[4,4],[2,2],[4,1],[12,2],[15,2],[10,0],[9,2],[5,1],[-17,0],[-21,-1],[-3,1],[-6,2],[0,2],[2,2],[1,1],[-1,4],[0,1],[4,3],[7,2],[4,1],[8,-1],[23,-1],[5,0],[-3,2],[-4,0],[-18,2],[-4,1],[0,1],[-1,1],[0,2],[2,2],[5,4],[16,4],[7,0],[6,0],[7,-1],[3,-2],[1,-1],[1,-2],[0,-3],[0,-1],[2,-1],[3,-5],[3,-1],[13,3],[5,0],[6,-1],[7,-2],[10,-8],[13,-7],[0,-2],[-5,-2],[-1,-2],[1,0],[5,-1],[5,1],[4,-1],[1,-1],[2,-2],[2,-5],[3,-4],[3,-2],[3,-2],[5,0],[4,1],[7,0],[39,-3],[2,0],[1,2],[1,2],[1,3],[-1,3],[0,1],[-24,9],[-2,4],[11,6],[1,1],[0,1],[0,3],[-1,2],[-7,4],[-5,0],[-8,4],[-2,1],[-1,1],[0,3],[0,1],[1,1],[8,4],[3,2],[10,10],[5,4],[3,2],[3,1],[8,1],[7,-4],[2,0],[1,-1],[0,-2],[-1,-2],[-3,-2],[-1,-2],[0,-1],[2,-3],[1,-2],[0,-3],[1,0],[4,-3],[4,-4],[2,-5],[-1,-2],[-4,-3],[-2,-2],[0,-2],[0,-1],[3,0]],[[2507,9591],[-1,-1],[-4,0],[-2,-1],[-2,1],[-3,1],[-3,4],[-4,4],[-4,5],[0,1],[1,2],[3,1],[8,1],[5,0],[5,-3],[1,-1],[1,-1],[0,-1],[0,-1],[-2,-3],[-1,-1],[0,-2],[0,-2],[1,-2],[1,-1]],[[1845,9604],[-4,-2],[-29,3],[-1,1],[-1,1],[5,3],[6,2],[15,1],[5,-1],[4,-2],[2,-1],[0,-3],[-2,-2]],[[2380,9614],[6,-1],[4,1],[4,0],[6,-2],[5,-4],[4,-2],[1,0],[1,-1],[0,-3],[0,-1],[0,-1],[-2,-3],[-1,-3],[-3,-2],[-2,-2],[-1,-3],[3,2],[12,8],[7,-1],[12,1],[14,3],[7,1],[7,-1],[5,-1],[10,-4],[4,-2],[1,-2],[1,-1],[-3,-2],[-6,1],[-11,1],[-2,1],[-2,0],[-1,-1],[0,-2],[3,-1],[13,-1],[44,-7],[1,-3],[0,-1],[-2,-1],[-3,-2],[-25,-2],[-14,2],[-12,3],[-4,-1],[3,-4],[7,-1],[6,-2],[3,-1],[13,-2],[2,-1],[4,-3],[3,-1],[3,-2],[3,-4],[1,-1],[4,1],[7,-4],[2,-1],[0,-2],[-2,-2],[-3,-3],[-7,-4],[0,-1],[8,1],[2,-1],[10,-6],[1,0],[1,0],[1,3],[0,2],[-2,3],[1,2],[2,1],[1,1],[2,0],[2,-1],[11,-8],[13,4],[2,-2],[2,-3],[1,0],[5,6],[3,1],[12,-7],[8,-2],[3,-1],[5,-2],[8,-1],[2,3],[-5,4],[3,1],[10,3],[6,0],[11,4],[7,0],[4,0],[13,7],[3,1],[2,2],[5,-1],[15,-3],[4,0],[15,4],[5,1],[6,0],[14,-3],[10,-2],[4,-1],[-2,-3],[1,-1],[1,0],[4,-1],[13,0],[6,-1],[4,-3],[1,-1],[0,-1],[-4,-3],[0,-1],[5,0],[10,-1],[2,0],[2,-4],[2,-5],[0,-2],[-3,-4],[-10,-4],[-10,-4],[-1,-1],[3,-2],[4,-1],[2,0],[9,2],[2,0],[4,-2],[1,-2],[2,-2],[-3,-2],[-12,-3],[-7,4],[-3,0],[-1,0],[1,-1],[3,-3],[1,-2],[-1,-1],[0,-2],[0,-2],[-1,-3],[-1,-4],[-27,-1],[-3,-1],[-7,-3],[-6,-1],[-3,-1],[-4,1],[-10,3],[-6,-1],[-2,1],[-6,2],[-1,1],[-2,2],[-2,4],[0,2],[1,3],[-1,2],[-1,0],[-2,1],[-5,3],[-3,1],[-1,-1],[1,-2],[1,-1],[3,-2],[1,-2],[-2,-5],[0,-1],[-4,-4],[-2,-1],[-7,0],[-10,-3],[-5,-1],[-7,1],[-4,1],[-3,2],[-3,2],[-1,0],[-1,-5],[-1,0],[-2,0],[-4,1],[-3,4],[-1,0],[0,-2],[-1,-2],[-8,-2],[-4,0],[-4,2],[-3,0],[-4,-1],[-8,2],[-2,0],[1,-4],[-3,0],[-6,0],[-10,1],[-6,-2],[-12,1],[-11,1],[-3,0],[-1,2],[0,2],[0,2],[2,3],[3,5],[1,2],[-3,1],[-1,2],[-2,0],[-4,-2],[-2,-5],[-2,-1],[-1,1],[-1,3],[-1,2],[-1,-1],[-1,0],[-1,-2],[-2,0],[-2,0],[-1,-1],[1,-2],[0,-2],[0,-1],[-2,-2],[-5,-2],[-3,-1],[-8,0],[-5,0],[-9,3],[-6,0],[-6,5],[-5,1],[0,2],[2,3],[0,1],[-7,-5],[-1,-1],[1,-3],[-1,-1],[-4,2],[-5,-1],[-1,0],[-4,2],[-5,3],[-3,3],[-4,9],[-2,6],[1,1],[3,1],[-1,2],[-4,3],[-3,3],[-2,2],[0,2],[-1,3],[0,2],[1,1],[2,4],[6,8],[1,1],[0,2],[-1,4],[-1,4],[-1,2],[-3,4],[-5,5],[-6,7],[-5,6],[-6,8],[-3,0],[-3,0],[-7,-3],[-2,-1],[-1,-1],[-5,0],[-15,1],[-6,0],[-4,0],[-7,-2],[-8,1],[-5,5],[-10,3],[-4,2],[-2,2],[1,2],[6,1],[3,2],[1,1],[-6,-1],[-3,0],[-19,8],[-5,1],[-1,1],[-1,1],[0,1],[1,2],[5,-3],[3,0],[4,1],[1,1],[-1,1],[-6,3],[-3,1],[-1,2],[1,2],[0,1],[2,1],[4,0],[5,1],[8,3],[6,1],[6,0],[14,-3],[15,-4],[8,-2]],[[1790,9640],[2,-2],[0,-1],[-1,-1],[-3,-2],[-16,-5],[-4,-2],[2,-2],[6,-4],[6,-4],[1,-2],[-3,-1],[-5,0],[-2,0],[-2,-1],[0,-1],[6,-6],[2,-2],[0,-2],[-1,-1],[-3,-2],[-4,-3],[-6,-1],[-15,-3],[-1,-2],[0,-2],[0,-3],[0,-2],[-2,-3],[-1,-2],[-3,-1],[-3,0],[-4,0],[-7,3],[-3,1],[-4,4],[-1,2],[1,3],[1,4],[2,5],[2,5],[1,2],[-1,2],[-2,0],[-5,-2],[-4,-1],[-2,-1],[-2,-2],[-1,-3],[-1,-4],[-1,-2],[-3,-1],[-4,0],[-2,-1],[-1,-2],[1,-1],[4,-3],[1,-3],[-1,-1],[-4,-4],[-2,-1],[-2,-5],[-2,-1],[-2,-2],[-2,1],[-3,1],[-3,4],[-2,3],[-1,3],[-1,1],[-2,-1],[-2,-3],[0,-2],[1,-3],[0,-2],[-3,-2],[0,-1],[5,-3],[1,-1],[0,-2],[-1,-1],[-2,0],[-1,-2],[-2,-2],[-5,-3],[-7,0],[-6,-2],[-1,0],[-1,3],[-2,5],[-1,3],[-2,1],[-3,6],[-1,2],[-1,1],[-1,0],[-1,-1],[-4,-9],[-5,-2],[-3,0],[-3,0],[-8,2],[-5,1],[-5,-1],[-6,-3],[-3,-1],[-4,0],[-1,2],[-2,2],[0,1],[1,1],[2,2],[0,1],[-2,1],[0,1],[1,1],[-1,1],[-2,0],[-6,-2],[1,2],[2,3],[8,8],[2,2],[2,0],[21,3],[1,0],[10,10],[3,2],[3,2],[14,6],[1,1],[3,4],[1,1],[3,2],[10,8],[10,6],[4,4],[7,3],[7,2],[23,3],[16,-4],[4,0],[2,1],[2,2],[2,-1],[6,-1],[2,1],[2,2],[-2,1],[-7,2],[0,1],[0,1],[2,2],[3,1],[9,1],[5,0],[4,-1],[5,-4],[13,-5]],[[2504,9634],[-7,-3],[-4,0],[-21,7],[-4,3],[-1,2],[0,4],[0,4],[1,3],[1,1],[2,1],[5,1],[5,-1],[7,-1],[7,-2],[9,-6],[4,-3],[0,-3],[0,-3],[0,-1],[-1,-1],[-3,-2]],[[2095,9627],[-4,-1],[-8,2],[-6,1],[-4,5],[-5,5],[-4,6],[-2,4],[-2,2],[-1,4],[-5,6],[5,1],[8,-1],[3,-2],[5,-3],[6,-6],[2,-2],[0,-3],[1,-2],[6,0],[6,-5],[1,-1],[1,-4],[0,-1],[-1,-4],[-2,-1]],[[2347,9664],[7,-2],[8,1],[8,1],[18,-1],[12,0],[3,0],[5,-2],[3,-1],[2,-3],[-6,-2],[-5,-9],[-1,0],[-5,0],[-3,-1],[-16,1],[-44,1],[-1,1],[-6,5],[-1,2],[1,3],[2,1],[1,1],[13,4],[5,0]],[[2175,9659],[-4,-1],[-7,1],[-8,2],[-2,2],[-1,4],[0,2],[1,1],[5,0],[10,1],[7,-1],[9,-2],[4,-1],[2,-1],[2,-2],[1,-1],[0,-2],[-11,0],[-5,-1],[-3,-1]],[[1838,9662],[-8,-2],[-5,0],[-9,3],[-10,9],[-1,3],[3,0],[3,1],[2,1],[3,2],[8,2],[1,-1],[0,-2],[0,-1],[3,-1],[3,-1],[5,-3],[4,-1],[1,-1],[1,-1],[2,-2],[0,-1],[-3,-2],[-3,-2]],[[1932,9682],[22,-1],[1,0],[0,-1],[-2,-4],[-2,-2],[-12,-3],[-16,-3],[-3,-1],[0,-1],[2,-1],[2,-1],[12,0],[3,0],[1,-1],[1,-1],[0,-2],[0,-5],[-1,-3],[-1,-3],[-5,-2],[-9,-2],[-6,-2],[-4,1],[-5,0],[-20,-5],[-6,0],[-6,1],[-7,4],[-8,2],[-3,2],[-4,1],[-1,2],[0,1],[1,1],[1,1],[1,1],[-2,3],[0,2],[-3,4],[0,2],[0,1],[0,1],[2,3],[1,0],[4,1],[6,1],[14,4],[31,5],[9,-1],[4,1],[8,0]],[[2139,9685],[-4,-1],[-3,0],[-1,1],[0,1],[0,1],[5,4],[3,1],[3,0],[2,-1],[1,-2],[-6,-4]],[[1949,9714],[5,-3],[2,0],[2,-1],[1,-1],[3,-4],[1,-2],[0,-3],[-1,-2],[-1,-2],[-2,-1],[-7,-1],[-8,1],[-8,-1],[-3,-1],[-10,1],[-2,1],[-5,3],[-4,1],[-2,-1],[-2,-2],[-4,-3],[-2,-1],[-7,1],[-10,5],[-12,-2],[-12,-3],[-5,0],[-1,1],[-2,2],[0,1],[4,3],[8,3],[6,2],[12,3],[14,2],[5,1],[3,3],[9,3],[6,2],[7,1],[6,0],[7,-3],[6,-1],[3,-2]],[[2327,9707],[7,-1],[11,0],[4,-1],[11,-4],[3,-2],[1,-2],[0,-1],[-4,-2],[-7,-2],[-1,-3],[6,-2],[3,-3],[2,-1],[0,-2],[-5,-5],[-3,-1],[-4,0],[-3,-1],[-6,-2],[-9,-2],[-13,-1],[-4,-1],[-6,-2],[-4,-1],[-2,2],[0,1],[0,2],[1,1],[-2,2],[-10,2],[-5,4],[-1,2],[0,1],[12,0],[5,1],[2,1],[1,1],[-2,1],[-9,2],[-13,2],[-1,2],[-6,3],[0,4],[-2,1],[-4,1],[0,1],[-1,2],[0,1],[0,1],[7,3],[-1,1],[-5,6],[-2,4],[0,1],[4,2],[4,0],[13,-1],[6,0],[6,-2],[6,-2],[10,-2],[3,-1],[6,-4],[0,-2],[0,-1],[1,-1]],[[2127,9752],[6,-1],[8,-4],[7,-7],[1,-1],[0,-2],[-1,-1],[-1,-2],[-1,-2],[4,-1],[0,-1],[0,-2],[0,-1],[3,1],[2,2],[0,1],[1,4],[5,1],[6,3],[3,0],[5,0],[11,-6],[4,0],[2,-1],[1,-1],[0,-2],[-2,-3],[-1,-2],[1,-1],[6,-1],[13,2],[12,-6],[6,-6],[5,-2],[1,-1],[-2,-1],[-1,-3],[-4,-2],[-1,-1],[2,-3],[0,-2],[0,-2],[1,-1],[5,-1],[12,-10],[2,-2],[2,-4],[0,-1],[-2,-2],[-2,-5],[-1,-1],[-5,-1],[-9,-1],[-8,-1],[-9,2],[-8,3],[-3,2],[-2,3],[-1,1],[0,5],[-1,1],[-4,2],[-3,4],[-6,0],[-15,4],[-6,1],[-6,-1],[-9,-1],[-2,0],[-2,1],[-1,2],[0,1],[1,3],[-26,-3],[-8,-4],[-10,1],[-5,1],[-7,4],[-4,3],[-2,3],[-1,3],[3,2],[2,1],[3,1],[14,-2],[12,-2],[6,2],[2,3],[-3,1],[-12,1],[3,2],[10,1],[5,3],[-1,1],[-3,1],[-13,-1],[-5,1],[0,1],[1,1],[7,5],[0,1],[-3,2],[-3,2],[-1,0],[-7,-1],[-10,-8],[-2,-1],[-2,0],[-2,1],[0,2],[2,2],[4,6],[0,2],[-4,1],[-11,-1],[-7,0],[-1,2],[0,3],[0,3],[2,4],[2,3],[1,2],[15,-1],[25,2],[7,0],[8,-2]],[[2256,9791],[0,-8],[0,-4],[-2,-2],[-1,-1],[-2,0],[-7,2],[-3,1],[0,1],[0,2],[-6,3],[-9,0],[-4,0],[-2,1],[-1,1],[0,5],[0,1],[1,3],[1,1],[6,3],[2,0],[9,-1],[8,0],[3,-1],[4,-2],[2,-2],[1,-3]],[[2447,9857],[4,-5],[13,-11],[6,-5],[11,-5],[1,-2],[0,-3],[3,-1],[9,-2],[10,-3],[1,1],[4,1],[4,1],[5,-1],[3,-1],[2,-2],[1,-1],[0,-1],[-2,-2],[0,-1],[1,-1],[0,-1],[-2,-4],[1,-1],[5,-4],[4,-2],[9,-2],[6,0],[4,-1],[0,1],[-2,2],[-3,4],[-7,1],[-1,2],[0,4],[0,2],[4,2],[3,0],[8,0],[4,0],[8,-3],[1,-1],[1,-3],[0,-5],[0,-2],[-7,-3],[-2,-2],[2,0],[6,-1],[9,-2],[3,0],[4,-4],[3,-4],[-2,-6],[-3,-8],[-2,-2],[-2,-3],[1,0],[9,1],[2,1],[6,2],[8,0],[3,-1],[2,-1],[2,-3],[3,-4],[1,0],[4,5],[2,1],[2,2],[1,-1],[4,-4],[9,-9],[3,-3],[0,-3],[-3,-2],[-3,-2],[-23,-6],[-10,-4],[-5,-2],[-2,-1],[-6,0],[-1,0],[-1,-5],[-2,-2],[-5,-3],[-6,-5],[-4,-3],[-7,2],[-2,3],[0,6],[-1,2],[1,1],[0,2],[3,5],[0,1],[-1,-1],[-5,-2],[-2,-1],[-1,-3],[-1,-4],[1,-7],[-1,-2],[-2,-2],[1,-1],[5,-1],[1,-1],[1,-1],[0,-2],[0,-2],[-2,-2],[-3,-1],[-4,1],[-8,6],[-3,0],[-1,-1],[0,-2],[3,-5],[0,-4],[-1,-3],[-2,-6],[-2,-2],[-1,-1],[-4,0],[-3,2],[-11,9],[-5,4],[-7,7],[-2,2],[-1,0],[-1,-3],[2,-3],[6,-7],[5,-5],[2,-5],[1,-2],[-1,0],[-2,0],[-2,2],[-6,2],[-2,2],[-2,1],[-3,2],[-5,0],[-4,1],[-5,-1],[0,-1],[5,-2],[1,-1],[2,-2],[1,-2],[-2,-1],[-6,-1],[-9,1],[-13,1],[-14,3],[-13,4],[-9,5],[-3,2],[-1,2],[3,2],[12,1],[12,2],[-2,1],[-22,2],[-7,1],[-4,-1],[-4,1],[-3,1],[-5,4],[-2,3],[0,1],[2,0],[10,0],[1,0],[-5,2],[-16,4],[-6,3],[-1,1],[0,2],[0,1],[6,2],[18,6],[7,1],[6,0],[4,2],[4,5],[19,2],[14,3],[2,1],[-11,-1],[-16,1],[-6,3],[-5,1],[-5,0],[-5,-1],[-10,-4],[-5,-1],[-10,-3],[-3,0],[-2,1],[2,3],[2,1],[0,1],[-4,0],[-5,0],[-4,0],[-12,-4],[-5,-2],[-2,0],[-6,4],[-9,2],[-2,1],[1,6],[3,2],[7,1],[22,6],[1,1],[2,2],[-4,0],[-11,-3],[-9,-1],[-7,0],[-6,0],[-3,1],[-4,2],[-13,8],[-3,4],[-1,3],[-1,3],[-3,6],[27,-4],[11,0],[21,-1],[1,1],[0,1],[0,2],[0,1],[0,1],[8,2],[1,1],[-9,0],[-16,-4],[-6,0],[-7,6],[-7,-1],[-4,0],[-5,2],[-2,1],[-2,2],[-1,1],[0,1],[2,1],[6,2],[3,0],[7,-1],[6,0],[-2,1],[-8,5],[-7,5],[0,7],[6,2],[6,0],[6,-2],[8,0],[5,-2],[4,-4],[4,0],[7,-1],[16,0],[-3,1],[-5,2],[-11,2],[-5,6],[-12,3],[-8,2],[0,1],[6,8],[8,3],[13,-1],[9,2],[10,2],[11,-1],[3,0],[1,1],[2,2],[0,1],[-2,2],[-3,1],[-13,1],[-6,0],[-3,1],[0,2],[-1,1],[0,1],[1,1],[1,1],[3,0],[13,0],[7,1],[8,-1],[18,-4],[5,-2],[6,-3],[3,-3]],[[3069,9965],[23,-1],[7,1],[9,-3],[5,0],[8,0],[6,0],[23,-1],[5,-1],[0,-1],[-5,-3],[-7,-2],[-42,-8],[-3,-1],[8,-1],[12,0],[10,1],[11,3],[3,0],[7,2],[14,3],[11,2],[5,0],[4,-2],[3,0],[1,1],[3,3],[1,1],[4,1],[2,0],[3,-2],[4,-3],[4,-2],[2,0],[8,2],[4,1],[10,-1],[4,-1],[1,-2],[-3,-1],[-2,-1],[0,-1],[1,-1],[6,-2],[8,-6],[0,-1],[-4,-4],[0,-1],[21,4],[22,-2],[6,-1],[2,-2],[3,-2],[2,-3],[-1,-4],[-10,-6],[-10,-4],[-5,-4],[-9,-2],[-31,-9],[-15,-3],[-8,-3],[-4,0],[-18,0],[-5,-2],[-3,-2],[-5,-2],[-9,0],[-17,-1],[-4,-3],[-1,-2],[-2,-2],[-1,-1],[-49,-11],[-1,-2],[5,0],[6,0],[72,14],[13,1],[13,-1],[-1,-3],[-18,-9],[-23,-8],[-12,-6],[-29,-11],[-24,-10],[-9,-6],[-12,-9],[-4,-2],[-5,-1],[-6,0],[-6,2],[-7,3],[-6,4],[-3,1],[2,-2],[12,-13],[-1,-3],[-23,-3],[-11,-2],[-5,0],[-4,0],[-3,0],[-4,-1],[0,-1],[3,-1],[9,-1],[21,3],[3,0],[5,-2],[1,-1],[-6,-4],[-16,-5],[2,-1],[5,-1],[-1,-2],[-5,-4],[-2,-1],[-16,-4],[-7,0],[-6,0],[-29,8],[-9,1],[-10,2],[-7,-1],[-7,-2],[3,-1],[14,-2],[11,-1],[5,0],[2,-2],[5,-5],[0,-3],[-1,-2],[-1,-2],[-2,-1],[-3,0],[-11,0],[-4,-1],[-5,-1],[-6,-1],[-11,0],[-13,-2],[-7,0],[-7,1],[-8,2],[-9,2],[-14,1],[1,-2],[5,0],[10,-4],[5,-5],[5,-1],[10,-4],[7,-1],[7,-1],[10,2],[7,-1],[-2,-10],[-3,-1],[-16,0],[-8,2],[-3,1],[-8,2],[-7,-1],[-6,0],[-4,-1],[-7,0],[-17,-2],[-9,0],[-7,1],[-8,1],[-9,-1],[1,-1],[3,0],[6,-2],[5,-3],[4,-1],[5,0],[6,2],[19,2],[8,0],[7,-1],[5,-1],[4,-1],[4,-4],[11,-1],[9,-1],[13,-6],[4,0],[1,-2],[-3,-4],[0,-2],[-9,-4],[-15,-1],[-15,0],[-12,-1],[-1,0],[8,-1],[18,-5],[7,-3],[1,-2],[-10,-6],[-9,-12],[-3,-1],[-3,0],[-7,0],[-10,-3],[-7,-1],[-14,1],[-15,0],[-2,-2],[0,-3],[0,-6],[1,-8],[-1,-5],[-3,-4],[-3,-2],[-6,-3],[-6,-1],[-4,-1],[-8,0],[-21,-2],[-10,0],[-8,1],[-9,3],[-14,7],[-4,1],[-4,1],[1,-1],[4,-4],[3,-3],[3,-1],[-1,-1],[-6,-2],[-7,-1],[-8,0],[0,-1],[3,-2],[3,-2],[3,0],[6,0],[7,3],[4,0],[9,0],[4,-1],[11,-5],[1,-1],[9,3],[11,0],[5,-2],[1,-4],[1,-4],[-2,-2],[3,-3],[7,-2],[5,-1],[4,2],[5,3],[3,1],[2,0],[3,-3],[5,-5],[1,-5],[-4,-7],[-5,-4],[-18,-7],[-5,-2],[-5,-3],[-6,-3],[-12,-3],[-7,-1],[-14,-4],[-3,0],[-4,1],[-1,2],[1,3],[1,3],[2,3],[0,2],[-4,3],[-2,2],[-3,1],[-5,-1],[-3,-1],[-4,0],[-3,1],[-3,1],[-6,7],[-2,0],[-3,0],[-3,1],[-2,2],[-4,2],[1,-2],[4,-3],[3,-4],[1,-3],[-1,-3],[-32,-1],[-13,0],[-3,3],[-7,10],[-1,-18],[-24,-3],[-6,0],[-9,2],[-12,5],[-5,4],[-2,3],[-2,2],[-1,0],[-3,-4],[-3,-8],[-8,2],[-11,2],[-4,8],[0,-11],[-17,1],[-8,0],[-2,10],[0,11],[-4,-7],[2,-6],[0,-7],[-7,2],[-16,1],[-5,1],[0,9],[2,10],[20,9],[6,5],[4,2],[7,1],[9,1],[6,-1],[7,1],[8,1],[6,1],[1,1],[-1,0],[-7,7],[-2,1],[-2,1],[-5,0],[-4,3],[-3,2],[-3,3],[-4,6],[-4,7],[2,4],[7,3],[7,2],[8,1],[6,0],[7,-1],[10,-4],[6,-3],[7,-8],[5,-6],[4,-3],[18,-5],[6,0],[7,0],[14,1],[7,2],[3,1],[2,3],[2,1],[6,5],[10,8],[5,7],[1,2],[2,3],[0,3],[-3,-2],[-16,-16],[-4,-3],[-9,-5],[-5,-1],[-6,0],[-9,2],[-10,-3],[-7,1],[-5,2],[0,12],[-8,9],[8,5],[7,3],[11,8],[3,0],[8,-1],[-4,1],[-5,3],[-10,-1],[4,17],[-7,-13],[-7,-6],[-4,-3],[-5,-2],[-17,-2],[4,6],[4,9],[-4,-3],[-10,-5],[-7,-3],[-7,-1],[-11,0],[-6,3],[1,6],[0,8],[4,3],[6,5],[5,6],[4,6],[16,3],[15,1],[13,3],[7,1],[6,-2],[24,-2],[10,-2],[4,-2],[4,0],[3,2],[4,2],[16,0],[4,0],[4,1],[4,2],[6,3],[1,2],[-4,0],[-4,-1],[-6,-2],[-5,-1],[-6,0],[-11,2],[-20,0],[-11,1],[-4,1],[-3,1],[-2,2],[-2,2],[1,2],[4,1],[3,0],[6,-1],[6,-3],[7,0],[-2,2],[-9,4],[-6,4],[-5,4],[-4,5],[-9,7],[-7,6],[-5,3],[-5,2],[-16,2],[-3,1],[-8,6],[-2,10],[-3,6],[3,8],[5,3],[32,-3],[14,1],[17,-1],[9,-2],[11,-5],[9,-5],[9,-4],[8,-5],[10,-7],[5,-3],[5,-2],[6,-2],[12,-3],[10,0],[5,0],[6,2],[4,2],[-4,0],[-12,0],[-9,1],[-4,2],[-5,3],[-8,6],[-6,4],[-13,6],[-10,7],[-8,6],[0,2],[5,2],[7,1],[43,4],[26,5],[11,6],[1,1],[34,8],[25,3],[9,0],[9,1],[0,1],[-7,1],[-8,1],[-17,0],[-15,1],[-5,1],[1,3],[2,3],[4,4],[5,3],[21,9],[14,3],[4,3],[-30,-6],[-11,-4],[-10,-6],[-6,-2],[-4,1],[-3,-1],[-3,-2],[-3,-3],[-2,-4],[-2,-3],[-2,-2],[-4,-2],[-10,-4],[-24,-7],[-9,-1],[-7,0],[-22,-4],[-7,0],[-8,1],[4,3],[12,6],[3,2],[-8,0],[-8,-2],[-17,-1],[-7,-3],[-6,-4],[-6,-2],[-4,-1],[-5,-1],[-20,0],[-5,0],[-12,3],[-10,-1],[-4,0],[-8,3],[-2,1],[0,2],[5,4],[5,3],[17,8],[11,4],[16,3],[36,3],[2,3],[-37,-3],[-32,-4],[-5,-1],[-8,-4],[-23,-12],[-7,-4],[-11,-1],[-8,2],[-6,1],[-11,4],[-8,2],[-4,1],[-2,2],[-2,1],[-2,2],[3,2],[21,3],[28,0],[13,0],[13,2],[18,5],[20,7],[4,3],[-7,0],[-6,0],[-13,-3],[-20,-7],[-19,-2],[-44,-1],[-15,-2],[-6,0],[-4,2],[-6,3],[1,3],[11,3],[8,1],[2,1],[-12,3],[-1,1],[7,4],[15,5],[7,1],[14,1],[14,0],[0,1],[-14,1],[-10,1],[-14,-2],[-37,-8],[-3,1],[-5,1],[1,2],[20,9],[1,1],[-14,0],[-5,0],[-4,1],[-5,-1],[-8,-3],[-5,-1],[-3,1],[-8,3],[1,3],[6,3],[6,3],[8,2],[12,3],[9,1],[15,0],[7,1],[6,2],[8,4],[9,2],[14,2],[11,0],[7,-2],[5,-3],[6,-3],[0,2],[5,3],[5,1],[7,-1],[6,-1],[8,-3],[7,-1],[3,0],[3,2],[10,0],[0,1],[-3,1],[-4,1],[-35,9],[-1,1],[12,2],[7,2],[4,1],[8,4],[6,2],[10,3],[5,-1],[5,-2],[5,-2],[15,-1],[7,-1],[11,-8],[5,-3],[6,-3],[4,-1],[8,0],[1,1],[-9,4],[-3,2],[1,2],[2,1],[3,0],[7,-2],[19,-5],[29,-7],[11,-1],[7,-3],[6,-3],[6,-2],[1,0],[-5,5],[-14,6],[-37,9],[-15,5],[-7,3],[-5,4],[-1,1],[5,3],[7,1],[9,1],[1,1],[-8,2],[-4,3],[0,1],[9,1],[6,0],[10,-3],[10,-1],[1,1],[-9,7],[-1,2],[1,1],[3,1],[10,-1],[16,-3],[29,-2],[8,0],[-1,1],[-11,2],[-13,3],[-5,2],[-4,2],[-4,2],[-1,1],[8,2],[19,0],[18,-3],[16,1],[10,-1],[4,0],[7,-3],[22,-9],[2,-2],[3,-2],[3,-3],[3,-1],[8,2],[5,2],[-2,2],[-13,5],[-3,2],[-6,3],[-14,6],[-3,3],[-3,2],[39,2],[37,-2],[6,-1],[4,-2],[3,-3],[6,-3],[12,-5],[17,-3],[-3,2],[-13,5],[-5,4],[0,2],[1,2],[2,1],[14,5],[21,2],[2,-1],[16,-7],[8,-3],[5,-1],[-7,4],[-6,2],[0,1],[9,3],[6,1],[25,1],[3,0],[2,-1],[6,-4],[2,-1]],[[5264,7907],[-1,-6],[0,-4],[0,-2],[3,-1]],[[5290,7883],[-1,-7],[-1,-4],[1,-3],[1,-2],[-1,-2],[-2,0],[-2,1],[-2,3],[-2,0],[-1,-1],[-1,-3],[-1,-4],[1,-2],[1,-1],[0,-4],[1,-4],[0,-2],[0,-1],[-2,-1],[-1,1],[-2,5],[0,2],[-2,1],[-3,-2],[-4,-3],[-1,0],[-2,1],[-1,2],[-1,5],[-1,3],[-3,1],[-1,-1],[0,-5],[-1,-6],[-1,-4],[-4,-7],[-1,-3],[0,-2],[-1,-2],[1,-3],[1,-3],[-1,-2],[-2,0],[-1,1],[-1,4],[-3,4],[2,4],[-1,1],[-4,2],[-3,3],[-3,4],[0,3],[0,7],[0,1],[-1,1],[-1,0],[-2,-2],[-2,-4],[-4,-4],[0,-1],[1,-4],[0,-1],[-3,-7],[0,-2],[-4,-4],[-2,-1],[-6,3],[-1,0],[-3,-2],[-3,-2],[-5,-2],[-3,2],[0,1]],[[5195,7829],[-1,2],[-1,3],[-2,2],[-1,2],[-1,3],[-1,2],[1,6],[-1,2],[-1,4],[1,2],[-1,0],[-5,2],[-4,-1],[-3,-2],[-2,-4],[-1,0],[1,-1],[1,-3],[-2,-4],[-3,-2],[-3,0],[-1,0],[0,4],[2,1],[2,2],[0,4],[1,2],[-2,3],[0,2],[1,3],[1,3],[1,3],[3,4],[4,4],[0,4],[0,6],[1,1],[5,3],[1,1],[0,2],[4,6],[4,6],[0,2],[1,2],[-1,1],[-1,1],[-1,2],[2,3],[2,2],[3,0],[1,-1],[0,-1],[1,-1],[1,-1],[2,1],[3,1],[1,3],[1,2],[3,3]],[[5211,7925],[2,-1],[7,-1],[4,1],[3,2],[4,0],[2,-1],[1,0],[1,1],[2,1],[1,1],[-1,0],[0,1],[-3,-1],[-1,1],[0,2],[1,2],[2,2],[2,1],[1,-1],[3,-4],[1,0],[0,1],[1,0],[1,-1],[1,-2],[7,1],[2,0],[4,-5],[5,-4]],[[3123,1965],[-1,0],[-3,1],[-4,0],[0,1],[0,1],[2,1],[6,-1],[1,0],[0,-1],[-1,-2]],[[3131,1971],[-1,0],[-1,1],[-1,1],[-5,1],[0,1],[0,2],[1,1],[2,1],[2,3],[1,-1],[1,-5],[1,-3],[0,-1],[0,-1]],[[3153,2003],[-2,-3],[-2,0],[0,1],[0,1],[0,2],[1,1],[1,1],[1,0],[2,-1],[-1,-2]],[[3136,2007],[0,-2],[-2,-3],[-3,-2],[-2,-1],[-2,1],[0,2],[-1,2],[0,1],[-1,1],[-1,0],[-2,-1],[-3,-3],[-1,-1],[-1,0],[-8,2],[-1,1],[-1,2],[-1,6],[-4,5],[6,3],[6,0],[13,-2],[5,-1],[4,-5],[0,-3],[0,-2]],[[3064,2021],[22,-6],[7,3],[5,0],[2,-5],[-6,-5],[0,-1],[1,-1],[5,-1],[2,-2],[1,-2],[-1,-3],[0,-1],[0,-2],[5,-4],[1,-3],[1,-2],[1,-4],[-1,-3],[0,-1],[-3,1],[-2,2],[-1,5],[-2,1],[-3,1],[-4,2],[-2,0],[-3,1],[-2,-1],[-1,1],[-1,4],[0,1],[1,5],[0,1],[-1,0],[-2,-1],[-1,1],[-3,3],[-1,1],[-3,0],[-2,-6],[0,-1],[2,-4],[3,-6],[-2,-1],[-4,2],[-2,1],[-1,4],[-3,1],[-1,1],[0,2],[0,4],[-1,0],[-4,-1],[-1,1],[0,2],[-1,1],[-2,1],[0,1],[1,1],[0,3],[1,11],[6,-2]],[[3028,2023],[1,-3],[0,-1],[4,-1],[1,1],[4,0],[2,1],[4,1],[3,-9],[0,-3],[-3,-3],[-2,0],[-2,1],[0,1],[0,1],[-1,2],[-2,0],[-1,-1],[-1,0],[-2,1],[-4,1],[-1,2],[0,1],[0,1],[-4,3],[-2,3],[-2,0],[-1,0],[-1,-1],[-1,-1],[-1,0],[0,1],[-1,1],[1,3],[1,0],[5,0],[3,-1],[3,-1]],[[3017,2072],[6,-5],[4,0],[0,-3],[0,-5],[0,-2],[-2,-2],[-1,-3],[-5,3],[-5,5],[-2,-1],[-3,2],[-3,-1],[-1,-2],[-4,-2],[-1,6],[-3,5],[-3,4],[2,6],[2,1],[2,2],[8,-2],[4,-2],[5,-4]],[[2974,2103],[1,-4],[0,-1],[2,1],[4,0],[5,-2],[1,0],[2,-6],[2,-2],[3,-4],[-3,-4],[-1,-4],[-1,-2],[-1,-2],[-1,-1],[-3,-3],[-3,0],[-3,-1],[-2,-2],[-1,1],[-2,1],[0,2],[2,1],[3,5],[0,5],[-3,1],[-1,0],[-2,0],[-1,1],[-1,-2],[0,-3],[0,-3],[0,-1],[-1,-1],[-3,1],[-3,3],[0,1],[1,5],[0,2],[-1,4],[-1,0],[-3,0],[-3,4],[-2,5],[-6,2],[5,6],[7,1],[2,-3],[7,-2],[0,3],[0,2],[1,1],[1,-1],[2,0],[0,-1],[1,-3]],[[2933,2136],[1,-1],[1,0],[2,-1],[5,-1],[6,-3],[2,-2],[4,-1],[3,-3],[1,-1],[1,0],[4,-6],[1,-1],[4,-5],[-2,-1],[-5,3],[-3,0],[-2,0],[0,1],[-1,3],[0,1],[-5,6],[-2,2],[-4,1],[-4,-1],[-2,1],[-1,-1],[-4,5],[-4,5],[-2,5],[-3,3],[0,2],[2,0],[2,-2],[3,-3],[1,-2],[1,-3]],[[3093,2024],[-5,0],[-1,-1],[-6,-2],[-11,3],[-3,3],[-4,5],[-1,-1],[-4,-3],[-4,-1],[-3,-1],[-2,3],[-1,1],[-1,0],[-6,-3],[-6,3],[-5,2],[-9,2],[-6,4],[-11,-1],[-2,2],[0,4],[0,2],[3,1],[0,2],[3,0],[3,-3],[1,0],[2,3],[3,2],[1,1],[5,-3],[2,0],[3,1],[1,2],[0,2],[1,1],[3,1],[3,-2],[0,-3],[0,-4],[3,-2],[5,1],[3,-2],[0,3],[-5,6],[-2,4],[-2,2],[-4,2],[-3,7],[0,7],[0,6],[6,4],[-1,5],[2,4],[2,2],[3,-15],[2,-6],[-3,-1],[-4,0],[2,-7],[5,-3],[3,-5],[0,-5],[3,-1],[5,0],[3,0],[2,3],[1,1],[4,-3],[5,-3],[2,-2],[1,-3],[0,-3],[0,-1],[2,0],[2,5],[1,1],[2,1],[1,1],[0,1],[-4,3],[-22,14],[-3,6],[-2,7],[0,7],[2,3],[4,2],[7,4],[8,6],[1,1],[0,4],[-1,3],[-3,1],[-4,1],[-3,0],[-3,-1],[-6,-4],[-4,0],[-3,2],[-2,5],[-2,5],[0,4],[1,3],[1,4],[2,1],[2,0],[2,1],[1,1],[1,1],[-1,2],[0,1],[-3,2],[-1,3],[-2,3],[1,1],[4,1],[3,-3],[2,-3],[2,0],[1,2],[4,4],[3,4],[2,6],[2,3],[3,1],[6,-11],[3,0],[8,5],[1,0],[2,-3],[1,-1]],[[2940,2193],[-1,-1],[-3,1],[-1,2],[-3,3],[0,3],[-1,3],[1,1],[2,-2],[1,-1],[1,-2],[4,-4],[1,-1],[0,-1],[-1,-1]],[[2921,2210],[1,-11],[1,-2],[3,-1],[3,-5],[0,-2],[-3,-10],[-1,-6],[-5,0],[-1,7],[-3,7],[-1,7],[-2,7],[3,4],[3,-1],[0,5],[2,1]],[[2929,2230],[0,-5],[-1,-1],[-1,-1],[-2,2],[-1,0],[-2,-2],[-2,-2],[-2,1],[-3,1],[-3,-7],[-1,-2],[-3,-4],[0,4],[2,6],[1,4],[1,6],[3,-2],[5,2],[4,4],[3,0],[1,-2],[1,-2]],[[2908,2265],[-1,-6],[-2,1],[-1,1],[0,4],[-1,1],[1,4],[1,3],[0,3],[3,0],[4,-1],[1,-1],[-1,-2],[-1,-2],[-3,0],[0,-5]],[[2915,2287],[-6,-5],[-1,2],[-4,0],[1,5],[0,4],[1,1],[0,3],[1,6],[4,-2],[2,0],[3,-2],[4,-1],[1,-5],[-4,-3],[-2,-3]],[[2913,2371],[0,-5],[-4,-8],[-3,-6],[-4,-4],[-2,0],[-1,2],[1,3],[3,4],[-1,4],[-1,1],[-1,1],[-1,2],[0,3],[1,2],[2,1],[1,-1],[5,2],[2,2],[3,1],[0,-4]],[[2931,2353],[0,-8],[0,-9],[-1,-10],[0,-3],[1,0],[0,-1],[0,-6],[-1,-4],[-1,-3],[-1,-5],[0,-1],[-3,0],[-2,0],[-1,5],[-1,3],[0,4],[-1,5],[0,2],[0,3],[2,2],[0,5],[0,1],[2,2],[0,1],[0,1],[-1,0],[-6,-6],[0,-2],[0,-2],[0,-9],[-1,-5],[-1,-1],[-3,0],[-4,1],[-4,4],[-3,-1],[0,5],[1,5],[5,-1],[1,8],[-2,2],[-2,3],[-1,3],[1,2],[3,3],[2,0],[1,-1],[4,1],[0,5],[-3,2],[0,4],[4,3],[3,4],[0,4],[-1,4],[0,1],[2,4],[3,1],[1,0],[3,-2],[2,0],[1,-1],[0,-3],[2,-19]],[[2902,2375],[-3,0],[-1,10],[4,15],[0,6],[-1,4],[0,4],[0,1],[5,3],[1,-3],[2,-9],[3,-11],[0,-12],[-2,-3],[-6,-2],[-2,-3]],[[2928,2385],[0,-1],[-4,0],[-5,-1],[-3,5],[-1,9],[-1,1],[-1,5],[-1,3],[-2,5],[0,5],[0,2],[1,3],[6,3],[2,4],[2,0],[0,-10],[1,-3],[2,-3],[0,-1],[1,-4],[1,-5],[1,-3],[0,-1],[0,-2],[0,-1],[1,-10]],[[2913,2428],[-2,0],[0,2],[-2,3],[2,2],[3,2],[2,0],[2,-2],[1,-2],[-4,-2],[-1,-2],[-1,-1]],[[2935,2552],[-1,-3],[-3,-1],[-2,2],[-4,-1],[0,5],[1,3],[3,5],[1,5],[0,8],[2,2],[0,3],[4,2],[0,-6],[-1,-11],[2,-6],[1,-2],[-1,-3],[-2,-2]],[[2915,2598],[0,-1],[-1,1],[-1,1],[-1,3],[1,2],[1,0],[1,-2],[0,-3],[0,-1]],[[2954,2602],[-1,-1],[0,1],[-1,2],[0,2],[-2,4],[-1,2],[0,2],[1,3],[2,1],[1,0],[1,-4],[0,-4],[1,-4],[-1,-4]],[[2972,2605],[-6,-5],[-4,1],[-1,4],[-1,3],[0,5],[1,2],[2,4],[1,2],[1,3],[-1,3],[1,2],[1,1],[5,-3],[5,-4],[2,-3],[0,-2],[-2,-5],[-1,-5],[-3,-3]],[[2952,2627],[-2,-3],[-2,0],[-3,-3],[-1,-3],[0,-3],[2,-3],[2,-5],[1,-6],[1,-6],[0,-2],[0,-3],[2,-5],[0,-2],[0,-2],[-1,-4],[0,-1],[-2,0],[0,-3],[-1,-1],[-4,0],[-3,1],[1,8],[-3,3],[-2,4],[-3,9],[-1,3],[-3,6],[-3,6],[4,4],[-1,6],[2,2],[4,3],[2,-2],[2,1],[1,1],[0,7],[1,5],[2,2],[3,1],[1,-3],[1,-3],[3,-2],[0,-3],[0,-4]],[[2949,2659],[1,-2],[-1,-1],[-2,1],[-1,-3],[-1,0],[-4,2],[-1,1],[0,3],[5,0],[3,2],[1,0],[0,-3]],[[2926,2672],[-4,-1],[-1,2],[0,1],[0,1],[2,1],[2,-1],[0,-1],[1,-1],[0,-1]],[[2950,2687],[-2,-1],[-2,0],[-2,1],[-3,-1],[-3,3],[-4,3],[-1,2],[1,2],[2,6],[2,12],[2,17],[-1,6],[0,3],[0,3],[1,3],[-1,3],[1,3],[2,7],[1,2],[0,4],[1,6],[-1,2],[-1,2],[1,1],[9,-4],[5,-1],[1,-5],[1,-4],[0,-7],[1,-1],[0,-5],[-3,-2],[0,-5],[2,-4],[-2,-2],[-3,-1],[0,-1],[-2,-1],[-2,-2],[1,-2],[2,-5],[3,-3],[2,-5],[2,-5],[-1,-4],[-2,-4],[-3,-3],[-3,-2],[0,-8],[-1,-3]],[[2811,3246],[-5,-1],[0,1],[1,2],[1,2],[1,0],[1,-1],[1,-1],[1,-1],[0,-1],[-1,0]],[[1964,3621],[-4,-2],[0,3],[1,3],[3,-2],[2,0],[-2,-2]],[[3098,2168],[-15,6],[-4,3],[-3,0],[-5,-4],[-4,-9],[-1,-2],[-4,-2],[-4,-1],[-14,-8],[-4,-1],[-4,-2],[-3,-4],[-1,-7],[0,-4],[-3,-15],[-1,-8],[0,-5],[1,-7],[-1,-12],[-3,-2],[-6,-4],[-4,3],[-7,2],[-5,4],[-6,4],[-2,2],[-6,9],[0,3],[-1,4],[3,5],[2,1],[4,0],[4,1],[3,-3],[0,-7],[-1,-3],[-1,-2],[1,-2],[2,2],[2,15],[9,7],[3,4],[3,7],[1,2],[0,2],[-2,2],[-4,3],[-14,-14],[-7,-4],[-4,-4],[-5,-7],[-1,-2],[-1,-4],[-1,-5],[-4,2],[-8,7],[-2,3],[2,4],[2,3],[0,11],[1,3],[2,3],[2,4],[2,1],[1,-2],[0,-2],[5,0],[9,9],[4,0],[5,-2],[6,2],[1,1],[1,2],[-4,2],[-4,2],[-12,1],[-2,-1],[-3,-5],[-2,1],[0,2],[-4,2],[-2,0],[-2,-3],[0,-3],[-1,-4],[-3,-4],[-3,-7],[0,-5],[0,-2],[-1,-2],[-1,-1],[-6,1],[-4,5],[-1,4],[-4,3],[8,5],[3,3],[3,6],[2,4],[-2,3],[-1,0],[0,-5],[-2,-3],[-4,1],[-5,-5],[-4,2],[-5,-2],[-3,3],[-1,3],[1,4],[-1,6],[-1,2],[-2,0],[-1,3],[-1,7],[-1,2],[-1,3],[1,1],[2,-1],[1,-2],[3,0],[6,-5],[2,1],[1,1],[1,4],[0,3],[1,0],[3,-4],[2,0],[4,-1],[2,1],[3,1],[5,5],[3,5],[2,1],[1,-1],[1,-1],[0,-4],[2,-3],[1,-3],[1,-3],[-1,-3],[-3,-4],[0,-2],[1,-1],[1,0],[2,2],[1,3],[0,2],[0,2],[0,3],[-2,8],[-1,1],[0,4],[3,3],[1,2],[0,5],[-1,4],[-6,7],[-11,8],[-1,-1],[-1,-1],[1,-1],[2,-1],[9,-6],[2,-4],[2,-1],[2,-2],[-1,-4],[-9,-3],[-7,-8],[-6,-4],[-3,1],[-2,5],[-2,6],[-3,3],[-2,0],[-1,1],[-1,2],[-2,-2],[-5,4],[-1,2],[3,6],[4,-2],[1,16],[-1,4],[-5,4],[-3,-1],[-3,1],[-2,2],[-3,1],[-2,1],[-3,2],[-3,2],[-5,10],[-2,6],[-1,6],[7,0],[4,1],[1,2],[-1,5],[-2,4],[1,3],[2,3],[2,-1],[6,-6],[1,-4],[4,-13],[1,-1],[0,-1],[8,-7],[2,0],[-1,6],[2,8],[3,2],[1,0],[0,2],[-2,3],[1,5],[-1,0],[-2,-3],[-4,-14],[-2,-3],[-4,7],[-1,4],[-1,2],[0,7],[7,-2],[-3,3],[-7,4],[-2,2],[-2,1],[-2,5],[-3,4],[5,7],[3,5],[9,-2],[1,1],[-1,4],[-2,-1],[-3,2],[-4,7],[0,4],[1,7],[2,1],[3,1],[4,-2],[2,-1],[2,0],[-2,5],[-3,2],[-2,4],[0,4],[1,3],[1,3],[0,5],[0,4],[1,2],[1,1],[0,1],[-3,0],[-1,-5],[0,-4],[-2,-4],[-1,-4],[0,-5],[-1,-5],[-2,2],[-2,2],[0,1],[0,3],[0,18],[0,14],[1,12],[3,4],[1,2],[2,-1],[2,0],[1,2],[-5,2],[-2,-1],[-2,-2],[-4,1],[-1,6],[-2,5],[0,7],[0,9],[5,-1],[4,-2],[11,1],[9,-9],[4,1],[0,2],[-3,2],[-2,5],[-1,1],[-1,3],[0,4],[-2,13],[-1,0],[-1,-5],[-2,-7],[-2,-4],[-4,-1],[-4,-1],[-4,1],[0,3],[0,4],[-2,2],[-4,1],[-1,1],[-1,3],[2,5],[1,3],[2,-1],[2,-1],[2,-4],[2,0],[3,3],[0,2],[-1,1],[-2,0],[-2,2],[-4,6],[2,6],[5,7],[2,1],[-2,6],[2,6],[-2,5],[-3,6],[-3,1],[-1,-2],[0,-2],[0,-2],[0,-1],[-1,0],[-5,2],[-3,3],[-6,4],[0,2],[-1,4],[2,7],[-1,0],[-4,-5],[-5,-3],[-4,-1],[-2,-2],[0,-2],[1,-1],[2,0],[2,-6],[-1,-3],[-1,-2],[-1,0],[-4,5],[-2,5],[0,4],[1,5],[6,7],[2,4],[4,3],[4,8],[4,4],[-2,4],[-2,5],[1,7],[8,3],[4,-1],[4,0],[3,2],[2,1],[4,2],[1,3],[1,2],[0,2],[-1,2],[0,6],[0,2],[2,3],[2,1],[1,-1],[3,-2],[-1,-3],[-1,-4],[-2,-15],[-1,-4],[-2,-3],[2,-6],[-2,-4],[-8,-5],[-1,0],[1,-2],[4,0],[4,1],[3,4],[1,6],[2,12],[1,2],[3,0],[1,-3],[-1,-6],[0,-6],[-3,-17],[-3,-8],[0,-1],[0,-3],[2,1],[3,3],[1,5],[2,7],[-1,5],[1,3],[0,10],[1,5],[0,7],[-1,3],[-3,1],[-1,5],[2,8],[5,0],[4,6],[4,2],[1,-1],[7,-5],[1,0],[0,2],[-1,1],[-3,2],[-4,6],[-6,1],[1,8],[1,7],[3,1],[5,2],[9,11],[2,8],[0,9],[-4,3],[-5,6],[-4,3],[-3,4],[0,6],[1,9],[4,2],[2,14],[-3,10],[1,7],[4,7],[0,4],[1,5],[4,1],[0,2],[-1,5],[-2,6],[0,8],[2,10],[4,-1],[-2,6],[-2,6],[0,3],[2,2],[2,1],[2,-3],[4,-10],[0,2],[-1,11],[-1,13],[-4,-2],[-3,1],[-1,2],[-1,3],[1,3],[1,3],[2,3],[5,2],[4,4],[1,9],[-1,-1],[-2,-8],[-3,-3],[-2,1],[-2,1],[-4,7],[-2,1],[-2,1],[-1,-2],[-5,-12],[-2,-2],[-8,-1],[-2,2],[-3,1],[0,3],[1,3],[2,2],[0,2],[-3,0],[-3,3],[-1,5],[0,7],[-3,11],[0,9],[1,6],[4,23],[1,12],[2,10],[0,7],[6,6],[2,4],[4,21],[1,12],[-7,34],[-2,7],[0,8],[2,14],[0,5],[-1,7],[-4,12],[-1,7],[2,6],[-1,8],[0,5],[1,4],[7,-2],[2,1],[2,2],[1,7],[1,10],[0,4],[1,7],[3,2],[1,6],[2,9],[3,23],[3,6],[2,7],[-1,10],[2,5],[2,3],[1,6],[2,6],[4,8],[2,10],[3,18],[1,11],[1,8],[0,7],[2,9],[2,7],[0,4],[5,9],[1,8],[-2,5],[0,8],[-1,12],[3,4],[1,3],[4,18],[0,7],[1,8],[-3,11],[0,23],[-2,18],[-2,18],[0,11],[-1,13],[0,8],[1,17],[7,11],[2,12],[1,16],[-1,12],[0,5],[-4,9],[-1,16],[1,4],[3,4],[2,6],[1,10],[2,7],[1,18],[2,15],[1,5],[3,6],[1,2],[0,5],[0,11],[0,7],[3,13],[0,7],[3,14],[0,10],[1,5],[0,6],[1,14],[-2,7],[-1,5],[3,13],[1,4],[3,6],[1,7],[0,5],[-3,23],[-1,7],[1,18],[1,12],[0,9],[0,5],[1,6],[2,7],[0,5],[0,3],[-3,2],[-2,7],[0,6],[0,5],[1,7],[3,1],[1,4],[2,7],[2,17],[1,21],[1,12],[1,6],[1,13],[1,9],[0,8],[0,6],[-3,30],[0,11],[1,18],[0,24],[0,6],[-1,5],[-1,7],[-1,13],[-2,25],[0,14],[-1,11],[-1,3]],[[3044,4127],[1,1],[2,0],[3,0],[4,3],[3,4],[3,7],[1,6],[0,5],[-1,6],[-1,5],[2,2],[3,1],[3,5],[2,3]],[[8079,6335],[2,-2],[1,-4],[0,-7],[1,-6],[-3,-4],[-2,-2],[-5,-15],[-1,-5],[-1,-2],[-1,-2],[0,-2],[-1,-8],[-1,-9],[-1,-3],[-1,-3],[-2,-2],[-1,0],[-1,-1],[-3,-5],[-3,-3],[1,-2],[0,-2],[-2,-1],[-1,0],[-4,-2],[-2,-2],[-2,-6],[-3,-1],[-2,-1],[-3,4],[-2,1],[-4,1],[-4,3],[-3,3],[-6,6],[-1,13],[-1,6],[0,3],[0,20],[1,3],[0,2],[3,4],[3,4],[5,8],[3,3],[3,5],[-2,0],[-1,0],[1,5],[1,2],[2,1],[3,-1],[2,1],[2,4],[2,1],[7,-1],[5,1],[3,4],[1,0],[3,-1],[2,-4],[0,3],[0,2],[5,-5],[0,6],[0,1],[2,3],[1,0],[1,-5],[2,-2],[2,-2]],[[8065,6399],[1,-2],[3,1],[1,-2],[0,-2],[-1,-2],[-3,2],[-2,-1],[-1,0],[-1,2],[1,3],[2,1]],[[8128,6430],[-3,-1],[1,3],[2,2],[0,-4]],[[8132,6428],[0,-1],[-1,2],[0,3],[-1,2],[1,2],[1,2],[2,-1],[-1,-3],[0,-1],[-1,-5]],[[8154,6497],[0,-2],[-2,4],[-1,0],[-1,1],[-1,3],[2,0],[2,-3],[1,-3]],[[8282,6595],[-1,-4],[-2,1],[0,2],[0,1],[1,2],[0,1],[2,-2],[0,-1]],[[8328,6650],[-3,-3],[-1,2],[0,3],[1,3],[-1,3],[1,3],[1,0],[1,-1],[1,-1],[0,-1],[0,-2],[-1,-3],[1,-2],[0,-1]],[[8367,6802],[-2,-2],[-1,0],[0,4],[2,4],[1,-1],[0,-2],[0,-3]],[[8393,6893],[0,-1],[-3,4],[-1,1],[1,2],[1,0],[2,-4],[0,-2]],[[8399,6906],[0,-3],[-1,0],[-1,5],[1,1],[1,0],[0,-3]],[[8396,6910],[0,-1],[-4,3],[-3,1],[-2,2],[0,5],[4,0],[5,-4],[1,-2],[-1,-4]],[[8384,6998],[-2,-2],[-7,5],[-5,5],[-3,7],[-1,3],[4,-1],[3,-2],[1,-4],[1,-1],[1,-2],[7,-5],[1,-1],[0,-2]],[[8625,7634],[-1,2],[-1,0],[-3,3],[-2,3],[-1,4],[0,7],[0,1],[-3,2],[0,2],[-1,1],[-2,-1],[-1,1],[-1,1],[-2,0],[-1,-1],[0,-5],[-2,-6],[0,-4],[-1,-6],[-1,-8],[0,-1],[-2,0],[-1,-1],[-1,-2],[-1,-1],[-1,2],[-2,1],[-1,0],[-2,-1],[-2,-3],[0,-3],[-1,-2],[0,-3],[-2,-3],[-1,-2],[-4,-4],[-1,-2],[-2,0],[-2,0],[-4,-1],[-5,0],[-4,0],[-4,0],[-3,-2],[0,-2],[0,-3],[0,-2],[1,-1],[1,-4],[2,-4],[2,-3],[1,-3],[0,-2],[-1,-3],[-2,-5],[-1,-2],[-1,0],[-2,1],[-1,2],[-3,1],[-6,-1],[-3,1],[-2,1],[-2,0],[-5,2],[-2,1],[-1,1],[-1,3],[-1,2],[0,3],[-2,3],[-1,2],[-2,0],[-1,-2],[-2,-1],[-1,0],[-1,0],[0,-2],[-3,-3],[-1,-2],[-1,-6],[-1,-6],[0,-2],[-1,0],[-1,-2],[-3,-6],[-2,-5],[-3,-3],[-1,-3],[-1,-3],[-2,-4],[-3,-1],[-3,-1],[-1,0],[-2,-2],[0,-2],[-1,-1],[-1,0],[-2,-2],[-3,-5],[-3,-1],[-3,-3],[-4,-3],[-1,-1],[0,-2],[-1,-1],[-1,-1],[-2,0],[-3,-4],[-2,-4],[-6,-8],[-3,-4],[0,-6]],[[8454,7488],[-1,0],[-2,-5],[-4,-4],[-10,-1],[-3,3],[-1,-2],[-1,-4],[-3,-1],[-4,0],[-2,-2],[-1,-2],[-5,-1],[-2,-3],[-4,-1],[-14,-14],[-3,-5],[-3,-7],[-2,-3],[-1,-3],[-2,-1],[-2,-2],[-1,0],[-2,1],[-2,-1],[-1,-2],[1,-4],[-1,-2],[-3,-2],[-6,-1],[-2,-2],[-1,-2],[-1,0],[-1,4],[-1,7],[3,1],[2,1],[11,8],[-1,7],[1,3],[2,4],[2,2],[-1,1],[-7,-1],[-5,0],[-2,0],[1,4],[-1,4],[0,2],[4,4],[1,1],[2,0],[0,3],[-2,4],[2,5],[8,6],[1,5],[4,6],[5,12],[1,3],[1,6],[1,2],[-3,3],[-1,5],[-8,9],[-1,8],[-1,-6],[-1,-2],[-4,0],[-2,2],[-10,2],[-2,-4],[-3,-5],[-2,-4],[-2,-2],[-2,-3],[-8,-21],[-3,-2],[-15,-12],[-7,-5],[-5,-9],[-2,-5],[-2,-6],[-1,-8],[-5,-11],[-2,-2],[-2,-1],[-2,0],[-2,-1],[-4,1],[-4,-3],[-5,-3],[-4,7],[-3,2],[-5,-2],[-2,-3],[-5,-16],[-1,-10],[0,-3],[2,-12],[3,-7],[7,-7],[15,-5],[3,2],[4,0],[4,-5],[2,-8],[1,-5],[0,-2],[1,-2],[0,-3],[-1,-2],[-2,-1],[-1,-9],[0,-9],[2,-3],[3,-4],[5,-4],[4,-1],[9,2],[3,6],[0,2],[0,3],[8,8],[4,8],[-1,2],[0,1],[0,1],[3,0],[10,8],[9,-6],[4,-7],[5,-2],[3,-3],[4,-4],[5,0],[4,0],[1,2],[2,2],[1,0],[2,-4],[4,-3],[5,0],[3,2],[2,-2],[-3,-5],[0,-8],[-2,-2],[-2,-4],[2,-3],[1,-1],[-1,-3],[-1,-2],[-3,-5],[-2,0],[-1,1],[-1,2],[0,3],[-1,2],[-4,0],[-3,0],[-7,-7],[-7,-6],[-8,-5],[-2,-2],[-2,-1],[-3,2],[-2,0],[0,-2],[2,-4],[1,-3],[-1,-2],[-1,-1],[-2,2],[-2,-3],[-1,-4],[0,-10],[-1,-2],[-3,-1],[-4,-4],[-1,2],[0,2],[0,4],[0,2],[-2,0],[-2,-1],[-2,-3],[-1,-2],[3,-6],[2,0],[0,-2],[-1,-2],[-5,-5],[-1,-3],[-1,-4],[-2,-2],[-1,-3],[-2,-2],[-2,-1],[-3,-7],[-3,-7],[-2,-3],[-2,-11],[-4,-6],[-2,-9],[1,-6],[4,0],[3,-2],[4,-7],[5,-5],[5,-3],[7,-7],[2,-3],[1,-6],[3,-18],[2,-8],[1,-5],[3,-8],[3,-15],[4,-13],[0,-9],[-1,-5],[0,-6],[4,-5],[8,-7],[2,-2],[1,-3],[0,-9],[2,-3],[1,-2],[5,-4],[2,-3],[2,-6],[1,-5],[0,-6],[-3,0],[-2,0],[-9,9],[-2,0],[-4,-1],[-4,1],[-6,10],[-3,3],[-4,1],[-9,-8],[-3,1],[0,-1],[-1,-2],[4,-1],[4,2],[4,4],[6,-2],[1,-3],[1,-6],[5,-4],[3,-2],[4,-5],[4,-9],[9,-9],[3,-9],[1,-6],[2,-8],[-3,-3],[-3,0],[-4,-2],[-3,-3],[-3,-5],[-9,-8],[-1,-5],[-2,-5],[-2,-2],[-5,2],[-5,0],[-6,-6],[-1,-2],[1,0],[1,1],[2,-1],[4,3],[4,-10],[8,2],[7,8],[2,0],[3,-1],[2,-3],[7,-14],[4,-2],[4,-3],[2,-1],[1,-1],[-5,-5],[-6,-11],[-3,-3],[-2,-3],[5,2],[4,5],[2,1],[1,-1],[1,-7],[-1,-20],[-2,0],[-2,5],[-2,2],[-2,-1],[-3,0],[-1,-3],[-1,-3],[2,-1],[4,-6],[0,-4],[-1,-2],[-3,1],[4,-4],[-1,-5],[-1,-2],[-2,-1],[-2,-5],[2,-6],[2,-9],[0,-5],[-3,2],[-4,-5],[-2,-1],[-2,7],[-2,-1],[-1,-2],[-2,-7],[-2,-7],[-2,-2],[-2,0],[-2,0],[1,-2],[2,-2],[0,-3],[-4,-8],[-1,-3],[0,-3],[-2,-4],[1,-5],[-1,-4],[-2,-6],[-1,-3],[-3,-6],[-3,-3],[-4,-13],[-1,-6],[0,-6],[-1,-2],[-2,-3],[-3,2],[0,4],[-1,0],[0,3],[-1,3],[1,3],[-1,-1],[-1,-3],[-2,-3],[-1,1],[-2,3],[0,-4],[1,-3],[0,-3],[3,-1],[2,-3],[1,-6],[0,-2],[1,-2],[0,-2],[-2,-2],[-3,-4],[-4,-6],[-2,-4],[-3,-1],[-2,1],[-2,2],[-2,1],[3,-8],[2,-2],[2,1],[3,3],[3,0],[1,-5],[-1,-6],[-2,-7],[0,-6],[2,-9],[0,-3],[-1,-1],[-2,2],[-3,3],[-2,-1],[-2,2],[-2,-1],[-1,-2],[0,-4],[2,-3],[2,-4],[-2,-1],[-6,1],[-1,-1],[-2,-5],[1,-7],[-1,-4],[-2,-1],[-3,-4],[-2,-1],[0,-1],[1,-2],[1,-2],[-2,-7],[-2,-2],[-5,1],[-3,-2],[-3,3],[-3,0],[-2,-4],[0,-4],[-2,-1],[-1,1],[-1,-1],[0,-2],[1,-2],[4,-1],[0,-3],[1,-5],[-5,-8],[-2,-5],[-2,0],[-2,-4],[-1,-6],[-2,1],[-3,-1],[-1,-3],[1,-1],[0,-2],[-1,-7],[-2,-2],[0,3],[-1,4],[-1,1],[-2,-4],[-2,-3],[-2,-1],[-1,2],[-3,2],[-2,-11],[-2,-4],[-2,-2],[-2,0],[1,-2],[1,-2],[-1,-3],[-2,-1],[-2,-2],[0,-10],[-2,-4],[-3,0],[-3,2],[0,-1],[-1,-2],[-1,-2],[-3,0],[-6,-5],[-2,1],[-4,2],[-2,-2],[-1,-3],[-1,-3],[-3,0],[-2,4],[-3,2],[-3,-2],[-2,-4],[-3,-2],[0,-2],[-1,-2],[-3,1],[-1,7],[-2,0],[-2,-3],[0,-2],[-1,-2],[0,-6],[-1,0],[-2,4],[-3,0],[-2,-3]],[[8173,6482],[-1,1],[-1,1],[-2,0],[0,-1],[-2,-1],[-1,-1],[0,-1]],[[8166,6480],[-2,2],[-3,4],[-2,7],[-3,4],[-1,4],[0,6],[-1,3],[1,3],[0,3],[-2,-2],[-3,-2],[1,-4],[-1,-3],[-3,-2],[0,-1],[1,-1],[2,-5],[1,-3],[1,-2],[1,-6],[0,-11],[1,-3],[0,-3],[-1,-4],[0,1]],[[8153,6465],[-1,0],[-1,-2],[0,-1]],[[8151,6462],[-1,-1],[-2,-1],[-1,-1],[-2,-3],[-3,-1],[-1,8],[-3,-5],[0,-11],[-1,-1],[-2,-2],[-2,4],[-3,-3],[-1,-2],[-1,-2],[-1,-3],[-3,3],[-2,3],[1,3],[-1,2],[-1,1],[-1,0],[1,-4],[0,-6],[-1,-2],[-1,-2],[-3,1],[-2,3],[-3,2],[-2,0],[-1,-4],[-1,-3],[-2,-1],[-1,1],[-2,-4],[-1,-3],[-2,-2],[-6,-2],[-2,-3],[-2,1],[-2,-1],[-2,0],[-1,2],[-1,0],[-1,-5],[-3,-2],[-3,0],[-3,-7],[-2,-3],[-2,-1],[-2,2],[0,5],[-1,1],[0,-5],[-1,-5],[-1,-2],[-4,-5],[-1,-6],[1,-5],[5,-1],[1,-3],[-1,-2],[-1,-2],[-1,-3],[6,-8],[0,-4],[-1,-2],[-1,-4],[-3,-3],[-6,-2],[-5,2],[-2,4],[1,3],[1,-1],[1,0],[0,3],[-1,1],[-2,2],[-2,7],[0,5],[-1,4],[-1,3],[-1,2],[-1,3],[2,7],[-1,5],[2,6],[1,6],[4,2],[0,6],[-3,0],[-2,5],[0,-2],[-2,0],[-3,8],[0,1],[-2,0],[1,-9],[-3,-3],[-2,-1],[-4,-1],[-2,-1],[-2,1],[1,2],[1,4],[-1,2],[-2,2],[-3,0],[-2,1],[-2,0],[-1,1],[-2,4],[-2,3],[0,2],[0,3],[0,2],[-3,0],[0,-4],[0,-5],[1,-4],[-1,-2],[-1,-2],[-2,4],[-1,2],[-1,-1],[0,-4],[-2,-3],[-3,0],[-2,-2],[-3,-1]],[[7998,6423],[-1,3],[-3,5],[-1,0],[-4,-2],[-4,-1],[-2,2],[-2,-2],[-2,6],[-3,1],[-3,4],[-1,2],[0,4],[-1,2],[-2,-1],[-1,2],[-2,2],[-2,1],[-1,-1],[-1,0],[0,2],[0,7],[0,6],[-1,3],[-1,2],[-1,1],[0,3],[0,6],[1,4],[1,1],[2,3],[1,4],[1,4],[-4,5],[-2,2],[-3,-1],[-3,-1],[-2,-1],[0,1],[-2,5],[-1,1],[-2,0],[-2,0],[-1,-2],[-2,-1],[-2,0],[-1,3],[-3,3],[-4,3],[0,3],[-1,3],[-2,3],[-2,4],[-2,2],[-1,-1],[-2,-2],[-5,-5],[-3,-2],[-1,-2],[-1,-2],[0,-5],[-1,-6],[-1,-2],[-2,-3],[-1,0],[-2,0],[-1,-1],[-5,-5],[-2,0],[-1,3],[-1,3],[-2,-1],[-2,-3],[-2,-5],[0,-4],[-1,-2],[-1,-1],[-8,13],[0,1],[-2,-3],[-1,-7],[-1,-1],[-1,0],[-3,9],[-1,1],[-1,-3],[-2,-4],[-2,-3],[0,-3],[-2,-2],[-2,-3],[-1,1],[-2,3],[-1,4],[-3,3],[-4,3],[-2,3],[-1,0],[-2,-1],[0,-1],[-1,-4],[-2,-6],[-2,-4],[-2,-3],[-1,-2]],[[7836,6473],[-1,2],[-2,1],[-2,0],[-3,-3],[-2,6],[-1,0],[-1,0],[-1,-1],[0,-4],[-1,-4],[-1,-3],[-2,-1],[1,-3],[0,-3],[0,-2],[1,-4],[1,-4],[2,-6],[1,-3],[0,-3],[1,-10],[-1,-4],[0,-8],[0,-4],[1,-3],[1,-2],[0,-1],[0,-1],[-2,-3],[-1,0],[-1,1],[-1,1],[-1,1],[-1,2],[-3,0],[-4,-3],[-1,1],[-1,1],[0,3],[0,4],[-1,2],[0,2],[0,6],[-1,3]],[[7809,6426],[0,1],[-1,7],[0,2],[-1,1],[-2,-1],[-5,-5],[-4,-9],[-2,-1],[-2,-1],[-3,1],[-2,1],[-4,-2],[-2,1],[-1,2],[-1,3],[1,3],[0,2],[-2,2],[-2,1],[-1,3],[0,4],[0,4],[1,5],[-1,3],[-3,1],[-6,2],[-6,1],[-2,0],[-2,0],[-1,1],[-1,2],[0,2],[1,5],[1,5],[3,8],[0,5],[0,6],[1,7],[2,6],[1,2],[0,3],[-1,2],[-1,2],[-2,1],[-4,1],[-4,1],[-6,4],[1,6],[0,4],[-1,4],[-1,2],[0,3],[1,6],[-2,6],[-1,3],[-2,3],[0,4],[1,3],[4,7],[0,2],[-1,0],[-1,0],[-5,-3],[-1,2],[-2,1],[-3,0],[-5,0],[-5,-3],[-5,-5],[-2,-3],[-2,-2],[-2,0],[-2,1],[0,4],[4,9],[0,5],[-1,5],[0,4],[-1,3],[-2,1],[-1,2],[0,9],[2,8],[2,2],[2,2],[0,1],[-1,6],[1,4],[1,7],[1,5],[3,-1],[1,2],[2,2],[1,3],[1,4],[1,9],[1,1],[4,-1],[1,1],[2,5],[1,6],[3,2],[2,0],[1,3],[0,3],[-2,5],[-1,4],[0,2],[3,1],[0,3],[0,7],[1,7],[1,9],[0,7],[0,5],[0,5],[-1,10],[-1,8],[0,3],[0,10],[0,9],[-2,1],[-3,3],[-1,1],[-1,-1],[-1,-3],[-1,-3],[-1,1],[-1,2],[-1,4],[-3,18],[0,5],[-1,5],[-1,2],[-1,2],[-2,6],[-2,2],[-2,0],[-1,0],[-1,3],[-1,4],[-1,1],[-2,1],[-1,0],[-1,-3],[-1,-2],[-1,-4],[-2,-6],[-1,-2]],[[7703,6809],[-1,1],[-4,6],[-2,2],[-3,-2],[-4,1],[-2,1],[-3,4],[-1,1],[-5,-3],[-1,-2],[-1,0],[-1,1],[-1,1],[0,1],[1,3],[0,1],[0,2],[2,4],[5,10],[-1,3],[-2,8],[0,3],[-1,2],[-2,-1],[-6,-7],[0,1],[0,2],[-1,7],[2,2],[2,2],[2,3],[1,3],[-1,0],[-3,-1],[-1,2],[-2,6],[-1,3],[-1,1],[-4,-3],[-5,-5],[-6,-6],[0,-3],[0,-1],[-1,-2],[-1,-3],[-1,-1],[-1,0],[-2,1],[-4,3],[-4,3],[-1,-1],[-5,2],[0,2],[-1,3],[-2,2],[-1,1],[-5,-5],[-4,-5],[-3,-4],[-3,-5],[-2,-1],[0,-3],[-1,-3],[-2,-3],[-4,-4],[-3,-3],[-8,-2],[-3,-1],[-2,-2],[-1,-6],[-1,-5],[-2,-5],[-5,-5],[-5,-5],[-1,-3],[0,-2],[0,-1],[1,-1],[0,-2],[-1,-2],[-3,-4],[-2,-2],[-2,-2],[-2,0],[-2,1],[-1,0],[-2,-1],[-1,-1],[-4,-4],[-2,0],[-2,1],[-3,1],[-2,0]],[[7468,6757],[-1,3],[-2,4],[0,5],[2,14],[0,6],[0,2],[-1,6],[-1,2],[-4,3],[-1,0],[-2,-2],[-1,-1],[-1,-2],[-5,-2],[-3,-1],[-1,-1],[-1,-2],[1,-2]],[[7447,6789],[-3,1],[-2,0],[-2,0],[-5,-4],[-2,0],[-2,0],[-2,0],[-5,0],[-4,1],[-4,5],[-2,3],[-2,2],[-3,1],[-1,3],[-1,1],[-2,0],[-1,-1],[-1,-7],[-1,-1],[-2,-1],[-3,2],[-3,4],[-1,4],[-1,1],[-2,-2],[0,-5],[0,-3],[-2,-2],[-1,1],[-1,4],[-2,8],[-3,5],[-2,4],[-7,-1],[-6,1],[-2,2],[-1,3],[1,6],[1,5],[0,2],[-1,0],[-2,1],[-6,-4],[-1,1],[-1,1],[-2,1],[-1,1],[0,3],[-5,5],[-2,3],[-3,4],[-2,2],[-2,7],[-1,7],[-1,4],[-2,2],[-2,1],[-4,-3],[-4,-2],[-2,0],[-3,7],[-3,7],[-4,7],[-2,3],[-4,1],[-4,4],[-6,8],[-4,6],[-8,7],[-2,3],[0,3],[-1,5],[-2,5],[-5,2],[-6,1],[-6,-3],[-5,-14],[-2,-3],[-2,0],[-1,3],[-1,4]],[[7250,6921],[-1,4],[-3,3],[-4,5],[-2,3],[-2,2],[-1,0],[-4,3],[-4,3],[-2,0],[0,3],[0,4],[0,4],[-1,2],[-2,0]],[[7224,6957],[-5,6]],[[7219,6963],[0,0]],[[7219,6963],[-1,2],[-2,3],[-4,-1],[-3,-1],[-2,3],[-2,4],[-1,1]],[[7204,6974],[-1,1]],[[7203,6975],[-3,8],[-3,10],[-2,1],[-1,-1],[-1,-5],[-1,1],[-1,-1],[-2,-1],[-1,-1],[-1,1],[0,1],[0,6],[-1,3],[1,4],[1,4],[-1,3],[-2,4],[0,4],[1,4]],[[7186,7020],[0,5],[0,1],[-1,2],[-5,11],[-1,2],[0,3],[-1,6],[0,4],[-1,3],[0,1],[0,1],[4,1],[2,0],[2,1],[1,-2],[1,-3],[0,-2],[2,-3],[2,-3],[3,0],[2,1],[1,5],[1,2],[2,0]],[[7200,7056],[0,3]],[[7200,7059],[0,8],[0,4],[-1,3],[1,3],[-1,4],[-1,4],[-1,1],[0,2],[0,3],[0,3]],[[7197,7094],[0,3],[0,1]],[[7197,7098],[-1,1],[-2,2],[-2,4],[-1,2],[-1,2],[-2,4],[0,9],[0,9],[-1,5],[-1,7],[0,2],[1,2],[5,6],[1,2],[0,2],[0,3],[-1,2],[-2,3],[-3,3],[-2,4],[-5,2],[-5,3],[-1,3],[-1,6],[-3,11],[-2,11],[-2,6],[0,3],[1,9],[0,1],[-1,1],[-2,-1],[-1,-1],[-1,0],[-1,2]],[[7161,7228],[-1,0]],[[7160,7228],[-2,-1],[-4,0],[-1,0],[-2,0],[-5,2],[-5,3],[-6,3],[-3,3]],[[7132,7238],[-1,1],[-3,3],[-2,2],[0,7],[-2,-1],[-3,-2],[-4,-2],[-2,0],[0,1],[-2,7],[-1,2],[-1,1],[-2,1],[-1,2],[0,2],[1,3],[1,2],[0,12],[-1,5],[0,3],[-2,5],[-1,3],[-2,2],[-3,3],[-2,1],[-4,-2],[-1,1],[-1,8],[-1,2],[-5,3],[-3,1],[-3,-1],[-1,-1],[-2,2],[-2,2],[-2,1],[-2,0],[-2,-1]],[[7080,7328],[0,1],[3,3],[2,3],[1,2],[-1,4],[-3,4],[-2,3],[0,2],[0,5],[1,4],[-1,2],[0,2],[0,5],[-2,7],[-1,4],[-1,5],[0,4],[2,8],[-1,3],[-1,3],[-7,5],[-6,4],[-3,-1],[-1,1],[-2,-3],[-1,-4],[-2,-1],[-3,2],[-2,2],[-1,6],[-1,7],[-1,2],[1,2],[0,1],[2,2],[0,1],[0,2],[-1,3],[-2,3],[-2,7],[0,4],[1,6],[0,3]],[[7045,7456],[2,1],[3,1],[1,3],[1,2],[0,2],[0,6],[-2,3],[0,2],[1,2],[1,3],[1,6],[2,3],[0,1],[2,1],[5,1],[4,3],[6,7],[2,3],[2,1],[2,0],[0,1],[-1,4],[0,2],[1,2],[1,0],[4,-2],[3,0],[3,1],[8,9],[1,0],[1,-1],[1,-6],[1,-10],[0,-2],[6,0],[4,4],[1,1],[3,-1],[1,2],[2,2],[1,-5],[2,2],[3,4],[1,3],[1,4],[2,5],[0,4],[1,3],[1,2],[3,9],[3,3],[2,1],[5,-2],[3,0],[8,-1],[4,2],[3,2],[4,-1],[4,2],[7,12],[0,2],[0,3],[2,2],[3,3],[6,6],[11,9],[4,3],[2,0],[4,3],[7,4],[2,6],[2,1],[9,1],[0,1],[0,4],[-1,4]],[[7227,7614],[1,1],[1,1],[0,3],[-2,7],[-1,7],[0,6],[0,2],[1,4],[1,4],[5,3],[3,1],[1,2],[-3,2],[-2,2],[0,1],[0,2],[0,1],[4,2],[3,3],[3,-2],[1,1],[0,3],[0,2],[-1,4],[-2,2],[0,3],[1,4],[-1,8],[-2,7],[-3,12],[-2,3],[-1,6],[-1,3],[0,4],[1,3],[-1,6],[0,6],[0,7],[1,4],[0,2],[1,1],[1,1],[1,1],[-1,2],[-2,1],[-3,3],[-4,-1],[-4,0],[-1,2],[-2,2],[0,1],[2,4],[3,3],[5,2],[5,2],[3,2],[3,1],[4,1],[2,-1],[5,2],[9,5],[7,4],[3,2],[1,-2],[1,-5],[2,-3],[3,-1],[1,0],[3,2],[4,1],[2,0],[2,-3],[2,-2],[2,0],[1,2],[1,3],[0,5],[0,4],[0,3],[-1,1],[-3,2],[-4,3],[0,2],[0,2],[1,4],[2,8],[2,12],[1,8],[4,14],[3,13],[5,20],[1,4],[0,6],[1,3],[1,1],[3,-1],[7,-5],[5,-4],[3,-1],[3,-1],[5,-2],[3,1],[3,1],[3,0],[5,-1],[2,-1],[2,0],[2,-2],[0,-4],[1,-2],[2,1],[5,4],[2,3],[4,4],[3,1],[4,1],[1,2],[1,5],[3,4],[0,4],[-1,4],[-1,5],[0,4],[-1,11],[-1,10],[1,8],[2,8],[0,3],[2,3],[1,5],[2,1],[7,1],[6,2],[3,2],[3,1],[1,1],[4,6],[1,4],[1,9],[-1,5],[1,4],[2,2],[2,2],[1,1],[3,0],[5,0],[3,-1]],[[7425,8011],[3,0],[1,0],[1,2],[2,1],[2,1],[3,1],[2,-1]],[[7439,8015],[0,-2],[0,-2],[0,-3],[1,-2],[0,-2],[-2,-1],[-1,-2],[0,-2],[1,-2],[1,-3],[3,-1],[2,-2],[1,-2],[0,-2],[-1,-2],[-1,-2],[0,-1],[0,-2],[2,0],[3,-2],[4,-2],[3,-4],[3,-1],[1,-4],[1,-6],[3,-3],[4,-4],[2,0],[2,-3],[2,-2],[2,-1],[2,-1],[4,3],[4,0],[2,-1],[2,-6],[2,-1],[1,-2],[1,-1],[2,-1],[2,2],[1,2],[2,-1],[1,-1],[0,-3],[1,-3],[3,-3],[3,-1],[0,-1],[1,-4],[1,-2],[1,-3],[1,-6],[0,-4],[1,-3],[2,-4],[2,-6],[2,-6],[2,-1],[2,-2],[2,-4],[2,-8],[0,-5],[0,-3],[1,-2],[0,-2],[-2,-8],[-1,-4],[0,-3],[1,-5],[1,-5],[0,-4],[-1,-3],[-2,-3],[-1,-2],[-2,-2],[-2,-7],[-1,-8],[0,-4],[1,-3],[1,-3],[0,-3],[3,-6],[1,-4],[1,0],[1,1],[2,0],[3,-1],[2,-3],[3,-1],[3,0],[2,-2],[2,-1],[5,0],[3,0],[5,0],[4,-2],[7,-2],[4,0],[6,2],[3,-1],[11,-2],[6,-2],[4,-3],[3,-4],[3,-6],[2,-3],[7,-2],[4,-7],[4,-3],[6,-7],[4,-2],[6,-3],[8,1],[0,-1],[0,-4],[-1,-5],[0,-4],[1,-2],[3,-1],[2,-2],[1,-3],[1,-2],[2,-11],[5,-16],[0,-7],[1,-4],[5,-6],[3,-5],[3,-5],[1,-4],[1,-6],[1,-2],[6,2],[6,1],[10,1],[15,-3],[14,-3],[13,-2],[7,-2],[14,-2],[8,3],[7,3],[2,0],[12,-4],[7,-1],[9,-2],[6,-1],[6,0],[2,-1],[2,-1],[2,-2],[4,-10],[3,-5],[5,-3],[12,-4],[6,-2],[7,-3],[5,-4],[6,-4],[7,-6],[8,2],[9,3],[5,2],[0,-13],[8,-1],[2,0],[3,-2],[2,1],[2,3],[2,4],[4,2],[5,5],[2,1],[8,7],[12,8],[6,4],[2,1],[3,2],[2,2],[4,1],[5,0],[6,2],[12,3],[2,0],[7,2],[3,1],[4,-1],[6,0],[4,-1],[5,0],[8,1],[5,0],[3,1],[5,3],[2,3],[5,3],[5,3],[4,3],[3,2],[3,1],[1,3],[1,2],[1,2],[3,6],[2,5],[2,2],[2,5],[2,3],[3,5],[2,2],[3,1],[7,5],[2,1],[1,0],[2,4],[3,3],[1,3],[3,1],[1,2],[1,2],[-1,3],[-1,4],[-1,3],[-4,6],[-3,4],[-2,5],[-1,5],[-2,3],[0,2],[0,3],[2,6],[1,3],[1,6],[2,9],[1,4],[2,4],[4,5],[4,1],[2,-1],[5,0],[4,0],[2,-3],[3,-5],[3,-2],[9,-4],[5,-1],[2,0],[5,-2],[1,0],[2,-1],[2,1],[3,4],[3,4],[2,1],[3,1],[1,2],[3,5],[3,3],[3,5],[2,4],[1,3],[0,3],[1,1],[3,2],[2,0],[5,-2],[7,0],[2,1],[6,1],[3,1],[4,1],[3,5],[4,5],[3,3],[1,0],[3,3],[1,4],[0,2],[-1,3],[2,4],[2,8],[3,3],[2,3],[1,5],[2,1],[2,1],[2,3],[2,1],[4,-2],[5,0],[3,0],[1,0],[1,2],[0,2],[1,6],[0,2],[1,1],[3,0],[2,-2],[2,-2],[2,0],[2,1],[2,5],[5,3],[2,0],[5,3],[2,-1],[5,-1],[2,1],[2,-1],[2,3],[1,1],[4,-1],[2,-3],[3,-3],[5,-1],[4,0],[4,-1],[2,0],[1,1],[4,3],[1,4],[-1,3],[1,4],[-1,3],[-2,4],[-1,2],[0,4],[-2,4],[-3,4],[-2,2],[-4,7],[-1,2],[-1,1],[0,2],[-2,1],[-2,2],[-1,2],[-1,3],[0,3],[-2,1],[-2,1],[-2,2],[-3,2],[-2,3],[-3,7],[-2,3],[-7,0],[-3,2],[-3,0],[-2,-1],[-3,0],[-2,-1],[-3,-5],[-3,-6],[-3,-3],[-2,-4],[-1,-2],[-2,1],[-2,5],[-4,3],[-3,2],[-2,1],[-3,1],[-3,0],[-4,-2],[-4,1],[-2,0],[-2,0],[-5,-4],[-2,-4],[-2,-2],[-3,3],[-3,4],[-2,4],[-2,4],[-1,11],[3,3],[4,4],[1,5],[0,7],[0,7],[4,6],[2,6],[0,3],[2,5],[2,6],[2,8],[5,14],[5,16],[2,8]],[[8240,8054],[6,-5],[4,-3],[6,-4],[6,-1],[7,-4],[3,-1],[1,0],[9,10],[7,9],[9,7],[6,1],[5,1],[3,4],[2,5],[0,7],[-1,4],[-3,2],[-1,1],[2,2],[1,3],[1,4],[1,4],[3,4],[2,5],[0,4],[2,5],[3,5],[1,5],[1,4],[1,5],[5,9],[2,10],[5,7],[8,7],[4,7],[2,7],[0,7],[-2,5],[0,6],[1,5],[-1,5],[-4,2],[-4,1],[-6,-1],[-3,1],[0,5],[1,4],[4,3],[5,8],[8,11],[8,7],[12,2],[9,4],[10,4],[6,1],[2,-1],[3,0],[7,1],[6,1],[5,3],[4,1],[4,-2],[1,0],[2,0],[2,1],[3,-2],[7,-6],[5,-3],[2,1],[2,-2],[2,-4],[3,-2],[4,-1],[5,-5],[2,0],[1,2],[2,2],[2,0],[5,-2],[5,-5],[4,-2],[1,1],[1,-1],[2,-2],[0,-3],[-1,-1],[2,-3],[1,0],[3,-1],[2,-4],[1,-2],[1,-1],[1,-2],[0,-1],[-1,-1],[0,-2],[0,-2],[0,-2],[4,-2],[1,-1],[0,-2],[1,-2],[2,-3],[1,-2],[-1,-2],[1,-1],[1,-2],[0,-4],[0,-2],[2,-3],[0,-5],[1,-6],[4,-9],[2,-4],[-1,-6],[1,-2],[2,-1],[1,-3],[-1,-3],[1,-2],[1,-2],[-1,-4],[1,-3],[1,-1],[0,-4],[1,-4],[2,-6],[5,-10],[3,-7],[2,-4],[0,-5],[-2,-3],[0,-2],[1,-2],[1,-2],[-1,-2],[2,-3],[5,-5],[-2,-8],[0,-6],[0,-6],[1,-4],[3,-2],[1,-3],[1,-2],[3,-3],[5,-3],[6,-1],[8,2],[5,1],[2,-2],[1,-2],[-1,-2],[1,-2],[4,-1],[2,-2],[1,-2],[2,-1],[2,1],[1,0],[2,-1],[1,0],[1,2],[2,0],[1,0],[1,-4],[2,-2],[2,-1],[3,-4],[7,-13],[5,-5],[4,-2],[6,0],[1,-5],[-1,-5],[0,-5],[1,-1],[2,-6],[2,-3],[0,-2],[2,-3],[-1,-5],[-2,-7],[1,-6],[3,-6],[2,-5],[0,-4],[1,-3],[1,-1],[3,0],[6,2],[4,0],[2,-3],[7,0],[10,2],[6,1],[3,-1],[2,3],[2,7],[2,3],[2,0],[3,2],[4,5],[4,3],[4,-1],[5,0],[3,2],[2,4],[5,4],[10,5],[3,1],[1,0],[3,-1],[3,-2],[3,-4],[0,-2],[0,-4],[-1,-2],[-1,-2],[-1,-3],[1,-3],[1,-6],[2,-4],[1,-5],[0,-2],[-1,-3],[-3,-6],[-2,-2],[-1,-2],[-3,-1],[-1,0],[-2,-1],[0,-2],[-1,-2],[-2,-3],[0,-2],[1,-4],[0,-4],[-2,-3],[-1,-5],[-1,-2],[0,-4],[-1,-1],[0,-9],[-2,-5],[-2,-7],[0,-4],[1,-4],[-1,-1],[0,-2],[0,-3],[-1,-2],[-3,-2],[-1,-3],[0,-4],[0,-3],[-1,-3],[-2,-2],[-1,-2],[-1,-1],[-1,-4],[0,-3],[-1,-3],[1,-3],[-1,-2],[-3,-2],[-1,-1],[-1,-1],[-2,-3],[-2,-10],[-1,-6],[1,-5],[-3,-3],[-2,-3],[-2,1],[-1,1],[-3,1],[-2,1],[-3,2],[-5,2],[-5,2],[-3,2],[-3,1],[-2,1],[-1,4],[-2,-2],[-1,-3],[-3,-2],[-1,-4],[-1,-3],[-2,-5],[-2,-1],[-5,-3],[-1,-1],[-4,0],[-1,-2],[-1,-2],[-1,-3],[1,-2],[2,-6],[0,-4],[2,-7],[3,-23],[-1,-4],[-1,-17],[0,-3],[0,-5],[0,-3],[1,-1],[1,-1],[0,-3],[0,-3],[0,-2],[-1,-5],[-1,-6],[-1,-3],[-1,-2],[-1,-1],[0,-5],[0,-3],[-2,-1],[-2,-2],[-2,1],[-1,-1],[-3,-1],[-4,-1],[-2,-2],[-1,-2],[-1,-1],[0,-2],[0,-1],[3,0],[1,-3],[0,-3],[-1,-2]],[[4914,5479],[-1,-2]],[[4913,5477],[-4,1],[1,2],[4,-1]],[[4925,5730],[0,-3],[-1,-5],[0,-2],[1,-2],[0,-3],[-2,-7],[0,-3],[2,-1],[1,-4],[1,-7],[0,-2],[0,-2],[1,-16],[2,-16],[-1,-3],[-1,0],[-1,-1],[0,-1],[0,-3],[0,-2],[-2,-1],[-3,-5],[0,-2],[-1,-5],[-1,-3],[-1,-5],[-2,-13],[0,-11],[0,-3],[-1,-3],[-1,-3],[-4,-9],[-1,-8],[0,-3],[0,-4],[-1,-2],[1,-7],[0,-5],[1,-6],[2,-15],[2,-9],[0,-7],[1,-5],[1,-2],[0,-2],[4,-2],[1,-1],[1,-9],[0,-5],[-1,-1],[0,-4],[0,-5],[-1,-1],[-2,-1],[-1,-1],[-2,0]],[[4916,5479],[-1,1],[-1,1],[-3,2],[1,9],[-1,0],[-1,-1],[-2,-10],[-1,-2],[-15,6],[-3,4],[-4,1],[-7,-1],[-5,-1],[-2,-3],[14,2],[2,0],[0,-2],[-17,-3],[-7,-2],[-2,0],[-1,4],[-7,0],[-2,-1],[-1,-3],[3,1],[5,0],[1,-2],[-14,-2],[-10,-5],[-4,-3],[-13,-11],[-9,-5],[-2,-2],[-4,-5],[-4,-4],[-6,-6],[-3,-2]],[[4790,5434],[-1,2],[0,11],[0,15],[0,5],[0,5],[0,4],[2,2],[0,2],[1,5],[1,5],[0,9],[1,2],[0,3],[-1,5],[-1,11],[0,1],[0,-1],[-1,0],[-4,4],[-2,1],[-2,3],[0,4],[-1,2],[-1,4],[-1,5],[-2,3],[-3,1],[-1,-1],[-2,0],[-3,2],[-1,2],[-2,3],[-1,3],[-1,0],[-2,0],[-1,2],[0,1],[5,11],[2,6],[0,3],[0,3],[1,4],[0,5],[-3,20],[-1,6],[-1,1],[0,1]],[[4764,5619],[1,3],[3,-1],[3,-2],[1,2],[2,10],[0,3],[0,3],[1,7],[1,2],[1,3],[0,4],[-1,1],[-1,0],[-2,1],[-2,2],[-1,2],[1,9],[0,3],[0,1],[2,1],[3,0],[3,-1],[2,0],[1,0],[1,-3],[2,-3],[1,0],[0,2],[0,9],[-1,5],[-2,4],[-4,4],[0,5],[0,6],[1,2],[3,4],[0,2],[-1,2],[-2,2],[0,7],[0,6],[-2,-1],[-2,0],[-1,2],[-1,4],[-1,10],[0,12],[0,5],[1,3],[1,3],[2,3],[1,2]],[[4778,5769],[3,1],[1,3],[2,6],[3,5],[2,0],[1,1],[1,0],[1,-3],[2,-3],[1,-4],[5,-2],[2,-1],[2,-4],[1,0],[0,1],[1,1],[0,1],[-1,3],[1,3],[0,3],[2,0],[2,0],[2,0],[2,0],[0,2],[0,7],[0,4],[0,3],[1,2],[2,-4],[2,-2],[2,0],[1,1],[-1,4],[0,1],[1,1],[1,1],[3,1],[0,-7],[0,-2],[1,-5],[1,-4],[0,-2],[-1,-3],[-1,-2],[0,-1],[1,-2],[3,-2],[2,0],[1,3],[2,2],[0,1],[1,3],[1,2],[4,3],[4,0],[1,-1]],[[5449,5315],[0,-1],[0,-3],[-2,-2],[-1,-4],[0,-5],[0,-6],[2,-7],[0,-4],[-1,0],[-1,-2],[0,-1],[-3,5],[-2,3],[-4,6],[-4,2],[-5,1],[-2,-1],[-2,2],[-2,2],[-1,1],[-2,-2],[-1,0],[-2,1],[-3,0],[0,3],[0,1],[-3,-1],[-1,3],[-1,0],[-1,1],[-3,3],[-2,-2],[-6,0],[-7,0],[-7,0],[-7,0],[-6,0]],[[5369,5308],[-1,4],[-1,2],[-3,0],[-7,-1],[-6,1],[-1,0],[-2,1],[-5,1],[-6,-1],[-1,1],[-5,-1],[-10,1],[-6,0],[0,-2],[-1,-2],[0,-3]],[[5314,5309],[-6,0],[-9,0],[-8,0],[-5,0],[-9,0],[-3,2],[-1,2],[0,2],[-1,1],[0,1]],[[5272,5317],[0,13],[2,11],[0,11],[2,9],[-1,9],[-1,4],[-6,14],[3,5],[-4,-1],[0,5],[-2,6],[1,0],[1,4],[3,-1],[0,1],[-3,5],[1,3],[1,2],[-1,2],[-2,-3],[-1,0],[-1,2],[-1,0],[0,-4],[-1,-3],[-1,-1],[-1,0],[-2,1],[0,2],[-2,1],[-3,3],[-4,2],[0,8],[-1,4],[-1,4],[0,4],[0,7],[-1,1],[-1,1],[-1,-1],[-1,1],[-2,3],[-1,2],[1,-7],[-1,-2],[-2,1],[-1,2],[0,2],[1,9],[-1,0]],[[5237,5458],[1,4],[1,6],[3,6],[2,9],[2,16],[1,9],[1,9],[1,8],[2,5],[5,10],[4,8],[2,3],[1,3],[2,2],[3,4],[2,7],[1,6],[1,2],[2,1],[4,6],[3,5],[1,-2],[0,-3],[1,-1],[2,-1],[4,0],[2,1],[1,2],[1,6],[0,1],[1,1],[4,-5],[3,-6],[3,-6],[1,-2],[1,-2],[1,-11],[1,-3],[1,-1],[3,0],[2,2],[2,3],[2,4],[2,3],[0,3],[1,9],[0,2],[2,3],[4,6],[2,4],[0,1],[-2,4],[-1,4],[2,4],[1,3],[4,11],[0,4],[1,4],[3,12],[2,17],[0,3],[2,8],[3,10],[5,2],[2,2],[2,5],[2,4],[0,4],[1,7],[1,9],[0,8],[2,7],[2,3],[4,3],[1,2],[1,4],[0,10],[0,6],[1,2],[0,5],[4,8],[2,12],[1,13],[5,15],[5,15],[3,5],[2,1],[2,1],[2,1],[6,7],[2,3],[2,3],[0,2],[1,3],[-1,8],[1,6],[1,9],[0,7],[0,3],[-1,3],[-1,1],[-1,4],[-3,3],[-4,1],[-2,1],[-1,4],[0,2],[0,2],[0,5],[-3,27]],[[5390,5937],[5,0],[6,-3],[2,-3],[0,-9],[3,-5],[3,-4],[3,-9],[1,-14],[2,-8],[0,-1],[3,-11],[0,-4],[1,-7],[-1,-5],[2,-5],[-2,-10],[-1,-6],[0,-9],[1,-15],[2,-12],[2,-9],[2,-8],[3,-8],[4,-7],[3,-5],[-3,-3],[-6,0],[-4,2],[-1,0],[-2,-1],[-6,-2],[-7,1],[-6,2],[-4,0],[-3,-5],[-2,-7],[-2,-5],[0,-6],[2,-3],[3,-7],[3,-7],[2,-5],[5,-10],[6,-10],[1,-1],[1,-2],[1,0],[3,-6],[4,-8],[4,-14],[3,-14],[2,-13],[2,-2],[1,-2],[1,-3],[-1,-4],[0,-3],[-2,-5]],[[5761,5478],[1,-4],[1,-4],[5,-7],[1,-4],[2,-4],[0,-4],[2,-2],[2,-2],[2,-2],[1,-3],[1,-3],[4,-5],[1,0],[2,0],[1,-1],[2,0],[3,3],[3,4],[2,3],[6,-1],[4,-2],[2,-3],[2,0],[5,6],[2,6],[2,2],[4,-3],[3,-6],[2,-9],[2,-3],[2,-6],[5,-11],[6,-5],[3,-3],[1,-3],[0,-4],[0,-4],[1,-1],[2,0],[1,1],[2,-1],[1,-3],[0,-3],[1,-2]],[[5856,5385],[2,-2],[0,-3],[-1,-4],[-1,-3],[-2,-7],[0,-7],[1,-2],[1,-2],[0,-2],[0,-3],[0,-2],[-2,-10],[-1,-8],[0,-5],[3,-3],[3,0],[2,-2],[1,-3],[1,-1],[1,0],[1,-1],[1,-3],[1,-2],[1,-3],[0,-3],[0,-2],[-3,-7],[-6,-14],[-13,-26],[-4,-3],[-3,-5],[-1,-7],[-4,-6],[-3,-3],[0,-2],[0,-6],[0,-10],[-1,-5],[-2,-9],[-1,-6],[-1,-1],[-1,-3],[-1,-9],[0,-3],[-1,-19],[0,-5],[-1,-9],[0,-5],[-1,-6],[0,-5],[0,-9],[0,-13],[0,-2]],[[5821,5104],[-1,-1],[-2,-4],[-2,-2],[-1,-1],[-3,-6],[-2,-5],[-1,-6],[0,-2],[0,-8],[0,-8],[0,-4],[-1,-2],[-3,-4],[-2,-4],[-1,-1],[-1,-3],[1,-6],[0,-5],[1,-3],[2,-2]],[[5816,4928],[0,-3],[-1,-10],[-1,-10],[0,-3],[1,-5],[2,-11],[1,-8],[1,-5],[1,-6],[1,-9],[1,-4],[0,-3],[-3,-11],[-1,-3],[1,-9],[1,-8],[1,-5],[4,-12],[2,-5],[5,-6],[4,-6],[1,-4],[2,-4],[2,-9],[2,-8],[1,-7],[2,-10],[2,-8],[3,-11],[2,-8],[1,-5]],[[5854,4712],[-5,-2],[-7,-2],[-8,-2],[-8,-3],[-8,-2],[-7,-3],[-7,-2],[-2,-1],[1,-6],[0,-6],[-2,-5],[-2,-6],[-1,-3],[-2,-4],[-2,-4],[-3,-5],[-3,-4],[0,-2],[4,-14],[2,-10],[1,-8],[0,-6],[0,-10],[-1,-12],[0,-5],[1,-9],[0,-7],[-3,-7],[0,-8],[-2,-10],[-2,-14],[-1,-8],[1,-4],[1,-4],[0,-4],[2,-7],[1,-3],[1,-2],[6,-8],[2,-4],[3,-8],[3,-5],[3,-2],[5,-2],[2,-1],[1,1],[1,1],[0,4],[0,3],[0,2],[2,2],[3,0],[2,2],[1,1],[0,-9],[0,-8],[0,-10],[0,-12],[0,-10],[0,-10],[0,-11],[0,-2],[0,-2],[-2,-1],[-2,2],[0,3],[-1,4],[0,2],[-2,1],[-2,-1],[-2,-4],[-4,-2],[-1,-2],[-3,0],[-3,2],[-2,3],[0,6],[-2,5],[-2,8],[-2,3],[-1,4],[-2,0],[-1,1],[-2,6],[-1,7],[0,2],[-1,4],[-2,2],[-3,3],[-5,3],[-6,5],[-3,0],[-3,1],[-2,3],[-1,1],[-1,7],[-2,8],[-5,9],[-1,10],[-1,2],[-2,-1],[-1,-1],[-1,-3],[-1,-9],[-1,-5],[0,-1],[-2,-1],[-1,-1],[-3,-1],[-4,0],[-4,2],[-3,1],[-7,1],[-2,1],[-2,2],[-2,2],[-7,4],[-3,0],[-1,3],[-2,1],[-1,3],[-1,4],[-1,9],[0,4],[1,6],[-1,1],[-1,0],[-2,-2],[-3,-1],[-6,-2],[-1,-1],[-3,-1],[-1,-1],[-4,-5],[-2,-1],[-2,2],[-2,3],[2,3],[0,4],[-1,7],[-1,3],[-4,2],[-1,1],[-1,4],[-1,3],[-2,1],[-1,1]],[[5362,4846],[-1,2],[-4,-1],[-2,-2],[-3,-5],[-5,-2],[-2,0],[-1,1],[-2,5],[-3,5],[0,3]],[[5363,4917],[0,2],[1,0],[1,-1],[0,-2],[2,-3],[2,-4],[2,-3],[1,-1],[2,2],[2,3],[3,2],[1,2],[0,4],[0,4],[0,5],[1,1],[1,0],[2,-1],[1,-2],[2,0],[1,2],[2,2],[2,1],[3,3],[2,3],[1,0],[2,-4],[1,-3],[0,-1],[-1,-4],[-1,-4],[1,-6],[0,-5],[0,-3],[1,-2],[1,0],[2,0],[2,-2],[2,1],[2,2],[4,8],[5,14],[5,9],[3,3],[2,5],[2,4],[2,4],[4,2],[3,3],[4,10],[4,17],[1,16],[1,9],[0,33],[-1,11],[1,5],[2,4],[4,9],[3,7],[2,8],[5,19],[1,6],[1,2],[3,5],[4,4],[4,4],[8,13],[6,13],[-1,16],[1,13],[3,16],[1,18],[-1,18],[1,15],[3,18],[1,6],[0,11],[0,17],[4,23],[4,14],[4,15],[2,10],[2,12],[-1,10]],[[5333,4896],[0,1],[-1,1],[-2,6],[-2,6],[-1,3],[0,1],[0,7],[-3,7],[-8,14],[-1,4],[-6,12]],[[5309,4958],[1,9],[2,4],[1,3],[6,7],[1,0],[4,-9],[1,-1],[2,0],[2,0],[0,2],[1,2],[-2,3],[0,2],[1,3],[1,4],[1,4],[0,2],[-1,2],[-3,3],[-2,3],[-1,3],[1,3],[1,3],[0,2],[-1,3],[-1,3],[-1,1],[-3,1],[1,4],[1,6],[0,4],[-1,12],[0,2],[1,1],[2,-1],[1,-2],[5,2],[1,1],[2,-2],[2,-2],[10,5],[0,4],[1,5],[0,3],[0,2],[-1,2],[0,3],[0,4],[1,1],[3,5],[1,-1],[3,-2],[2,-3],[2,-8],[1,-7],[2,-7],[5,-4],[6,-2],[2,1],[5,7],[2,5],[1,3],[1,-2],[2,-7],[1,-2],[0,-3],[0,-3],[0,-2],[3,-2],[3,2],[1,3],[2,3],[0,3],[-1,2],[0,3],[1,2],[1,6],[0,5],[1,2],[2,2],[1,2],[1,10],[0,4],[0,3],[1,4],[0,6],[-1,11],[0,7],[0,8],[1,10],[1,10],[0,3],[-2,3],[-2,3],[-4,2],[-2,4],[-1,4],[-1,1],[-4,2],[-2,2],[1,7],[0,9],[0,7],[1,5],[1,4],[2,4],[1,5],[1,2],[4,1],[1,2],[1,2],[1,3],[1,4],[1,4],[1,2],[-1,3],[-1,6],[-1,5],[-1,1],[-2,12],[-2,3],[-3,1],[-6,2],[-3,-3],[-6,-3],[-4,-3],[-3,-2],[-1,1],[-1,1],[1,2],[0,4],[0,5],[-1,4],[-1,7],[0,8],[1,7],[3,10],[0,4]],[[563,3960],[-1,0],[-1,0],[-1,1],[0,2],[1,0],[1,0],[1,-1],[0,-2]],[[2830,5330],[-1,-1],[-1,2],[-1,3],[1,2],[1,0],[1,-2],[0,-4]],[[3019,5867],[-1,-1],[-2,-1],[-3,-3],[-6,-3],[-6,-3],[-2,-4],[-6,-23],[-6,-5],[-2,-4],[-1,-4],[-3,-8],[-2,-6],[-3,-14],[-2,-17],[-1,-10],[-1,-13],[-2,-7],[-2,-7],[-2,-6],[-2,-7],[-2,-6],[0,-2],[1,-1],[4,1],[1,2],[2,2],[2,-1],[1,-6],[2,-1],[1,1],[2,-2],[2,-15],[1,-12],[4,-8],[3,-6],[1,-6],[1,-8],[0,-3],[-1,-3],[-2,-4],[0,-9],[0,-3],[-1,-9],[1,-5],[0,-4],[2,-2],[2,-1],[3,-2],[1,-7],[2,-8],[3,-4],[3,-3],[2,1],[5,2],[5,0],[6,-3],[3,0],[3,1],[6,4],[2,1],[2,0],[3,-3],[2,-2],[2,-2],[4,-1],[2,0],[2,0],[1,-1],[5,-13],[5,-12],[4,-10],[4,-11],[2,1],[1,-1],[2,-2],[2,1],[3,4],[4,1],[5,-3],[8,0],[9,3],[6,2],[2,3],[3,0],[5,-3],[2,-3],[0,-4],[1,-5],[-1,-6],[-2,-5],[-2,-7],[0,-9],[-2,-6],[-2,-5],[-1,-6],[0,-8],[0,-11],[-1,-15],[0,-10],[1,-3],[0,-4],[0,-5],[1,-5],[1,-7],[2,-13],[2,-5],[1,-2],[2,-3],[4,-13],[1,-2],[0,-3],[-1,-2],[0,-1],[-5,-8],[-9,-17],[0,-2],[0,-3],[2,2],[3,-2],[1,0],[1,-2],[1,-4],[1,-1],[1,-2],[3,-5],[2,-5],[2,-2],[1,-3],[0,-3],[0,-3],[1,-8],[1,-2],[0,-3],[0,-3],[1,-3],[1,-7],[2,-8],[0,-5],[1,-2],[0,-6],[2,-6],[-1,-4],[1,-4]],[[3056,4940],[-1,4],[-2,4],[-2,3],[-1,3],[-1,6],[-2,2],[-1,2],[-1,0],[-1,-2],[-2,-1],[-1,0],[-5,5],[-1,0],[3,10],[6,18],[3,12],[4,13],[2,6],[0,2],[0,1],[0,3],[-2,1],[-3,2],[-1,3],[-2,1],[-1,2],[-3,3],[-2,2],[-2,0],[-1,4],[-6,7],[-2,1],[-1,-1],[-3,-2],[-2,-3],[-3,-2],[-3,0],[-1,3],[-1,1],[-2,3],[-3,2],[-2,2],[-2,-1],[-2,-4],[-1,-3],[-2,-2],[-2,0],[-2,-3],[-2,-1],[-3,-1],[-2,-1],[-3,2],[-3,2],[-1,0],[-1,0],[-1,-2],[-3,-1],[-2,0],[-1,1],[-2,3],[-2,2],[-2,2],[-1,4],[0,3],[1,4],[0,4],[-1,7],[-1,3],[0,3],[-1,1],[-3,-1],[-2,3],[-2,2],[-1,3],[1,6],[-1,5],[-1,3],[-1,5],[-2,4],[-2,2],[-1,0],[-2,1],[-2,4],[-1,2],[-2,4],[-4,1],[-2,2],[-1,2],[-1,5],[0,2],[-1,3],[0,4],[-1,6],[-2,4],[-1,3],[-1,2],[-2,3],[-2,2],[-2,3],[-1,3],[0,2],[-1,0],[-2,0],[-1,1],[-2,2],[-1,2],[-2,4],[-2,0],[-1,0],[-2,-3]],[[2908,5178],[-5,4],[-4,5],[-4,2],[-3,3],[-3,6],[-1,4],[-1,2],[-6,5],[-1,1],[-2,-3],[-1,-1],[0,-5],[0,-2],[-2,-2],[-3,1],[-2,1],[-2,0],[0,-1],[-1,0],[-1,0],[-3,1],[-2,2],[-3,3],[-2,0],[-3,1],[-3,1],[-1,2],[-1,12],[-1,1],[-1,1],[-2,2],[-1,1],[-1,4],[-1,3],[-3,-1],[-6,5],[-4,4],[-4,4],[-5,9],[-2,2],[-3,3],[-1,4],[-3,4],[-1,2]],[[2809,5268],[-1,4],[-3,5],[1,8],[5,5],[6,-4],[1,9],[-2,7],[0,15],[1,3],[1,3],[2,3],[1,1],[3,-1],[1,2],[5,-1],[1,1],[1,2],[1,2],[2,3],[1,4],[1,2],[1,-1],[0,2],[1,2],[3,6],[0,2],[-1,5],[1,2],[1,1],[2,1],[1,5],[2,4],[1,6],[2,1],[1,7],[2,6],[5,19],[-2,0],[-1,-3],[-1,1],[-1,1],[0,9],[-1,1],[-2,-7],[-2,7],[0,4],[1,4],[-1,2],[-3,-2],[1,3],[1,3],[1,2],[2,3],[1,5],[0,6],[1,8],[-1,3],[-1,3],[0,14],[0,8],[-1,6],[0,6],[-4,7],[6,8],[2,6],[-3,12],[-3,11],[0,6],[1,-1],[1,0],[1,13],[0,5],[-2,6],[-3,0],[-2,9],[-1,1],[-1,6],[-3,10],[-3,5]],[[2836,5600],[2,12],[2,3],[0,3],[-1,7],[1,2],[0,1],[1,-1],[2,-3],[1,-4],[1,-2],[1,2],[5,8],[0,2],[0,5],[2,4],[2,2],[0,2],[0,4],[-2,8],[-2,5],[-1,5],[0,4],[-2,4],[0,4],[2,5],[0,1]],[[2850,5683],[1,-2],[3,-8],[3,-5],[4,-9],[2,-6],[1,-1],[1,-2],[-1,-2],[-1,-1],[0,-4],[1,-2],[1,-1],[2,1],[1,4],[-1,17],[-1,9],[-2,3],[-1,4],[1,2],[2,1],[3,4],[12,17],[4,15],[3,6],[3,4],[4,-1],[4,2],[1,5],[-1,7],[-2,4],[2,6],[1,9],[0,8],[1,5],[0,1],[-2,-3],[-2,-2],[1,3],[3,8],[2,11],[1,5],[5,7],[0,3],[4,5],[6,11],[2,3],[11,-7],[3,0],[-1,-1],[-1,-1],[-3,-1],[0,-5],[1,-4],[2,-1],[1,3],[2,8],[2,8],[1,10],[1,3],[3,1],[4,-2],[3,-2],[3,0],[10,1],[17,24],[7,6],[5,5],[3,9],[1,8],[2,3],[3,0],[1,2],[0,2],[6,6],[3,1],[3,0],[6,-6],[3,-10],[1,-6],[-4,-8],[-1,-3]],[[6216,4475],[2,-4],[-6,2],[-1,3],[0,2],[2,0],[3,-3]],[[6235,4488],[1,-8],[0,-6],[0,-2],[-2,1],[-2,5],[-4,5],[2,0],[1,0],[1,0],[1,3],[0,1],[1,2],[1,-1]],[[6207,4498],[-1,0],[-2,3],[-2,1],[-2,5],[1,18],[1,3],[0,1],[1,0],[2,-2],[-1,-12],[2,-8],[1,-6],[0,-3]],[[4324,6039],[-2,-2],[-1,1],[-2,3],[0,3],[0,3],[3,3],[2,-1],[1,-5],[-1,-5]],[[4356,6056],[-1,-1],[-1,3],[0,4],[0,1],[1,3],[2,0],[0,-3],[0,-6],[-1,-1]],[[4348,6048],[-1,-5],[-4,0],[-2,3],[-2,6],[0,5],[1,5],[0,4],[0,1],[1,-1],[0,-3],[4,-6],[1,-1],[2,-8]],[[4363,6119],[2,-1],[1,0],[2,0],[1,-3],[1,-3],[-1,-4],[-3,-3],[-2,0],[-2,3],[1,6],[0,5]],[[4330,6141],[2,-1],[0,-2],[-2,0],[-4,2],[-1,-1],[-1,-5],[-2,7],[0,3],[3,-1],[5,-2]],[[4364,6143],[-1,-3],[-1,5],[-1,1],[0,6],[2,2],[0,-6],[1,-5]],[[4308,6152],[-2,-1],[-1,0],[-2,2],[0,3],[2,2],[2,0],[1,-4],[0,-2]],[[4300,6160],[-2,-1],[-1,0],[-1,5],[0,3],[0,1],[6,6],[2,-1],[2,-5],[-1,-2],[-5,-6]],[[2676,5813],[1,-3],[1,-3],[0,-5],[4,-15],[3,-9],[6,-16],[2,-3],[5,-12],[1,-3],[1,-3],[5,-3],[1,-3]],[[2706,5735],[0,-1],[0,-1],[-1,-1],[-1,-1],[-2,3],[-2,2],[-1,-1],[-1,-3],[-1,-2],[-1,-1],[0,-1],[0,-11],[0,-11],[1,-1],[3,-3],[1,-3],[1,-2],[-1,-1],[-2,-2],[-2,-3],[-1,-4],[2,-6],[1,-4],[-1,-4],[0,-2],[-4,-5],[-1,-2],[1,-1],[2,-4],[1,-3],[0,-4],[1,-3]],[[2698,5649],[-2,6],[-3,6],[-2,4],[0,9],[-1,4],[-4,5],[-3,3],[-2,-1],[1,-5],[4,-6],[0,-3],[0,-3],[-2,0],[-2,2],[-3,0],[-2,2],[-3,8],[2,7],[1,4],[0,9],[-1,4],[-2,7],[-5,7],[-6,6],[-3,5],[-7,3],[-3,3],[-2,4],[0,4],[1,5],[-2,6],[-9,12],[-5,5],[-1,3],[-1,1],[1,-9],[2,-5],[6,-5],[1,-3],[1,-4],[-3,-7],[-2,-1],[-1,-4],[-1,-1],[-1,2],[-4,11],[-9,5],[-1,3],[-3,10],[-2,10],[1,6],[3,9],[1,4],[0,3],[0,4],[-1,2],[-4,4],[-2,2],[1,2],[4,4],[0,3],[0,1]],[[2618,5821],[1,0],[0,1],[0,1],[1,3],[1,2],[1,0],[2,-1],[4,-3],[6,-4],[7,-6],[3,4],[3,2],[2,0],[4,-3],[2,-1],[2,0],[2,-4],[2,-4],[0,-2],[1,-1],[2,-1],[5,-2],[3,1],[2,2],[2,3],[0,5]],[[2706,6426],[-2,-3],[-6,-4],[-3,0],[-3,1],[-2,4],[-1,4],[0,1],[2,-3],[2,-1],[1,1],[1,1],[-3,12],[0,2],[2,7],[7,-2],[1,-1],[1,-4],[1,-3],[2,-9],[0,-3]],[[2842,6448],[-1,-2],[-1,3],[-1,0],[-1,1],[-2,3],[-1,3],[2,0],[2,0],[4,-2],[0,-3],[-1,-3]],[[2836,6458],[-1,0],[-2,3],[-1,2],[1,2],[0,3],[1,-3],[2,-2],[1,-3],[-1,-2]],[[2832,6467],[0,-1],[-2,3],[-2,1],[-1,3],[-1,1],[-1,1],[2,1],[2,0],[1,-3],[1,-4],[1,-2]],[[2816,6483],[3,-1],[2,0],[1,0],[1,0],[2,-5],[-1,0],[-2,0],[-1,0],[-3,1],[-2,1],[-2,1],[0,2],[2,1]],[[2796,6489],[0,-1],[-5,4],[-2,4],[-1,1],[1,0],[6,-7],[1,-1]],[[2726,6518],[8,-3],[6,1],[2,2],[0,-2],[3,-4],[1,0],[4,2],[9,1],[1,-2],[2,-3],[3,-3],[2,-2],[3,0],[3,1],[2,-1],[4,-4],[1,0],[2,1],[0,-3],[4,-5],[4,-10],[3,-4],[2,-3],[3,-3],[2,-1],[8,1],[2,-1],[2,-1],[1,0],[1,0],[15,-15],[5,-8],[3,-4],[6,-6],[3,-1],[1,1],[0,1],[-2,3],[0,2],[2,-1],[4,-7],[2,-3],[2,-2],[2,-2],[-1,-2],[-2,0],[-3,1],[2,-5],[1,-3],[1,0],[2,3],[1,3],[5,-7],[2,-4],[0,-2],[0,-2],[2,2],[1,0],[1,-1],[2,-3],[2,-1],[3,0],[5,-3],[6,-5],[4,-1],[5,0],[3,-3],[1,-4],[-1,-3],[-1,-2],[2,-4],[-4,-1],[-1,-3],[0,-2],[1,-1],[3,1],[3,-1],[5,-1],[3,1],[7,-2],[3,-2],[4,-4],[2,-3],[4,-8],[3,-3],[4,-1],[1,1],[1,-1],[1,-1],[0,-4],[0,-4],[-2,-2],[-1,-3],[-4,0],[-6,-1],[-6,-3],[-3,-3],[-2,-1],[-3,-2],[0,1],[0,2],[-1,3],[-1,-3],[-1,-2],[-2,-1],[-7,-1],[-3,3],[-3,1],[-11,2],[-2,0],[-8,-2],[-7,-1],[-3,-1],[-3,-1],[-6,0],[-7,-2],[-7,-1],[4,13],[10,13],[2,3],[1,3],[0,3],[0,2],[-2,4],[-1,3],[-1,2],[-3,1],[-3,1],[-4,1],[-7,1],[-4,0],[-3,3],[-6,9],[-2,3],[-2,2],[-1,2],[-1,14],[-1,7],[-2,6],[-2,5],[-3,1],[-10,-4],[-2,1],[-3,1],[-15,9],[-6,5],[-3,3],[-2,3],[-2,6],[-3,5],[0,-2],[0,-1],[-13,-1],[-2,1],[-2,2],[-1,2],[0,4],[-1,3],[-1,-3],[0,-4],[-2,-2],[-2,0],[-3,5],[-10,0],[-1,1],[-3,5],[-3,5],[3,2],[6,3],[1,2],[1,2],[-1,3],[-1,2],[-1,2],[-2,1],[-1,0],[-24,1],[-1,-2],[-2,-4],[-4,-4],[-3,-5],[-1,-3],[-1,-2],[-3,-3],[-2,-4],[-3,-2],[-2,1],[-2,0],[-1,-1],[-1,-1],[-6,0],[-1,-1],[-1,-4],[-1,-6],[0,-2],[-3,-1],[-3,-2],[-6,-6],[-2,-1],[1,5],[-1,4],[-1,0],[-2,-1],[-2,-1],[-2,-3],[-2,-1],[-1,2],[0,2],[10,8],[1,0],[1,0],[2,0],[1,2],[-1,11],[0,7],[3,5],[4,9],[2,2],[22,18],[2,1],[14,3],[3,1],[6,5],[7,3],[7,-2]],[[3090,5878],[-2,0],[-5,5],[-4,9],[0,5],[1,-1],[1,-1],[2,-7],[5,-4],[2,-6]],[[2739,6298],[1,-1],[1,1],[1,1],[4,-1],[1,-2],[-4,0],[-1,-2],[-1,0],[-3,0],[0,6],[1,0],[0,-2]],[[2778,6319],[-1,0],[-2,-2],[-1,0],[1,1],[0,1],[1,0],[1,1],[1,0],[0,-1]],[[2782,6319],[-1,-1],[-1,1],[2,2],[1,1],[1,0],[1,0],[0,-1],[-3,-2]],[[5944,7204],[-1,-1],[-2,2],[-1,0],[-1,-1],[-1,-1],[-1,-1],[-1,0],[-1,-1],[-2,0],[-2,1],[-2,-2],[0,6],[-1,2],[-1,1],[-2,0],[-2,0],[-2,1],[-3,-2],[-2,-2],[-2,-1],[-2,0],[-2,1],[-2,2],[0,2]],[[5908,7210],[2,-1],[3,1],[1,6],[0,6],[6,-2],[5,-1],[4,0],[4,1],[13,7],[3,4],[2,2],[4,3],[4,2],[-2,-4],[-15,-17],[-1,-6],[1,-3],[2,-4]],[[5944,7204],[1,-2],[0,-3],[-3,-1],[-3,0],[-2,0],[-1,0],[-6,-9],[-2,-4],[-4,-2],[-3,-1],[-2,0],[-1,-1],[-1,-2],[0,-2],[-1,-2],[-2,0],[0,4],[-2,1],[-3,-1],[-1,1],[-6,3],[-1,1],[-1,3],[-3,10],[0,8],[2,-2],[2,2],[3,4],[2,1],[2,0]],[[5411,8113],[2,0],[3,2],[0,2],[0,5],[4,-1],[3,-2],[1,-4],[1,-3],[1,-2],[1,0],[2,-1],[5,-2],[2,-1],[3,-1],[2,-2],[1,-1],[1,-2],[1,-1],[2,1],[6,1],[2,-1],[1,-3],[1,0],[-1,-2],[-1,-2],[-2,-1],[-1,-2],[-1,-2],[0,-2],[2,-1],[1,0],[1,-1],[3,-6],[3,-7],[2,-1],[1,-1],[1,1],[2,3],[1,1],[2,1],[2,2],[0,2],[-2,5],[-1,4],[3,0],[5,-2],[7,-8],[2,0],[2,1],[3,1],[1,1],[1,0],[0,-4],[-1,-2],[-3,-2],[0,-1],[1,-2],[2,0],[1,-3],[2,-3],[1,-1],[1,-1],[3,2],[1,1],[0,1],[1,0],[1,-2],[0,-1],[3,-1],[2,-2],[1,-1],[1,1],[5,-2],[1,-1],[0,-2],[0,-2],[1,-3],[6,-9],[0,-4],[1,-1]],[[5523,8036],[-1,-1],[-2,0],[-2,-1],[-2,0],[-2,-1],[-1,-3],[-2,-1],[-1,-2],[0,-2],[-6,-4],[-1,-2],[0,-3],[-1,-3],[0,-3],[-1,-2],[-3,-1],[-1,-1],[-1,-2],[-1,-2],[-2,-2],[-4,-3],[-4,-1],[-5,1],[-3,1],[-2,-1],[-2,-4],[-2,-5],[-1,-5]],[[5383,7993],[-1,3],[-2,3],[-4,5],[-3,0],[-1,1],[-1,2],[-1,3],[-1,2],[-2,1],[-3,2],[-3,6],[-3,4],[-3,0],[-1,2],[-2,3],[-2,3],[-2,6],[-1,4],[-2,2],[-1,2],[0,2],[1,3],[1,2],[1,1],[0,2],[0,1],[-1,3],[-3,3],[-3,2],[-1,3],[-1,3],[0,2],[-2,2],[-1,3],[0,2],[1,1],[1,0],[1,-2],[1,-2],[2,-4],[0,2],[2,3],[2,5],[3,2],[2,1],[2,0],[2,2],[3,-1],[2,-1],[1,1],[0,2],[1,2],[5,1],[1,4],[1,0],[1,0],[1,2],[1,1],[1,-1],[1,-1],[1,1],[1,5],[1,0],[4,1],[6,3],[2,2],[3,1],[3,2],[5,2],[0,1],[-2,3],[-1,1],[-1,1],[1,2],[1,0],[2,0],[3,-1],[2,-1],[0,-2],[1,-2],[1,-1],[-1,-3],[2,-1],[1,-1],[2,0],[1,1],[0,1]],[[5394,8287],[-1,0],[-3,-1],[-4,1],[0,4],[0,3],[-1,2],[-1,2],[-1,1],[1,2],[5,-5],[5,-5]],[[5394,8291],[0,-2],[0,-2]],[[5313,8318],[-4,0],[-2,2],[-2,1],[1,3],[1,1],[5,-2],[1,-4],[0,-1]],[[5380,8316],[1,-4],[-1,-2],[-3,4],[-3,0],[-2,-6],[-1,0],[-5,5],[-1,2],[0,2],[1,6],[-1,2],[2,3],[0,3],[3,3],[2,0],[1,-2],[1,-2],[4,-3],[1,-1],[0,-1],[-2,-3],[0,-1],[0,-2],[3,-3]],[[5238,8335],[-1,-1],[-3,0],[-1,1],[0,2],[2,1],[1,0],[2,-1],[0,-2]],[[5270,8342],[0,-1],[4,-2],[2,-2],[2,-4],[0,-5],[-2,-4],[-2,-3],[7,1],[1,-2],[1,-2],[4,1],[11,-7],[6,4],[1,0],[2,-6],[-2,-5],[-5,-7],[1,-3],[2,-1],[5,1],[8,-4],[2,1],[6,9],[3,1],[9,2],[1,3],[4,3],[2,4],[6,7],[5,-1],[4,-2],[3,0],[4,-8],[8,-8],[8,1],[2,-8],[2,-9],[2,-3],[2,-2],[6,-2],[1,0]],[[5396,8279],[0,-2],[0,-4],[1,-4],[3,-16],[0,-4],[0,-1],[-1,-5],[-3,-5],[-2,-3],[-2,-2],[0,-3],[3,-6],[8,-8],[3,-7],[-2,-5],[0,-4],[0,-3],[1,-2],[2,-2],[1,-2],[0,-3],[0,-3],[1,-1],[0,-1],[-1,-2],[0,-5],[-1,-3],[-2,-4],[1,-3],[1,-4],[1,-3],[1,-2],[-1,-4],[0,-2],[6,-3],[0,-2],[1,-3],[2,-7],[-2,-9],[-1,-5],[-3,-8],[0,-1]],[[5211,7925],[-1,1],[-1,4],[0,5],[1,8],[1,6],[-1,3],[1,6],[3,7],[1,7],[1,8],[1,5],[3,4],[5,10],[1,1],[-1,5],[-1,0],[-2,2],[-6,2],[-5,1],[-2,1],[-3,4],[-1,0],[-2,-1],[-4,-1],[-2,0],[-1,0],[-1,0],[-1,3],[-1,1],[-2,1],[-1,0],[-1,-2],[-1,-1],[-1,0],[-4,8],[-1,2],[0,1],[-1,3],[-2,3],[-2,1],[-1,-1]],[[5176,8032],[0,4],[1,5],[0,2],[2,2],[1,2],[0,3],[0,2],[-2,1],[-3,1],[-2,2],[-1,3],[-2,3],[-1,4],[0,3],[0,2]],[[5166,8107],[2,9],[-2,2],[-1,2],[-2,0],[-1,2],[0,1],[0,1],[2,0],[1,1],[5,5],[0,1],[-1,0],[-1,1],[0,1],[0,1],[3,8],[1,3],[0,2],[0,2],[-2,4],[-1,3],[0,2],[-1,1],[-3,6],[0,3],[1,1],[3,2],[2,1],[3,-2],[2,-1],[2,2],[3,0],[6,3],[1,1],[0,2],[0,1],[-2,3],[0,1],[0,2],[1,1],[1,0],[2,2],[3,4],[1,3],[1,4],[0,3],[-1,2],[-1,1],[-1,0],[-3,0],[-2,2],[-1,2],[-1,1],[1,2],[0,1],[0,1],[0,2],[1,0],[7,0],[1,1],[0,6],[2,8],[2,5],[0,1],[0,11],[0,6]],[[5199,8253],[-1,2],[-3,3],[1,6],[1,5],[3,5],[2,2],[9,1],[11,-1],[4,-8],[-1,-5],[2,-2],[2,1],[0,4],[1,4],[1,1],[3,-3],[1,-2],[0,-7],[2,10],[-1,6],[0,7],[2,3],[1,2],[8,-2],[8,1],[3,-3],[8,-12],[2,-2],[3,-1],[-4,3],[-9,15],[-3,2],[-4,0],[-2,2],[-2,2],[0,2],[0,15],[-2,2],[-2,1],[-1,-1],[-2,0],[-1,4],[1,2],[5,2],[3,2],[0,4],[-2,3],[-2,6],[-3,6],[-1,6]],[[5240,8346],[6,0],[1,0],[8,-3],[2,-2],[2,0],[4,2],[4,0],[1,-1],[2,0]],[[5230,8339],[0,-1],[0,8],[3,9],[1,0],[-1,-2],[0,-2],[-1,-3],[0,-2],[7,-1],[-1,-1],[-7,-1],[-1,-4]],[[6201,5846],[-3,-8],[-3,-9],[-3,-12]],[[6192,5817],[-2,0],[-2,1],[-1,2],[-3,2],[-2,0],[-3,-2],[-4,-2],[-4,-1],[-3,-1],[-3,-2],[-2,1],[-3,1],[0,12],[0,13],[0,10],[0,6],[1,2],[4,8],[1,3],[4,13],[4,11],[3,8]],[[6177,5902],[0,1],[2,2],[6,-8],[1,0],[1,2],[2,9],[1,3],[1,0],[3,2],[3,3]],[[6197,5916],[0,-3],[5,-11],[2,-6],[1,-10],[-1,-6],[-1,-3],[-2,-4],[-6,-8],[-7,-5],[-4,-10],[-3,0],[0,-4],[1,0],[2,1],[4,3],[3,1],[4,0],[3,-1],[3,-4]],[[3297,6062],[-2,-1],[-1,10],[-2,7],[0,5],[1,1],[3,-3],[2,-3],[0,-9],[-1,-7]],[[5315,8345],[5,-3],[3,0],[3,-1],[0,-3],[0,-5],[-2,-1],[-3,0],[-3,-2],[-12,9],[0,7],[1,2],[5,1],[3,-4]],[[5291,8343],[-2,-1],[-2,2],[-4,4],[0,2],[2,-1],[2,-3],[2,0],[2,-2],[0,-1]],[[5348,8350],[-1,-1],[-4,1],[-5,-4],[-2,1],[1,2],[0,1],[2,1],[1,2],[0,2],[1,-1],[3,0],[2,-1],[1,-1],[1,-2]],[[5279,8345],[-3,-1],[-1,2],[-3,0],[-1,9],[0,1],[2,-1],[4,-4],[2,-5],[0,-1]],[[5298,8337],[-2,0],[-1,5],[0,1],[1,3],[2,4],[3,5],[2,6],[1,0],[-1,-6],[-4,-15],[-1,-3]],[[5419,8353],[-1,-1],[-5,2],[-6,4],[1,7],[2,4],[10,-9],[0,-3],[-1,-4]],[[5295,8387],[1,-3],[2,-7],[2,-7],[-1,-3],[1,-4],[-1,-4],[-4,-4],[-5,0],[-6,2],[-7,4],[-1,3],[-1,1],[-2,7],[0,9],[4,2],[8,4],[2,-1],[2,-2],[2,0],[4,3]],[[5351,8386],[-2,-2],[-1,0],[-1,3],[2,2],[0,2],[1,0],[1,-2],[0,-3]],[[5294,8397],[0,-1],[-2,1],[0,4],[0,3],[0,3],[0,2],[3,-5],[1,-2],[-1,-2],[-1,-3]],[[5349,8397],[0,-6],[-1,-2],[-1,-1],[-3,-1],[-2,-1],[-2,-3],[-1,-4],[1,-3],[4,-2],[0,-6],[-2,-3],[-7,-2],[0,-7],[0,-6],[0,-4],[-1,-5],[-5,-2],[-3,8],[0,3],[-1,4],[-1,3],[-1,5],[-5,2],[-2,0],[-2,-1],[-1,0],[-3,8],[0,8],[-1,4],[-1,1],[0,2],[-1,2],[-2,1],[-1,4],[2,1],[5,0],[2,0],[1,1],[4,7],[0,2],[0,2],[4,1],[2,-3],[0,-5],[0,-5],[3,-2],[1,0],[1,4],[1,2],[1,1],[0,4],[-1,3],[-1,1],[5,5],[5,4],[3,0],[3,-1],[2,-1],[2,-1],[1,-2],[-2,-4],[-1,-2],[2,-8]],[[5306,8481],[-1,-1],[-3,2],[1,3],[4,1],[3,0],[-3,-3],[-1,-2]],[[5240,8346],[0,5],[-1,3],[-1,5],[2,2],[0,10],[-1,5],[-8,5],[-6,5],[2,18],[0,4],[-2,9],[0,11],[1,16],[2,1],[2,0],[5,-3],[2,0],[2,-3],[1,-1],[2,3],[0,4],[4,7],[3,2],[2,1],[2,-2],[2,-3],[0,6],[2,12],[-4,1],[-4,-1],[-3,-8],[-3,-9],[-5,-1],[-3,-2],[-4,2],[-2,3],[0,3],[1,2],[4,8],[5,7],[5,0],[4,3],[2,0],[8,-1],[4,2],[3,3],[7,14],[4,6],[8,2],[8,7],[2,0],[-3,-5],[-1,-2],[0,-3],[2,-6],[0,-4],[0,-8],[-3,-4],[-2,-9],[-2,-1],[0,-10],[0,-3],[0,-9],[3,-4],[3,-2],[10,0],[1,-1],[1,-3],[-1,-5],[-1,-4],[-3,-3],[-3,-2],[-3,0],[-3,4],[-1,-1],[-2,-2],[-2,-12],[-2,-8],[0,-1],[-2,1],[-2,0],[-3,-2],[1,-1],[2,-3],[-1,-2],[-3,-2],[-2,-3],[-1,-2],[-3,-3],[-2,-4],[1,-4],[0,-4],[1,-5],[-1,-3],[-3,-6],[-2,-4],[3,0],[2,-1],[2,-1],[1,-2],[-1,-2],[1,-6]],[[3006,6223],[0,9],[1,4],[-1,4],[-3,5],[-2,5],[-1,5],[0,1],[3,0],[2,2],[2,5],[0,4],[0,3],[-1,4],[-1,3],[2,4],[2,5],[1,2],[0,1],[-3,6],[0,2],[1,5],[0,4],[-2,12],[0,2]],[[3006,6320],[1,1],[1,3],[1,3],[1,2],[2,1],[3,0],[5,-3],[1,0],[4,2],[4,2],[3,-2],[1,-2],[3,-3],[2,-1],[4,0],[1,0],[4,-6],[3,-2],[2,0],[3,2],[1,0],[2,-5],[1,-7],[1,-6],[2,-4],[12,2],[3,-3],[-1,-3],[-2,-1],[-5,0],[-3,0],[0,-3],[0,-2],[3,-1],[3,-1],[3,-2],[4,-1],[3,-1],[4,-1],[6,-5],[6,-11],[2,-3],[1,-3],[0,-4],[-3,-7],[-1,-3],[-2,-1],[-1,-3],[-1,-5],[-1,0],[-1,0],[-2,3],[-1,4],[-3,4],[-4,0],[-6,2],[-3,-1],[-3,0],[-4,1],[-3,0],[-4,-1],[-3,-3],[-2,-2],[-2,-3],[-1,-2],[-8,-2],[-2,3],[-3,4],[-3,0],[-4,-3],[-3,-1],[-1,-1],[-1,-2],[0,-5],[0,-3],[-5,-13],[-2,-9],[-2,-3],[-1,0],[-2,5],[-1,2],[-2,1],[-1,2],[0,4],[0,4],[-1,3],[-2,2]],[[5238,7311],[0,-3],[0,-3],[-2,-2],[-2,-2],[-2,-7],[-4,-5],[-1,-2],[1,-1],[2,-2],[1,-3],[0,-2],[-1,-11],[-1,-8],[0,-10],[0,-4],[1,-5],[1,-4],[0,-4],[-1,-10],[2,-6],[1,-6],[-3,-6],[-1,-6],[0,-9],[0,-6],[-2,-5],[-2,-4],[-2,-3],[-3,-3],[-3,-3],[-2,-9],[-6,-8],[-1,-2],[0,-6],[0,-9],[1,-6],[2,-10],[3,-11],[0,-5],[1,-2],[3,-4],[6,-4],[1,-2],[3,-8],[2,-13],[1,-9],[5,-7],[5,-6],[4,-6],[5,-6],[1,-2],[1,-13],[2,-13],[2,-14],[1,-14],[3,-17],[1,-10],[1,-11],[2,-14]],[[5264,6925],[-3,-3],[-3,-4],[2,-7],[5,-11],[2,-9],[1,-4],[2,-12],[2,-11],[0,-3],[1,-9],[-1,-23],[1,-30],[2,-15],[-3,-13],[-2,-13],[0,-6],[2,-10],[1,-8],[1,-4],[0,-12],[-1,-5],[-4,-6],[-6,-6],[-1,-6],[-1,-5],[1,-5],[4,-10],[5,-15],[6,-17],[1,-4],[0,-12],[3,-15],[2,-7],[1,-5],[2,-3],[2,-3],[1,0],[7,4],[12,-7],[11,-7],[1,-1],[2,-9],[4,-14],[3,-11],[3,-11]],[[5332,6538],[-14,-17],[-15,-18],[-14,-17],[-15,-18],[-14,-18],[-14,-17],[-15,-18],[-14,-17],[-10,-12],[-6,-10],[-7,-13],[-8,-13],[-5,-10],[-8,-13],[-3,-7],[-8,-14],[-3,-3],[-11,-4],[-10,-4],[-9,-4],[-6,-2],[-6,-3]],[[5117,6286],[-9,-3],[-6,-2],[-7,-3],[-1,0],[-1,-1],[-1,1],[-2,1],[-2,3],[-2,2],[0,3],[1,3],[1,4],[0,2],[1,2],[1,2],[0,2],[-1,3],[-1,5],[0,10],[0,3],[0,1],[-2,3],[-3,4],[-4,2],[-2,1],[-3,1],[-6,3],[-2,1],[-3,9],[-2,2],[-8,1],[-3,2],[-2,2],[-2,3],[-1,4],[0,4],[-1,2],[-9,9],[-2,3],[-1,3],[0,4],[0,5],[0,5],[-1,2],[-4,6],[-9,12],[-9,12],[-9,13],[-9,12],[-9,12],[-9,13],[-9,12],[-10,12],[-9,13],[-9,12],[-9,12],[-9,13],[-9,12],[-9,12],[-9,13],[-9,12],[-8,10],[-8,12]],[[4866,6624],[-7,8],[-6,8],[-7,8],[-4,6],[-5,6],[-6,6],[-5,7],[-5,6],[-5,6],[-5,7],[-6,6],[-5,6],[-5,7],[-5,6],[-6,7],[-5,6],[-5,6],[-5,7],[-5,6],[-6,6]],[[4758,6755],[0,12],[0,10]],[[4758,6777],[0,14],[0,12],[0,12],[0,9],[0,8],[0,4],[1,2],[3,3],[4,6],[2,3],[2,3],[7,9],[2,2],[7,10],[2,2],[4,1],[1,2],[2,4],[4,4],[2,2],[0,1],[1,0],[7,-1],[3,-1],[3,-1],[1,1],[1,1],[1,3],[1,4],[0,3],[0,2],[1,0],[1,0],[2,0],[4,0],[1,0],[5,1],[6,2],[5,3],[4,2],[4,6],[4,6],[3,10],[3,8],[5,5],[4,3],[3,1],[5,4],[5,6],[5,6],[3,1],[5,1],[1,1],[1,2],[0,4],[-1,3],[-2,1],[-1,2],[-1,0],[-1,2],[0,3],[1,3],[0,3],[0,5],[-1,4],[0,3],[0,3],[0,2],[2,2],[2,1],[2,-1],[5,1],[12,7],[1,3],[0,5],[1,4],[1,2],[1,0],[4,1],[5,2],[3,0],[6,0],[4,0],[7,-1],[5,0],[4,-1],[6,0],[1,1],[0,3],[-1,7],[1,3],[2,4],[3,4],[-1,5],[-2,3],[-4,4],[-1,1],[-3,5],[-1,5],[-2,12],[-2,6],[-1,8],[1,14],[-2,9],[0,4],[0,4],[0,8],[0,10],[-2,11],[1,4],[0,2],[0,2],[-2,3],[-1,3],[1,3],[1,4],[0,1],[-4,5],[-6,8],[-1,3],[-1,5]],[[4938,7206],[5,-1],[3,0],[7,5],[5,7],[4,4],[4,7],[3,5],[5,5],[14,11],[2,0],[4,-2],[4,1],[3,4],[3,9],[4,6],[6,5],[7,6],[5,5],[8,4],[20,3],[11,2],[7,0],[7,8],[3,3],[15,0],[7,6],[28,0],[3,-2],[3,-3],[6,-8],[3,-1],[3,1],[9,7],[9,4],[5,4],[2,7],[5,2],[2,-5],[10,-5],[6,2],[3,1],[-1,7],[6,-2],[5,-3],[5,-7],[3,-1],[6,3],[13,1]],[[2774,5013],[-1,-3],[-2,1],[-1,0],[0,3],[1,8],[0,3],[2,3],[2,2],[3,0],[2,-3],[-3,-6],[-1,0],[-1,-1],[-1,-7]],[[2488,5107],[-1,0],[-2,2],[2,4],[1,-1],[1,-1],[0,-2],[-1,-2]],[[2516,5131],[-3,-2],[-2,1],[0,1],[0,2],[1,3],[2,2],[2,4],[3,3],[1,-1],[0,-1],[0,-1],[-1,-3],[-1,-3],[-2,-5]],[[2490,5139],[-1,0],[-4,6],[0,5],[2,4],[5,2],[3,-4],[-1,-6],[-1,-5],[-2,-1],[-1,-1]],[[2460,5157],[-3,-1],[-2,2],[-1,3],[0,5],[0,1],[5,2],[2,-4],[0,-5],[-1,-3]],[[2484,5165],[-1,-2],[-6,2],[-1,3],[1,5],[1,2],[3,-2],[3,-5],[0,-3]],[[2464,5185],[2,-3],[1,-11],[6,-11],[0,-6],[0,-3],[0,-1],[3,-5],[2,-5],[-3,-10],[-7,-5],[-6,0],[-2,1],[-1,5],[-1,3],[1,4],[4,5],[5,5],[1,4],[-2,3],[-2,7],[-3,5],[-2,15],[-1,1],[-2,-2],[-1,2],[-1,1],[3,3],[0,3],[4,1],[1,-2],[1,-4]],[[2808,5256],[-2,0],[0,2],[1,3],[1,1],[0,-6]],[[2908,5178],[-1,-2],[-2,-1],[-2,0],[-3,2],[-1,0],[0,-2],[2,-3],[2,-3],[0,-4],[2,-5],[2,-5],[2,-3],[0,-2],[0,-4],[0,-3],[0,-14],[0,-1],[-1,0],[-1,0],[-1,2],[-1,1],[0,-3],[-1,-6],[-2,-14],[-1,-12],[-2,-5],[-3,-7],[-4,-9],[-6,-14],[-4,-6],[-3,-5],[-4,-6],[-5,-8],[-6,-4],[-8,-6],[-5,-4],[-4,-3],[-4,-3],[-6,-4],[-2,-4],[-4,-9],[-2,-4],[-1,-4],[0,-2],[0,-1],[1,-2],[0,-2],[-1,-1],[-1,0],[-1,1],[0,2],[-1,2],[-1,1],[-1,-1],[0,-2],[-1,-9],[0,-5],[-1,-2],[0,-4],[-1,-4],[-1,-3],[0,-3],[-1,-2],[-1,-3],[-1,-7],[-1,-5],[-1,-4],[0,-4],[1,-2],[0,-2],[-1,-3],[0,-3],[-2,-2],[-3,-4],[-1,-3],[-1,-3],[1,-3],[0,-2],[-2,-1],[-1,-2],[-1,-3],[-1,-2],[-3,2],[-2,0],[-2,2],[-2,5],[-1,4],[-2,6],[0,7],[-2,3],[-1,2],[-2,-1],[-3,0],[-1,2],[-3,3],[-3,4],[-2,1],[-2,-1],[-1,-2],[-2,-4],[-2,-2],[-1,0],[-2,2],[0,2],[1,3],[3,7],[-3,1],[-1,2],[0,3],[-1,2],[1,4],[1,2],[3,-2],[1,0],[1,3],[1,2],[1,1],[1,1],[-2,6],[0,2],[0,2],[0,3],[0,3],[0,2],[0,3],[-1,2],[0,1],[0,3],[-1,1],[-1,1]],[[2768,4989],[1,0],[4,3],[2,3],[2,3],[2,4],[1,4],[2,18],[3,11],[0,6],[-3,7],[0,11],[0,3],[0,3],[-2,-5],[1,-16],[-1,-7],[-2,-2],[-1,2],[0,11],[-1,-2],[-2,-8],[-3,-6],[-1,-2],[0,-2],[-3,2],[-2,3],[-7,13],[-4,3],[-2,4],[-1,2],[0,3],[2,2],[3,4],[0,8],[0,7],[-2,11],[1,14],[0,6],[-3,12],[2,6],[6,4],[2,3],[1,9],[2,6],[3,-2],[2,0],[-3,2],[-3,9],[0,4],[5,11],[2,3],[3,6],[2,10],[1,14],[-1,11],[-1,11],[2,3],[3,1],[3,4],[2,3],[3,0],[4,5],[7,2],[9,6],[2,5],[-1,10]],[[5949,6988],[1,-2],[1,-5]],[[5951,6981],[2,-12],[2,-10],[2,-13],[1,-5],[1,-4],[3,-14],[2,-12],[2,-10],[2,-14],[1,-5]],[[5969,6882],[-2,-3],[-3,-9],[-3,-30],[-5,-23],[0,-14],[-1,-6],[-2,-7],[-3,-7],[-5,4],[-8,12],[-4,12],[-5,8],[-5,10],[-1,8],[0,4],[-2,12],[-2,5],[-6,13],[-1,6],[-1,3],[-2,4],[-2,16],[-2,10],[-3,-3],[1,-4],[-2,-6],[-2,-7],[1,-5],[5,-9],[1,-3],[1,-8],[0,-11],[1,-4],[3,-8],[1,-5],[1,-4],[1,-4],[4,-7],[5,-13],[4,-10],[4,-4],[1,-4],[1,-12],[-1,-5],[3,-10],[1,-5],[3,-5],[2,-4],[1,-8],[2,-23],[2,-6],[8,-30],[7,-19],[3,-15],[5,-17],[9,-38],[6,-12],[2,-7],[4,-5],[4,-7],[-4,0],[-1,0],[-1,-1],[-1,-5],[0,-4],[0,-19],[1,-10],[4,-19],[3,-5],[1,-4],[2,-2],[9,-7],[5,-13],[11,-17],[2,-5],[0,-1]],[[6024,6451],[-10,0],[-9,0],[-9,0],[-9,0],[-9,0],[-9,0],[-9,0],[-9,0],[-9,0],[-10,0],[-9,0],[-9,0],[-9,0],[-9,0],[-9,0],[-9,0],[-5,0],[0,5],[1,3],[-1,3],[-1,1],[-2,-1],[-2,-11],[-2,0],[-3,0],[-11,0],[-10,0],[-11,0],[-10,0],[-11,0],[-11,0],[-10,0],[-11,0],[-10,0],[-11,0],[-11,0],[-10,0],[-11,0],[-10,0],[-11,0],[-11,0]],[[5693,6451],[0,13],[0,13],[0,13],[0,12],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,12],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,13],[0,2],[-1,9],[-2,11],[-1,14],[-1,4],[-2,14],[0,4],[0,3],[4,12],[2,6],[1,7],[0,5],[-1,9],[-2,8],[0,8],[0,8],[2,5],[3,5],[0,3],[2,3],[1,2]],[[5698,7007],[2,-7],[4,-1],[15,6],[15,-6],[9,-3],[13,-5],[8,-9],[3,-2],[5,1],[4,-6],[16,-3],[8,-6],[4,-5],[3,-1],[2,0],[4,2],[4,3],[4,5],[10,12],[3,3],[2,-1],[3,0],[1,4],[1,2],[1,3],[2,3],[5,1],[9,5],[-1,-3],[-9,-6],[4,0],[4,2],[5,1],[0,3],[1,4],[1,1],[3,-1],[9,-7],[2,0],[7,4],[1,1],[2,-3],[5,-9],[-2,0],[-5,8],[0,-4],[-3,-7],[4,-3],[3,-1],[1,-4],[1,-3],[3,1],[2,5],[-1,3],[-1,2],[1,0],[2,-2],[6,-9],[2,-2],[2,1],[5,2],[1,0],[7,3],[0,-2],[1,-3],[6,3],[8,0],[6,3],[8,7],[0,1]],[[6114,6088],[2,-3],[1,1],[0,2],[5,-4],[0,-3],[-3,0],[-3,1],[-3,0],[-3,1],[-1,5],[2,-2],[1,0],[0,1],[-1,3],[-2,1],[0,2],[1,1],[1,1],[-2,4],[3,-1],[1,-2],[1,-2],[0,-6]],[[6113,6110],[1,-5],[-3,2],[-1,1],[2,2],[0,1],[1,-1]],[[6072,6221],[8,-33],[4,-20],[3,-21],[2,-30],[2,-16],[3,-8],[3,-15],[2,0],[1,-4],[3,-14],[2,-5],[0,4],[0,3],[0,4],[0,6],[2,3],[3,-5],[2,-3],[0,-7],[1,-3],[3,-8],[3,-3],[4,0],[3,-2],[2,-3],[5,-8],[10,-7],[9,-22],[5,-15],[16,-23],[3,-10],[1,-11],[4,0],[5,-11],[2,-9],[5,-3],[1,5],[2,-5],[1,-6]],[[6177,5902],[-3,6],[-2,5],[-2,6],[-3,3],[-2,4],[-3,8],[-2,9],[-4,8],[-8,10],[-6,14],[-5,14],[-4,8],[-1,1],[-7,5],[-5,7],[-3,5],[-3,1],[-2,1],[-4,-1],[-4,3],[-2,0],[-2,1],[-2,1],[-3,-1],[-5,-3],[-2,1],[-1,3],[-1,3],[-1,2],[-2,0],[0,-2],[-5,-6],[-9,-3],[-2,0],[-2,2],[-4,11],[-1,1],[-1,0],[-2,2],[-2,2],[-2,4],[-1,2],[-2,-8],[-3,-14],[-2,-8],[-2,-10],[-1,-1],[-1,1],[-4,13],[-3,4],[-2,0],[-1,-2],[-1,-5],[-1,-2],[-1,-1],[-2,0],[-4,2],[-4,0],[-4,-3]],[[6014,6005],[-1,17],[-1,11],[0,11],[-1,11],[3,7],[1,7],[3,21],[2,4],[2,11],[0,3],[3,14],[0,10],[-1,9],[1,6],[2,4],[0,4],[0,9],[0,2],[2,1],[3,-2],[2,1],[3,0],[2,1],[1,2],[1,11],[1,2],[1,0],[2,2],[2,3],[2,2],[0,1],[2,0],[2,1],[1,2],[2,1],[2,-1],[1,2],[1,0],[1,0],[1,2],[0,1],[1,2],[2,2],[0,2],[1,2],[0,2],[1,2],[2,7],[3,4]],[[4503,6786],[-3,-10],[-3,4],[-1,1],[-1,2],[3,0],[4,5],[1,-2]],[[4572,6805],[0,-4],[0,-5],[0,-7],[-1,-3],[-4,-4],[-2,1],[-2,1],[-3,6],[0,6],[3,4],[1,5],[6,-1],[1,1],[0,1],[1,-1]],[[4522,6798],[-1,-1],[-1,2],[-2,4],[1,4],[1,1],[1,0],[3,-2],[0,-3],[1,-2],[-3,-3]],[[4546,6818],[-3,-13],[-2,-5],[-1,-2],[-3,-1],[-4,8],[-2,8],[-1,3],[2,2],[2,0],[6,2],[1,0],[5,9],[6,1],[0,-3],[-6,-9]],[[4605,6806],[-4,-6],[-3,1],[-1,1],[4,2],[3,5],[2,11],[4,12],[1,5],[1,2],[2,0],[1,0],[0,-3],[0,-6],[-1,-10],[-1,-9],[-8,-5]],[[4504,6825],[-1,0],[0,4],[-3,11],[2,5],[3,0],[2,-3],[0,-4],[-1,-2],[1,-4],[-1,-3],[-2,-4]],[[4619,6849],[-2,-4],[-2,2],[1,8],[1,2],[3,4],[4,1],[1,4],[1,2],[1,-2],[-1,-3],[-1,-8],[-2,-3],[-4,-3]],[[5044,7411],[-1,-1],[-2,1],[-2,0],[-1,3],[1,1],[0,2],[2,-3],[3,-1],[0,-2]],[[5040,7425],[-1,-3],[-5,1],[-1,2],[1,4],[2,0],[0,3],[1,3],[6,2],[1,-2],[1,-3],[-4,-6],[-1,-1]],[[5087,7476],[3,-2],[2,1],[2,0],[1,-1],[1,-4],[-2,-4],[-1,-4],[-2,-4],[-1,-6],[-3,-3],[-2,-2],[-5,4],[-3,1],[-1,2],[0,6],[-1,1],[-2,1],[-2,-1],[-2,-3],[-1,3],[-2,0],[-1,2],[0,2],[12,14],[3,3],[7,4],[1,-1],[-1,-2],[0,-1],[1,-1],[0,-1],[-1,-2],[0,-2]],[[5119,7479],[-1,-1],[-8,7],[-3,0],[-1,1],[0,4],[1,1],[5,1],[5,-2],[2,-7],[1,-1],[-1,-3]],[[4950,7684],[0,-2],[1,-3],[1,-1],[2,-1],[2,0],[3,-1],[1,-2],[0,-2],[0,-3],[-1,-2],[-1,-2],[1,-1],[1,-1],[1,-1],[0,1],[1,1],[1,2],[0,-1],[1,-1],[3,-2],[7,-4],[2,0],[2,-1],[1,-2],[4,-6],[1,0],[2,0],[2,0],[2,2],[1,-1],[1,-1],[2,-1],[2,-2],[1,-3],[1,0],[7,1],[2,-1],[1,0],[2,0],[4,-1],[3,1],[1,6],[0,2],[1,1],[2,-1],[7,-3],[2,-2],[3,-2],[2,0],[2,-1],[2,-6]],[[5047,7632],[4,-3],[2,-2],[1,-1],[1,-2],[1,-1],[2,2],[3,2],[4,-2],[6,-2],[2,0],[0,1],[1,2],[1,0],[1,1],[2,1],[2,1],[2,1],[2,-1],[3,-1],[2,0]],[[5089,7628],[0,-4],[2,-1],[0,-3],[-2,-2],[-2,0],[0,-6],[1,-1],[1,-2],[0,-1],[1,-8],[-3,-5],[-4,-5],[-19,-18],[-5,-8],[-2,-2],[-14,-5],[-10,-6],[-5,-2],[-6,-10],[-3,-4],[3,-1],[2,-5],[-1,-2],[-3,-3],[-2,-1],[-1,1],[-1,-1],[-6,-17],[-6,-12],[-3,-5],[-4,-8],[-7,-21],[0,-6],[4,-20],[2,-6],[3,-4],[5,-4],[1,-4],[-2,-3],[-5,-7],[-9,-8],[-4,-7],[-1,-7],[-2,-3],[-1,-9],[-2,-6],[0,-2],[-2,-5],[0,-3],[2,-5],[-1,-2],[-1,-1],[-4,0],[-10,-1],[-9,-10],[-4,-9],[-4,-16],[-5,-10],[-2,-2],[-4,5],[-4,0],[-4,-1],[-2,-4],[-3,-1],[-3,1],[-7,1],[-3,0],[-5,-3],[-4,2],[-7,1],[-15,-2],[-2,-1],[-2,-4],[-4,-7],[-8,-1],[-6,-4],[-2,-3],[-3,-8],[0,-6],[-1,0],[-1,1],[-1,0],[0,-4],[-3,-2],[-2,-1],[-5,3],[-4,6],[-2,0],[-4,9],[-1,5],[-2,6],[1,2],[-1,2],[-3,2],[-1,5],[3,7],[2,3],[1,1],[-3,0],[-2,-5],[-3,7],[-11,14],[1,3],[0,2],[-2,-4],[-1,-1],[-6,1],[-6,-2]],[[4794,7325],[-2,15],[-1,5],[0,4],[2,8],[2,3],[2,7],[3,6],[3,1],[1,1],[2,5],[0,3],[0,1],[-4,-1],[-6,16],[0,2],[1,4],[0,5],[0,4],[2,3],[3,3],[2,5],[1,4],[0,4],[-1,3],[-4,2],[-3,12],[-1,7],[-1,1],[-2,3],[-2,6],[-1,1],[2,1],[10,0],[2,2],[2,5],[2,8],[0,5],[-1,2],[-3,5],[0,1],[1,3],[2,2],[2,3],[1,2],[0,2],[-1,2],[0,2],[1,3],[0,7],[0,2],[0,8],[-1,5],[-2,8],[0,2],[1,1],[3,3],[3,6],[3,5],[5,4],[3,5],[1,3],[1,1],[0,2],[-1,2],[-2,2],[-2,2],[-3,0],[-1,0],[-1,2],[1,5],[-1,5],[0,2],[-1,2],[-3,-1],[-2,2],[-1,0],[-1,-1],[-5,0],[-2,1],[-1,1],[-1,-1],[0,-1],[0,-1],[-1,-2],[-1,-2],[-4,-2],[-3,0],[-3,2],[-1,1],[-1,1],[-6,-2],[0,1],[-2,-2],[-3,-2],[-2,0],[-1,1],[0,1],[-1,3],[0,2],[3,5],[-1,1],[-1,2],[0,2],[-1,2],[-1,0],[-2,-1],[-6,-3],[-1,-1],[-3,-3],[-2,-3]],[[4756,7600],[-2,-1],[-1,1],[0,9],[3,6],[2,4],[-1,0],[-2,0],[0,3],[1,2],[1,3],[-1,1],[-1,2],[0,5],[0,2],[0,3],[-5,-3],[-1,0],[0,4],[2,6],[1,2],[-4,1],[-2,3],[-1,2],[-2,4],[0,4],[2,8],[2,2],[2,1],[4,6],[6,-1],[3,1],[4,3],[1,0],[3,3],[0,3],[-1,3],[1,2],[3,3],[4,4],[4,0],[5,4],[3,-3],[2,1],[3,-2],[4,-6],[5,-3],[5,2],[8,1],[4,-1],[7,1],[4,0],[6,3],[5,-4],[10,-2],[6,-3],[16,-5],[6,0],[8,3],[3,2],[4,-1],[4,2],[3,0],[3,-3],[10,-5],[3,4],[2,1],[7,-3],[8,-5],[3,0],[6,1],[5,4],[1,0]],[[5628,8560],[2,-1],[1,0],[2,1],[4,-1],[9,-7],[1,-2],[-5,0],[-1,-3],[-2,-1],[-1,-1],[-3,-3],[-3,-2],[-1,-2],[-7,0],[-3,-1],[-3,-3],[-1,-7],[-2,-4],[-2,-2],[-3,0],[0,1],[0,2],[5,7],[1,2],[-3,1],[-1,3],[-5,3],[0,2],[1,0],[0,1],[2,2],[0,2],[-3,6],[1,1],[3,0],[2,-2],[2,2],[1,1],[2,-1],[2,4],[4,1],[2,2],[2,-1]],[[5648,8556],[-2,0],[-6,4],[1,2],[2,2],[5,-2],[0,-4],[0,-2]],[[5636,8572],[-2,-3],[-1,1],[-1,2],[-3,-7],[-3,-1],[-2,2],[0,2],[-2,6],[-3,2],[-4,0],[-3,3],[11,2],[2,3],[2,3],[2,0],[1,-1],[0,-2],[1,-1],[5,-1],[2,-5],[1,-4],[-3,-1]],[[5778,8610],[1,-2],[2,-3],[0,-1],[0,-1],[-2,-1],[-1,-1],[0,-2],[-3,0],[-1,-1],[-1,-5],[-3,-8],[-3,-6],[-3,-3],[-2,-3],[-1,-3],[0,-3],[3,-17],[0,-4],[-1,-3],[0,-3],[0,-3],[2,-5],[2,-7],[1,-4],[1,-2],[2,-1],[0,-1],[0,-1],[-1,-1],[-6,-2],[0,-2],[-1,-2],[-2,-4],[-1,-3],[-1,-3],[0,-2]],[[5759,8497],[-4,1],[-5,2],[-2,2],[-1,0],[-3,-1],[-8,-4],[-2,1],[-4,4],[-2,3],[-6,7],[0,2],[-1,1],[-5,2],[-2,3],[-2,0],[-2,1],[-7,6],[-1,0],[-1,-1],[0,-1],[0,-1],[-1,0],[-1,2],[-2,2],[-6,-3],[-2,-1],[-1,0],[-9,-5],[-3,-2],[-1,0]],[[5675,8517],[0,2],[4,12],[1,9],[1,1],[0,1],[0,3],[-4,2],[-2,-1],[-1,-3],[-1,-2],[-4,-1],[-3,2],[-6,3],[-2,4],[0,5],[-4,4],[-2,4],[1,4],[3,2],[1,2],[-4,0],[-1,0],[0,2],[-2,6],[2,2],[1,2],[-2,2],[1,2],[1,2],[-1,5],[4,3],[4,2],[8,1],[0,5],[3,0],[6,5],[5,-1],[8,4],[16,0],[2,2],[0,3],[0,2],[3,-1],[5,1],[18,-5],[5,0],[6,-5],[4,-1],[10,0],[15,-2],[3,3],[1,1]],[[6192,5817],[-1,-2],[-1,-3],[-1,-3],[-2,-4],[-3,-9],[0,-2],[1,-2],[1,-4],[2,-7],[1,-6],[0,-4],[2,-3],[3,-7],[2,-5],[3,-3],[1,-6],[2,-10],[3,-7],[2,-6],[3,-2],[1,0],[6,-11],[4,-8],[1,-2],[8,-5],[9,-6],[7,-5],[10,-6],[9,-7],[8,-6],[12,-8],[10,-7],[8,-5],[1,-2],[9,0],[10,0],[9,0]],[[6332,5644],[-7,-13],[-7,-16],[-9,-16],[-5,-11],[-8,-16],[-7,-14],[-7,-15],[-7,-14],[-8,-19],[-5,-12],[-9,-19],[-5,-12],[-1,-1],[-8,1],[-7,1],[-10,1],[-1,0],[-2,-1],[-2,-1],[-7,-4],[-1,0],[-6,-6],[-6,-6],[-3,-4],[-2,-7],[-1,-5],[-1,-2],[-2,-2],[-12,-5],[-4,0],[-5,-4],[-3,-6],[-1,-3]],[[6163,5413],[-4,0],[-7,-1],[-3,-1],[-2,0],[-3,0],[-2,1],[-1,2],[-2,4],[-4,7],[-3,5],[-7,-6],[-6,-5],[-8,-8],[-5,-5],[-1,-6],[-4,-10],[-3,-6],[-2,-1],[-7,1],[-3,1],[-4,2],[-6,2],[-4,2],[-5,0],[-6,1],[-4,2],[-4,6],[-5,6],[-5,7],[-5,8],[-7,8],[-6,9],[-2,1],[-1,0],[-7,0],[-8,1],[-5,0],[-2,1],[-1,2],[-2,7],[-2,5],[-2,6],[0,8],[0,9],[1,3],[0,3],[0,4],[-2,4],[-7,4],[-2,0],[-1,-2],[-1,-1],[-1,1],[-1,2],[0,2],[0,2]],[[5979,5500],[0,1],[-3,4],[-2,6],[-1,5],[-2,5],[-1,11],[-1,7],[-2,8],[-2,15],[-1,5],[-2,4],[-3,3],[-2,7],[-5,6],[-3,5],[-3,8],[-1,4],[-1,4],[-1,4],[-2,4],[-6,10],[-2,1],[-3,1],[-3,1],[-5,2],[-4,3],[-2,3],[0,2],[0,3],[2,5],[3,12],[2,8],[1,3],[3,0],[4,0],[3,0],[4,-1],[5,1],[1,3],[2,3],[0,2],[1,6],[0,4],[-1,17],[0,10],[0,11],[0,3]],[[5946,5729],[0,3],[1,12],[1,7],[1,4],[3,12],[0,4],[1,3],[-1,16],[1,8],[3,7],[2,3],[2,2],[1,0],[2,-4],[2,-3],[2,1],[1,2],[2,4],[0,5],[1,12],[0,6],[1,9],[1,11],[1,7],[1,4],[4,9],[3,11],[2,8],[4,14],[2,5],[2,2],[2,1],[5,2],[3,1],[1,2],[0,2],[0,6],[1,11],[1,10],[2,8],[1,3],[1,4],[1,6],[2,12],[0,9],[2,15]],[[5600,8646],[-2,-1],[-2,2],[1,1],[2,2],[1,-1],[1,-1],[-1,-2]],[[5606,8648],[-3,-2],[-1,0],[0,4],[2,1],[3,0],[-1,-3]],[[5615,8661],[4,-1],[1,0],[2,-3],[-3,-2],[0,-2],[1,-2],[1,-2],[-3,0],[-2,2],[0,2],[-2,2],[-1,1],[1,2],[0,2],[1,1]],[[5610,8659],[-2,0],[-2,3],[-1,1],[1,0],[0,3],[0,1],[2,-2],[1,-2],[-1,-1],[2,-2],[0,-1]],[[5595,8670],[0,-2],[-2,0],[-2,-1],[-1,3],[-1,4],[0,1],[1,1],[1,-2],[4,-4]],[[5589,8826],[0,-1],[2,1],[2,2],[2,-1],[-1,-3],[-1,0],[-1,-1],[-1,-1],[-1,-1],[-3,3],[-2,4],[4,0],[0,-1],[0,-1]],[[5690,8927],[-4,-2],[-4,1],[0,4],[2,2],[4,1],[5,-2],[1,-1],[-3,-1],[-1,-2]],[[5804,9159],[-2,0],[-6,-3],[-3,-2],[-4,-1],[1,-2],[7,-1],[1,0],[1,-1],[0,-2],[-1,-2],[-7,-14],[-1,-2],[3,-8],[3,-10],[11,-4],[8,-3],[5,-8],[8,-10],[4,-3],[0,-2],[-1,-7],[-5,-7],[-5,-5],[-5,-8],[-4,-6],[-5,-7],[0,-2],[0,-2],[1,-3],[5,-9],[2,-4],[3,-5],[2,-5],[1,-5],[3,-5],[1,-2],[2,-4],[3,-4],[1,-4],[4,-14],[1,-3],[-1,-3],[-1,-1],[-5,0],[-4,-2],[3,-4],[-3,-5],[0,-8],[-3,-4],[0,-1],[0,-1],[5,-2],[1,-1],[0,-2],[0,-2],[-3,-2],[-3,-2],[0,-2],[0,-2],[1,-3],[1,-4],[3,-3],[8,-2],[1,-2],[0,-2],[0,-3],[-4,-5],[0,-2],[2,-4],[2,-5],[8,-5],[2,-2],[1,-2],[0,-4],[0,-3],[0,-4],[-3,-4],[-5,-8],[-6,-3],[0,-1],[1,-3],[10,-10],[7,-5],[9,-7],[6,-6],[1,-3],[3,-5],[3,-3],[2,-3],[0,-2],[0,-2],[-2,-6],[-2,-5],[-3,-7],[-2,-5],[-7,-9],[-11,-12],[-2,-3],[-5,-6],[-8,-12],[-2,-3],[-7,-9],[-3,-3],[-2,-3],[-7,-9],[-7,-7],[-7,-6],[-2,-4],[-3,-2],[-3,-2],[-1,-2],[-8,-8],[-9,-12]],[[5772,8671],[-1,-1],[-3,-2],[-4,0],[-2,-2],[-6,5],[-1,0],[-3,-1],[-4,-3],[-6,-1],[-3,-1],[-2,-2],[-1,4],[1,4],[1,3],[0,2],[-1,0],[-2,-5],[-1,-4],[-2,-3],[-5,-1],[-4,4],[-3,0],[2,-3],[1,-3],[0,-2],[-3,1],[-3,-2],[-2,-3],[-1,0],[-2,4],[-3,-2],[-2,-2],[-6,-1],[-3,-3],[-5,-2],[-3,0],[-7,-3],[-3,-4],[-2,-1],[-2,1],[-9,-2],[-9,-2],[-3,0],[-4,1],[-4,-4],[-4,-4],[-4,-2],[-2,1],[2,2],[3,3],[2,3],[0,3],[-2,1],[-1,0],[-3,3],[-2,7],[-1,0],[-1,-2],[-1,-4],[0,-2],[-2,-1],[-1,-1],[-1,-1],[-6,0],[0,3],[0,1],[1,3],[-1,1],[1,2],[1,0],[1,1],[1,1],[0,1],[-2,1],[0,1],[2,4],[0,2],[-1,0],[-1,-1],[-7,2],[-9,6],[-2,0],[-2,5],[-2,-1],[-3,-3],[-3,3],[-2,1],[-1,2],[0,4],[0,4],[-1,5],[0,6],[0,6],[2,4],[1,2],[1,7],[0,7],[0,3],[0,1],[1,0],[0,2],[-1,0],[0,2],[0,1],[2,0],[0,1],[1,0],[-2,5],[0,2],[-2,6],[-3,6],[-3,4],[1,7],[2,7],[-1,3],[0,4],[-5,4],[0,6],[-1,6],[0,4],[1,3],[1,2],[7,10],[1,4],[5,1],[-2,4],[-1,2],[0,3],[7,2],[3,-1],[6,2],[5,3],[0,2],[-1,2],[-1,4],[1,1],[2,-1],[-1,2],[0,2],[3,-1],[3,5],[0,4],[7,2],[7,8],[3,2],[3,2],[7,8],[3,0],[1,6],[6,7],[2,1],[3,6],[7,8],[4,9],[3,4],[1,3],[2,1],[3,2],[5,2],[6,0],[2,-2],[2,1],[0,3],[-2,2],[1,2],[3,1],[0,3],[-1,2],[-2,3],[1,6],[0,6],[2,7],[-3,4],[-12,7],[-2,0],[-2,0],[-3,5],[1,5],[1,1],[-1,0],[-2,-2],[-4,-2],[-4,1],[-3,0]],[[5670,8974],[-3,11],[-1,4],[-2,5],[-5,2],[-1,2],[0,2],[0,3],[-1,4],[0,4],[1,2],[2,1],[2,5],[1,2],[0,5],[1,4],[2,2],[-1,2],[-1,2],[-2,3],[-3,4],[-2,4],[-1,3],[0,3],[0,3],[1,2],[2,3],[1,1],[-1,5],[-2,1],[-4,1],[-2,0],[0,1],[0,3],[1,2],[1,2],[0,1],[-1,5],[0,6],[0,4],[4,4],[0,1],[-4,3],[-4,5],[-1,2],[-4,0],[-2,7],[-3,4],[-4,3],[-2,1],[-11,4],[-5,1],[-6,2],[-4,4],[-3,2],[-3,2],[-4,2],[-1,2],[-5,4],[-2,2],[-7,5],[-1,2],[0,1],[0,1],[-8,3]],[[5572,9160],[2,2],[6,0],[5,-2],[1,1],[0,2],[-2,6],[1,1],[2,2],[3,2],[6,0],[3,0],[1,0],[6,-7],[4,-7],[3,-2],[6,-8],[2,-5],[1,-3],[2,0],[9,-1],[7,-2],[2,-1],[5,0],[4,2],[7,2],[2,2],[2,3],[4,-1],[4,-2],[5,-3],[5,-1],[6,-2],[2,-3],[4,0],[4,2],[3,8],[2,3],[3,2],[3,1],[3,1],[2,1],[3,5],[0,4],[0,9],[0,3],[2,5],[4,13],[1,4],[2,2],[2,1],[4,4],[6,8],[2,0],[4,1],[6,0],[4,-2],[1,0],[2,1],[4,2],[7,5],[4,1],[4,0],[5,-5],[6,-6],[4,-3],[10,-5],[10,-3],[5,-12],[-2,-4],[-2,-2],[-4,-4],[-5,-7],[-1,-3],[2,-3],[2,-3]],[[9850,3934],[-1,0],[0,1],[0,1],[1,-1],[0,-1]],[[36,3993],[-1,0],[0,1],[0,1],[1,-1],[0,-1]],[[41,4080],[-1,-1],[0,1],[-1,1],[0,1],[0,1],[1,0],[0,-1],[0,-1],[1,-1]],[[9957,4091],[0,-3],[-4,-1],[-1,2],[-1,0],[-2,-3],[0,-2],[0,-1],[-1,-1],[-4,-1],[-2,1],[1,2],[2,2],[1,0],[2,2],[1,3],[2,1],[2,1],[2,-1],[2,-1]],[[6,4093],[0,-2],[-1,0],[0,1],[-1,0],[0,-1],[0,-1],[0,-1],[0,1],[0,1],[0,2],[1,1],[1,-1]],[[34,4134],[0,-2],[-1,2],[-1,1],[2,1],[0,-2]],[[9981,4141],[-3,4],[0,2],[1,2],[1,1],[1,-2],[0,-5],[0,-2]],[[28,4148],[-1,0],[-1,1],[0,1],[0,2],[2,-2],[0,-2]],[[49,4150],[-2,-1],[-1,3],[1,2],[1,0],[0,-3],[1,-1]],[[9966,4163],[-1,-1],[-1,3],[1,4],[2,0],[0,-4],[-1,-2]],[[9951,4183],[0,-2],[1,-1],[1,-1],[2,-4],[3,-5],[2,-3],[0,-3],[-1,-3],[1,-5],[1,-5],[1,-9],[-2,-1],[-3,0],[-1,-2],[-1,1],[-2,-1],[-3,-3],[-2,-3],[-3,0],[-3,-1],[-3,0],[-2,2],[-4,3],[-5,1],[-2,2],[-1,3],[-2,6],[0,3],[0,3],[1,1],[2,1],[0,2],[0,2],[1,0],[0,1],[0,3],[0,3],[3,6],[3,4],[5,4],[4,0],[5,3],[2,2],[1,-1],[1,-3]],[[9983,4184],[-1,-2],[0,8],[1,0],[0,-1],[1,-2],[-1,-3]],[[29,4189],[-1,-2],[0,1],[0,3],[1,1],[-2,2],[0,1],[1,1],[1,-2],[1,-1],[0,-1],[0,-2],[-1,-1]],[[9922,4196],[-1,-1],[1,5],[0,1],[1,1],[1,0],[-1,-3],[-1,-3]],[[9999,4207],[-2,-2],[-1,2],[1,5],[-9997,5],[9999,-10]],[[0,4217],[3,5],[1,1],[1,-5],[-1,-5],[-3,-4],[-1,-2],[0,10]],[[9999,4231],[0,1],[-9999,2],[2,3],[1,0],[-1,-2],[0,-2],[-2,-2],[9999,0]],[[9999,4253],[-4,-8],[-2,-4],[-1,-4],[-4,-5],[-1,-6],[0,-7],[4,7],[4,5],[1,1],[1,0],[0,-2],[-1,-1],[0,-5],[1,-5],[-3,1],[-3,-1],[-3,-2],[-4,-1],[-1,0],[-1,1],[-1,1],[-1,3],[-3,0],[-4,-6],[-2,-5],[-1,0],[-2,1],[-2,-4],[-3,-1],[-1,3],[-1,4],[-1,3],[-3,1],[1,3],[1,2],[0,2],[1,2],[1,-1],[2,-1],[1,2],[2,0],[2,5],[2,3],[4,3],[3,2],[2,0],[2,1],[3,5],[3,3],[2,1],[2,1],[2,-1],[2,1],[-9995,3],[1,2],[1,0],[-1,-1],[-1,-1],[9999,0]],[[9919,4464],[-1,-1],[-2,0],[0,1],[0,1],[2,0],[1,0],[0,-1]],[[3342,2175],[-2,-1],[0,1],[-1,2],[0,3],[0,1],[1,0],[2,-3],[0,-3]],[[3376,2188],[1,-5],[-3,2],[0,2],[1,2],[1,0],[0,-1]],[[3305,2201],[2,-1],[2,1],[-1,-6],[-1,-3],[-3,0],[-2,4],[-1,2],[3,1],[1,2]],[[3325,2220],[4,-1],[4,4],[2,1],[2,-1],[2,-2],[2,0],[6,2],[1,0],[2,3],[2,-2],[1,-2],[0,-3],[-2,-2],[-1,-3],[-1,-2],[-3,-2],[-1,-3],[-4,-7],[-6,-10],[-2,0],[-4,-1],[-1,1],[-2,-1],[-1,-5],[-2,-3],[-1,-1],[-2,-1],[-1,-2],[-5,1],[-4,2],[-4,5],[6,7],[5,-1],[4,5],[3,2],[1,2],[1,2],[0,2],[-1,1],[-1,0],[-2,-1],[-3,-1],[-2,2],[1,1],[2,0],[5,2],[1,1],[-1,4],[-4,2],[-2,3],[-1,2],[1,2],[-2,4],[2,0],[2,-3],[4,-3]],[[3330,2223],[-4,0],[-1,2],[0,5],[3,1],[3,-2],[0,-2],[-1,-4]],[[3365,2231],[4,-4],[5,2],[3,-1],[1,-3],[-1,-3],[-1,1],[-2,-1],[0,-4],[1,-1],[6,-4],[1,0],[0,2],[-1,2],[0,3],[0,2],[2,1],[6,1],[2,-1],[3,-7],[-3,0],[-1,-3],[2,-2],[2,-1],[-1,-3],[0,-2],[-5,-2],[-4,-1],[-1,-3],[-4,-2],[-9,-5],[1,-3],[0,-2],[-1,-4],[-13,5],[-2,0],[4,-9],[-3,-2],[-2,1],[-3,-1],[-1,-6],[-4,4],[-3,6],[0,3],[3,6],[-1,3],[7,8],[2,3],[2,1],[2,1],[1,1],[0,2],[-1,3],[0,6],[6,8],[-1,5],[2,0]],[[6549,3955],[-4,-2],[-2,1],[-6,4],[-1,4],[-2,9],[0,3],[2,6],[4,2],[4,-1],[2,-1],[2,-7],[2,-7],[0,-8],[-1,-3]],[[6254,4436],[-1,0],[-1,1],[-1,4],[1,4],[0,2],[-1,5],[1,3],[1,-3],[1,0],[2,-3],[-1,-4],[0,-1],[-1,-4],[0,-4]],[[3483,5318],[1,1],[1,0],[1,4],[2,3],[5,14],[1,6],[0,3],[1,7],[-1,9],[0,2],[4,10],[1,5],[0,5],[1,4],[-1,1],[0,1],[-2,4],[0,4],[-3,4],[-1,3],[-3,9],[0,5],[-1,2],[0,2],[0,2],[-1,6],[-1,5],[0,3],[1,6],[-1,6],[0,3],[-1,5],[1,5],[0,2],[0,4],[3,10],[3,5],[2,4]],[[3495,5492],[2,4],[3,15],[2,5],[2,1],[11,-13],[5,-1],[10,-7],[4,-8],[9,-15],[4,-5],[0,-3],[-1,-6],[3,5],[5,-8],[1,-5],[1,-7],[0,-5],[-1,-3],[0,-2],[1,3],[1,2],[0,5],[2,7],[1,0],[1,-4],[3,-16],[0,-4],[1,-5],[0,-2],[0,-2]],[[3310,6019],[0,-4],[-1,0],[-1,2],[-5,0],[0,3],[0,1],[2,4],[-3,1],[-1,2],[-2,9],[0,2],[1,1],[2,1],[2,-3],[3,-4],[0,-1],[0,-3],[1,-3],[1,-1],[1,-7]],[[3299,6099],[-2,0],[-1,4],[2,2],[0,1],[1,-3],[1,-2],[-1,-2]],[[3289,6106],[-2,-3],[-1,1],[-2,5],[-1,14],[1,2],[0,1],[3,-2],[2,-2],[1,-1],[-1,-3],[1,-10],[-1,-2]],[[3296,6119],[-3,-1],[-2,1],[-1,4],[1,3],[0,4],[0,3],[1,2],[2,-3],[0,-3],[1,-3],[5,-6],[-4,-1]],[[5263,7649],[-1,-8],[1,-3],[1,-1],[0,-2],[1,-23],[0,-2],[-4,-9],[0,-2],[-1,-12],[0,-3],[-1,-3],[-2,-9],[-2,-4],[-5,5],[-3,2],[-2,3],[-1,1],[1,2],[1,3],[0,2],[-3,2],[-1,1],[0,3],[1,3],[-1,4],[-2,-1],[-1,1],[0,2],[1,2],[1,2],[0,3],[-1,2],[-2,2],[-1,4],[2,2],[1,1],[-1,4],[-1,0],[-1,1],[1,1],[1,3],[3,7],[2,3],[5,2],[2,1],[1,3],[1,1],[2,0],[2,-1],[0,-1],[1,1],[1,3],[-1,3],[1,7],[1,5],[1,0],[1,-3],[0,-2],[1,-5],[0,-3]],[[4967,7828],[-1,-5],[-2,4],[-3,4],[0,4],[0,1],[3,-3],[3,-5]],[[5160,8037],[1,-2],[2,-1],[1,0],[1,-2],[1,0],[2,0],[1,2],[2,1],[2,0],[1,-1],[2,-2]],[[5195,7829],[-3,-3],[-4,-3],[0,-2],[0,-3],[1,-1],[2,-3],[2,-5],[1,-4],[3,-5],[1,-1],[0,-1],[-1,-2],[-1,-6],[-1,-1],[-2,-1],[-3,-4],[-2,0],[-3,0],[-1,-1],[0,-3],[1,-3],[1,-3],[1,-3],[1,-2],[3,-1],[1,0],[1,-1],[1,-1],[1,-7],[-1,-1],[-1,-1],[-1,-2],[-2,-4],[0,-3],[1,-3],[0,-2],[-1,-2],[1,-4],[2,-3],[5,-4],[5,-4],[1,-1],[7,3],[1,0],[0,-3],[1,-2],[-1,-3],[-2,-4],[-2,-3],[-1,-3],[1,-2],[0,-3]],[[5208,7705],[-2,-1]],[[5206,7704],[-1,1],[-1,-1],[0,-1]],[[5204,7703],[-3,-2],[-2,-3],[-9,-12],[-4,-4],[-1,-2],[-1,-4],[-2,-4],[-2,-2],[-5,-1],[-6,-4],[-2,1],[-6,0],[-4,5],[-7,3],[-3,6],[-3,1],[-2,0],[-2,1],[0,2],[0,2],[-2,-1],[-2,0],[-1,-1],[-1,-1],[-1,1],[-1,0],[1,-2],[-3,0],[-2,1],[-6,3],[-1,1],[-4,1],[-2,2],[-1,3],[-1,1],[-1,1],[-4,-2],[-1,-3],[-2,-3],[-15,-15],[-3,-7],[-3,-9],[0,-5],[1,-14],[3,-8],[1,-1]],[[4950,7684],[4,2],[4,7],[4,26],[3,31],[2,6],[3,2],[-3,4],[-1,-2],[0,-2],[-1,-1],[1,28],[2,10],[1,11],[4,-4],[4,-4],[1,-4],[2,-13],[2,-3],[2,-2],[-1,3],[-1,2],[-3,17],[-1,5],[-3,4],[-8,8],[-1,2],[0,3],[3,0],[2,-2],[0,2],[-1,2],[-1,7],[-1,16],[0,3],[0,3],[-3,1],[-2,0],[-2,1],[-11,10],[-4,10],[-4,7],[-1,3],[0,3],[2,7],[-1,4],[-2,1],[-2,2],[2,4],[1,2],[2,1],[3,-1],[3,-2],[2,-1],[-6,6],[-11,-2],[-2,1],[-2,1],[-1,4],[2,2],[1,3],[-1,2],[-2,1],[-4,0],[-2,0],[-1,1],[2,4],[-2,1],[-2,-1],[-3,0],[-3,1],[-2,4],[-2,0],[-1,-1],[-2,2],[-2,0],[-1,0],[-2,2],[-11,5],[-5,1],[-4,-2],[-2,0],[-2,3],[-1,6],[-7,4],[1,2],[3,1],[4,2],[1,2],[-3,3],[-2,1],[-1,1],[-1,2],[2,1],[1,0],[2,-1],[5,1],[-2,3],[-2,0],[-1,1],[-3,0],[-2,-1],[-4,0],[0,3],[-1,2],[1,6],[6,4],[13,5],[5,0],[4,0],[5,4],[2,2],[7,2],[6,-3],[6,-11],[3,-4],[7,7],[10,0],[2,-4],[1,3],[2,4],[1,-2],[1,-2],[11,0],[1,1],[-3,3],[-2,6],[0,23],[-3,6],[-4,10],[-1,6],[-1,2],[1,4],[4,-1],[3,0],[7,2],[3,-2],[-1,-4],[1,-6],[1,-3],[2,-4],[5,1],[5,-2],[7,0],[10,-4],[4,2],[4,4],[8,3],[1,1],[-5,0],[-4,2],[0,3],[0,3],[2,6],[12,9],[8,3],[9,5],[5,5],[3,7],[1,1],[1,1],[-1,3],[0,25],[1,5],[2,4],[3,3],[4,3],[14,4],[3,2]],[[4813,8723],[1,-2],[-1,0],[-2,2],[-3,5],[-1,4],[0,2],[1,0],[0,-2],[3,-1],[1,-1],[0,-2],[1,-2],[0,-3]],[[4816,8744],[-1,-2],[-1,0],[-2,2],[-2,2],[-1,1],[-1,2],[1,0],[2,0],[3,-2],[1,-2],[1,-1]],[[4800,8763],[2,-2],[1,-2],[-1,-1],[-2,-1],[-2,1],[-3,1],[-2,4],[3,0],[3,1],[1,-1]],[[4815,8768],[0,-8],[-1,0],[-3,2],[-1,1],[0,-1],[0,-2],[3,-6],[0,-1],[0,-1],[-3,2],[-5,6],[-5,11],[6,2],[5,-3],[4,-2]],[[4822,8770],[-2,-4],[-2,0],[0,1],[-1,1],[1,3],[-1,4],[3,-3],[2,-2]],[[9526,5491],[1,-3],[-2,1],[0,1],[1,1]],[[9397,5576],[-2,-1],[-2,1],[-1,4],[0,1],[0,3],[1,2],[3,-2],[1,-3],[0,-2],[0,-3]],[[9212,5607],[-1,-1],[-1,0],[-1,1],[1,0],[0,1],[0,1],[1,0],[1,-1],[0,-1]],[[9218,5612],[-1,0],[0,1],[1,1],[1,-1],[-1,-1]],[[8836,5731],[-2,-5],[0,2],[1,3],[1,3],[1,2],[1,0],[0,-2],[0,-3],[-2,0]],[[5309,4958],[-3,5],[-2,10],[-3,6],[-6,9],[-1,7],[-7,15],[-10,16],[-6,13],[-1,3],[1,-1],[6,-6],[1,0],[1,2],[-3,3],[-3,3],[-2,2],[-3,0],[-1,2],[-1,5],[-1,3],[-1,4],[-3,8],[-1,3],[-2,4],[1,1],[4,-4],[0,1],[0,3],[-4,3],[-2,1],[-1,2],[1,3],[-3,12],[-3,8],[-1,4],[8,-18],[1,-1],[2,1],[3,2],[-1,2],[-1,3],[-1,-1],[-2,-1],[-1,2],[-1,1],[2,9],[-1,0],[0,-2],[-1,0],[-2,-1],[-4,5],[-3,13],[-1,3],[-1,4],[-1,2],[-4,19],[2,-2],[2,-5],[3,1],[1,3],[2,0],[1,1],[1,3],[5,13],[1,16],[0,10],[-1,10],[1,4],[1,-3],[0,-3],[1,-3],[1,-2],[3,-1],[5,-3],[2,-3],[0,5],[5,4],[-1,1],[-5,-1],[-6,6],[-2,4],[-2,7],[-2,4],[0,3],[4,3],[1,0],[1,-4],[1,-1],[1,0],[0,3],[0,9],[-2,12],[1,2]],[[5266,5243],[1,1],[1,2],[1,0],[2,0],[0,-3],[1,-2],[1,0],[2,-2],[1,1],[1,1],[1,1],[4,0],[4,0],[8,0],[7,-1],[8,0],[5,0],[0,7],[0,11],[0,13],[0,12],[0,11],[0,14]],[[4970,8103],[-2,-2],[-1,-2],[-1,-1],[-1,0],[-2,0],[-6,4],[-1,0],[1,2],[4,2],[2,2],[5,-2],[2,-3]],[[4883,8255],[1,-1],[3,0],[-1,-2],[-3,-3],[-2,-3],[-3,-2],[-1,3],[-2,0],[-2,5],[0,7],[3,2],[4,0],[3,-6]],[[4827,8299],[-3,1],[-1,-1],[-1,-1],[-1,0],[-3,-1],[-3,0],[-1,2],[1,5],[-1,1],[-2,0],[-1,1],[-2,4],[0,1],[-1,2],[-1,3],[-2,2],[-1,0],[-3,-3],[-2,-4],[1,-1],[1,-2],[-1,-2],[-3,-3],[-1,-1],[-1,-1],[-1,1],[-4,0],[-2,0],[-2,3],[-5,2],[0,3],[-1,1],[-6,7],[-1,2],[1,2],[2,2],[7,3],[1,1],[0,2],[-2,1],[-2,1],[0,1],[0,1],[1,1],[2,1],[2,-1],[1,1],[2,1],[2,1],[1,4],[2,3],[0,1],[1,6],[1,1],[4,4]],[[4799,8357],[1,-2],[2,-1],[2,2],[3,6],[1,1],[2,-1],[3,1],[7,3],[2,0],[4,-2],[3,0],[3,-4],[1,-7],[3,-6],[5,-6],[0,-3],[-2,-2],[-3,-2],[0,-3],[2,1],[2,1],[4,-1],[2,-2],[1,-4],[1,-3],[-1,-3],[-1,1],[-1,3],[-1,1],[-2,1],[1,-4],[-1,-6],[1,0],[2,-1],[-1,-5],[-3,-2],[-3,0],[-1,-2],[-1,-3],[-1,-4],[-3,-2],[-2,1],[-3,1]],[[4858,8378],[-4,0],[-1,0],[-2,1],[-1,8],[0,3],[1,1],[1,2],[2,0],[1,-1],[1,-2],[2,-5],[0,-5],[0,-2]],[[4829,8405],[1,-7],[1,-5],[0,-1],[-1,-2],[-4,-3],[-2,0],[1,3],[-1,4],[1,2],[-1,1],[0,-1],[-4,-4],[-1,0],[0,1],[1,3],[0,2],[0,2],[1,1],[1,1],[1,0],[1,-1],[3,3],[2,1]],[[4834,8399],[-1,-1],[-1,0],[-1,1],[0,2],[0,2],[1,2],[3,3],[-1,1],[0,1],[1,2],[3,4],[1,0],[1,0],[-2,-6],[-4,-11]],[[4839,8429],[-11,-3],[-4,0],[0,2],[1,1],[3,1],[1,8],[-5,3],[0,1],[0,2],[1,1],[3,1],[1,1],[1,-1],[2,-2],[2,-4],[3,-1],[2,-1],[0,-9]],[[4816,8443],[-2,0],[0,1],[3,3],[2,1],[-1,-3],[-2,-2]],[[4794,8465],[-3,-1],[-1,1],[1,2],[1,1],[2,-1],[0,-1],[0,-1]],[[4825,8465],[-1,-1],[-1,0],[-1,1],[-1,3],[3,2],[1,-1],[1,-2],[0,-1],[-1,-1]],[[4798,8474],[-1,-1],[-2,1],[-1,0],[0,4],[-1,2],[1,4],[0,5],[3,0],[1,-1],[0,-14]],[[4829,8496],[0,-3],[-1,-3],[1,-3],[0,-2],[1,-1],[1,-1],[5,-1],[5,0],[1,-1],[0,-1],[-1,-2],[-2,-3],[-4,-4],[-1,-1],[-1,-1],[-1,1],[0,8],[-4,-1],[-3,1],[-1,1],[-1,2],[-2,5],[-7,2],[-2,3],[0,1],[0,1],[1,2],[2,0],[1,0],[1,1],[0,1],[-1,2],[6,3],[1,3],[1,1],[2,-2],[2,-3],[1,-5]],[[4799,8506],[4,-3],[-3,-5],[-4,0],[-5,4],[0,2],[1,0],[1,1],[1,-1],[2,1],[2,0],[1,1]],[[4827,8545],[-3,-10],[-2,0],[-1,-2],[-4,-3],[4,0],[1,-1],[0,-2],[-1,-1],[-4,-5],[-3,-2],[-3,-4],[-2,0],[-1,-4],[-2,-1],[-1,1],[-2,3],[3,3],[1,1],[2,2],[0,1],[-4,2],[-2,2],[1,1],[1,1],[0,1],[-1,1],[-1,0],[0,1],[-1,2],[1,3],[1,1],[0,1],[1,1],[1,-1],[2,-2],[2,1],[3,-1],[0,1],[-2,5],[0,1],[1,1],[6,4],[7,6],[1,0],[1,0],[0,-3],[0,-5]],[[4913,8554],[0,-5],[0,-1],[-1,-2],[-2,-3],[-5,-5],[-10,-10],[-6,-6],[-1,-2],[-1,-4],[4,-1],[1,-1],[0,-2],[-6,-6],[-1,-6],[4,0],[3,1],[7,4],[6,3],[3,0],[6,-2],[1,0],[3,1],[2,0],[17,-1],[5,1],[3,-1],[3,-4],[2,-7],[0,-1],[-1,-3],[-3,-4],[-3,-5],[0,-3],[-1,-3],[-1,-3],[-4,-14],[-5,-8],[-2,-5],[-3,-4],[-2,-3],[-3,-2],[-7,-2],[-2,-1],[-3,-3],[-2,-1],[3,0],[3,2],[5,0],[7,-4],[-1,-4],[-2,-3],[-6,-1],[-6,-6],[-2,-2],[-3,-1],[-3,0],[-6,2],[-3,2],[3,-3],[2,-2],[16,-3],[1,0],[5,4],[6,0],[13,-7],[3,-6],[6,-8],[2,-3],[3,-2],[1,-5],[2,-13],[3,-14],[4,-14],[1,-4],[2,-3],[11,-7],[3,-2],[4,-6],[4,-7],[4,-5],[4,-4],[-2,-2],[-1,-4],[1,-4],[1,-5],[4,-7],[3,-7],[-1,1],[-1,0],[-2,0],[-2,1],[-2,2],[-3,3],[-5,-1],[-3,0],[-3,0],[5,-1],[5,-1],[12,-13],[4,-7],[2,-10],[-1,-5],[-3,-3],[-2,-3],[-2,-4],[6,-6],[2,1],[1,0],[1,2],[3,5],[1,2],[4,0],[3,0],[4,-1],[3,0],[6,-2],[3,-2],[8,-8],[1,-4],[1,-6],[0,-6],[-1,-6],[-2,-5],[-1,-7],[0,-2],[-1,-2],[-4,-5],[-3,-3],[-1,1],[-1,0],[0,-1],[1,-3],[0,-3],[-2,-2],[-3,-1],[-4,1],[-6,-5],[4,-2],[1,-2],[-1,-5],[-2,-2],[-3,-1],[-3,0],[-2,-1],[-3,-2],[3,1],[2,-1],[1,-3],[2,-1],[5,-2],[4,0],[6,1],[4,0],[1,-1],[0,-3],[-1,-7],[-1,-2],[-8,-6],[-2,-4],[-1,-3],[-5,1],[-2,-3],[-5,-2],[-3,-2],[-3,-3],[-3,0],[-11,3],[-7,-1],[-9,-2],[-3,0],[-3,3],[-4,1],[-4,1],[-4,2],[2,-4],[-5,-4],[-2,-1],[-2,0],[-5,-1],[-5,1],[1,-4],[1,-2],[-1,-1],[-1,-1],[-9,2],[-1,0],[-1,-2],[-3,1],[-3,3],[-4,2],[-3,1],[-3,0],[-11,-5],[-2,-5],[-1,-7],[-2,-6],[-3,-4],[-3,-1],[-3,3],[-5,4],[-2,2],[-1,0],[-1,0],[-2,-2],[-2,0],[-4,-1],[-6,-3],[-2,-2],[-6,-5],[-1,-2],[-2,-5],[-3,-1],[-2,3],[-3,2],[-4,-1],[-2,-2],[-1,1],[0,3],[3,4],[6,3],[6,7],[2,5],[2,2],[1,2],[2,0],[0,3],[8,11],[1,3],[0,5],[1,4],[6,3],[3,9],[1,1],[9,2],[6,-1],[7,-1],[3,0],[3,0],[3,3],[4,9],[3,4],[3,3],[3,4],[4,8],[-3,-3],[-4,-4],[-2,-2],[-6,-3],[-3,-2],[-5,-6],[-1,0],[-7,1],[-6,7],[-4,3],[-1,1],[-2,-1],[-3,-1],[-3,0],[2,3],[2,2],[-5,2],[-2,1],[-1,2],[-4,0],[-2,0],[-4,-3],[-5,-4],[-6,5],[-1,2],[0,4],[-1,3],[-2,1],[3,4],[2,3],[6,2],[9,7],[5,2],[4,5],[2,3],[2,4],[1,4],[2,4],[-2,1],[-1,3],[0,3],[1,2],[0,4],[-2,3],[0,3],[1,3],[-4,-1],[-3,0],[-4,-2],[-3,-3],[-3,-1],[0,3],[2,2],[3,4],[3,3],[1,3],[1,3],[2,2],[4,4],[9,5],[1,0],[3,0],[3,0],[3,2],[3,1],[6,-5],[-1,7],[2,2],[4,-7],[2,-1],[3,1],[-1,2],[-2,0],[-1,1],[-2,2],[-3,7],[1,4],[1,5],[2,4],[-1,1],[-2,1],[0,4],[0,4],[4,3],[1,5],[0,5],[0,2],[-4,0],[-1,-1],[-2,-2],[-1,0],[-5,6],[-2,5],[-5,9],[0,6],[3,12],[6,7],[6,3],[-1,1],[-10,0],[-3,-1],[-3,-3],[-2,-1],[-2,-1],[-1,-1],[-2,-3],[-1,-1],[-4,0],[-1,0],[-1,1],[-1,2],[-2,1],[-1,-1],[-3,-3],[-3,-1],[-4,2],[-4,3],[-1,-1],[-1,-3],[-1,-5],[-3,4],[-3,6],[-1,3],[0,4],[1,1],[2,-1],[3,9],[5,12],[1,4],[2,5],[-1,3],[-1,2],[-4,6],[0,5],[0,5],[1,3],[1,1],[6,0],[-2,1],[-5,5],[0,2],[1,4],[-1,-2],[-2,-5],[-2,-1],[-3,-1],[-1,-3],[0,-1],[-2,0],[0,-2],[-1,0],[0,2],[0,4],[0,4],[2,3],[5,7],[-3,-2],[-5,-7],[-3,-4],[-1,-1],[0,-1],[0,-1],[1,-8],[0,-3],[-5,-22],[-1,-2],[-1,-1],[-3,0],[-1,2],[0,1],[1,3],[2,11],[1,3],[1,2],[3,5],[-2,-1],[-1,1],[-1,1],[1,13],[1,5],[1,7],[1,5],[2,5],[1,5],[1,2],[1,4],[2,4],[1,4],[-10,-11],[-2,-2],[-4,0],[-2,2],[-2,2],[-1,5],[-3,0],[-2,1],[0,1],[3,2],[4,1],[4,4],[-3,3],[0,1],[3,3],[4,8],[1,7],[-2,4],[-1,2],[-3,3],[-1,3],[0,2],[2,2],[2,1],[2,1],[-2,2],[-1,2],[-1,2],[0,1],[1,7],[1,2],[2,4],[7,-1],[1,2],[1,0],[3,-1],[0,1],[-6,8],[-1,2],[2,4],[0,2],[0,2],[0,1],[2,1],[6,0],[1,1],[0,2],[-2,2],[0,3],[0,2],[1,4],[0,1],[1,3],[1,1],[2,0],[3,0],[1,-2],[2,-2],[1,0],[4,3],[1,0],[1,-3],[7,3],[9,1],[6,1],[6,1],[5,2],[6,-1],[0,-1],[0,-2],[-2,-4]],[[4918,8567],[-1,1],[-2,4],[3,1],[1,-1],[0,-1],[-1,-4]],[[4912,8570],[-2,-1],[-2,1],[-2,3],[-1,2],[0,2],[1,0],[3,0],[1,-3],[0,-2],[0,-1],[2,0],[0,-1]],[[4915,8584],[-1,-2],[2,0],[3,-1],[2,0],[2,-1],[-1,-3],[-1,-1],[-1,0],[-4,3],[-4,-2],[-1,1],[-1,1],[0,1],[0,2],[-1,0],[-1,-2],[-1,0],[0,1],[-1,2],[1,3],[1,4],[1,0],[3,0],[3,-2],[1,-2],[0,-1],[-1,-1]],[[4929,8595],[-3,0],[1,4],[2,1],[4,-1],[-1,-1],[-3,-3]],[[4924,8593],[-3,-2],[-1,2],[0,3],[-3,2],[-1,1],[-1,2],[2,1],[3,-3],[1,-3],[3,-1],[0,-2]],[[4963,8671],[1,-4],[1,1],[2,-4],[1,0],[2,1],[0,-3],[-2,-10],[-1,-2],[0,-3],[0,-1],[-1,-6],[-1,-2],[-1,-5],[-1,0],[-1,2],[1,7],[1,4],[0,3],[-1,2],[-3,0],[-2,-1],[0,1],[0,1],[-1,1],[-2,0],[-1,0],[-1,2],[0,1],[3,1],[2,0],[3,2],[-2,8],[-3,0],[0,1],[0,2],[2,0],[2,4],[2,1],[1,0],[0,-4]],[[4971,8669],[-1,0],[-3,5],[2,7],[3,0],[0,-2],[0,-1],[-2,-1],[1,-3],[0,-4],[0,-1]],[[4978,8686],[-1,-5],[0,-2],[-3,0],[0,1],[-1,3],[1,3],[1,1],[0,-1],[2,2],[1,-2]],[[6206,7552],[0,1],[0,1],[-1,2],[-1,0],[-2,0],[-2,1],[-2,2],[0,2],[1,1],[-1,1],[-3,3],[-4,6],[-2,2],[-1,4],[-1,1],[-2,0],[-2,0],[-1,-1],[-2,-6],[-1,-1],[-3,0],[-2,2],[-2,0],[-4,1],[-4,0],[-3,-4],[-1,1],[-2,1],[-4,2],[-2,1]],[[6152,7575],[6,11],[1,6],[0,4],[0,5],[-2,10],[-3,15],[-2,15],[-2,4],[-8,6],[-2,6],[-6,7],[-9,4],[-2,1],[-7,10],[-6,6]],[[6110,7685],[1,3],[2,4],[2,1],[5,-1],[5,-2],[4,1],[4,-3],[4,-3],[4,-3],[7,-2],[3,-4],[3,-3],[13,-2],[1,1],[1,0],[5,2],[4,-1],[4,-4],[2,1],[3,0],[4,-2],[3,-2],[0,-3],[2,-3],[7,-5],[6,-3],[2,-3],[5,-3],[0,-1],[0,-2],[-1,-2],[-1,-3],[1,-1],[2,-1],[3,0],[2,1],[2,1],[3,3],[4,2],[5,3],[2,0],[2,-1],[1,-1],[2,-6],[2,8],[1,1],[2,-2],[3,-2],[3,-1],[1,-2],[4,-7],[6,1],[3,-1],[1,-1],[1,-2],[-2,-6],[-1,-8],[0,-1],[3,-3],[3,-3],[2,-2],[1,-2],[3,-2],[3,-1],[1,0],[2,-1],[4,-4]],[[4930,8035],[-1,-4],[-3,1],[0,1],[3,2],[1,0]],[[4998,5824],[1,-3],[1,-2],[-1,-8],[-1,-5],[-1,-5],[0,-2],[1,-3],[3,-4],[1,-2],[2,-4],[2,-4],[3,-5],[1,0],[0,-2],[0,-2],[-1,-18],[0,-4],[0,-3],[0,-6],[-1,-1],[-1,0],[0,-2],[0,-1],[2,-1],[0,-1],[-2,-1],[-1,-2],[1,-2],[-1,-2],[0,-1],[1,-1],[1,0],[2,3],[1,0],[1,0],[2,-5],[0,-2],[-1,-8],[-1,-6],[0,-8],[1,-5],[0,-2],[-1,-3],[-2,-3],[0,-2],[1,-4],[2,-4],[4,-6],[2,-7],[0,-3],[-2,-3],[-1,-2],[0,-4],[0,-24],[-3,-11],[0,-2],[1,-4],[0,-2],[2,-1],[1,-2],[0,-7],[-1,-7],[0,-4],[0,-2],[-2,-1],[0,-3],[0,-2],[0,-3],[1,-2],[1,-4],[2,-8],[1,-1],[0,-2],[0,-2],[1,-4],[2,-3],[3,-4],[2,0],[0,-3],[2,-4],[1,-2],[1,-1],[1,0],[0,-3]],[[5032,5535],[-2,-3],[-1,-3],[-1,-5],[-2,-6],[-6,-2],[-2,0],[-11,-1],[-11,-10],[-6,-4],[-4,-7],[-5,-4],[-4,-5],[-7,-3],[-12,-8],[-4,-3],[-4,-6],[-6,-7],[-3,0],[-4,7],[-4,3],[-9,5],[-7,1],[-3,3],[-1,0]],[[4914,5479],[2,0]],[[4683,5898],[-1,-1],[0,-4],[-1,-4],[-1,-3],[0,-1],[2,-4],[4,-5],[1,-1],[1,1],[2,4],[2,5],[2,2],[2,0],[1,-3],[2,-7],[2,-6],[0,-1],[1,-1],[1,0],[1,2],[1,1],[0,2],[4,9],[2,2],[1,1],[2,1],[3,-2],[4,-3],[6,-5],[2,0],[1,0],[1,6],[2,2],[3,3],[2,2],[2,0],[0,1],[0,3],[0,2],[-1,4],[0,2],[0,1],[2,0],[3,0],[2,-2],[2,-3],[2,-3],[1,-7],[1,-7],[3,-10],[0,-7],[-1,-8],[2,-1],[1,-1],[1,-1],[1,-6],[1,-2],[2,0],[2,-4],[2,-1],[0,-2],[0,-1],[-1,-2],[-1,-1],[-1,-3],[-1,-3],[-3,-9],[0,-1],[0,-1],[1,0],[2,0],[2,3],[2,-1],[2,-2],[1,-3],[0,-3],[-1,-4],[0,-4],[1,-8],[1,-7],[1,-3],[6,-7],[1,-2],[0,-3],[0,-4]],[[4764,5619],[-1,2],[-1,2],[-1,3],[-1,1],[-1,0],[-1,-2],[-1,-3],[0,-4],[0,-2],[-1,-2],[-2,-4],[0,-4],[-1,-4],[-2,0],[0,1],[-1,-1],[-2,-2],[-2,-1],[0,2],[-1,2],[-1,3],[-2,3],[-2,2],[-1,-1],[-2,0],[0,1],[0,1],[1,4],[1,4],[0,4],[0,4],[0,5],[-2,4],[0,2],[0,4],[0,3],[0,2],[-1,3],[0,3],[-1,1],[0,5],[0,5],[-1,1],[-1,2],[-1,2],[-1,2],[-1,0],[0,-1],[-1,0],[-1,4],[0,1],[-1,-2],[-7,-5],[0,2],[-1,3],[-1,1],[-3,-2],[-1,0]],[[4714,5673],[-2,0],[-1,-1],[-3,-7],[-2,-2],[-1,0],[-1,1],[-1,-1],[-1,1],[0,2],[1,2],[1,7],[4,8],[0,1],[-2,5],[-1,6],[0,6],[0,5],[-3,1],[-1,1],[0,1],[1,4],[1,4],[0,2],[0,1],[-2,4],[-3,8],[-3,8],[-2,7],[-2,4],[-2,4],[-1,4],[-2,1],[-5,0],[-7,-1],[-5,0],[-1,-4],[-6,-2],[-4,3],[-4,-2],[-2,-2],[0,-4],[-1,-5],[-1,-2],[-1,-2],[0,-2],[-1,-2],[-1,-5],[-2,-6],[-2,-4],[-3,-3],[-2,-6],[0,-3],[-2,-2],[-1,-1],[-2,1],[-1,0],[-2,-1]],[[4630,5705],[0,2],[1,5],[-1,3],[-3,5],[0,3],[-1,3],[-3,7],[-4,0],[1,6],[0,8],[-1,4],[0,5],[0,-1],[-2,-3],[-1,1],[-4,5],[-2,5],[0,3],[-1,2],[-1,-1],[-2,0],[-7,7],[-5,17],[0,4],[0,7],[0,2],[-2,-5],[-1,3],[-1,7],[-1,4],[-2,2],[-1,1],[-1,-2],[-1,-8],[-1,0],[-2,2],[1,6]],[[4582,5814],[1,3],[1,5],[5,19],[2,4],[1,2],[2,0],[4,2],[4,5],[1,1],[4,0],[5,1],[6,4],[0,5],[0,8],[0,3],[-2,2],[-2,2],[-1,3],[-1,2],[0,2],[2,2],[1,1],[2,0],[1,1],[1,2],[0,5],[1,5],[-2,6],[0,5]],[[4618,5914],[9,-1],[1,0],[4,-1],[3,0],[1,-1],[1,-1],[0,-2],[-1,-2],[1,-3],[1,-1],[1,1],[1,2],[0,1],[2,-1],[2,-4],[2,-1],[3,-2],[2,-1],[3,0],[1,-2],[3,-1],[4,3],[3,1],[4,0],[3,-1],[6,3],[3,-1],[2,-1]],[[4534,5936],[0,5],[-2,11],[2,5],[3,3],[1,-2],[0,-5],[2,-3],[4,-2],[4,2],[2,-1],[0,2],[1,4],[4,1],[6,1],[5,2],[4,0],[1,1],[-4,1],[-8,-2],[-8,-1],[-6,-6],[-2,1],[-3,6],[-1,7]],[[4539,5966],[8,1],[8,0],[9,-1],[5,0],[2,8],[4,4],[5,1],[2,0],[3,-1],[4,-7],[3,-1],[3,-2],[2,-3],[2,-3],[3,-1],[1,0],[2,1],[2,1],[4,1],[4,-4],[0,-4],[0,-4],[-5,-2],[-6,-4],[-6,2],[-6,5],[-4,3],[-1,2],[-3,2],[-2,2],[-2,2],[-1,1],[-1,-2],[-1,-2],[-1,-4],[-1,-2],[-6,-1],[-4,-1],[-3,-1],[-2,-1],[0,-9],[-6,0],[-5,0],[-6,0],[-6,-1],[-1,-2],[-2,-3]],[[4558,5822],[0,-1],[-2,0],[0,1],[0,1],[1,5],[1,-1],[0,-1],[0,-4]],[[4552,5821],[-2,-1],[-1,3],[0,1],[1,1],[1,2],[1,1],[1,1],[1,-5],[-1,-2],[-1,-1]],[[4563,5830],[0,-3],[-1,1],[-1,1],[1,4],[1,2],[1,-1],[1,0],[-1,-2],[0,-1],[-1,-1]],[[4558,5844],[-1,-2],[-2,1],[-1,2],[1,3],[1,4],[1,-1],[1,-7]],[[4568,5848],[-1,-1],[-1,1],[2,5],[1,1],[0,-4],[-1,-1],[0,-1]],[[4555,5868],[-1,-7],[-2,1],[-1,4],[0,2],[3,0],[1,0]],[[4582,5814],[-2,4],[1,8],[-1,-1],[-2,-6],[-1,0],[0,7],[-1,1],[-2,-1],[-2,4],[0,3],[0,4],[1,2],[0,1],[-1,1],[-2,-1],[0,1],[1,5],[5,4],[2,1],[3,1],[-2,3],[-3,2],[-2,-1],[-1,-3],[-2,0],[-2,6],[0,3],[1,4],[1,2],[6,0],[2,2],[1,0],[1,2],[0,1],[-1,0],[-2,-2],[-7,1],[-2,-2],[-4,-5],[-5,-4],[-3,2],[1,7],[-1,1],[-1,2],[-5,-3],[-4,4],[-1,4],[0,5],[2,4],[0,2],[-2,0],[-3,-2],[-8,8]],[[4535,5895],[2,1],[4,-1],[3,1],[2,2],[2,3],[3,0],[9,-1],[7,3],[5,6],[5,5],[7,0],[7,0],[10,0],[8,0],[9,0]],[[5266,5243],[0,2],[-2,3],[-2,0],[-2,1],[2,9],[1,8],[3,7],[1,1],[0,3],[2,10],[3,8],[-1,8],[1,14]],[[5242,5400],[1,0],[4,0],[1,-3],[0,-4],[-4,-13],[-1,-6],[-2,-5],[-1,0],[-5,3],[-1,2],[0,2],[0,5],[1,2],[2,1],[1,0],[1,6],[0,5],[1,4],[2,1]],[[5662,7231],[2,-1],[2,0],[1,1],[2,3],[2,0],[1,-3],[-2,-2],[-1,-1],[1,0],[1,-2],[2,1],[0,-3],[1,-2],[1,-1],[1,-1],[2,1],[3,1],[3,1],[2,1],[8,-1],[3,-3],[5,-1],[5,-2],[3,2],[4,1],[1,-1],[-1,-9],[1,-2],[1,-1],[1,0],[2,3],[3,2],[4,0],[4,6],[1,0],[-1,-3],[-1,-6],[0,-4],[-1,-3],[-2,-1],[-3,0],[-6,0],[-6,-1],[-11,-3],[-12,-1],[-1,1],[0,4],[0,2],[-1,2],[-4,1],[-3,3],[-13,4],[-3,1],[-5,-1],[-2,0],[-1,2],[-1,2],[0,7],[0,7],[1,1],[1,-2],[1,-1],[1,2],[0,4],[1,3],[1,-2],[0,-4],[2,-1]],[[5754,7227],[-1,-4],[-1,3],[1,3],[-2,5],[3,8],[0,3],[2,2],[-1,-6],[-1,-5],[1,-4],[1,-5],[-2,0]],[[5640,7268],[0,-2],[-3,1],[-1,3],[0,6],[0,3],[1,0],[1,-3],[3,-4],[-1,-4]],[[5773,7253],[-2,-1],[-1,0],[-1,3],[1,6],[-1,4],[0,2],[2,3],[1,3],[3,4],[7,5],[2,0],[0,-3],[-3,-10],[-2,-4],[1,-4],[-4,-1],[-3,-7]],[[5707,7280],[-1,-3],[-2,1],[1,1],[0,2],[0,2],[0,1],[0,1],[2,-3],[0,-2]],[[5734,7291],[-2,-1],[-1,-3],[-2,2],[0,3],[2,-1],[1,1],[0,2],[1,-1],[1,-2]],[[5773,7289],[0,-1],[-2,3],[0,1],[2,2],[1,-1],[0,-2],[-1,-2]],[[5681,7301],[0,-3],[0,-1],[-6,-2],[1,4],[0,1],[2,-2],[1,1],[0,1],[2,1]],[[5704,7296],[0,-1],[-2,4],[-1,2],[1,2],[3,-4],[-1,-3]],[[5748,7299],[-1,0],[1,3],[3,4],[4,3],[2,0],[2,-2],[-4,-3],[-1,-2],[-4,0],[-2,-3]],[[5718,7303],[-3,-1],[0,1],[1,1],[1,1],[1,1],[2,2],[2,3],[1,-2],[-2,-1],[-3,-5]],[[5686,7310],[-1,3],[0,2],[0,1],[1,0],[1,-4],[-1,-2]],[[5750,7313],[-3,-1],[1,4],[-2,4],[3,-2],[1,-3],[1,0],[-1,-1],[0,-1]],[[5702,7319],[-3,-5],[-1,1],[-1,2],[1,4],[2,2],[2,0],[-1,-3],[1,-1]],[[5709,7313],[-2,-2],[-2,3],[-1,5],[4,7],[2,0],[0,-2],[0,-7],[-1,-4]],[[5681,7322],[-1,-1],[-2,2],[0,3],[2,1],[1,-1],[0,-1],[0,-3]],[[5678,7335],[-1,-2],[0,4],[-1,2],[1,2],[1,1],[1,-1],[0,-3],[-1,-3]],[[5692,7343],[0,-6],[-1,0],[0,1],[0,3],[0,3],[1,-1]],[[5705,7339],[-3,0],[1,4],[1,1],[3,-2],[0,-1],[-2,-2]],[[5722,7345],[-1,0],[1,3],[2,4],[4,0],[3,2],[-1,-3],[-3,-3],[-5,-3]],[[5701,7349],[-1,-3],[-2,0],[-3,4],[-1,2],[0,2],[1,0],[1,-2],[4,-1],[1,-2]],[[5676,7348],[-2,-3],[0,5],[1,4],[2,0],[0,-2],[-1,-4]],[[5745,7362],[3,-2],[1,0],[2,-1],[0,-3],[-2,-1],[-4,-3],[-1,1],[-2,3],[-3,0],[-1,1],[1,3],[3,2],[3,0]],[[5580,7361],[3,-5],[-3,1],[-2,-4],[-3,5],[-2,4],[-1,2],[2,4],[2,-4],[2,-1],[2,-2]],[[5694,7359],[-1,-4],[-2,4],[-3,3],[-1,3],[-1,2],[0,3],[1,2],[1,0],[2,-4],[3,-1],[-1,-3],[1,-3],[1,-2]],[[5654,7368],[-1,-1],[-2,0],[-1,0],[0,2],[1,0],[0,2],[1,1],[1,0],[0,-1],[1,-3]],[[5572,7395],[0,-7],[2,-1],[3,-6],[0,-3],[-1,-1],[-4,2],[-1,-1],[-1,1],[-1,3],[0,1],[-1,2],[0,1],[-2,-3],[-1,0],[0,2],[1,7],[1,1],[1,-2],[1,1],[1,3],[0,4],[1,1],[1,-5]],[[5576,7392],[-1,-1],[-2,5],[-1,4],[1,0],[1,0],[0,-1],[0,-2],[1,-1],[1,-2],[0,-2]],[[5724,7385],[-2,-3],[-3,5],[-1,1],[2,2],[1,3],[0,4],[-3,5],[-1,4],[5,1],[3,-3],[1,0],[0,-3],[0,-1],[0,-10],[-1,-1],[0,-3],[-1,-1]],[[5574,7408],[-1,-1],[-1,0],[-1,0],[-1,-1],[1,5],[0,5],[2,4],[1,1],[1,-2],[0,-10],[-1,-1]],[[5685,7419],[-3,-1],[-1,0],[1,2],[-3,4],[0,4],[1,1],[2,-2],[0,-4],[3,-4]],[[5650,7428],[1,-6],[2,-3],[3,-2],[1,0],[6,-5],[6,-1],[1,-1],[0,-4],[2,-2],[0,-2],[-1,-3],[1,-7],[2,-7],[2,-3],[3,-1],[3,0],[0,-1],[0,-6],[-1,-3],[-1,0],[-1,0],[-1,2],[-2,1],[-1,2],[-3,3],[-1,2],[0,3],[-1,3],[-1,4],[-1,1],[-1,2],[0,1],[-4,1],[-4,0],[-3,2],[-1,6],[-1,2],[-2,2],[-1,2],[-3,5],[-3,4],[-3,2],[-3,2],[-2,-2],[-2,0],[0,2],[3,2],[4,5],[4,2],[1,0],[3,-4]],[[5660,7437],[-1,-2],[-2,1],[-2,6],[5,-5]],[[5663,7439],[-1,0],[1,4],[2,3],[-1,-4],[-1,-3]],[[5733,7449],[0,-3],[3,-6],[2,-4],[0,-3],[0,-1],[-2,2],[-1,0],[1,-2],[1,-2],[-2,-1],[-3,0],[-6,3],[-1,3],[3,5],[1,2],[-2,-1],[-3,-5],[-5,2],[-1,2],[-1,2],[2,5],[3,0],[2,1],[2,1],[0,3],[5,0],[2,-3]],[[5557,7455],[1,-3],[-4,2],[-2,3],[-2,7],[-5,8],[0,2],[2,2],[4,1],[1,-1],[1,-1],[0,-2],[-2,-3],[0,-1],[1,-3],[0,-1],[1,-6],[1,-2],[2,-1],[1,-1]],[[5706,7487],[-1,-2],[-1,-4],[0,-4],[-2,0],[-1,1],[0,1],[0,3],[-1,0],[0,-3],[-1,-1],[-2,0],[-1,1],[0,4],[-1,3],[0,2],[5,0],[2,-3],[2,2],[0,2],[2,1],[0,-3]],[[5713,7512],[-3,-1],[-4,5],[4,1],[1,-1],[1,-2],[1,-2]],[[5688,7523],[-4,-2],[-4,4],[0,2],[2,5],[1,1],[3,0],[2,-3],[0,-2],[-1,-2],[1,-3]],[[5723,7530],[-1,2],[-4,4],[-10,3],[-5,3],[-2,-1],[-4,4],[-3,-2],[-6,-6],[-3,1],[-3,4],[-3,0],[-2,-2],[-4,-7],[-5,-4],[-3,2],[-5,0],[-1,-4],[1,-3],[3,-5],[-2,-4],[1,-3],[2,-1],[3,0],[5,-4],[2,-5],[2,-6],[-3,4],[-2,4],[-3,1],[-4,3],[-3,1],[-2,-2],[-1,-3],[3,-4],[3,-3],[1,-3],[1,-5],[0,-2],[-1,-1],[-3,3],[-5,12],[-7,2],[-1,-2],[1,-7],[1,-2],[6,-7],[0,-1],[-1,-1],[-7,4],[-2,6],[0,7],[-6,5],[-6,6],[-1,5],[1,2],[1,4],[-3,-1],[-2,-2],[-3,-3],[0,-4],[0,-3],[-1,-5],[-1,-9],[1,-5],[7,-14],[2,-10],[2,-3],[3,-5],[4,-7],[1,-4],[1,-7],[-3,-4],[-1,0],[-1,2],[1,4],[0,3],[-5,4],[-2,-1],[-2,-3],[1,-5],[2,-3],[0,-5],[3,0],[-4,-5],[-3,-3],[-4,0],[-2,0],[-1,-1],[2,-1],[2,-1],[2,-2],[7,-4],[3,-4],[3,0],[4,-8],[5,-2],[3,-8],[5,-2],[3,-3],[1,-2],[1,-5],[0,-11],[1,-8],[0,-2],[0,-4],[-1,-2],[-2,0],[-2,6],[-4,6],[-5,7],[-1,1],[-1,1],[-2,-3],[-6,-2],[-3,-2],[-1,-1],[-1,-1],[2,-2],[1,-3],[0,-5],[2,-5],[2,-2],[2,0],[1,-1],[1,-2],[1,-2],[1,-2],[0,-2],[-7,-3],[-1,-2],[-1,-1],[-2,2],[0,4],[-2,3],[-2,2],[-3,1],[-2,3],[-1,-3],[1,-8],[2,-6],[4,-16],[2,-9],[0,-5],[-1,-8],[2,-5],[2,-6],[-2,0],[-1,2],[-2,3],[-4,9],[-2,6],[-2,0],[-3,-1],[-3,-12],[0,-7],[-2,2],[-1,2],[0,8],[0,3],[-4,10],[-2,1],[-1,4],[-1,4],[-2,-1],[-2,-2],[0,-5],[0,-5],[-1,-4],[-5,7],[-4,13],[0,6],[3,7],[0,4],[-3,9],[-5,6],[-2,1],[-1,7],[-3,3],[-1,1],[-1,2],[1,2],[4,6],[3,10],[1,0],[3,-2],[3,1],[3,5],[2,3],[3,0],[8,-8],[9,-4],[4,-4],[3,-4],[1,0],[2,-1],[0,3],[-1,2],[2,2],[5,0],[1,1],[0,2],[-1,3],[-1,1],[-2,0],[-1,1],[-2,-1],[-2,2],[-2,2],[-1,1],[-4,3],[-5,6],[-1,-3],[-2,-2],[-2,0],[-7,3],[-5,-2],[-2,-1],[-2,0],[-2,-1],[-3,-1],[-2,5],[-1,4],[-1,1],[0,-4],[-1,-3],[-3,-2],[-2,3],[-2,7],[-1,8],[-4,7],[-2,2],[-1,4],[1,3],[3,1],[5,-3],[1,0],[1,2],[0,3],[-1,3],[-1,0],[-1,0],[-3,0],[-4,-1],[-2,1],[-1,2],[-3,5],[-3,6],[-5,4],[-3,13],[-2,5],[-3,4]],[[5582,7537],[4,0],[1,0],[5,1],[2,2],[2,0],[3,-2],[1,1],[4,3],[5,10],[1,1],[4,0],[2,1],[1,0],[5,-2],[2,0],[3,1],[4,3],[1,7],[0,1],[2,1],[2,0]],[[5731,7587],[2,-2],[2,-1],[0,-2],[2,-2],[1,0],[1,-5],[0,-7],[-1,-2],[-1,-1],[-6,-6],[0,-5],[0,-3],[0,-2],[0,-2],[0,-2],[0,-2],[-3,-4],[-1,-4],[-2,-4],[-1,-1],[-1,0]],[[3285,5876],[-1,-1],[0,3],[0,3],[1,5],[2,3],[1,-1],[0,-10],[-3,-2]],[[3714,8685],[-3,-7],[-3,1],[-2,3],[-3,2],[-3,-1],[0,2],[11,7],[5,2],[0,-3],[-1,-3],[-1,-3]],[[3971,8958],[-4,0],[-2,5],[1,5],[5,1],[2,-3],[-1,-5],[-1,-3]],[[3583,9190],[-5,-2],[-1,0],[-1,2],[-2,7],[0,3],[0,4],[-1,3],[4,4],[3,0],[5,-1],[7,-3],[-1,-1],[-1,-2],[-5,-2],[-1,-6],[0,-2],[0,-2],[-1,-2]],[[3535,9213],[9,-5],[10,-3],[1,-2],[1,-2],[0,-1],[0,-1],[-1,-1],[1,-2],[2,-1],[0,-2],[-2,-3],[-4,-4],[-18,-7],[-7,-1],[-16,-5],[-5,0],[-1,0],[-3,2],[-4,3],[-2,1],[-1,2],[0,2],[3,0],[5,0],[6,2],[-2,1],[-1,1],[-1,2],[-3,0],[-2,1],[-4,1],[-10,0],[-7,2],[-2,1],[-1,2],[-2,3],[2,11],[2,3],[3,1],[9,-3],[1,1],[-9,4],[-4,3],[-1,2],[0,2],[0,2],[0,2],[1,1],[2,2],[9,4],[10,-1],[18,-5],[2,0],[6,-4],[10,-11]],[[3564,9265],[-3,0],[-9,1],[-1,1],[0,1],[1,3],[4,1],[5,-2],[4,-3],[1,-1],[-2,-1]],[[4293,9269],[1,-4],[0,-1],[0,-2],[-1,-1],[-1,0],[3,-3],[0,-1],[1,-1],[-2,-3],[-11,-3],[-3,-1],[-4,-4],[-5,-3],[-1,0],[-2,3],[-7,3],[-14,-2],[-17,-3],[-5,-1],[-3,1],[-1,1],[0,1],[2,5],[0,1],[4,2],[3,4],[-1,4],[1,6],[2,1],[7,-2],[4,0],[7,-1],[10,1],[8,3],[14,7],[3,0],[2,-3],[1,-1],[4,-2],[1,-1]],[[3513,9276],[-3,-1],[-7,3],[-2,1],[0,2],[0,1],[2,3],[5,5],[3,0],[2,-2],[2,-4],[0,-2],[0,-2],[0,-2],[-1,-1],[-1,-1]],[[3471,9376],[-4,-3],[-3,-3],[-7,-6],[-1,-1],[-2,1],[-1,2],[-3,0],[-1,2],[-1,1],[-2,0],[-3,0],[-3,0],[-2,3],[4,2],[2,2],[9,1],[3,-1],[2,0],[2,0],[5,2],[1,1],[5,-1],[0,-2]],[[4500,9527],[2,-6],[1,-6],[3,-3],[8,0],[2,-6],[-5,-3],[-21,1],[-9,0],[-6,4],[0,7],[1,7],[6,4],[5,-3],[6,2],[7,2]],[[4483,9564],[-3,-2],[-11,24],[0,9],[1,6],[5,1],[4,-4],[2,-13],[2,-21]],[[3009,9638],[-10,-1],[-10,2],[-3,2],[0,3],[2,1],[5,1],[4,0],[3,-1],[7,-1],[5,-2],[3,0],[0,-3],[-6,-1]],[[4501,9656],[-6,0],[-2,1],[2,3],[7,9],[3,0],[3,-1],[2,-4],[-3,-4],[-6,-4]],[[4472,9675],[-4,-2],[-2,6],[-2,8],[-1,9],[6,5],[3,1],[2,-1],[-1,-4],[0,-8],[2,-6],[-3,-8]],[[4510,9782],[-11,-7],[-18,1],[-10,3],[-3,4],[4,5],[12,4],[16,3],[14,-2],[2,-5],[-6,-6]],[[4481,9898],[-3,-2],[-7,1],[-9,5],[-7,4],[0,5],[3,3],[5,0],[7,-4],[7,-6],[4,-6]],[[3753,9912],[-5,-1],[-12,6],[-19,6],[-16,4],[-15,11],[-2,3],[3,4],[13,0],[11,2],[27,-7],[14,-5],[5,-5],[-1,-9],[-3,-9]],[[4168,9997],[26,-3],[14,-4],[3,0],[19,-2],[19,-2],[30,-5],[4,-1],[-3,-2],[-8,-1],[-38,-1],[-70,-2],[-40,-4],[-13,-1],[-1,-5],[5,-1],[9,1],[32,6],[11,1],[22,-1],[29,-2],[11,1],[21,-1],[23,2],[29,4],[7,-8],[11,-9],[8,1],[7,0],[3,-3],[3,-1],[8,1],[25,-3],[17,-4],[6,-2],[3,-3],[2,-2],[-3,-3],[-10,-4],[-14,-5],[-18,-3],[-20,-3],[-159,-7],[-5,-2],[-4,-4],[3,-6],[7,-1],[17,4],[30,3],[22,0],[53,-3],[16,-7],[8,-10],[18,2],[4,2],[3,3],[2,3],[2,4],[2,2],[2,2],[4,1],[11,1],[27,1],[7,0],[5,-5],[1,-3],[0,-4],[0,-4],[-1,-6],[-2,-5],[-8,-10],[-6,-5],[-6,-3],[-13,-9],[-4,-2],[-14,-10],[-4,-5],[0,-3],[2,-1],[4,4],[2,2],[3,2],[20,6],[4,2],[14,8],[8,2],[7,3],[4,2],[21,15],[10,4],[12,0],[2,-7],[13,-1],[6,0],[9,-2],[4,-1],[7,-1],[8,-2],[6,2],[2,1],[6,6],[8,4],[8,6],[3,2],[4,1],[4,1],[11,2],[3,0],[7,0],[27,-1],[15,-1],[21,-4],[14,-2],[7,-2],[10,-4],[7,-5],[4,-1],[0,-1],[-3,-2],[-19,-7],[-7,-4],[-18,-9],[-9,-3],[-10,-1],[-11,0],[-7,-1],[-1,-1],[5,-4],[2,-2],[0,-2],[-5,-4],[-2,0],[-20,-3],[-9,-4],[-13,0],[-9,0],[-12,-4],[5,-4],[4,-1],[14,-4],[0,-2],[-7,-3],[-8,-5],[-11,-3],[-4,0],[-5,0],[-5,0],[-10,-1],[-9,0],[-18,2],[-9,2],[-5,1],[-6,0],[-3,-1],[-9,-6],[-5,-4],[-3,-4],[-1,-4],[0,-5],[1,-3],[2,-1],[2,-1],[4,-1],[9,1],[4,-1],[1,-1],[2,-3],[0,-2],[-2,-4],[-1,-5],[-1,-5],[0,-3],[4,0],[2,0],[2,-1],[2,-2],[1,-2],[2,-3],[-1,-2],[-2,-1],[-6,-2],[-12,-3],[-2,-1],[-1,-2],[0,-3],[-2,-3],[-2,-3],[-2,-1],[-5,-1],[-5,0],[-6,-1],[-14,-9],[-1,-1],[6,-2],[-1,-3],[-6,-10],[-2,-5],[-1,-7],[-3,-5],[-3,-5],[-3,-5],[-4,-7],[1,-4],[4,-4],[6,3],[7,9],[7,3],[8,-1],[7,-1],[9,-4],[8,-2],[6,-3],[3,-2],[3,-3],[0,-2],[-5,-2],[-2,1],[-12,5],[-5,2],[-8,-2],[-7,-2],[6,-10],[7,-5],[11,-2],[6,-2],[5,-3],[3,-1],[5,0],[6,3],[9,0],[4,-1],[3,-3],[1,-4],[0,-7],[-1,-6],[-1,-3],[-4,-5],[-2,-1],[-4,0],[-3,1],[-4,2],[-5,1],[-9,2],[-10,3],[-6,1],[-12,-1],[-12,-2],[-1,-2],[-18,-9],[-4,0],[-5,3],[-7,3],[-4,0],[-6,-4],[-1,-1],[0,-2],[4,-3],[2,0],[2,-1],[8,-1],[4,-1],[3,-10],[5,-6],[3,-1],[2,-1],[6,1],[8,2],[3,-2],[6,-2],[4,0],[4,0],[5,-1],[7,-6],[-3,-7],[4,-6],[7,-6],[2,-2],[0,-4],[0,-2],[1,-3],[1,-2],[1,-4],[1,-6],[-1,-5],[-1,-4],[-3,-3],[-4,-2],[-3,1],[-3,2],[-4,3],[-5,3],[-7,1],[-12,-9],[-5,-1],[-5,-1],[-4,-4],[-7,-2],[-6,1],[-10,5],[4,-3],[5,-4],[3,-2],[3,0],[3,0],[4,2],[8,4],[3,0],[2,0],[1,-1],[2,-4],[2,-6],[0,-4],[-3,-5],[-2,-2],[-2,-1],[0,-1],[5,-1],[7,5],[2,7],[3,7],[6,3],[6,-3],[6,-7],[7,-13],[3,-1],[4,-3],[2,-4],[-1,-5],[-1,-3],[-1,-2],[-1,-2],[-3,0],[-5,-1],[-11,1],[-6,0],[1,-4],[-12,-4],[-13,-2],[-13,3],[-10,5],[3,7],[2,7],[-5,5],[-1,0],[2,-8],[-2,-2],[-5,-4],[-4,-1],[-1,-1],[2,-1],[1,-2],[1,-2],[-1,-2],[-2,-3],[-1,-2],[0,-1],[2,-2],[4,-2],[4,-2],[19,0],[8,-1],[18,-6],[1,-1],[-3,-10],[-2,-9],[-4,-2],[-19,0],[-6,-2],[-9,-4],[-9,-5],[-4,0],[-18,4],[-7,3],[-14,9],[-11,13],[-6,-6],[-3,-2],[-3,-2],[-3,0],[-3,1],[-3,2],[-6,5],[-7,4],[-4,3],[-1,-1],[3,-3],[4,-3],[11,-9],[3,-2],[0,-2],[-7,-2],[-8,-3],[-3,-2],[-6,-6],[-2,-1],[-9,-1],[-3,0],[-7,4],[-10,2],[-6,1],[-8,4],[3,-4],[16,-5],[1,-2],[-3,-3],[-2,-2],[-4,0],[-5,1],[-6,0],[-6,-1],[-2,-2],[1,-1],[1,-1],[2,-2],[2,0],[4,4],[4,0],[8,-1],[9,3],[7,2],[5,0],[17,4],[4,5],[6,2],[13,2],[12,-1],[7,-1],[5,-4],[7,-4],[6,-3],[7,-2],[4,-5],[11,-5],[7,-2],[4,-2],[1,-12],[0,-5],[-2,-13],[-5,-3],[1,-7],[-2,-6],[-5,2],[-6,4],[-14,6],[-13,3],[-5,4],[-6,3],[-8,10],[-5,14],[-3,7],[-4,0],[-6,-2],[-5,-2],[-2,-3],[-17,-4],[-6,-3],[-3,0],[-13,-5],[5,-2],[2,0],[6,1],[3,1],[11,5],[9,1],[4,1],[7,3],[4,1],[1,-1],[0,-1],[4,-17],[-2,-4],[-3,-2],[-8,-3],[-3,-1],[3,-3],[7,2],[5,3],[3,-1],[4,-4],[5,-2],[13,-7],[5,-3],[9,-3],[9,-5],[2,-2],[9,-2],[2,-1],[3,-8],[3,-1],[9,-1],[-2,-3],[-8,-7],[-4,-2],[-2,-2],[1,-2],[0,-5],[2,-7],[2,7],[1,3],[2,1],[2,0],[6,4],[5,-2],[2,-8],[1,-8],[-1,-6],[1,-11],[-1,-3],[2,-3],[1,-12],[2,-4],[-3,-3],[-9,-2],[-3,2],[-9,-1],[0,3],[-1,4],[0,2],[0,2],[-1,12],[-2,-3],[0,-2],[-1,-3],[-1,-13],[-3,-3],[-7,1],[-7,-1],[-3,1],[-13,6],[-5,5],[-5,8],[-2,8],[-1,7],[-4,6],[-5,4],[-6,4],[-7,3],[-6,3],[-5,4],[-6,4],[-6,2],[-10,1],[-13,0],[-9,3],[-2,-1],[-2,-1],[2,-4],[10,-2],[8,0],[10,0],[7,-1],[2,-2],[2,-4],[1,-6],[-2,-5],[-8,-5],[-4,-3],[-12,-5],[-4,-1],[-9,0],[-8,1],[-10,2],[-5,0],[-12,1],[-2,-1],[3,-3],[5,-1],[3,-2],[0,-3],[-1,-5],[-1,-3],[-2,-3],[-8,-4],[-3,-2],[-14,-5],[-1,-1],[3,0],[9,2],[3,0],[14,-4],[12,0],[24,4],[2,0],[1,-1],[2,-1],[1,-2],[-2,-3],[-5,-2],[-8,-2],[-4,-2],[-4,-2],[-6,-5],[-2,-6],[7,-2],[3,3],[4,6],[3,3],[7,3],[10,-2],[7,2],[15,6],[2,0],[22,-3],[20,-7],[10,-2],[14,-2],[25,1],[2,-1],[-1,-2],[-2,-2],[-4,-3],[-5,-2],[-3,0],[-2,-2],[-6,-1],[-2,-1],[2,-5],[-1,0],[-5,0],[-9,-3],[-7,0],[-1,0],[1,-2],[1,-2],[2,-3],[-1,-2],[-3,-1],[-3,-1],[-8,2],[-1,0],[1,-2],[1,-2],[0,-2],[-2,-3],[-5,-1],[-8,-6],[-3,-1],[-8,-1],[-1,-1],[3,-4],[0,-1],[-5,-5],[-8,-2],[-1,-2],[-1,-4],[0,-1],[-2,-2],[-7,-4],[-5,-3],[-3,-1],[-3,-3],[-4,-2],[-5,0],[-4,-1],[-8,-3],[-5,-1],[-16,-5],[-8,-1],[-6,-2],[-14,-5],[-6,-1],[-5,-2],[-5,-1],[-8,1],[-4,0],[-3,0],[-2,-2],[-4,-4],[-4,0],[-11,3],[0,-2],[3,-3],[0,-3],[-6,-2],[-4,-1],[-5,1],[-7,3],[-9,6],[-11,9],[-5,3],[0,-3],[1,-3],[2,-3],[1,-2],[-2,-1],[-1,-1],[-2,0],[3,-4],[2,-5],[0,-4],[-3,-4],[-3,-2],[-2,-1],[-13,-10],[-3,-1],[-2,-1],[-1,-2],[-4,-8],[-2,-3],[-3,-3],[-1,0],[0,-2],[0,-2],[-1,-3],[-2,-5],[-8,-13],[-6,-13],[-2,-4],[-2,-2],[-2,1],[-3,0],[-1,-3],[-1,-4],[-2,-3],[-1,-2],[-13,-9],[-3,-1],[-3,1],[-3,-1],[-7,5],[-1,2],[-5,4],[0,-2],[1,-1],[1,-2],[1,-2],[4,-11],[-3,-2],[-2,-2],[-7,-4],[-6,-7],[-3,-2],[0,5],[0,2],[-4,3],[0,-2],[0,-2],[-3,-8],[-1,-1],[-1,0],[-3,-1],[-3,1],[-3,3],[-1,2],[-5,-5],[-2,0],[0,-4],[-3,-3],[-3,-2],[-4,0],[-2,-2],[-6,2],[-1,5],[4,6],[2,2],[-1,3],[1,4],[8,13],[6,6],[0,1],[-8,1],[-7,2],[-6,1],[-3,0],[4,-4],[7,-4],[-3,-3],[-3,-4],[-3,-9],[-2,-4],[-7,4],[-3,2],[2,-5],[6,-5],[0,-2],[0,-5],[-12,-5],[-12,-1],[-9,-2],[-15,-1],[-6,0],[-1,-2],[15,-9],[2,-2],[-2,-3],[-3,-2],[-5,-6],[-2,-2],[-7,-3],[-11,3],[-6,-2],[-6,2],[0,-4],[2,-3],[2,-7],[3,1],[5,2],[4,-5],[2,-9],[5,-5],[2,-3],[0,-3],[-2,-3],[-6,-5],[-6,-1],[0,-4],[-2,-2],[-6,1],[-2,1],[-3,1],[-11,1],[11,-7],[4,-3],[2,2],[4,0],[5,-1],[-1,-12],[3,-10],[0,-2],[-6,-5],[0,-6],[-4,-1],[-4,0],[0,-6],[-2,-3],[0,-3],[1,-2],[-3,-3],[-2,-5],[-3,-4],[-2,0],[-5,0],[-6,1],[-5,5],[-2,1],[-2,2],[1,-4],[1,-2],[5,-3],[8,-5],[0,-3],[-2,-2],[-6,-9],[-1,0],[-3,-2],[-7,1],[-3,1],[-9,-1],[-3,1],[-2,-1],[2,-2],[5,-2],[6,-3],[9,-1],[-1,-4],[-2,-2],[1,-4],[-1,-3],[0,-3],[-2,-8],[2,-6],[3,-2],[0,-4],[1,-5],[-4,-5],[-3,0],[-5,-1],[-1,-2],[7,-2],[-1,-4],[-2,-5],[-2,-10],[-4,-17],[-2,-17],[-9,-14],[-3,-1],[-1,0],[-4,1],[-7,3],[-6,1],[-3,0],[-1,-2],[3,-2],[5,-1],[3,-2],[7,-2],[2,-3],[2,-3],[0,-2],[0,-2],[1,-12],[-3,-4],[-3,-3],[-8,0],[-1,1],[-8,4],[0,-2],[6,-5],[2,-2],[-1,-1],[-3,0],[-3,-2],[-6,1],[0,3],[2,2],[-3,0],[-3,-1],[-2,0],[-1,0],[-1,1],[-1,6],[1,2],[5,7],[2,4],[-2,1],[-3,-3],[-4,-7],[-1,-4],[-3,0],[-5,2],[-16,8],[1,6],[-1,4],[5,1],[3,2],[3,2],[4,4],[3,7],[-1,1],[-9,-9],[-5,-3],[-3,-1],[-1,2],[-5,3],[-3,1],[-6,2],[-1,1],[-2,1],[-3,9],[3,12],[3,3],[1,4],[1,5],[-1,2],[-2,-1],[0,-2],[0,-2],[-1,-2],[-8,-4],[-8,-4],[-4,-3],[-3,-3],[-1,-2],[-3,0],[-4,-1],[-3,-1],[-4,1],[-3,2],[-3,1],[-4,-2],[-2,0],[0,-1],[2,-4],[-3,-1],[-5,0],[-3,1],[-2,2],[-1,2],[1,3],[8,5],[4,3],[-3,1],[-8,-1],[-1,1],[-5,0],[0,7],[-1,2],[-1,1],[-1,2],[-2,1],[-1,1],[-9,1],[-1,5],[-1,4],[-2,5],[-4,2],[-2,2],[1,3],[1,3],[-2,1],[-1,2],[0,2],[-2,4],[0,3],[2,2],[5,4],[2,1],[0,1],[6,2],[-5,2],[-3,0],[-2,0],[-2,-3],[-2,-3],[-8,0],[-1,1],[0,4],[0,4],[3,4],[-4,3],[-3,0],[-4,3],[-3,2],[-3,3],[-3,3],[-1,0],[1,3],[1,3],[0,6],[-2,2],[3,5],[4,6],[8,8],[-9,-4],[-7,-8],[-1,-1],[-1,2],[-2,5],[-2,2],[-1,2],[-4,2],[-2,3],[-2,4],[-3,5],[-5,11],[-8,11],[-2,7],[2,9],[-2,5],[7,3],[11,3],[5,3],[4,0],[6,1],[3,2],[-4,0],[-3,0],[0,1],[1,2],[1,3],[-2,0],[-6,-5],[-10,-4],[-8,-2],[-1,0],[-3,-1],[-1,0],[-1,0],[-3,4],[-1,2],[5,6],[4,9],[5,5],[3,1],[6,0],[2,-1],[-1,4],[0,1],[5,2],[5,1],[4,-1],[2,-3],[3,-8],[5,-2],[-1,3],[-2,5],[-1,7],[-2,3],[-3,1],[-6,-1],[-3,5],[-1,2],[0,3],[-4,7],[-1,3],[-2,5],[-1,0],[1,-6],[2,-4],[3,-9],[1,-4],[-2,-3],[-3,-3],[-3,-2],[-6,-2],[1,5],[1,4],[-3,-1],[-3,-3],[-1,-5],[-2,-4],[-6,-10],[-2,-6],[-2,-3],[-3,0],[-2,2],[-2,5],[0,4],[0,10],[0,5],[-1,7],[-3,15],[-1,6],[-5,3],[-2,4],[-1,3],[1,1],[1,1],[8,4],[6,5],[7,8],[3,3],[10,2],[4,0],[0,1],[-1,1],[-7,0],[-9,-4],[-2,-1],[-4,-5],[-3,-3],[-8,-6],[-6,0],[-6,8],[-6,-2],[-5,1],[-1,1],[-1,10],[3,12],[-3,0],[-1,1],[-2,2],[-1,1],[1,2],[9,5],[14,11],[6,5],[4,1],[3,3],[3,4],[1,2],[2,2],[4,2],[5,2],[7,7],[1,2],[-2,1],[-3,-3],[-7,-5],[-5,-4],[-16,-14],[-8,-5],[-3,-4],[-3,-3],[-4,-2],[-3,-1],[-7,-1],[-4,-2],[-2,1],[-1,7],[1,4],[0,4],[2,6],[2,4],[1,2],[1,2],[5,4],[3,2],[2,4],[12,1],[4,0],[1,1],[1,1],[-1,1],[-3,1],[-10,0],[-9,0],[-4,1],[-2,0],[-3,1],[-4,2],[-5,9],[2,11],[0,5],[7,5],[4,1],[5,4],[7,5],[9,4],[4,1],[4,-1],[13,-5],[7,-1],[5,1],[8,-1],[13,-8],[3,1],[-1,2],[-15,8],[0,2],[4,1],[4,2],[-2,1],[-10,-1],[-3,-2],[-9,-1],[-5,2],[-5,1],[-6,3],[-6,-1],[-3,-1],[-7,-2],[-2,0],[-12,-11],[-5,-2],[-4,1],[3,6],[0,3],[0,3],[1,4],[7,8],[4,8],[1,5],[3,1],[4,-1],[13,-3],[11,-4],[7,-1],[5,0],[3,1],[1,2],[1,2],[0,3],[1,1],[2,1],[3,5],[1,4],[-1,2],[-2,-1],[-5,-1],[0,-1],[-5,-6],[-4,-1],[-11,-2],[-5,0],[-9,3],[-2,1],[0,1],[-11,0],[-4,-1],[-2,1],[1,3],[4,3],[4,12],[4,3],[8,2],[9,0],[14,-9],[5,-1],[4,1],[9,3],[2,1],[3,4],[5,6],[-1,2],[-6,-4],[-3,-1],[-3,0],[3,12],[1,8],[1,2],[8,0],[11,1],[2,2],[0,1],[-4,1],[-2,2],[-4,0],[-5,-2],[-6,0],[0,4],[5,8],[0,3],[2,8],[0,3],[3,4],[7,2],[3,2],[0,2],[-4,6],[1,2],[3,1],[2,2],[-1,0],[-3,1],[-5,-1],[-6,-1],[-4,2],[-4,1],[-2,0],[-7,-4],[-2,0],[-3,1],[-18,3],[-2,1],[-7,6],[-5,3],[-7,4],[-10,3],[-11,2],[-7,2],[-3,3],[-6,6],[-4,5],[-1,2],[2,3],[3,2],[5,2],[9,-1],[4,0],[5,-2],[4,0],[8,0],[8,-1],[5,-1],[6,-3],[17,-10],[7,-4],[4,0],[12,-4],[3,0],[5,2],[0,1],[-1,1],[-6,1],[-7,4],[-4,4],[0,5],[0,3],[1,2],[1,5],[-4,3],[-3,1],[-7,4],[-1,1],[4,0],[3,0],[8,-2],[3,0],[3,0],[0,1],[-4,3],[-5,4],[-12,1],[-7,-1],[-5,2],[-5,2],[-4,1],[-6,-2],[-4,0],[-3,1],[-3,7],[1,3],[2,1],[2,2],[1,3],[4,2],[22,6],[6,4],[-1,1],[-3,-1],[-5,-2],[-3,0],[-13,2],[-2,-1],[-5,-3],[-7,-4],[-3,0],[-5,3],[0,1],[-1,2],[5,3],[1,1],[4,4],[-1,2],[-5,-1],[-1,1],[1,3],[-1,4],[-1,4],[-5,6],[-1,1],[-2,2],[-3,8],[1,2],[3,1],[0,1],[-7,-1],[0,-2],[1,-2],[1,-2],[0,-4],[1,-2],[3,-4],[2,-1],[3,-4],[2,-5],[-1,-3],[-2,-2],[-4,-3],[-2,-2],[0,-3],[-3,-2],[-2,1],[-2,0],[2,-4],[1,-3],[-1,-4],[-4,-3],[-2,0],[-4,-2],[-10,-1],[-4,1],[-7,2],[-7,1],[-4,2],[-4,5],[-2,4],[0,4],[1,3],[3,2],[2,10],[4,9],[10,9],[2,4],[1,1],[0,2],[-1,1],[-12,-12],[-7,-1],[-2,3],[0,4],[2,1],[5,0],[3,2],[-4,4],[-4,1],[-1,1],[4,3],[9,0],[3,2],[3,2],[4,4],[1,3],[0,3],[0,2],[0,3],[0,2],[-1,3],[-2,3],[-6,2],[-2,-3],[-2,-1],[-2,0],[-2,1],[-3,0],[-2,2],[-3,0],[-1,1],[0,3],[0,3],[2,2],[4,1],[3,2],[2,4],[0,3],[-1,4],[-3,4],[-6,-4],[-3,0],[0,2],[-1,2],[-2,3],[-4,1],[-3,2],[0,2],[1,2],[1,2],[2,5],[2,0],[2,0],[-1,4],[-2,4],[-2,2],[0,1],[0,1],[-2,3],[-1,1],[-3,6],[-2,1],[-3,2],[-3,0],[-4,-2],[-8,-1],[-7,-1],[-1,0],[3,2],[5,2],[6,2],[2,3],[0,3],[0,3],[-2,3],[2,1],[6,2],[2,0],[3,2],[-7,5],[-8,4],[-2,1],[-2,2],[-1,3],[-3,3],[-3,4],[-5,3],[-12,5],[-5,4],[-3,5],[-2,3],[-2,2],[-9,4],[-1,2],[9,5],[1,2],[-4,6],[-4,4],[-4,2],[-6,1],[-5,2],[-6,3],[-5,2],[-7,2],[-13,6],[-19,6],[-9,3],[-5,2],[-7,0],[-13,3],[-11,1],[-7,0],[-2,0],[-5,4],[-8,2],[-5,-1],[-5,-4],[-6,-3],[-3,-1],[-5,4],[-2,2],[-3,1],[-2,-1],[-4,-3],[-4,-2],[-6,-3],[-5,-1],[-7,0],[-1,-1],[-3,0],[-3,1],[-3,1],[-3,3],[-2,1],[-2,0],[-5,-1],[-7,-4],[-3,-1],[-2,1],[-3,1],[-6,3],[-3,0],[-3,-1],[1,-3],[6,-6],[5,-4],[-5,-1],[-36,6],[-5,2],[-7,3],[-5,2],[-10,5],[-7,3],[-3,3],[0,1],[2,2],[15,8],[5,1],[12,2],[3,1],[1,1],[-3,1],[-16,0],[-13,1],[-12,3],[-2,1],[-2,1],[-2,3],[1,3],[3,3],[1,2],[1,1],[-15,-7],[-6,-3],[-5,1],[-3,1],[-2,1],[0,2],[1,1],[1,1],[-8,3],[-3,3],[-1,2],[3,3],[3,2],[2,1],[7,1],[27,2],[19,-2],[6,7],[4,2],[13,2],[20,0],[13,-1],[7,-2],[9,-3],[0,1],[-2,3],[0,3],[3,4],[2,3],[-1,2],[-4,3],[-7,4],[-4,0],[-4,0],[-5,-3],[-10,-5],[-5,-1],[-8,0],[-4,0],[-4,1],[-7,3],[-2,1],[-3,-2],[-4,-3],[-3,-2],[-3,-1],[-4,0],[-4,0],[-17,4],[-4,2],[0,4],[-6,3],[-6,0],[0,1],[7,5],[6,2],[-1,0],[-8,0],[-6,-2],[-3,0],[-7,-1],[-8,2],[-3,1],[-4,2],[-4,2],[-11,2],[-3,1],[-2,2],[-10,5],[-5,4],[-1,3],[7,5],[0,1],[-3,2],[-1,1],[1,2],[6,5],[2,2],[10,2],[10,4],[4,1],[4,0],[13,0],[4,1],[4,2],[6,2],[12,3],[27,5],[2,0],[0,1],[-2,3],[-1,1],[6,2],[12,3],[9,2],[5,0],[5,1],[6,2],[4,0],[21,1],[10,-1],[4,0],[3,1],[4,2],[8,6],[3,4],[4,5],[5,9],[3,9],[3,8],[2,5],[1,2],[4,2],[5,2],[8,1],[-1,1],[-3,1],[-3,1],[-3,0],[-6,-2],[-6,-2],[-7,1],[-5,-1],[-4,-2],[-7,-1],[-5,0],[-9,3],[-4,0],[-11,0],[-3,1],[-3,2],[-2,2],[-2,3],[0,4],[4,6],[2,1],[10,7],[7,3],[7,3],[4,1],[5,1],[4,1],[8,5],[8,4],[11,7],[5,2],[17,4],[5,0],[4,-1],[3,-2],[11,-7],[1,0],[-2,3],[-4,8],[1,4],[6,3],[2,1],[7,0],[10,-2],[7,-1],[5,-2],[7,-1],[3,0],[2,1],[3,3],[5,5],[1,7],[0,8],[-2,6],[-1,3],[1,3],[5,4],[5,3],[11,3],[9,1],[6,0],[7,-2],[10,-1],[9,-3],[15,-8],[9,-4],[8,-2],[8,-3],[12,-6],[6,-3],[4,-1],[3,0],[-1,2],[-6,4],[-8,4],[-19,7],[-11,6],[-9,6],[-7,3],[-13,4],[1,1],[15,5],[27,5],[32,3],[10,0],[19,1],[1,2],[4,1],[17,3],[5,0],[8,-1],[8,-3],[4,-2],[5,-5],[2,-6],[0,-18],[0,-4],[1,-1],[3,2],[5,4],[3,2],[3,4],[2,6],[1,4],[-4,5],[-1,7],[3,4],[7,0],[28,-14],[11,-3],[13,-7],[15,1],[13,-1],[7,0],[3,1],[-5,3],[-19,9],[-9,7],[-6,8],[-2,4],[5,1],[22,0],[32,-4],[42,-13],[21,-5],[37,-15],[11,-2],[4,-1],[4,2],[2,2],[0,3],[-2,3],[-1,4],[0,5],[2,9],[6,3],[3,3],[-3,6],[-7,4],[-27,11],[0,1],[6,1],[8,1],[67,-2],[11,-1],[5,-1],[3,-1],[2,-1],[15,1],[-1,3],[-1,2],[-78,4],[-15,2],[-7,0],[-8,-1],[-16,-1],[-7,0],[-9,6],[8,6],[7,0],[14,-3],[8,4],[13,3],[13,1],[28,6],[5,1],[6,-1],[15,-1],[5,-2],[7,-3],[4,-1],[4,0],[6,-2],[9,5],[8,5],[10,4],[13,-2],[8,-3],[8,-3],[10,-1],[18,-11],[4,0],[1,1],[2,2],[1,3],[2,4],[-2,1],[-15,4],[-3,2],[-3,3],[0,2],[3,2],[3,0],[10,0],[3,0],[3,2],[4,2],[3,1],[6,0],[10,-2],[9,0],[3,1],[1,2],[1,1],[1,0],[32,0],[8,1],[6,1],[8,0],[6,0],[8,-2],[9,0],[12,3],[11,1],[64,0],[21,-2]],[[2530,6099],[2,-1],[1,-1],[3,-3],[3,-2],[1,5],[-1,3],[0,1],[0,2],[10,-13]],[[2549,6090],[-1,-2],[-3,-5],[-5,-8],[-4,-6],[-4,-7],[-3,-5],[-1,-1],[-4,-4],[-1,-2],[-1,-8],[-1,-2],[1,-4],[1,-7],[0,-4],[-3,-4],[-2,-4],[-1,-3]],[[2517,6014],[0,1],[-1,0],[-2,-1],[-1,0],[-1,-1],[0,-3],[0,-4],[0,-2],[0,-1],[-3,-2],[-1,-3],[-1,-3],[-2,-2],[-1,0],[-1,0],[-2,-3],[-3,-5],[-1,-4],[0,-3],[0,-3]],[[2497,5975],[-11,9],[-3,2],[-15,0],[-7,4],[-7,7],[-5,6],[-11,19]],[[2438,6022],[0,1],[1,3],[1,4],[-1,4],[0,3],[1,5],[0,4],[0,2],[1,1],[1,3],[-3,9],[0,3],[0,2],[3,10],[3,12],[4,13],[3,8],[8,0],[5,0],[8,0],[7,0],[5,0],[2,1],[0,5],[0,5],[1,6],[0,2],[-1,3],[-3,1],[-2,3],[0,3],[-1,4],[-1,4],[-3,5],[-4,4],[-4,7],[-3,7],[-3,5],[-2,3],[0,1],[6,0],[5,0],[0,11],[0,10],[0,11],[10,0],[13,0],[12,0],[10,0],[6,0]],[[9020,5948],[-1,-1],[-1,2],[-1,2],[0,6],[4,6],[1,5],[1,0],[1,-1],[1,-2],[-4,-9],[-1,-8]],[[3411,5503],[-2,-3],[0,-3],[-1,-4],[-1,-2],[2,-5],[1,0],[0,-1],[1,-1],[0,-1],[-1,-1],[-1,-1],[-1,-3],[0,-3],[-1,-2],[-2,-1],[-5,0],[-2,0],[-1,-1],[-2,-2],[-1,-1],[-1,-1],[-1,-2],[-1,-4],[0,-2],[1,-3],[1,-3],[-1,-6],[-1,-4],[0,-3],[-1,-6],[-2,-6],[-1,-4],[0,-4],[1,-6],[3,-8],[1,-4],[1,-6],[3,-6],[2,-4],[0,-5],[0,-2],[2,-1],[1,-1],[2,0],[1,0],[1,1],[3,0],[0,-1],[0,-8],[1,-3],[0,-1],[1,-2],[0,-2],[0,-4],[1,-3],[0,-4],[0,-2],[1,-1],[1,-3],[0,-1],[1,-1],[1,-5],[0,-1],[1,0],[0,-2],[0,-4],[1,-1],[1,-4],[0,-3],[1,-4],[2,-3],[0,-3],[2,-6],[2,-5],[2,-1],[1,-1],[2,-1],[1,-2]],[[3312,5483],[-5,14],[-6,14],[-6,13],[-1,2],[3,6],[2,5],[2,2],[1,3],[-1,10],[0,3],[-1,4],[0,4],[0,4],[1,2],[1,1],[3,1],[2,1],[1,1],[1,2],[1,0],[3,-1],[1,2],[3,3],[5,5],[1,3],[1,5],[0,3],[-1,1],[-1,0],[-2,1],[-2,-2],[-1,1],[-2,3],[0,3],[1,3],[0,3],[-3,8],[0,2],[2,3],[1,3],[2,7],[1,3],[3,1],[1,1],[2,4],[3,4],[4,4],[1,6],[1,2],[3,3],[1,2],[0,1],[-5,14]],[[3333,5676],[1,-1],[4,-9],[2,-2],[0,2],[2,-1],[6,-6],[7,-10],[11,-20],[3,-7],[2,-4],[3,-8],[1,-4],[0,-17],[-3,-11],[0,-8],[0,-12],[-2,-6],[2,3],[1,11],[2,6],[2,6],[3,2],[4,-3],[3,0],[2,-2],[5,-11],[5,-9],[2,-7],[6,-3],[3,-5],[1,-5],[1,-12],[-1,-19],[0,-1]],[[8172,6463],[0,-1],[-2,4],[0,2],[1,0],[2,-2],[0,-2],[-1,-1]],[[8166,6463],[-4,0],[0,1],[-1,1],[2,2],[4,3],[-1,-3],[0,-4]],[[8173,6482],[1,-2],[0,-3],[1,-1],[0,-2],[-1,-2],[0,-2],[-1,-2],[-3,3],[-3,2],[-3,-1],[-1,2],[0,2],[3,3],[0,1]],[[7047,2123],[-4,-3],[-3,0],[-1,3],[-3,6],[-1,1],[-1,2],[2,1],[2,-2],[5,-1],[4,-4],[3,-1],[-1,-1],[-2,-1]],[[2690,6047],[-7,1],[-4,-2],[-1,-4],[-1,-1],[-2,0],[-2,-2],[-3,-3],[-3,-1],[-2,0],[-1,0],[0,-2],[-1,-1],[-1,0],[-1,0],[-1,1],[-1,0],[0,-3],[-1,0],[-1,1],[-2,-1],[-1,-3],[-3,0],[-3,1],[-2,3],[-2,5],[-1,1],[-4,-3],[-1,-4],[-1,-3],[1,-2],[-1,-1],[-2,-1],[-1,-3],[-1,-4],[0,-4],[1,-2],[-1,-2],[-2,-1],[-3,-4],[-3,-7],[-2,-4],[-3,-3],[-2,-3],[0,-3],[0,-1],[-1,-1],[-6,7],[-1,5],[-2,-1],[-1,-2],[-3,-6],[-2,-7],[-2,-1],[-6,1],[-4,0],[0,-1],[-1,-3],[1,-4],[1,-13],[0,-5],[0,-2],[-2,0],[-2,-1],[-2,-3],[0,-2],[0,-4],[-1,-3],[-1,-3],[-2,-1],[-7,-1]],[[2574,5931],[0,6],[-2,3],[-2,5],[-1,3],[1,2],[-1,3],[-3,2],[-3,-2],[-1,1],[-2,2]],[[2560,5956],[3,3],[0,1],[-1,2],[-1,1],[1,3],[0,4],[1,9],[0,2],[-2,3],[-3,0],[-2,-1],[-2,2],[-1,3],[-2,1],[-3,-2],[-4,-4],[-1,-1],[-1,0],[-1,3],[0,3],[0,1],[-2,1],[-2,1],[-1,1],[-1,2],[-3,3],[-1,3],[-3,5],[-1,2],[-1,2],[-2,3],[-1,-1],[-5,3],[-1,0]],[[2549,6090],[3,-2],[2,4],[1,1],[3,4],[1,1],[5,2],[2,0],[2,-4],[2,-3],[3,2],[2,1],[11,-4],[4,2],[8,0],[3,-1],[5,6],[3,1],[4,3],[-1,3],[-1,1],[6,-1],[8,-6],[9,1],[3,3],[2,1],[9,-6],[3,-5],[2,0],[1,1],[1,1],[-2,1],[-1,1],[7,-3],[14,-22],[0,-2],[-6,7],[-3,-1],[-1,-1],[0,-3],[1,-2],[1,0],[1,1],[2,-2],[2,-2],[2,-4],[1,-4],[1,0],[2,3],[2,0],[1,-3],[1,1],[-1,4],[-4,4],[1,0],[8,-7],[2,-10],[2,-2],[2,-3]],[[2599,6127],[-4,-4],[-2,0],[2,3],[4,3],[2,2],[3,-1],[-5,-3]],[[2614,6132],[-2,-3],[0,1],[1,3],[1,2],[1,0],[0,-2],[-1,-1]],[[5489,7647],[3,-4],[-11,5],[1,1],[2,0],[5,-2]],[[5462,7660],[5,-1],[4,0],[3,-1],[2,-1],[1,-1],[-3,0],[-3,0],[-3,-1],[-4,1],[-1,1],[-1,1],[0,2]],[[5512,7635],[0,-2],[1,-2],[1,-3]],[[5514,7628],[-5,5],[-5,6],[-9,10],[-7,2],[-9,8],[-6,2],[2,1],[3,0],[14,-10],[-2,3]],[[5477,7668],[-2,-1],[-12,1],[-4,1],[-4,3],[-1,1],[4,1],[4,-1],[1,-2],[10,-2],[4,-1]],[[5466,7676],[-5,0],[-3,1],[-2,2],[0,1],[0,3],[5,0],[6,-2],[2,-2],[-1,-1],[-2,-2]],[[5426,7717],[2,-5],[-1,1],[-2,3],[-1,3],[2,-2]],[[5423,7722],[0,-2],[-3,4],[-2,2],[0,1],[5,-5]],[[5421,7714],[1,-1],[0,-1],[-2,1],[-7,12],[-1,3],[3,-3],[6,-11]],[[5421,7737],[0,-1],[-2,3],[-2,2],[-1,2],[-2,3],[-1,4],[-4,6],[0,2],[2,-3],[1,-1],[1,-1],[3,-4],[3,-6],[4,-5],[-1,0],[-1,-1]],[[5411,7762],[1,-3],[-2,3],[-3,0],[0,2],[0,2],[1,1],[1,0],[1,-2],[1,-3]],[[5402,7756],[0,-2],[-2,3],[-1,5],[-2,8],[0,2],[1,3],[0,2],[-2,7],[2,1],[1,-5],[0,-2],[2,-4],[0,-6],[0,-8],[1,-2],[0,-2]],[[5411,7774],[-4,-1],[-1,2],[-1,2],[-2,1],[-2,2],[0,1],[2,3],[1,5],[2,-3],[2,-5],[1,-1],[2,-6]],[[5525,7829],[-1,-1],[0,-2],[-1,-2],[1,-4],[2,-6],[-1,-4],[1,-2],[3,-2],[0,-1],[-1,0],[-1,-2],[0,-4],[3,-4],[5,-3],[1,-1],[1,-1],[1,-1],[0,-1],[0,-1],[0,-1],[-2,-1],[-3,0],[-2,2],[0,-1],[0,-2],[-2,0],[1,-10],[0,-2],[-1,-1],[-1,0],[-1,0],[0,-1],[0,-2]],[[5488,7657],[-1,1],[-6,9],[-6,6],[-6,10],[-8,4],[-6,5],[-4,-1],[-3,-1],[-3,0],[-1,0],[-2,3],[0,2],[0,3],[-3,5],[-5,4],[-4,6],[-9,15],[-1,5],[1,1],[2,0],[1,1],[2,0],[3,-1],[-2,3],[-3,3],[-8,13],[-3,6],[0,6],[1,9],[-2,6],[-6,9],[-2,4],[-5,2],[-2,0],[-1,-3],[-1,-7],[-4,-9],[-1,-4],[-3,-6],[-1,0],[-2,0],[-3,9],[-3,7],[0,3],[-1,4],[-2,14],[2,3]],[[5377,7806],[1,-3],[7,-3],[2,2],[1,2],[0,1],[3,-2],[2,1],[3,0],[3,-1],[1,2],[2,5],[1,3],[1,1],[1,-1],[0,-2],[1,-2],[3,-4],[1,-2],[2,0],[1,1],[2,1],[4,-3],[4,-1],[3,2],[-1,2],[-1,2],[0,2],[0,2],[2,2],[0,1],[-2,3],[0,1],[5,4],[4,2],[1,1],[1,3],[0,4],[0,4],[-2,4],[0,1],[0,2],[1,2],[2,1],[2,1],[2,1],[2,1],[2,2],[2,4],[1,0],[3,0],[1,1],[-1,5],[1,2],[1,0],[1,1],[3,0],[2,-2]],[[5458,7862],[2,-1],[5,-4],[3,-4],[2,-5],[3,-4],[3,-3],[2,-3],[2,-5],[3,-2],[3,-1],[3,-2],[0,-2],[2,-3],[3,-2],[4,-1],[9,0],[1,0],[1,-1],[3,1],[2,2],[1,1],[3,5],[2,0],[3,0],[1,1],[1,0]],[[2977,6265],[0,-4],[-7,5],[-6,6],[0,4],[3,0],[3,-2],[4,-4],[3,-5]],[[3006,6223],[-2,4],[-3,4],[-1,2],[-2,1],[-12,-1],[-2,0],[-1,-2],[-1,0],[-3,-1],[-4,-1],[-8,3],[-3,2],[-3,1],[-3,0],[-4,-1],[-3,-2],[-2,-4],[0,-4],[-2,-1],[-3,6],[-2,4],[-3,3],[-6,5],[-2,2],[0,3],[2,11],[3,1],[2,1],[3,-2],[4,-2],[3,-1],[5,-1],[2,-2],[19,-4],[4,-1],[1,0],[1,2],[1,2],[2,2],[5,1],[1,1],[1,2],[0,3],[-3,4],[-5,9],[-5,10],[2,4],[-1,6],[1,6],[1,6],[-4,4],[-6,5],[-7,2],[-2,1],[-1,4],[1,5],[2,2],[3,2],[3,1],[6,2],[7,-2],[6,-5],[6,-4],[7,-1],[3,-2],[2,2]],[[2981,6338],[1,-1],[0,-2],[-3,1],[-3,2],[-1,-1],[0,1],[-2,1],[2,2],[1,0],[2,0],[3,-3]],[[5614,7972],[3,0],[1,0],[0,-3],[1,-2],[0,-2],[1,-2],[2,0],[3,-3],[2,-4],[2,-1],[1,-1],[0,1],[2,0],[0,-1],[2,-2],[0,-2],[0,-2],[0,-2],[1,-1]],[[5635,7945],[-1,-1],[-5,-7],[-2,-2],[-1,0],[-2,0],[-2,0],[-2,-2],[-1,0],[-2,-2],[-1,-4],[-2,-3],[-2,-2],[-1,-2],[-1,-6],[-1,-2],[-1,-2],[-1,-2],[-2,-9],[-2,-3],[-2,-3],[0,-2],[0,-2],[-2,-5],[-2,-5],[-1,-2],[1,-3],[-3,-3],[-1,-2],[-1,-1],[-1,-2],[-1,-5],[0,-2],[0,-2],[-2,-1],[0,-2],[-1,-3],[-1,-1],[-2,-3],[-6,1],[-2,0],[-1,-2],[0,-1],[0,-2],[-2,-1],[-1,-1],[-3,2],[-6,-2],[-1,-1]],[[5562,7840],[-1,1],[-2,1],[-6,1],[-2,-1],[-4,0],[-3,1],[-2,-1],[-2,-4],[-1,-1],[-1,-1],[-2,-1],[-1,-2],[-2,-1],[-2,1],[-1,1],[-1,0],[0,-2],[-1,-1],[-3,-2]],[[5458,7862],[0,1],[-2,5],[-2,2],[1,3],[-1,1],[-1,1],[0,3],[-1,3],[0,2],[-6,0]],[[5476,7949],[1,0],[2,0],[1,-1],[5,-6],[4,-4],[4,-3],[5,0],[5,0],[10,1],[7,0],[0,1],[1,3],[-1,2],[0,3],[1,4],[4,2],[10,2],[5,2],[1,3],[2,3],[2,0],[2,-1],[3,-3],[2,-1],[2,1],[5,4],[5,5],[4,11],[1,2],[4,1],[6,0],[3,-2],[3,0],[3,0],[5,2],[2,0],[2,-1],[1,-2],[2,-2],[0,-2],[1,-1],[1,-2],[1,-2],[1,0],[10,3],[0,1]],[[8414,4555],[-2,0],[-1,1],[0,5],[1,3],[6,4],[2,3],[3,7],[2,2],[1,1],[0,-1],[0,-5],[1,-3],[0,-2],[-3,-2],[-2,-7],[-6,-4],[-2,-2]],[[8385,4574],[-2,-1],[-3,2],[0,1],[2,3],[2,4],[3,0],[1,-1],[0,-5],[-3,-3]],[[8427,4590],[-2,-2],[0,5],[2,5],[2,2],[1,-2],[0,-1],[-3,-2],[0,-5]],[[8333,4644],[1,-3],[5,-5],[0,-2],[1,-3],[1,-3],[2,0],[2,0],[1,-1],[2,-3],[2,-5],[2,-6],[2,-3],[2,-4],[-1,-4],[-3,-6],[-2,-1],[-2,-1],[-3,-3],[-2,2],[-3,1],[-3,2],[-3,5],[-2,5],[-1,4],[-4,3],[-6,8],[-3,1],[-2,-1],[-1,0],[-8,4],[-1,2],[-1,3],[-1,2],[0,4],[1,2],[1,2],[4,3],[3,1],[4,0],[5,1],[5,-1],[1,1],[3,3],[1,-1],[1,-3]],[[8473,4636],[-2,-3],[-1,-6],[-3,-5],[-4,-9],[-3,-5],[-2,-5],[-3,-4],[-2,-1],[-5,-1],[-5,-6],[-3,-3],[-3,0],[-3,2],[-1,2],[0,3],[1,3],[1,2],[1,3],[-4,4],[0,3],[1,7],[1,8],[2,5],[4,9],[3,5],[2,2]],[[8445,4646],[0,-2],[1,-3],[1,0],[0,1],[4,-1],[1,1],[2,3],[1,2],[1,5],[0,2]],[[8456,4654],[4,2],[2,3],[1,3],[5,5],[1,2]],[[8469,4669],[0,-5],[1,-2],[1,0],[3,3],[1,0],[1,-2],[0,-5],[-2,-4],[-3,0],[-1,-1],[0,-2],[0,-3],[1,-1],[1,-4],[1,-7]],[[8211,4679],[-1,-2],[-2,3],[-1,2],[2,2],[2,-2],[0,-3]],[[8415,4692],[-1,-4],[-1,1],[0,3],[1,2],[2,3],[2,1],[2,-1],[0,-1],[-3,-1],[-2,-3]],[[8318,4680],[-1,0],[-2,1],[1,5],[-1,3],[1,3],[1,5],[0,1],[1,-1],[0,-1],[1,-1],[1,0],[0,-2],[0,-2],[0,-2],[-2,-2],[-1,-3],[1,-4]],[[8425,4703],[-1,-3],[-7,0],[0,4],[2,3],[1,1],[2,1],[3,-1],[0,-5]],[[8239,4688],[-3,-12],[1,-2],[1,-2],[-6,-2],[-3,1],[-1,-1],[-6,3],[-4,2],[-1,3],[1,2],[1,-1],[3,0],[2,1],[0,8],[-1,10],[5,8],[2,3],[3,2],[6,-4],[2,-2],[0,-1],[1,-3],[-3,-13]],[[8452,4704],[-2,-4],[-1,-6],[-1,-2],[-3,-1],[-1,6],[-2,0],[1,6],[1,2],[2,0],[0,-3],[1,0],[3,9],[1,0],[1,0],[0,-1],[0,-6]],[[8442,4707],[-4,-1],[-3,-7],[-2,0],[-1,-4],[0,-1],[0,-1],[0,-1],[-1,-2],[-2,2],[-1,-2],[-1,-1],[-2,3],[-2,0],[-1,0],[3,6],[3,5],[1,1],[-1,1],[-1,1],[0,1],[2,1],[2,0],[1,-2],[1,0],[4,6],[2,-1],[2,-2],[1,-2]],[[8857,4701],[-1,-1],[-7,2],[-1,2],[0,1],[2,3],[1,4],[3,1],[1,0],[2,-9],[0,-3]],[[8265,4702],[-1,0],[-1,1],[0,2],[0,4],[0,3],[1,2],[4,0],[0,-2],[-3,-10]],[[8307,4709],[-1,0],[-1,2],[1,3],[1,1],[1,-2],[0,-1],[0,-2],[-1,-1]],[[8460,4715],[0,-4],[2,2],[2,1],[5,-1],[4,0],[2,-2],[0,-7],[-1,-1],[-18,-6],[-2,2],[-1,2],[2,5],[0,2],[1,4],[2,3],[2,0]],[[8550,4717],[5,-2],[2,0],[1,-2],[-3,-5],[-5,4],[-1,4],[1,1]],[[8410,4688],[-4,-2],[-3,-2],[-2,-3],[-1,0],[-3,-1],[-4,1],[-2,-1],[-7,-7],[-3,0],[-3,-2],[0,3],[-1,2],[-3,0],[-2,0],[-3,-6],[-3,1],[-2,0],[-1,-1],[-2,-1],[-1,1],[-6,4],[-6,3],[-7,-1],[-5,2],[-3,-2],[-3,-2],[-1,2],[-1,3],[-1,4],[0,4],[0,3],[1,3],[1,3],[0,3],[1,-2],[1,1],[4,3],[4,5],[3,2],[2,1],[2,-1],[2,0],[1,1],[3,-4],[1,-1],[4,0],[4,-2],[3,-3],[4,-4],[3,-4],[2,-1],[1,-1],[1,1],[2,3],[2,1],[2,0],[3,1],[2,0],[1,2],[2,-1],[1,-2],[5,-7],[2,0],[3,1],[1,2],[0,3],[1,3],[1,2],[2,2],[4,3],[3,2],[2,5],[-5,2],[1,4],[2,2],[2,-1],[1,-3],[1,-10],[-1,-1],[-1,-2],[-1,-2],[-2,-4],[1,-4],[-1,-2],[-1,-1]],[[8634,4705],[-2,-2],[1,4],[6,11],[1,-2],[3,-1],[-4,-4],[-4,-2],[-1,-4]],[[8284,4705],[1,-3],[1,1],[3,3],[2,1],[1,0],[2,0],[2,-3],[0,-4],[1,-1],[1,5],[1,1],[1,1],[3,0],[1,-2],[2,-7],[0,-6],[0,-3],[2,-1],[0,-2],[0,-3],[-1,-1],[-2,-1],[-1,0],[-1,2],[-1,1],[-2,-1],[-2,-1],[0,-3],[2,-1],[0,-1],[0,-1],[-1,0],[-2,2],[-1,-1],[-6,-2],[-1,0],[-1,2],[0,6],[-1,2],[-4,-8],[-1,-1],[-1,-1],[-2,0],[-6,-5],[-2,1],[-1,0],[-7,-5],[-3,-1],[-2,-1],[-1,1],[-2,-1],[-1,-2],[-3,-1],[-3,1],[-2,2],[-3,2],[0,3],[0,4],[1,4],[-1,9],[1,4],[1,3],[1,2],[2,0],[3,3],[3,5],[1,-1],[4,-3],[2,0],[4,0],[1,-1],[1,-5],[1,-1],[1,-2],[3,-7],[2,0],[2,-1],[4,5],[3,-1],[0,4],[-1,4],[-2,3],[-1,0],[-2,0],[-1,1],[-4,6],[-2,4],[0,4],[0,3],[3,3],[2,1],[5,-2],[1,-2],[2,-6],[1,-3]],[[8206,4714],[3,-3],[4,-9],[0,-2],[-1,-3],[-3,-4],[-6,-5],[-1,-3],[-2,-6],[0,-2],[0,-1],[-1,-1],[-1,-1],[-2,1],[2,4],[0,4],[-1,4],[-2,3],[-3,4],[-3,4],[-3,2],[-3,1],[-1,2],[-2,5],[-1,3],[0,2],[0,3],[1,0],[3,0],[6,-4],[3,0],[2,1],[4,6],[1,0],[4,-3],[3,-2]],[[8606,4726],[-2,-6],[-2,1],[-3,7],[0,5],[0,1],[2,1],[4,-2],[1,-4],[0,-3]],[[8521,4742],[1,-3],[0,-1],[-4,-1],[-3,-3],[-1,-3],[-2,-5],[-4,2],[-4,0],[-2,2],[-2,0],[-2,-2],[-4,-4],[0,6],[1,4],[3,8],[4,-2],[3,0],[4,2],[3,4],[4,2],[3,-6],[2,0]],[[8539,4745],[-2,-2],[0,5],[0,3],[3,-1],[0,-3],[0,-1],[-1,-1]],[[8847,4707],[-6,-7],[-9,1],[-3,0],[-5,-2],[-1,2],[1,7],[4,19],[5,17],[2,4],[3,4],[3,3],[7,4],[6,-1],[1,-1],[2,-6],[2,-4],[1,-6],[-3,-11],[-3,-10],[-5,-8],[-2,-5]],[[8647,4723],[0,-1],[-4,1],[-2,0],[0,5],[-1,3],[2,5],[0,5],[1,1],[1,3],[1,9],[1,1],[2,1],[1,5],[1,1],[1,4],[2,2],[0,3],[1,2],[2,1],[1,-1],[1,-4],[-2,-4],[1,-10],[-2,-10],[-1,-4],[-2,-2],[-1,-3],[-2,-5],[-1,-5],[0,-2],[-1,-1]],[[8665,4769],[0,-3],[-1,2],[-1,3],[-2,0],[-1,1],[-1,2],[5,1],[1,-6]],[[8177,4773],[0,-2],[-2,0],[-1,4],[1,1],[1,0],[1,0],[0,-3]],[[8573,4770],[-1,-1],[-2,3],[-1,1],[2,3],[1,1],[1,-2],[0,-1],[0,-1],[0,-3]],[[8354,4774],[-3,-1],[-1,1],[0,6],[3,-3],[1,0],[0,-3]],[[8162,4775],[-1,-1],[-5,0],[-3,-5],[-2,-1],[-7,0],[-1,1],[-1,0],[0,-1],[-3,0],[-7,5],[-2,3],[2,5],[2,5],[6,2],[25,0],[3,-5],[0,-2],[-5,-3],[-1,-3]],[[8204,4782],[-2,-1],[-2,2],[0,3],[0,3],[3,1],[2,0],[2,-2],[1,-2],[1,-2],[-4,0],[-1,-2]],[[8740,4795],[0,-1],[-1,2],[0,1],[1,3],[1,2],[1,0],[0,-2],[-2,-5]],[[7923,4801],[-2,-1],[-1,1],[-1,2],[2,4],[1,1],[1,0],[1,-2],[-1,-5]],[[8741,4807],[-1,-1],[-1,5],[1,1],[2,-3],[-1,-2]],[[8744,4813],[-1,0],[0,3],[1,2],[1,2],[1,0],[-2,-7]],[[8736,4813],[0,-4],[-1,-5],[-2,-5],[-2,-8],[-1,-2],[-3,-3],[-3,4],[-1,4],[1,17],[2,-1],[0,1],[1,1],[-2,2],[-1,10],[1,3],[1,1],[2,-3],[2,-5],[3,-4],[3,-3]],[[7982,4838],[3,-7],[2,-3],[3,-2],[3,0],[3,-1],[3,-3],[4,-1],[2,1],[1,1],[1,0],[1,-1],[3,-6],[3,-5],[0,-3],[2,-12],[2,-3],[3,-1],[3,0],[3,-1],[8,-3],[3,1],[3,3],[2,-2],[7,-4],[3,-1],[4,1],[3,1],[2,-1],[2,-2],[1,0],[2,0],[2,3],[2,5],[1,6],[1,7],[1,3],[1,3],[2,2],[1,1],[4,-1],[1,-2],[4,-11],[1,-1],[4,-1],[1,0],[3,3],[2,0],[2,-3],[2,-3],[1,-1],[7,-2],[3,-5],[1,-1],[5,1],[3,-1],[3,-1],[2,-7],[1,-8],[0,-2],[3,-3],[1,-2],[0,-7],[0,-7],[6,-6],[7,-4],[7,0],[7,1],[3,2],[5,2],[1,0],[8,-8],[1,-1],[1,-6],[0,-6],[-1,-15],[-1,-4],[1,-4],[1,-9],[1,-3],[3,-4],[0,-3],[0,-2],[-3,1],[-3,2],[-1,4],[-1,2],[-4,-1],[-6,3],[-7,5],[-12,11],[-3,0],[-3,-1],[-4,-3],[-3,-2],[-3,-1],[-2,1],[-7,3],[-6,1],[-17,1],[-5,3],[-8,1],[-6,2],[-6,3],[-16,15],[-5,4],[-16,7],[-3,1],[-5,-1],[-4,2],[-3,0],[-5,-2],[-1,-2],[-2,-3],[-3,0],[-4,1],[-8,3],[-3,2],[-3,3],[-3,4],[-1,1],[-8,4],[-6,2],[-12,2],[-2,1],[-3,1],[-1,4],[0,4],[1,3],[1,4],[1,4],[-9,7],[-7,4],[-3,0],[-3,0],[-3,0],[-4,0],[-1,1],[-2,1],[-2,-1],[-1,0],[0,3],[0,3],[2,3],[1,1],[1,-5],[0,-1],[2,-1],[3,7],[1,3],[1,8],[1,-1],[2,1],[1,1],[2,20],[2,5],[2,5],[2,1],[2,-3],[5,-1],[3,-2],[3,0],[3,-1],[5,-3],[1,0],[2,1],[2,4],[1,6],[3,-3],[5,-2],[1,-1]],[[8445,4840],[0,-3],[-1,3],[-1,2],[0,3],[1,-1],[1,-4]],[[8347,4821],[-1,-10],[0,4],[-1,9],[0,4],[0,5],[0,12],[1,6],[1,-7],[1,-4],[-1,-19]],[[8130,4849],[0,-2],[-3,0],[0,3],[1,4],[1,0],[2,-2],[-1,-3]],[[8688,4847],[-1,-6],[-2,2],[-1,4],[1,6],[-2,8],[2,0],[1,-3],[2,-8],[0,-3]],[[8742,4855],[0,-2],[0,-4],[0,-4],[-1,-4],[1,-6],[0,-3],[0,-4],[0,-1],[-1,-6],[-1,-2],[-1,-2],[-5,2],[-3,4],[-2,4],[0,1],[-3,5],[0,2],[0,2],[2,1],[2,0],[0,2],[1,8],[-3,5],[-1,2],[1,2],[3,-2],[3,9],[1,2],[0,5],[2,0],[1,0],[1,-4],[1,-2],[-1,-3],[2,-1],[1,-6]],[[8692,4844],[-3,-5],[2,12],[1,5],[2,4],[3,18],[0,-1],[1,-1],[-1,-13],[-4,-10],[-1,-9]],[[7843,4868],[-3,0],[-4,7],[0,2],[1,2],[1,0],[5,-4],[1,-3],[-1,-4]],[[8433,4880],[0,-6],[-1,1],[-1,2],[0,2],[0,1],[0,1],[2,-1]],[[8389,4871],[-2,-2],[-3,7],[-1,5],[0,3],[1,3],[1,0],[-1,3],[2,2],[1,-1],[1,-3],[1,-1],[1,-4],[-1,-12]],[[8406,4880],[-1,-4],[-1,-3],[-2,0],[-1,1],[-2,2],[-1,-2],[-1,0],[-1,3],[1,11],[2,4],[0,4],[-2,9],[1,4],[5,4],[3,4],[2,1],[1,-3],[0,-15],[-4,-12],[1,-8]],[[8421,4922],[0,-13],[0,-3],[-1,5],[-1,1],[0,-1],[-1,-1],[-1,0],[-1,-5],[0,-4],[-1,-3],[0,-10],[0,-3],[2,1],[0,1],[3,-4],[1,-3],[0,-3],[-2,-4],[-2,-1],[-2,1],[0,-1],[-1,-1],[-1,-3],[1,-2],[-2,-7],[-1,-2],[-3,2],[-1,-2],[-1,1],[-2,6],[0,4],[2,3],[0,3],[1,3],[1,4],[1,3],[0,2],[1,7],[0,3],[1,3],[1,7],[0,12],[2,10],[3,3],[1,0],[0,-3],[3,-6]],[[8709,4939],[2,-3],[-3,3],[-5,5],[-1,3],[4,-5],[3,-3]],[[8423,4947],[-3,-7],[-2,0],[-2,5],[-1,5],[0,2],[2,3],[5,-1],[1,-3],[0,-4]],[[8570,4977],[-4,-3],[1,6],[0,1],[3,-1],[0,-3]],[[8562,4972],[0,-2],[-2,-1],[-1,0],[0,2],[0,1],[-1,-1],[-2,-1],[-2,-3],[-1,1],[0,3],[0,1],[2,4],[3,1],[4,4],[2,0],[-1,-2],[0,-2],[-1,-2],[0,-3]],[[8575,4980],[0,-3],[0,-1],[-2,1],[-1,0],[-1,5],[0,1],[2,-2],[1,0],[1,-1]],[[8233,4984],[-1,-10],[-2,6],[2,7],[1,1],[0,-4]],[[8544,4993],[0,-3],[-2,2],[-2,2],[2,2],[2,-3]],[[8230,4961],[-6,-11],[-1,3],[1,11],[-2,7],[0,5],[1,9],[2,6],[3,5],[1,1],[0,-9],[0,-3],[1,-3],[-1,-2],[1,-10],[0,-3],[-1,-3],[1,-3]],[[8523,5006],[5,-5],[1,-2],[0,-4],[1,-2],[1,-1],[2,-4],[1,-4],[-1,-9],[-2,-1],[-2,-2],[-4,-5],[-2,-1],[-2,0],[-1,-2],[-2,0],[-4,3],[-3,3],[-6,6],[-1,2],[-1,3],[-2,6],[-1,4],[0,10],[1,3],[1,1],[3,-3],[3,3],[7,2],[7,0],[1,-1]],[[8554,5015],[-1,-5],[-2,0],[-1,1],[3,3],[1,1]],[[7968,5011],[0,-1],[-2,0],[-1,2],[-1,1],[0,2],[2,2],[3,-2],[-1,-4]],[[7985,5017],[-2,-2],[0,2],[0,1],[0,2],[2,1],[0,-1],[0,-3]],[[8603,5019],[7,-7],[3,-1],[6,1],[2,0],[5,-9],[2,-5],[0,-5],[1,-5],[1,-1],[2,0],[2,-7],[0,-2],[-1,-16],[-7,6],[-6,7],[-2,3],[-7,6],[-1,2],[-1,2],[-3,4],[-6,1],[-2,0],[-1,-1],[0,-2],[0,-4],[-2,-1],[-3,2],[-4,1],[-3,3],[-3,1],[-1,1],[0,2],[0,2],[-1,1],[-1,-1],[-2,-1],[-1,-2],[-2,-6],[-2,-2],[-3,-1],[-1,1],[-2,1],[-4,10],[-1,2],[-1,2],[-2,1],[-1,-2],[-1,-3],[0,-3],[0,-3],[-2,-6],[-2,-3],[1,6],[0,3],[-1,4],[-1,3],[7,17],[2,4],[11,1],[6,-1],[3,1],[2,1],[2,-1],[1,-3],[1,-2],[1,0],[3,2],[3,4],[1,2],[2,0],[2,0],[1,-1],[4,-3]],[[7789,5000],[1,-8],[-3,6],[0,4],[-1,2],[-2,4],[-1,4],[-1,9],[1,2],[1,0],[6,-12],[0,-2],[0,-5],[-1,-1],[0,-3]],[[8005,5011],[0,-6],[-1,-2],[-2,-3],[-1,-2],[-2,0],[-1,3],[0,3],[-3,2],[0,-1],[-1,-3],[-4,-3],[-2,0],[1,5],[-1,4],[0,4],[0,2],[-1,2],[1,3],[0,4],[1,3],[1,10],[5,2],[1,-2],[5,-2],[4,-6],[2,-7],[-2,-10]],[[7783,5026],[-2,-5],[-4,0],[0,3],[0,7],[-1,2],[0,1],[1,4],[0,1],[6,-10],[0,-3]],[[8732,5061],[-1,0],[0,2],[0,3],[1,1],[1,-1],[-1,-5]],[[7773,5049],[0,-2],[-5,5],[-2,2],[-2,5],[1,3],[0,4],[0,1],[2,1],[1,-3],[2,-7],[2,-6],[1,-3]],[[8501,5043],[-1,-1],[-1,3],[-2,8],[-1,3],[-1,8],[1,3],[1,3],[1,0],[1,-2],[-1,-9],[3,-11],[0,-5]],[[8439,5071],[1,-2],[-2,0],[-1,4],[1,3],[1,-5]],[[8500,5081],[8,-2],[-1,-2],[-9,-4],[-3,1],[-10,-2],[-2,0],[0,3],[-1,3],[2,2],[2,0],[5,-1],[9,2]],[[8420,5079],[-2,-5],[0,3],[0,2],[1,2],[1,1],[0,-3]],[[8620,5086],[0,-3],[2,-3],[-1,-5],[0,-1],[0,-2],[1,-2],[-1,-1],[-1,1],[-2,-2],[-1,-2],[-3,-1],[-1,2],[-6,2],[-4,6],[0,1],[7,6],[3,2],[3,0],[3,2],[1,0]],[[8471,5086],[2,-2],[1,0],[1,2],[2,-1],[0,-4],[2,1],[1,-2],[0,-4],[-5,-1],[-3,-3],[-5,3],[-6,-5],[-3,-2],[-3,0],[-2,9],[1,10],[1,1],[2,1],[5,1],[9,-4]],[[8762,5092],[11,-3],[3,1],[7,-2],[5,-3],[9,-1],[3,-1],[2,-3],[-5,-2],[-3,-2],[-4,-1],[-4,1],[-3,-1],[-1,2],[-4,2],[-5,4],[-10,5],[-1,3],[0,1]],[[8026,5091],[-4,-3],[0,5],[2,2],[2,-1],[0,-3]],[[7945,5088],[1,-4],[1,-4],[1,-4],[1,-18],[5,-16],[12,-6],[-2,-3],[-1,-2],[0,-3],[-2,-11],[0,-2],[1,-4],[0,-4],[-1,0],[-2,1],[-2,1],[-1,2],[-1,2],[-2,1],[-2,3],[-4,2],[-3,2],[-2,5],[-1,6],[1,8],[-1,3],[-1,2],[-2,6],[0,7],[-3,3],[-2,2],[-2,1],[-6,-3],[-1,1],[-1,2],[-3,2],[0,4],[1,3],[4,4],[1,2],[1,4],[-1,3],[0,2],[1,3],[2,2],[3,3],[2,-5],[0,-4],[1,-3],[2,4],[-1,7],[3,2],[2,0],[2,-2],[1,-3],[1,-4]],[[8432,5086],[-1,-1],[-2,2],[0,8],[2,2],[0,-3],[1,-2],[1,-2],[-1,-4]],[[8559,5088],[-2,-2],[-1,-1],[-4,2],[-4,-1],[-5,-2],[-3,2],[-2,3],[0,3],[2,8],[3,6],[2,1],[3,-2],[4,-4],[4,-5],[3,-5],[0,-3]],[[8422,5116],[0,-3],[-1,-3],[1,-6],[3,8],[3,1],[1,-2],[1,-1],[1,-3],[-1,-7],[-2,-3],[-2,0],[-1,4],[-2,0],[-1,-8],[0,-1],[-1,-1],[-2,2],[0,1],[2,4],[-1,11],[-1,-2],[-4,-10],[-2,-5],[-1,3],[-1,6],[0,9],[2,6],[2,-1],[5,2],[2,-1]],[[8047,5116],[-6,-6],[-1,0],[-1,2],[0,12],[1,3],[4,0],[2,-1],[2,-2],[0,-4],[0,-2],[-1,-2]],[[8748,5120],[-1,-2],[-2,2],[-1,4],[0,3],[2,3],[1,-3],[1,-3],[1,0],[-1,-4]],[[7754,5081],[-3,0],[-5,7],[-2,3],[0,4],[-5,16],[-1,4],[2,13],[6,3],[1,-2],[1,-6],[3,-11],[1,-5],[1,-3],[0,-2],[0,-1],[2,-7],[2,-4],[0,-6],[-3,-3]],[[8638,5108],[-1,-2],[-3,2],[-2,3],[-1,5],[-1,4],[0,3],[-1,4],[0,2],[6,4],[1,-2],[3,0],[1,-3],[-1,-13],[-1,-7]],[[8635,5139],[0,-3],[-2,-2],[-12,-3],[1,2],[1,2],[1,1],[1,0],[1,0],[1,0],[1,1],[2,-1],[3,1],[0,3],[2,-1]],[[8760,5146],[6,-2],[2,0],[2,-2],[2,1],[2,-1],[5,-9],[2,-6],[4,-5],[2,-1],[-2,-5],[-4,-2],[-1,0],[-3,2],[-2,0],[-3,3],[0,6],[-2,11],[-3,-3],[-3,5],[-1,1],[0,-1],[-2,2],[-1,3],[0,3]],[[8535,5139],[0,-1],[-3,1],[-1,1],[2,8],[1,0],[1,-8],[0,-1]],[[8628,5153],[-2,0],[-3,3],[2,2],[1,0],[1,2],[2,-1],[0,-2],[-1,-4]],[[8384,5160],[1,-2],[0,-3],[-1,1],[-3,0],[-1,-1],[-1,-1],[-1,-1],[1,3],[2,4],[1,0],[2,0]],[[8915,5033],[0,-11]],[[8915,5022],[0,-11],[0,-12],[0,-12],[0,-12],[0,-11],[0,-12],[0,-12],[0,-11],[0,-12],[0,-12],[0,-11],[0,-12],[0,-12],[0,-12],[0,-11],[0,-12],[0,-12],[0,-5],[-1,-6],[-2,-9],[0,-7],[2,-6],[1,-4],[0,-10],[0,-11],[0,-12],[0,-12],[0,-11],[0,-12],[0,-12],[0,-12],[0,-11],[0,-12],[0,-12]],[[8915,4659],[-1,2],[-4,6],[-4,7],[-2,7],[-2,6],[-11,19],[-3,6],[0,1],[0,2],[1,3],[2,9],[-2,-5],[-3,-5],[-4,0],[-4,-1],[-3,-3],[-4,-1],[-2,1],[-1,4],[-1,3],[0,4],[-1,-6],[-3,-3],[-5,-7],[-1,1],[-1,3],[0,3],[1,3],[1,3],[0,7],[2,4],[1,9],[1,3],[1,3],[-1,3],[-2,1],[-1,2],[-2,6],[-1,2],[-2,2],[-1,3],[2,2],[1,1],[2,0],[3,-1],[1,0],[3,2],[-2,-1],[-1,0],[-6,4],[-4,4],[-3,7],[0,2],[2,1],[5,2],[-1,4],[-2,3],[-1,6],[-2,4],[-3,6],[-2,6],[-2,13],[-2,10],[0,4],[2,2],[-3,1],[-2,1],[1,5],[3,3],[-3,-1],[-2,-1],[-1,0],[-1,0],[-1,2],[0,3],[1,4],[-1,5],[-2,2],[-2,3],[-1,2],[-1,0],[-1,2],[-1,3],[-13,14],[-1,4],[-1,-2],[-1,-1],[-1,3],[-2,1],[-1,0],[-2,1],[-2,1],[-1,0],[-7,4],[-6,7],[-5,3],[-3,4],[-4,3],[-7,3],[-7,2],[-3,0],[-2,-1],[-2,0],[-13,15],[-2,7],[0,4],[1,3],[5,1],[-4,1],[-1,-1],[-3,-2],[-1,0],[-3,1],[-2,3],[-3,-2],[-2,3],[-1,3],[-1,2],[-1,0],[-2,-1],[-1,0],[-2,2],[0,4],[-2,2],[-1,2],[-2,4],[-2,5],[1,10],[0,4],[2,5],[2,6],[-2,0],[-2,-2],[-1,-3],[0,-3],[0,-10],[-2,-3],[-2,0],[1,-6],[-1,-5],[-3,-7],[0,-3],[0,-4],[0,-3],[-5,-9],[-1,-1],[-3,0],[-3,-1],[-2,2],[-1,3],[-1,3],[-1,7],[-1,7],[3,9],[-1,8],[-2,7],[-6,9],[-6,9],[-2,2],[-4,1],[-2,1],[-1,3],[-1,4],[3,2],[4,4],[3,0],[7,-2],[2,-3],[2,-1],[5,8],[4,10],[2,2],[2,0],[2,-1],[4,-3],[3,-2],[2,0],[2,-3],[1,-1],[0,4],[2,6],[2,1],[1,1],[1,1],[0,5],[-3,1],[1,4],[2,2],[0,2],[0,3],[-6,-5],[-6,-2],[-4,0],[-3,0],[-7,-3],[-3,0],[-7,1],[-3,2],[-3,-1],[-3,0],[-2,3],[-3,5],[-1,4],[-2,2],[0,3],[-2,13],[0,9],[-3,0],[-3,1],[-12,9],[-1,-3],[-2,-1],[-2,0],[-1,0],[-2,2],[0,2],[1,6],[2,2],[1,2],[1,3],[2,9],[0,3],[0,3],[0,3],[1,1],[5,3],[9,4],[3,3],[2,4],[2,3],[1,3],[1,2],[8,5],[3,1],[3,-1],[7,-3],[6,-6],[5,-7],[6,-5],[7,-1],[3,1],[4,-1],[1,-2],[2,-4],[0,-3],[-1,-6],[2,-6],[2,-5],[1,-7],[1,-3],[-1,-6],[-1,-3],[-2,-6],[-1,-5],[1,-7],[0,-8],[0,-6],[1,-7],[1,-6],[4,-18],[3,-12],[1,6],[0,8],[1,3],[1,1],[2,-1],[0,-3],[0,-7],[2,-13],[2,-1],[2,2],[0,-4],[0,-7],[1,-6],[1,-2],[3,-5],[2,-1],[4,-1],[3,-1],[4,2],[2,5],[2,4],[6,11],[2,6],[2,8],[0,1],[7,9],[0,3],[1,6],[2,6],[1,3],[6,3],[6,1],[7,6],[2,4],[1,3],[-2,5],[0,3],[2,2],[5,7],[7,7],[5,4],[3,0],[3,-4],[3,-3],[15,-10],[2,-3],[2,-5],[3,-3],[3,-1],[3,-3],[3,-3],[7,-7],[8,-7],[2,-1],[8,0],[2,-1],[1,-2],[1,-1],[9,-1],[2,-2],[1,-2],[1,-5],[6,-1]],[[7901,5165],[3,-6],[0,-2],[-1,-3],[-1,-5],[0,-1],[-2,2],[-2,-4],[-1,7],[-2,4],[2,5],[1,0],[0,-1],[3,4]],[[8543,5165],[3,-8],[-2,-8],[1,-5],[4,0],[1,-2],[1,-2],[0,-3],[-1,-2],[-2,-2],[-3,3],[0,3],[-1,1],[-3,-2],[-1,-1],[-1,4],[1,6],[-2,2],[-3,6],[0,2],[1,4],[0,3],[1,1],[3,-5],[1,4],[1,2],[1,-1]],[[8534,5155],[-2,-1],[-2,0],[0,6],[0,8],[2,1],[3,-2],[-1,-2],[1,-4],[-1,-6]],[[7881,5164],[-4,-2],[-4,1],[1,4],[2,4],[1,0],[3,-3],[2,-3],[-1,-1]],[[8633,5184],[5,-3],[1,0],[7,-6],[1,-3],[-1,-2],[1,-3],[-2,-4],[-1,-1],[-1,2],[-2,1],[-3,-2],[-1,1],[-2,4],[-2,3],[-4,8],[-1,0],[0,-3],[1,-3],[2,-6],[2,-1],[1,1],[1,-3],[0,-4],[-4,-2],[-1,3],[-1,6],[-2,-2],[-1,-2],[-2,5],[-4,1],[-3,3],[1,3],[0,3],[2,2],[2,-2],[2,2],[1,0],[1,1],[4,1],[3,2]],[[7734,5153],[-1,-2],[-3,2],[1,4],[0,5],[2,4],[0,5],[-3,13],[2,0],[1,-1],[2,-9],[2,-5],[-1,-7],[-2,-9]],[[7910,5174],[1,-1],[1,3],[1,-4],[1,-2],[2,-2],[-1,-1],[-1,-1],[-1,-1],[-5,7],[-4,-2],[-3,2],[0,1],[1,4],[1,8],[3,-2],[0,-3],[0,-1],[2,-1],[2,-4]],[[8598,5173],[-1,0],[-1,3],[-3,4],[-2,6],[7,-10],[0,-3]],[[8540,5183],[-1,-1],[0,2],[-1,1],[1,6],[0,1],[0,-4],[1,-5]],[[7907,5187],[0,-1],[-1,1],[-1,1],[0,1],[-3,8],[1,0],[3,-7],[1,-3]],[[7868,5215],[-3,0],[-1,0],[1,6],[1,3],[1,0],[2,-5],[-1,-4]],[[8539,5221],[-1,-1],[-1,0],[0,3],[1,4],[1,0],[0,-1],[0,-3],[0,-2]],[[8537,5229],[-1,-2],[-1,1],[0,3],[0,1],[1,1],[1,0],[0,-4]],[[7873,5222],[-1,-1],[-2,8],[0,4],[1,1],[1,-3],[1,-2],[1,-4],[-1,-3]],[[7883,5230],[0,-2],[-2,4],[0,2],[0,1],[2,-2],[0,-3]],[[7895,5232],[-2,-2],[-2,5],[0,2],[0,1],[1,0],[1,-3],[1,-1],[1,-2]],[[7861,5227],[0,-2],[-1,1],[-6,3],[-2,0],[-4,3],[-2,1],[-1,2],[1,4],[0,2],[1,6],[1,2],[2,-4],[3,-4],[1,-2],[5,-4],[1,-2],[1,-6]],[[7872,5244],[0,-3],[-2,1],[-1,4],[1,2],[1,1],[1,-3],[0,-2]],[[7865,5234],[-1,-2],[-1,1],[-2,2],[-2,3],[-2,3],[-3,2],[-1,1],[-1,0],[1,7],[2,0],[5,-6],[2,-3],[3,-8]],[[7889,5252],[2,-3],[1,2],[0,-2],[0,-2],[-2,-6],[-3,1],[-1,2],[0,2],[1,0],[0,3],[1,0],[1,3]],[[7904,5254],[1,-4],[1,-3],[1,-3],[-1,-5],[-1,-6],[-1,-1],[-2,1],[-1,2],[0,1],[0,2],[-1,1],[1,2],[-1,3],[-4,-2],[-1,0],[0,4],[0,1],[3,5],[2,1],[2,-1],[2,2]],[[7844,5241],[-1,-2],[-1,3],[-2,4],[0,4],[-1,7],[0,4],[1,3],[3,-3],[1,-5],[1,-1],[0,-5],[-1,-5],[0,-4]],[[7707,5268],[6,-16],[3,-2],[3,-8],[1,-2],[-1,-5],[-1,-15],[-2,-4],[-3,2],[0,3],[-3,11],[-4,6],[-1,0],[-1,7],[-2,7],[-6,14],[4,0],[3,3],[0,3],[1,0],[3,-4]],[[7846,5268],[0,-8],[-2,2],[-1,3],[-3,2],[-3,1],[-2,2],[-2,4],[0,1],[0,1],[1,1],[12,-6],[0,-3]],[[8468,5241],[-5,-10],[-2,-4],[-1,-5],[-2,-6],[-3,-5],[-1,-2],[-3,-2],[-1,-1],[-4,-1],[-9,-4],[-3,0],[-4,0],[-6,1],[-1,1],[-2,5],[-3,4],[-2,0],[-3,0],[-17,0],[-6,-1],[-6,-2],[-4,1],[-3,2],[-2,1],[-3,-1],[-11,-3],[-3,1],[-6,3],[-3,1],[-4,-1],[-3,-3],[-1,-3],[-3,-8],[-2,-6],[-1,-7],[-1,-7],[-1,-7],[0,-6],[0,-7],[1,-7],[1,-6],[4,-12],[1,-2],[4,-4],[3,-4],[2,-13],[2,-6],[2,0],[2,0],[3,-1],[3,-1],[3,4],[2,7],[2,5],[4,11],[3,5],[1,1],[2,-1],[1,-2],[2,-3],[3,-1],[3,1],[4,3],[1,2],[1,3],[3,2],[7,0],[3,-1],[7,1],[0,2],[-2,2],[0,2],[1,1],[4,2],[5,2],[3,-1],[2,-4],[1,-3],[1,-4],[-1,-11],[-1,-2],[-2,-1],[-2,1],[-2,6],[-3,2],[-4,-2],[-1,-2],[-2,-2],[-2,-5],[-2,-7],[-4,-10],[-5,-8],[-2,-4],[-3,-2],[-8,-6],[-2,-4],[-2,-5],[-2,-2],[-2,-1],[-1,1],[-4,3],[-1,-2],[0,-4],[2,-2],[2,-4],[2,-6],[2,-1],[2,-2],[2,-2],[2,-5],[3,-13],[1,-6],[2,-6],[6,-9],[0,-2],[0,-3],[1,-3],[2,-5],[0,-4],[-2,-4],[0,-6],[-2,-8],[0,-3],[0,-3],[1,-2],[1,-2],[2,-1],[1,-2],[3,-6],[1,-2],[1,-2],[0,-4],[1,-2],[1,-3],[2,-1],[1,1],[0,1],[2,0],[0,-3],[1,-3],[0,-4],[0,-7],[-1,-2],[-1,0],[-3,3],[0,-2],[0,-2],[-1,-1],[-2,0],[-4,0],[-7,-4],[-3,-3],[-1,-4],[-1,-3],[1,-7],[-1,-3],[-3,0],[-5,1],[-3,2],[-1,2],[-2,4],[-1,6],[1,17],[1,2],[0,2],[1,3],[0,4],[-2,5],[-3,1],[-3,4],[-11,21],[-1,2],[0,3],[1,4],[3,11],[1,2],[0,9],[0,8],[0,7],[-2,5],[-3,1],[-3,1],[-3,-2],[-3,-4],[-6,-7],[-2,-5],[0,-6],[1,-6],[2,-5],[0,-6],[2,-21],[0,-2],[-2,-6],[0,-14],[0,-19],[1,-11],[0,-6],[-3,-14],[-1,-8],[0,-3],[3,-14],[1,-5],[0,-6],[-3,3],[-1,-1],[-2,0],[-3,-1],[-4,0],[-1,-2],[-3,-3],[-1,-2],[-1,0],[-5,5],[-2,5],[-3,5],[0,7],[1,6],[1,7],[2,12],[0,8],[1,6],[1,6],[1,6],[0,22],[0,2],[-4,14],[0,2],[0,4],[0,3],[0,3],[0,2],[-2,3],[-1,1],[-4,-1],[-6,-4],[-2,3],[-2,5],[-1,7],[0,7],[0,7],[1,6],[-1,5],[-1,5],[0,2],[0,2],[2,2],[1,1],[2,2],[3,7],[1,6],[1,7],[1,7],[1,6],[3,6],[0,6],[-1,9],[1,5],[-1,5],[0,5],[2,9],[4,20],[4,10],[1,3],[3,-5],[1,-6],[0,5],[0,5],[-2,12],[-1,23],[0,2],[2,0],[1,2],[1,3],[-2,9],[0,3],[3,11],[2,5],[1,2],[1,8],[1,2],[2,2],[2,5],[1,7],[1,0],[2,-5],[1,-2],[3,-2],[2,2],[1,3],[1,2],[1,3],[1,2],[2,7],[2,6],[1,2],[1,1],[2,1],[2,0],[3,-3],[2,-1],[2,0],[2,-1],[1,-1],[0,-4],[2,-3],[1,-1],[1,-1],[7,1],[7,-3],[9,-1],[3,-1],[3,-3],[4,-4],[1,-1],[2,0],[2,4],[1,1],[2,0],[6,-1],[15,-5],[3,1],[9,10],[4,9],[3,3],[2,4],[0,5],[1,1],[3,2],[1,1],[3,7],[2,5],[1,2],[3,-1],[2,-3],[2,-8],[0,-1],[-3,-4],[0,-2],[-3,-11],[-2,-6],[-2,-5]],[[7824,5304],[2,-5],[0,-3],[-1,-4],[0,-5],[-3,-4],[-3,1],[-1,1],[-2,8],[0,7],[1,3],[3,-1],[3,4],[1,-2]],[[8547,5233],[2,-2],[2,1],[1,2],[1,4],[1,6],[2,4],[2,1],[1,1],[0,5],[0,5],[2,4],[5,7],[4,3],[4,0],[0,-2],[0,-4],[1,-5],[-1,-15],[-1,-3],[-4,-5],[-5,-4],[-1,-2],[-1,-4],[0,-4],[4,-5],[6,-6],[1,-2],[1,-4],[0,-4],[1,-3],[2,-1],[2,-2],[1,-3],[-10,7],[-3,3],[-3,1],[-3,1],[-3,2],[-4,1],[-1,-2],[-1,-4],[0,-4],[0,-5],[0,-4],[0,-5],[2,-18],[3,-13],[5,-14],[2,-5],[3,-5],[-5,2],[-1,4],[-5,5],[-1,3],[-3,13],[-1,3],[-3,4],[-2,4],[0,4],[0,5],[0,7],[0,6],[1,8],[-1,3],[-2,3],[-2,6],[0,7],[0,4],[1,4],[1,3],[0,3],[-3,4],[-2,12],[0,7],[3,12],[0,6],[0,4],[1,4],[1,8],[3,7],[5,10],[2,2],[2,1],[0,-2],[0,-2],[-4,-10],[0,-2],[0,-5],[1,-2],[2,-5],[0,-7],[0,-7],[0,-7],[-1,-3],[-2,-7],[-7,-9],[0,-2],[0,-2],[1,-3],[1,-2]],[[7703,5303],[0,-1],[-3,6],[-3,3],[1,1],[3,-1],[1,0],[1,-3],[0,-5]],[[8567,5302],[-4,-1],[-1,3],[-1,12],[3,10],[4,6],[2,1],[1,0],[3,-7],[-2,-14],[-2,-7],[-3,-3]],[[8483,5337],[-1,-2],[-1,7],[1,3],[1,-1],[1,-1],[-1,-3],[0,-3]],[[7679,5320],[-2,-1],[-2,1],[-1,4],[-7,9],[-3,0],[-1,3],[-2,1],[-3,6],[0,4],[2,1],[1,4],[2,-2],[3,-6],[3,-2],[1,-1],[1,-4],[6,-8],[1,-3],[1,-3],[0,-3]],[[8024,5351],[-1,-3],[-2,2],[2,6],[1,1],[0,-6]],[[7937,5349],[-1,-1],[-1,2],[1,3],[-1,2],[0,2],[0,3],[1,-1],[1,-2],[1,-1],[1,0],[0,-1],[-1,-4],[-1,-2]],[[7952,5366],[0,-4],[-2,2],[-1,4],[1,2],[1,-1],[1,-3]],[[8267,5373],[0,-2],[-2,5],[-1,3],[0,2],[3,1],[1,-2],[-1,-7]],[[8490,5382],[-1,-2],[-3,3],[0,5],[-1,3],[-1,2],[0,3],[0,3],[2,-4],[2,-6],[1,-5],[1,-2]],[[8523,5401],[-1,-1],[-1,2],[0,1],[0,2],[0,1],[2,-3],[0,-1],[0,-1]],[[8519,5407],[0,-2],[-1,5],[-1,7],[1,-3],[2,-5],[-1,-2]],[[8274,5425],[1,-6],[0,-2],[-5,-3],[-3,7],[0,3]],[[8267,5424],[3,0],[4,1]],[[8008,5396],[-4,-2],[-2,3],[2,4],[1,0],[1,1],[0,1],[-4,3],[-2,2],[-1,5],[0,4],[6,9],[1,1],[0,-4],[4,-10],[0,-6],[0,-2],[-2,-9]],[[8265,5424],[-2,-2],[-1,-3],[3,-5],[0,-4],[2,-3],[2,-5],[1,-1],[0,-2],[1,-3],[-2,-2],[-2,-1],[-2,3],[-2,3],[0,-4],[-1,-2],[-5,0],[-3,0],[-3,-1],[1,0],[2,-1],[5,-10],[1,-3],[-2,-7],[1,-3],[2,-2],[2,-3],[2,-1],[1,-2],[0,-3],[1,-3],[-2,-1],[2,-1],[2,-2],[-1,-2],[-1,-1],[1,-2],[2,-1],[1,-2],[1,-4],[2,-8],[4,-9],[1,-4],[0,-3],[-1,-3],[-2,-3],[-2,-4],[0,-2],[-3,-1],[1,-2],[1,-2],[2,-6],[4,-9],[2,-4],[9,-13],[5,-5],[6,-13],[3,-3],[0,-4],[-2,-5],[-4,-3],[-6,-1],[-6,2],[-4,1],[-2,3],[-3,7],[-2,3],[1,-4],[0,-4],[0,-4],[-1,-3],[-2,-3],[-2,-2],[-1,-1],[-5,-23],[-1,-6],[-2,-25],[0,-7],[2,-13],[1,-7],[0,-3],[0,-3],[-1,-1],[-5,-4],[-3,-4],[-3,-4],[-2,-6],[-2,-5],[-2,-2],[-2,1],[-1,2],[-1,3],[-1,5],[0,-3],[0,-3],[0,-4],[1,-3],[-1,-4],[-1,-2],[-3,-3],[-1,-3],[0,-5],[-1,-2],[-1,-2],[-4,-5],[-1,-2],[-1,-2],[2,0],[2,0],[0,-5],[1,-3],[-1,-7],[-3,-5],[2,-2],[1,-1],[3,-1],[1,-6],[0,-6],[-1,-6],[-2,-1],[-1,1],[-2,0],[-1,-2],[0,-3],[2,1],[0,-7],[-1,-7],[0,-4],[-2,-4],[-1,-1],[-2,3],[0,-3],[0,-2],[3,-6],[-2,-2],[-1,-2],[0,-2],[-3,-7],[-1,-5],[-1,-5],[-1,-4],[-19,-18],[-16,-15],[-1,1],[-1,2],[0,23],[-2,13],[-1,6],[-2,-6],[-1,1],[-2,1],[-1,2],[0,3],[1,7],[-1,-4],[-2,-3],[-1,1],[-2,1],[0,3],[-1,0],[-3,-7],[-5,-3],[-2,0],[-2,2],[0,5],[0,5],[-1,3],[-1,1],[-1,-1],[-4,-2],[-1,0],[0,-1],[-9,18],[-2,-15],[-6,-8],[-4,-4],[-4,2],[-5,3],[-4,-4],[-5,-9],[-1,-1],[-2,0],[-1,1],[1,7],[0,6],[-1,15],[0,3],[-1,4],[-2,2],[-1,-2],[-1,-3],[-4,1],[-3,2],[-3,-1],[-6,-6],[-3,-1],[-2,1],[-1,3],[0,3],[2,2],[-3,-1],[-2,-3],[-1,-2],[-1,1],[-2,6],[-6,-2],[0,-1],[-2,-2],[-1,1],[-1,2],[0,14],[-3,26],[-1,14],[0,3],[-3,5],[0,6],[1,6],[1,7],[-1,7],[-1,7],[-1,6],[-2,4],[-2,6],[-3,3],[-6,5],[-4,-1],[-1,2],[-1,2],[1,5],[1,3],[1,0],[0,2],[-3,4],[-3,4],[0,3],[-1,3],[0,8],[1,4],[1,3],[0,7],[2,3],[0,1],[-1,1],[-1,3],[-1,2],[-2,5],[-4,6],[0,10],[-1,16],[1,6],[1,13],[2,4],[1,1],[2,2],[-1,0],[-1,0],[-2,-1],[2,12],[0,3],[3,6],[3,6],[1,7],[1,6],[7,6]],[[8044,5301],[-2,-8],[0,-3],[1,-2],[2,-2],[0,-9],[2,-5],[3,-5],[1,-3],[2,-3],[2,-3],[1,-3],[2,-3],[6,-11],[2,-3],[2,-3],[1,-2],[3,1],[9,8],[1,1],[3,1],[5,0],[6,-3],[2,0],[1,2],[3,-1],[2,-1],[1,1],[3,6],[4,2],[2,5],[1,6],[0,6],[2,2],[3,2],[4,3],[12,0],[2,-1],[0,-3],[0,-2],[0,-2],[2,0],[2,-1],[6,-5],[3,-1],[1,0],[3,-4],[2,1],[2,3],[2,4],[2,3],[3,2],[3,-1],[4,2],[4,1],[3,-3],[1,1],[1,3],[1,6],[1,4],[1,8],[0,1],[2,1],[1,2],[0,2],[1,3],[0,2],[-1,2],[-1,6],[0,3],[1,2],[1,2],[4,4],[3,6],[2,2],[1,2],[0,3],[-2,2],[-1,2],[0,3],[0,2],[0,2],[0,2],[0,2],[1,4],[2,4],[1,3],[2,-2],[2,1],[2,2],[1,5],[0,3],[0,2],[1,7],[0,1],[1,5],[0,4],[0,7],[0,6],[0,12],[1,2],[1,6],[1,6],[3,4],[2,4],[1,1],[1,0],[3,-3],[3,4],[3,0],[2,0],[2,-2],[1,-1],[3,4],[1,-1],[1,-1],[1,0],[2,1],[4,-1],[7,0],[5,-3],[5,-6],[2,-1],[1,0]],[[8522,5416],[-1,-1],[-2,0],[0,3],[2,6],[1,5],[-2,1],[-1,4],[0,4],[1,8],[2,-1],[1,-3],[1,-6],[1,-5],[-2,-6],[-1,-9]],[[7680,5485],[3,-1],[6,4],[4,-1],[3,-2],[3,-1],[7,1],[2,0],[1,-1],[1,-2],[3,-8],[6,-9],[2,-6],[0,-7],[1,-1],[6,-13],[1,-5],[-1,-8],[2,-5],[6,-6],[4,-4],[1,-2],[0,-3],[2,-5],[3,-2],[7,-8],[11,-15],[6,-8],[4,-11],[2,-5],[2,-6],[3,-9],[5,-10],[1,-3],[1,-5],[2,-4],[2,-4],[2,-3],[2,-1],[4,-8],[2,-2],[-1,6],[-1,5],[0,3],[0,3],[1,2],[2,1],[3,-2],[5,-9],[2,-5],[2,-8],[1,-7],[2,-4],[3,-1],[3,-1],[3,-2],[6,-10],[2,-5],[2,-6],[1,-6],[1,-8],[0,-1],[4,-9],[3,-3],[2,-2],[8,-2],[3,-3],[2,-5],[1,-5],[-1,-4],[-7,-7],[-6,-5],[6,2],[3,2],[3,3],[3,4],[5,5],[2,1],[2,0],[2,-2],[2,-5],[3,-6],[2,-6],[1,-7],[-2,-4],[-3,-3],[-5,-7],[0,-3],[1,-2],[-1,-5],[2,-3],[0,-3],[-2,-4],[1,-2],[2,-11],[1,-2],[4,-5],[6,-6],[4,-2],[4,-2],[1,0],[3,1],[1,-2],[1,-10],[1,-7],[0,-13],[2,-6],[-1,-7],[2,-6],[3,-4],[3,-3],[2,-3],[0,-4],[-1,-4],[-1,-3],[-3,-6],[-1,-2],[0,-7],[0,-3],[2,0],[1,2],[4,8],[1,2],[1,1],[2,1],[7,0],[3,-1],[3,-3],[2,-4],[9,-23],[4,-12],[0,-3],[0,-4],[0,-2],[-4,-9],[-1,-2],[-1,-9],[1,-7],[1,-3],[1,-3],[0,-3],[-3,-14],[0,-2],[2,-22],[0,-7],[-1,-7],[1,-13],[-2,-38],[-1,-2],[-1,-6],[-2,0],[-2,1],[-1,2],[-1,3],[-1,2],[-4,7],[-2,-1],[-5,-9],[-1,-1],[-1,1],[-3,3],[-8,9],[-1,-3],[0,-4],[2,-10],[0,-5],[-1,0],[-1,0],[-4,6],[-3,6],[-3,9],[-3,4],[-2,5],[-7,17],[-1,3],[-10,12],[-2,3],[-3,5],[-3,5],[-6,7],[-11,19],[-4,10],[-5,17],[-2,4],[-9,13],[-4,8],[-2,4],[-5,16],[-1,5],[-2,5],[-2,3],[-3,5],[-5,14],[-1,5],[-1,6],[0,12],[-10,37],[-3,11],[-2,16],[-1,2],[-6,14],[-2,4],[-2,5],[-2,5],[-4,16],[-1,4],[-2,4],[-7,6],[-3,3],[-2,5],[-2,6],[-1,13],[-4,20],[-3,27],[-3,12],[-3,9],[-1,2],[-13,17],[-2,3],[-3,1],[-3,1],[-3,5],[-1,7],[-1,11],[0,6],[-1,4],[-5,7],[-3,6],[-1,6],[-2,5],[-6,18],[-2,4],[-3,3],[-8,4],[-2,3],[-3,9],[-3,5],[-6,11],[-12,23],[-2,6],[-2,6],[-1,6],[-5,18],[0,4],[1,3],[0,4],[-1,3],[0,2],[2,2],[3,2],[3,0],[4,-1],[3,-2],[2,-4],[6,-9],[3,-3],[3,-2],[7,-2]],[[7648,5519],[0,-2],[-2,1],[-2,5],[1,1],[1,0],[2,-2],[0,-2],[0,-1]],[[4877,8305],[-6,-8],[-2,2],[-2,-1],[1,3],[1,6],[2,2],[3,7],[3,2],[0,-1],[1,0],[1,-7],[-1,-3],[-1,-2]],[[7607,5577],[-1,-4],[-4,14],[-1,1],[0,7],[1,3],[3,3],[1,-2],[2,-14],[-1,-8]],[[7603,5608],[-3,-6],[-1,3],[1,3],[1,1],[1,2],[1,-3]],[[7595,5638],[-2,-1],[-1,3],[-1,3],[1,2],[1,1],[2,-4],[0,-3],[0,-1]],[[7597,5648],[-1,-2],[0,2],[0,1],[-1,2],[0,3],[1,4],[1,-1],[0,-3],[0,-6]],[[7029,5660],[0,-1],[-1,0],[0,1],[1,0],[0,2],[0,1],[0,-2],[0,-1]],[[7586,5659],[1,-2],[-1,0],[-2,3],[1,3],[0,2],[1,-6]],[[7577,5710],[-2,0],[0,2],[0,2],[0,1],[1,1],[1,0],[0,-4],[0,-2]],[[7569,5792],[-1,-2],[-3,1],[0,6],[0,6],[0,2],[2,5],[2,1],[1,-5],[1,-6],[-2,-8]],[[7574,5839],[-1,-1],[-2,2],[1,2],[1,5],[1,-3],[0,-3],[0,-2]],[[7583,5877],[1,-8],[-2,4],[-1,2],[1,2],[1,0]],[[7575,5925],[-1,-4],[0,8],[0,1],[1,0],[0,-5]],[[7575,5848],[-1,-1],[-1,1],[-2,11],[-1,6],[0,3],[1,3],[1,1],[0,4],[1,5],[1,5],[0,1],[2,0],[1,1],[-1,4],[-1,2],[0,2],[0,10],[0,4],[1,4],[-1,6],[1,2],[1,4],[1,7],[-1,2],[2,11],[0,7],[1,8],[3,3],[1,0],[0,-6],[1,-2],[-2,-4],[2,-5],[-1,-2],[0,-3],[-1,-4],[-2,-2],[-1,-5],[-1,-2],[3,-5],[0,-18],[-1,-5],[-2,-1],[0,-12],[0,-3],[-2,-5],[0,-3],[-1,-2],[0,-3],[1,-2],[0,-2],[-1,-7],[0,-7],[-1,-6]],[[7186,7020],[0,1],[-2,4],[2,-5]],[[7203,6975],[1,-1]],[[7219,6963],[0,0]],[[7219,6963],[5,-6]],[[7250,6921],[-2,1],[-1,0],[-2,-2],[-1,-1],[-3,-8],[-2,-2],[-2,-3],[-4,-10],[-3,-9],[-1,-8],[0,-7],[-1,-7],[-2,-4],[-1,-1],[-1,-6],[-1,-7],[0,-3],[3,-3],[2,-3],[3,-3],[2,-3],[2,-1],[0,2],[1,2],[2,-1],[2,-3],[2,-3],[4,-4],[4,-4],[4,-4],[1,-3],[1,-3],[2,-3],[5,-7],[4,-5],[3,-3],[3,-3],[1,0],[2,2],[1,1],[1,-1],[2,-2],[5,-6],[5,-5],[5,1],[1,-1],[1,-5],[0,-4],[6,-3],[4,-1],[4,-3],[2,-2],[2,3],[0,2],[2,1],[3,-1],[6,-3],[2,-1],[2,3],[3,2],[2,1],[4,-3],[7,-5],[4,-3],[0,-3],[1,-2],[0,-7],[1,-3],[7,-6],[2,-3],[2,-1],[1,0],[1,-1],[0,-4],[1,0],[1,-1],[2,-1],[4,3],[3,3],[2,-1],[2,-3],[0,-4],[1,-4],[1,-2],[2,0],[4,3],[4,-2],[3,-1],[3,-2],[2,-1],[3,-3],[5,-4],[1,1],[7,6],[1,0],[1,-7],[3,-2],[3,-2],[3,4],[3,-1],[4,-1],[3,2],[3,1],[4,-4],[0,1],[1,2],[2,9],[1,8],[0,5],[-1,7],[-3,9],[-1,3],[1,16],[2,9],[1,4],[1,6],[0,3],[0,3],[-1,1]],[[7703,6809],[-1,-4],[0,-3],[1,-4],[0,-2],[0,-3],[-1,-2],[-2,-1],[-2,-3],[-3,-4],[-2,-4],[-2,-3],[-1,-3],[0,-4],[1,-5],[6,-16],[0,-2],[-2,-1],[-3,2],[-2,2],[-2,7],[-2,2],[-2,0],[-10,-3],[-3,-1],[-3,-3],[-3,-5],[-2,-4],[-2,-2],[-2,-4],[-8,-11],[-4,-5],[-3,-2],[-2,-2],[-1,-4],[-1,-3],[0,-8],[0,-9],[1,-5],[1,-2],[0,-1],[-1,-3],[-2,-3],[0,-2],[-1,-8],[-1,-4],[-3,-6],[-2,-4],[-3,-4],[-1,-3],[-2,-5],[0,-4],[0,-2],[0,-1],[1,-2],[2,-1],[1,-3],[0,-2],[-1,-7],[-2,-10],[-3,-7],[-3,-7],[0,-3],[-3,-8],[-2,-12],[-1,-8],[-1,-6],[-2,0],[-1,2],[-5,2],[-2,2],[-2,2],[-2,-1],[-2,-1],[-2,0],[-1,0],[-3,5],[-1,-3],[2,-14],[1,-5],[0,-9],[-1,-11],[0,-12],[-1,-3],[-1,-3],[-1,-1],[-2,2],[-1,-1],[0,-2],[0,-5],[-1,-6],[-1,-5],[0,-5],[0,-5],[2,-10],[0,-4],[0,-4],[-1,-1],[-1,0],[-1,-1],[-1,-3],[-1,-8],[-2,-1],[-1,2],[-3,5],[-1,2],[-1,0],[0,-2],[-1,-3],[-1,-2],[-1,-2]],[[7473,6456],[-1,-9],[-2,0],[2,-6],[1,-4],[0,-6],[-2,-1],[-2,1],[-1,5],[-1,-5],[-3,-4],[0,2],[-1,3],[0,4],[1,15],[0,2],[-1,1],[-1,1],[0,3],[-3,-17],[1,-7],[0,-3],[-4,-2],[-4,6],[0,2],[-1,-3],[0,-5],[-4,1],[-2,3],[1,6],[3,14],[0,6],[-3,5],[-2,2],[-2,7],[1,-7],[1,-3],[2,-2],[2,-3],[-1,-4],[-2,-3],[-3,-10],[-3,-6],[-4,-4],[-13,-6],[-3,-3],[-4,-8],[-3,-7],[0,-8],[1,-8],[1,-12],[1,-3],[-1,-5],[-3,-4],[-2,-7],[1,-4],[-1,-2],[-7,-8],[-1,-5],[-2,-5],[-3,3],[-1,0],[2,-4],[0,-2],[-1,-2],[-2,-1],[-10,-6],[-8,-6],[-2,0],[1,2],[1,2],[0,6],[-2,1],[-1,1],[-6,-8],[-2,-8],[0,-2],[2,1],[4,4],[2,-1],[0,-2],[-6,-7],[-13,-22],[-1,-4],[-1,-5],[-2,-4],[-5,-12],[-7,-16],[-3,-7],[-12,-12],[-2,-4],[-5,-13],[-6,-10],[-6,-8],[-10,-11],[-7,-10],[-2,-7],[0,-3],[1,-3],[1,-3],[0,-3],[-1,-4],[0,-2],[-2,-6],[-3,-5],[-11,-9],[-1,1],[-9,1],[-3,-1],[-1,-4],[-3,-18],[-3,-4],[-1,-5],[0,-3],[-2,1],[-1,1],[-2,-1],[-1,6],[-2,1],[-2,0],[-7,-6],[-2,-4],[-6,-23],[-1,-14],[1,-16],[2,-13],[0,-5],[0,-8],[-1,-3],[0,-5],[0,-8],[3,-12],[0,-5],[0,-5],[2,-11],[-1,2],[-1,4],[-2,7],[-3,-7],[2,-4],[5,-5],[1,-5],[-3,-38],[-3,-14],[-2,-9],[-2,-3],[-3,-15],[-3,-17],[0,-6],[1,-8],[-1,-4],[-2,-4],[3,2],[1,-4],[0,-4],[0,-25],[0,-26],[-2,-1],[-3,0],[-2,1],[-2,1],[-3,-2],[-3,-2],[-1,-5],[0,-8],[-7,-20],[-2,-7],[-1,-7],[1,-3],[2,-4],[3,-1],[4,-1],[3,-2],[1,-4],[-5,4],[-7,1],[-15,-10],[-4,-6],[-3,-6],[-1,-13],[-1,-9],[-1,-7],[-8,-11],[-6,-4],[-1,-3],[-6,4],[-7,10],[-3,5],[-9,25],[-2,4],[-2,10],[0,4],[-1,2],[-1,1],[0,2],[-3,12],[0,13],[-2,15],[1,-1],[2,-5],[1,-7],[0,-10],[1,-1],[1,1],[-3,22],[-3,6],[-1,4],[0,4],[0,2],[-2,8],[-1,4],[-5,22],[-2,16],[-3,17],[-2,6],[-4,14],[-3,6],[-3,9],[-2,3],[-1,2],[-7,29],[-2,17],[-2,7],[-1,6],[-2,25],[0,4],[-1,5],[-1,11],[-3,11],[-1,7],[0,3],[-2,11],[-1,5],[-1,4],[-1,5],[-2,3],[-4,11],[-1,3],[-3,7],[-1,13],[-3,6],[4,0],[-2,5],[-1,3],[-1,2],[1,5],[-3,0],[-1,3],[-2,9],[-4,10],[0,6],[-4,18],[-2,42],[-3,19],[0,6],[-3,16],[-1,11],[-1,10],[0,6],[-1,12],[-1,4],[-1,2],[1,5],[2,9],[1,5],[-1,8],[-2,-8],[-2,-2],[0,6],[0,8],[-1,2],[1,2],[5,-1],[-6,5],[0,3],[-1,2],[2,4],[-3,3],[0,11],[-1,2],[0,2],[1,14],[5,28],[0,7],[0,8],[-1,8],[-1,7],[0,2],[-2,1],[-1,3],[-2,11],[1,3],[2,2],[-2,0],[-2,0],[3,5],[3,4],[6,5],[2,3],[-4,-3],[-3,-1],[-9,0],[2,11],[1,3],[2,2],[-3,0],[-2,1],[1,10],[2,2],[2,1],[3,1],[-3,2],[-3,1],[-4,-2],[-3,2],[-5,0],[2,-2],[2,-3],[-1,-6],[-1,-3],[-2,-3],[-2,-4],[-1,-3],[-1,-2],[2,-2],[2,-1],[1,-3],[1,-4],[0,-7],[-5,-18],[-1,-4],[-13,-10],[-4,-6],[-11,-8],[-4,-1],[-4,1],[-7,6],[-10,15],[-2,5],[-8,18],[-6,10],[-4,10],[-6,8],[-5,12],[-1,6],[1,5],[1,3],[3,-1],[1,-5],[2,-2],[1,-1],[7,7],[3,0],[2,4],[3,-1],[5,6],[2,0],[3,1],[4,14],[3,9],[2,2],[0,2],[-1,3],[-1,-1],[-1,-3],[-1,-3],[-1,-2],[-2,2],[-2,0],[-2,-1],[-7,-6],[-3,-4],[-3,-1],[-11,5],[-12,12],[-5,8],[-3,10],[-3,11],[1,4],[5,7],[4,6],[-4,-3],[-4,-3],[-2,-3],[-2,-5],[-3,-1],[-1,8],[-1,7]],[[6893,6558],[2,2],[1,2],[3,1],[3,1],[2,0],[4,0],[0,17],[1,2],[0,1],[1,0],[1,-3],[1,1],[1,1],[3,-1],[1,1],[2,-1],[4,0],[5,0],[4,0],[2,-3],[2,-3],[2,0],[4,0],[2,1],[2,3],[0,3],[6,4],[5,3],[2,0],[0,-2],[0,-3],[1,-3],[2,-2],[2,0],[1,0],[1,1],[2,5],[2,1],[1,0],[2,2],[0,2],[-1,1],[-1,2],[0,2],[0,3],[0,3],[1,2],[1,2],[-1,4],[-2,8],[-2,9],[-2,9],[-3,7],[-1,5],[0,12],[0,2],[-1,2],[-1,0],[-2,-1],[-2,0],[-3,0],[-2,1],[-4,12],[-1,5],[0,5],[1,8],[1,7],[0,8],[0,2],[-1,2],[-2,2],[-4,0],[-5,2],[-3,5],[-3,2],[-1,2],[0,2],[1,8],[1,10],[1,3],[1,3],[1,2],[2,3],[5,9],[4,13],[3,9],[1,3],[2,2],[2,2],[2,3],[2,0],[3,-2],[1,-3],[1,-6],[1,-4],[1,-2],[2,-1],[2,0],[9,7],[3,1],[7,1],[4,3],[5,2],[0,5],[2,8],[5,10],[1,4],[2,8],[1,8],[2,3],[8,8],[7,8],[2,3],[5,16],[3,11],[0,3],[2,10],[2,9],[2,2],[5,4],[5,3],[2,4],[1,4],[0,3],[-1,4],[0,2],[0,3],[3,5],[6,14],[3,7],[1,0],[4,4],[3,4],[0,2],[0,3],[-2,1],[-1,3],[1,4],[1,12],[0,4],[-2,10],[0,3],[1,3],[3,5],[2,3],[10,8],[1,1],[4,2],[2,4],[0,4],[-1,2],[-2,3],[-3,3],[-4,3],[-5,-1],[-3,2],[-1,2],[0,5],[0,9],[-1,0],[-1,-1],[-3,1],[-3,0],[-2,3],[1,3],[0,3],[-1,4],[0,1],[-2,1],[-3,3],[-2,4],[-1,2],[0,2],[0,1],[1,4],[2,5],[1,4],[0,3],[0,2],[-2,3],[-2,2],[-1,2],[0,3],[1,4],[2,3],[4,3],[1,3],[0,3],[-1,0],[-3,0],[-5,1],[0,2],[-1,2],[0,1],[1,2],[1,3],[0,3],[-1,3],[-3,2],[-1,3],[1,2],[1,4],[1,3],[2,7],[2,1],[4,3],[3,2],[6,-2],[2,-1],[6,-2],[4,-2],[5,0],[2,0],[2,-2],[5,-4],[4,-2],[3,0],[5,3],[2,3],[3,4],[3,0],[8,5],[2,-1],[2,0],[3,2],[1,4],[0,2],[1,1],[3,2],[3,3],[1,4],[1,3]],[[7140,7206],[3,4],[3,3],[4,4],[4,5],[4,3],[2,3]],[[7160,7228],[1,0]],[[7197,7098],[0,-4]],[[7200,7059],[0,-3]],[[7691,4481],[0,1],[0,1],[1,0],[0,-1],[-1,-1]],[[7689,4482],[1,0],[0,-1],[-1,1],[0,2],[0,1],[0,-1],[0,-1],[0,-1]],[[7936,4579],[-1,-4],[-1,3],[-2,0],[0,3],[2,1],[1,1],[1,-4]],[[7013,4759],[-1,-2],[-1,-1],[0,5],[-2,4],[1,0],[1,-2],[1,-5],[0,1],[0,2],[0,2],[0,2],[-1,2],[1,1],[1,-2],[0,-2],[0,-5]],[[4723,8289],[0,-2],[-2,3],[-1,2],[-6,1],[3,2],[1,-1],[4,0],[1,-1],[0,-4]],[[4827,8299],[1,-2],[0,-2],[-2,-1],[-2,1],[-1,-2],[0,-2],[1,-4],[1,-2],[1,-6],[1,-6],[2,-3],[0,-5],[0,-2],[0,-4],[0,-1],[0,-4],[2,-8],[1,-4],[0,-10],[-1,-3],[-2,-4],[-1,-4],[-1,-4],[0,-7],[-4,-8],[-1,-2],[-2,-1],[4,-6],[-3,-2],[-4,-1],[-4,1],[-2,0],[-2,-2],[-1,-1],[-1,1],[-1,4],[-1,-5],[-2,-1],[-4,0],[-6,-1],[-3,-1],[-1,-3],[0,-2],[-1,-1],[-1,-1],[-5,-2],[-1,-1],[-2,-4],[-3,-2],[-3,-1],[-2,3],[-1,1],[-1,1],[-3,0],[1,-1],[1,-2],[0,-3],[0,-3],[-2,-2],[-2,0],[-3,-3],[-4,-1],[-2,-3],[-14,-5],[-2,1],[-2,1],[-2,-1],[-6,-2],[-3,0],[4,7],[4,4],[1,1],[-2,0],[-8,-2],[-4,-2],[-3,-1],[2,3],[4,4],[2,2],[1,1],[2,3],[4,3],[-14,-6],[-3,0],[-1,2],[-3,-1],[-1,4],[4,6],[3,3],[3,1],[2,3],[1,2],[-1,1],[-8,-1],[-4,1],[0,2],[1,2],[4,4],[2,0],[2,0],[2,-1],[1,-1],[5,0],[-2,3],[0,5],[-2,1],[2,2],[2,2],[4,4],[1,1],[7,1],[8,3],[8,3],[-4,2],[-2,2],[-3,-5],[-2,-2],[-6,-1],[-2,1],[-3,2],[-1,-1],[-1,-1],[-4,-3],[-4,0],[5,4],[6,8],[2,2],[2,5],[-1,1],[-1,1],[4,9],[2,2],[3,0],[2,1],[1,0],[1,1],[1,2],[-2,2],[-3,1],[-10,-1],[-1,0],[-1,1],[-1,1],[0,3],[-1,1],[-2,0],[-2,-1],[-1,0],[-2,1],[2,3],[-2,1],[-3,-1],[-3,1],[0,2],[1,2],[-1,2],[0,2],[1,1],[2,0],[3,2],[5,0],[-4,2],[-2,1],[0,3],[0,1],[5,4],[4,1],[0,2],[0,2],[-4,1],[-5,-2],[1,5],[1,3],[0,3],[0,3],[-2,-2],[-1,4],[-1,3],[-3,-2],[0,4],[1,2],[2,1],[2,0],[3,0],[3,1],[4,1],[7,-1],[4,-5],[2,1],[2,3],[0,1],[8,-2],[4,-2],[1,1],[0,4],[-2,2],[2,3],[2,3],[2,1],[3,1],[2,1],[1,5],[2,3],[-9,-2],[-9,4],[1,3],[2,2],[3,1],[1,2],[1,1],[3,3],[-1,5],[0,3],[2,2],[1,3],[1,2],[3,1],[4,2],[1,0],[5,0],[1,-1],[0,4],[3,0],[1,0],[0,-3],[1,-1],[1,-3],[-1,-2],[-2,-2],[2,-2],[-2,-3],[2,1],[3,3],[0,3],[-1,3],[-1,3],[1,3],[1,2],[5,1],[-2,3],[2,1],[1,-1],[3,-3],[2,-2],[3,-2],[-2,-3],[-4,-2],[-1,-3]],[[6560,6734],[-2,-6],[-4,-6],[-2,2],[-1,-1],[-3,-2],[-2,0],[-4,-4],[-3,-2],[-2,0],[-1,0],[-1,3],[0,1],[2,0],[5,3],[6,6],[1,3],[-1,4],[0,1],[4,-2],[5,4],[4,1],[2,-3],[-3,-2]],[[6357,7398],[0,-3],[1,-14],[0,-8],[1,-7],[2,-6],[2,-7],[2,-3],[6,-5],[3,-1],[7,-1],[7,-2],[4,-3],[1,-1],[1,-2],[4,-11],[5,-8],[11,-12],[5,-4],[18,-7],[12,0],[33,14],[11,4],[4,0],[-2,-3],[-5,-2],[3,-2],[4,0],[2,0],[1,2],[0,3],[0,3],[-2,13],[-1,10]],[[6497,7335],[8,-1],[3,1],[4,3],[3,2],[2,1],[2,1],[1,2],[3,13],[1,3],[5,7],[4,4],[5,4],[5,3],[7,0],[6,-1],[4,0],[1,0],[1,0],[1,1],[1,6],[1,1],[2,2],[3,0],[4,0],[2,0],[4,-2],[5,0],[3,0],[2,-2],[1,-3],[1,-2],[0,-4],[0,-2],[1,-1],[1,-1],[3,-2],[5,-1],[5,-2],[3,-2],[3,-3],[5,-7],[1,-1],[2,0],[2,0],[3,3],[3,-3],[1,1],[3,1],[3,-2],[9,-7],[1,0],[1,-1],[0,-1],[1,-2],[0,-7],[3,-4],[3,-5],[3,-2],[8,-6],[3,-4],[3,-8],[4,-10],[0,-1],[11,0],[11,0],[1,-4],[0,-8],[1,-8],[1,-6],[0,-5],[-1,-3],[-1,-3],[0,-1],[1,-2],[2,-4],[0,-6],[-1,-4],[0,-2],[1,-3]],[[6697,6919],[-7,-14],[-1,-1]],[[6689,6904],[6,-12],[3,-7],[5,-9],[0,-3],[0,-4],[5,-14],[2,-8],[1,-5],[4,-7],[3,-7],[4,-3],[3,-1],[6,-4],[3,-2],[3,-8],[4,1],[1,0],[1,0],[0,-3],[-1,-11],[1,-12],[1,-17],[0,-3],[-1,-5],[0,-4],[-1,-2],[1,-1],[1,-1],[3,0],[7,2],[1,-1],[1,-2],[2,-3],[0,-2],[-2,-3],[0,-4],[0,-7],[0,-1],[-2,-1],[0,-10],[0,-1],[-2,-1],[-9,0],[-1,0],[-3,-2],[-5,-2],[-2,-1],[-2,-3],[-1,-4],[-1,-3],[0,-1],[-3,1],[-1,-3],[-6,-5],[-1,-1],[-1,-3],[-1,-10],[0,-9],[-1,-1],[-2,-3],[0,-1],[0,-3],[0,-7],[-1,-17],[-1,-5]],[[6710,6635],[-1,0],[-2,-2],[-2,-3],[-4,2],[-4,2],[-13,6],[-1,3],[-1,5],[-2,1],[-3,-7],[-10,4],[-4,-1],[-2,2],[-6,0],[-4,4],[-6,-3],[-5,0],[-7,8],[-8,2],[-6,-1],[-3,1],[-5,3],[-2,3],[-4,-3],[-2,5],[-11,3],[-2,8],[-2,7],[0,7],[-2,12],[-1,18],[-1,6],[-2,7],[-2,5],[-3,5],[-2,2],[-10,4],[-2,0],[-5,-3],[-5,-6],[-8,-3],[-1,-3],[-2,-6],[-3,-3],[-4,1],[-4,-4],[-7,-10],[-4,-3],[-3,1],[-3,4],[-8,6],[-5,3],[-7,-2],[-3,1],[-5,7],[-2,6],[-3,3],[-10,8],[-8,11],[-1,4],[-1,5],[-4,7],[-8,6],[-4,6],[-6,2],[-4,0],[-3,1],[-2,2],[-6,13],[0,5],[-4,13],[-1,4],[-1,12],[-1,4],[-5,5],[0,3],[1,4],[0,4],[-3,3],[-3,2],[-1,3],[1,8],[-1,4],[-3,8],[-4,7],[-4,11],[-2,3],[-1,8],[-2,8],[-2,1],[-12,-11],[-4,6],[-10,10],[-1,2],[0,2],[1,2],[1,0],[3,-2],[1,3],[0,3],[-3,2],[-3,0],[1,-3],[-4,-3],[-1,-4],[1,-5],[0,-7],[-1,-4],[-1,-1],[-5,-1],[-2,-3],[-1,0]],[[6348,6910],[-2,2],[-1,2],[-1,4],[-1,3],[1,2],[-1,2],[-1,3],[-2,2],[-1,0],[-1,2],[-1,4],[-2,2],[-2,1],[0,11],[0,9],[0,10],[-5,0],[-4,0],[0,9],[0,14],[2,12],[2,11],[-3,8],[-4,9],[-2,4],[-2,11],[-2,4],[-1,2],[-1,1],[-5,0],[-4,6],[-5,7],[-6,8],[-5,5],[-3,2],[-5,0],[0,1],[-1,3],[0,4],[2,5],[0,3],[-3,10],[-1,4],[-3,1],[0,3],[0,2],[0,2],[-1,0],[-1,1],[-2,-2],[-2,5],[-5,14],[-2,2],[-1,0],[2,5],[2,6],[0,4],[0,4],[-2,7],[0,3],[1,4],[0,3],[2,-1],[2,0],[1,2],[0,8],[0,3],[7,13],[3,3],[3,3],[0,4],[0,2],[-1,3],[0,2],[-3,6],[-1,3],[0,3],[1,5],[1,4],[4,2],[2,2],[1,1],[-3,3],[-6,1],[-5,-1],[-2,1],[-2,5],[-2,3],[-2,2],[-2,0],[-2,0],[0,2],[-3,18],[-1,2],[-1,1],[-1,0],[-1,1],[-1,3],[-1,3],[0,4],[0,3],[0,3],[-1,2],[-2,1],[-1,2],[-2,16],[-1,4]],[[6243,7323],[0,1],[0,3],[1,3],[0,2],[-3,4],[-3,3],[0,1],[0,4],[0,3],[-1,3],[0,2],[0,1],[1,3],[-1,2],[-4,5],[-2,2],[-3,1],[-1,1],[1,4],[1,4],[2,4],[0,2],[1,4],[0,2],[2,4],[0,1],[0,1],[-2,1],[-2,0],[0,1],[0,2],[0,8],[-1,4],[0,4],[0,8],[-1,1],[-2,4],[0,4],[0,1],[0,2],[1,3],[0,2],[-2,3],[-1,2],[0,2],[-1,3],[0,2],[-1,2],[1,1],[2,0],[3,0],[3,0],[1,1],[2,15],[2,3],[2,2],[4,-5],[1,-1],[1,0]],[[6348,6910],[-3,-2],[-2,1],[-6,5],[-2,0],[-3,-2],[0,-1]],[[6332,6911],[-6,5],[-2,1],[-1,0],[-4,0],[-5,-1],[-3,-2],[-2,-2],[-1,-2],[0,-2],[-2,-6],[-2,-9],[-2,-8],[-3,-11],[-3,-5],[-4,-9]],[[6292,6860],[-5,-2],[-11,2],[-13,2],[-12,2],[-9,1],[-1,1],[-9,13],[-8,11],[-9,13],[-9,14],[-9,13],[-7,10],[-8,13],[-8,12],[-6,9],[-8,8],[-5,6],[-9,10],[-7,7],[-6,6],[-9,10],[-3,2],[-10,4],[-9,2],[-9,3],[-6,2]],[[6087,7034],[4,7],[-1,6],[-3,-1],[-3,-1],[-2,9],[2,1],[-2,13],[-2,13],[-2,12],[-2,13]],[[6076,7106],[8,8],[6,6],[8,9],[8,8],[8,8],[8,9],[8,7],[6,3],[2,3],[3,10],[3,9],[0,3],[0,12],[0,15],[1,8],[2,7],[1,6],[0,4],[0,5],[-1,8],[-2,8],[0,7],[1,4],[1,6],[1,5],[2,3],[6,3],[4,2],[5,8],[3,5],[5,8],[3,5],[0,2],[0,1]],[[6176,7321],[3,1],[5,7],[3,7],[1,0],[2,-2],[2,0],[4,2],[3,-1],[2,-2],[1,0],[6,-4],[2,0],[3,-1],[4,0],[3,2],[2,3],[1,0],[2,-1],[1,-1],[1,-2],[0,-2],[0,-9],[1,-2],[0,-2],[1,0],[2,2],[2,2],[2,3],[2,3],[1,1],[2,0],[2,-1],[1,-1]],[[4568,8998],[3,0],[5,2],[2,2],[6,4],[3,1],[5,0],[2,0],[-3,-2],[-2,-1],[-4,-2],[-3,-6],[-2,-3],[0,-2],[3,-2],[3,-2],[3,2],[1,-1],[1,-2],[1,-1],[0,-2],[0,-4],[-2,-3],[-3,-3],[1,-1],[2,-1],[9,2],[1,0],[0,-1],[0,-2],[1,-1],[1,-2],[0,-1],[-4,-5],[4,3],[4,1],[6,-2],[3,-2],[2,-3],[2,1],[1,0],[1,-1],[0,-2],[-1,-3],[0,-2],[-1,-1],[-2,-1],[-1,-1],[1,-2],[1,-2],[2,0],[1,0],[0,-1],[-1,-2],[-1,-1],[-2,-1],[5,-3],[1,-1],[0,-2],[0,-1],[-1,-2],[-2,-1],[-3,-1],[-2,-1],[0,-2],[0,-2],[0,-3],[-3,-5],[-3,-2],[-2,-2],[-5,1],[-2,1],[0,-4],[-2,-2],[0,-2],[1,-1],[0,-3],[-2,-2],[-2,-3],[-2,-2],[-4,-2],[-4,-3],[-3,-2],[-6,0],[-7,-2],[-9,-5],[-7,-3],[-4,-5],[-7,-7],[-5,-3],[-2,0],[-6,-1],[-4,-2],[-15,-3],[-5,-2],[-1,-2],[-2,-3],[0,-1],[1,-1],[0,-1],[-2,-3],[-4,-2],[-1,0],[-3,2],[-1,0],[0,-1],[1,-2],[-2,-1],[-10,-3],[-16,2],[-7,2],[-8,3],[-5,1],[-6,1],[-6,4],[-3,3],[0,1],[0,2],[1,1],[1,0],[2,0],[0,1],[-1,2],[-2,-1],[-3,-3],[-2,0],[-2,2],[0,1],[-4,1],[-4,2],[-4,3],[0,1],[2,1],[-1,1],[-1,0],[-3,-1],[-4,-3],[-1,-1],[-26,-1],[-6,0],[-2,-1],[-1,3],[-1,5],[0,3],[0,2],[1,2],[1,0],[2,-2],[1,-2],[1,-1],[9,2],[4,2],[1,2],[2,3],[2,1],[1,2],[2,5],[1,2],[2,1],[1,1],[4,1],[-2,1],[-3,0],[-8,-5],[-3,0],[0,1],[1,1],[3,3],[-2,0],[-1,1],[0,2],[2,4],[7,5],[2,0],[1,1],[-1,1],[-2,0],[-6,-4],[-5,-2],[-2,0],[-3,2],[0,1],[-2,2],[1,1],[2,4],[0,1],[-2,0],[-5,4],[-7,0],[-17,2],[-4,-1],[-5,-3],[-4,-1],[-2,0],[-1,2],[-2,2],[-1,3],[1,2],[2,1],[2,0],[4,0],[6,2],[4,0],[1,0],[2,2],[1,1],[2,-1],[1,-1],[5,2],[2,1],[1,1],[1,0],[2,-1],[3,0],[3,1],[5,0],[11,1],[2,1],[1,2],[1,4],[0,1],[-8,-4],[-1,0],[-9,2],[-3,2],[1,2],[5,3],[4,3],[7,4],[2,1],[0,1],[-5,3],[-8,-1],[-2,4],[-7,1],[-5,-1],[-3,2],[-6,-3],[-13,-3],[-5,-3],[-3,-1],[-4,2],[-5,3],[-7,1],[0,1],[3,4],[3,1],[3,0],[4,-3],[4,-1],[-4,4],[0,2],[-1,2],[-1,2],[-1,2],[0,1],[2,1],[3,-1],[9,-5],[4,1],[2,2],[3,1],[-1,1],[-7,0],[-4,1],[-2,1],[-1,3],[0,1],[2,1],[6,-1],[-4,5],[-3,2],[0,1],[0,2],[1,1],[7,-2],[2,0],[-2,1],[-3,3],[0,1],[1,0],[1,2],[0,1],[2,1],[2,0],[2,-1],[7,-5],[1,-1],[0,-2],[0,-2],[0,-1],[3,1],[2,-1],[1,0],[2,4],[2,-1],[1,-2],[1,-1],[0,-2],[-1,-4],[2,2],[3,0],[1,1],[0,4],[-1,4],[-10,5],[-2,1],[-2,3],[1,1],[2,1],[2,0],[7,0],[1,1],[-1,1],[-3,1],[-1,0],[-1,2],[-3,-1],[-5,0],[-4,1],[0,1],[2,1],[3,3],[2,1],[4,-1],[5,1],[4,-1],[3,-3],[4,-4],[5,-3],[1,-1],[3,-2],[6,-7],[6,-3],[0,-1],[-1,-1],[-2,-2],[3,-1],[3,-3],[0,-1],[-2,-8],[-1,-1],[-1,-1],[-6,1],[1,-2],[4,-3],[1,-1],[0,-2],[1,1],[1,-1],[0,-2],[-1,-2],[-1,-2],[1,-1],[1,1],[2,-1],[2,-2],[2,-7],[1,-2],[0,2],[1,5],[1,2],[1,0],[0,1],[1,2],[1,5],[4,4],[1,2],[2,0],[1,-1],[3,-4],[1,-1],[1,1],[2,3],[1,5],[0,6],[0,7],[0,5],[2,3],[2,1],[3,-1],[2,-2],[4,-7],[4,-3],[3,-4],[1,-1],[3,-1],[1,0],[0,1],[1,2],[-1,9],[1,3],[1,3],[5,1],[3,1],[3,3],[2,1],[2,0],[2,-1],[2,-2],[3,-4],[4,-6],[5,-4],[2,-8],[1,-1],[1,0],[0,1],[1,1],[0,4],[-2,4],[-4,11],[0,2],[0,1],[4,1],[7,-1],[3,-2],[5,-7],[1,-1],[1,-1],[0,1],[2,1],[2,2],[2,3],[5,7],[1,0],[2,0],[2,-2],[1,-1],[3,-1],[2,0],[4,2],[4,2],[1,3],[0,1],[-3,10],[1,2],[7,2],[6,1],[2,-1],[3,-5],[3,-2],[1,-2],[0,-4],[2,-2],[3,-2]],[[5993,7069],[-1,0],[-3,-3],[-1,-1],[0,-1],[-1,-1],[0,-13]],[[5987,7050],[-2,0],[-2,3],[-1,2],[0,1],[-2,0],[-3,2],[-4,-5],[-1,-7],[0,-3],[-2,-7],[1,-4],[0,-6],[0,-4],[0,-3],[-1,-1],[1,-1],[0,-1],[2,2],[2,-2],[2,-2],[0,-1],[-1,-1],[-3,-4],[-3,-4],[0,-4],[-2,-8],[0,-1],[1,-1],[5,0],[5,4],[4,3],[1,0]],[[5984,6997],[-1,-9],[0,-5],[0,-1],[1,-5],[-2,-9],[-1,-7],[-1,-3],[-2,-7],[-2,-9],[0,-6],[0,-2],[-1,-11],[1,-3],[-2,-10],[-1,-4],[-1,-7],[-1,-13]],[[5971,6886],[-2,-4]],[[5951,6981],[3,5],[0,4],[4,10],[0,1],[-1,2]],[[5957,7003],[6,18],[3,17],[3,24],[3,13],[2,8],[1,6]],[[5975,7089],[3,1],[2,-1],[3,0],[2,2],[1,8],[2,1],[0,-2],[1,2],[3,4],[2,2],[1,2],[1,1]],[[5996,7109],[-1,-3],[0,-2],[0,-3],[0,-2],[1,-3],[1,-4],[-1,-2],[0,-3],[0,-3],[1,-2],[-2,-5],[-1,-5],[-1,-3]],[[5334,7301],[-1,-1],[-2,2],[0,3],[0,1],[2,-1],[1,-3],[0,-1]],[[5432,7385],[-2,-6],[-1,-3],[-6,-16],[-1,-4],[-1,-4],[0,-3],[-1,-3],[-1,-5],[0,-4],[0,-3],[1,-1],[2,-2],[1,-2],[-2,-2],[2,-4],[1,-2],[0,-3],[0,-2],[-3,-5],[-1,-2],[-1,-3],[0,-3],[0,-3],[0,-3],[-3,0],[-3,2],[-3,-1],[-5,3],[-1,1],[-2,1],[-3,10],[-3,5],[-4,3],[-3,0],[-3,0],[-3,2],[-6,7],[-6,5],[-3,4],[-1,2],[-2,2],[-3,1],[-4,4],[-1,0],[-3,0],[-2,0],[-1,1],[-4,5],[-2,6],[0,2],[1,7],[2,7],[2,1],[1,2],[1,2],[1,2],[3,-7],[2,-1],[1,0],[3,2],[0,3],[3,4],[4,0],[1,-1],[1,-3],[2,-1],[1,-1],[6,-5],[1,-1],[1,-1],[5,3],[3,1],[6,-1],[4,1],[2,0],[4,2],[3,4],[1,1],[2,0],[4,0],[3,-1],[2,1],[1,3],[2,1],[2,-1],[4,4],[2,1],[2,-2],[-2,-3]],[[5235,7434],[-2,-6],[-1,4],[0,4],[0,1],[2,-2],[1,-1]],[[5387,7528],[-2,0],[0,1],[-1,0],[1,3],[2,-2],[0,-1],[0,-1]],[[5230,7548],[-1,-3],[-2,0],[1,2],[1,4],[2,1],[0,-1],[0,-2],[-1,-1]],[[5267,7539],[1,-4],[4,-15],[0,-3],[-1,-4],[-1,-2],[-3,-8],[1,-6],[1,-4],[0,-4],[0,-6],[-2,-32],[-1,-6],[-1,-5],[-2,-2],[-3,2],[-3,3],[-2,-1],[-1,-1],[-2,1],[-1,2],[-1,-11],[-1,-5],[-3,-3],[-2,0],[-2,1],[-2,0],[-2,2],[-1,4],[-2,5],[-2,5],[0,5],[0,11],[0,2],[1,3],[1,4],[-1,5],[1,1],[1,-1],[1,0],[0,2],[0,4],[-2,4],[-2,1],[0,3],[0,4],[1,2],[1,3],[0,10],[-2,3],[-1,5],[0,4],[-2,3],[-2,3],[-1,2],[0,7],[0,6],[1,2],[1,0],[1,-3],[2,-1],[3,0],[3,1],[3,2],[4,3],[4,10],[3,2],[2,2],[1,3],[1,1],[1,-3],[2,0],[3,-3],[1,-3],[1,-3],[1,-1],[2,-1],[-1,-1],[-1,-4],[0,-1],[2,-1]],[[5288,7652],[1,-2],[0,-1],[0,-2],[0,-3],[-2,3],[-4,-2],[-2,1],[-1,2],[1,2],[3,0],[1,1],[2,-1],[1,2]],[[5380,7863],[-1,-3],[-1,-1],[-2,-2],[-2,-2],[-2,-3],[-1,-4],[1,-2],[1,0],[1,0],[2,-1],[2,-1],[0,-2],[0,-1],[-2,-3],[-2,-2],[0,-2],[0,-1],[1,-1],[2,0],[1,-1],[-2,-7],[1,-1],[2,-2],[2,-1],[3,-5],[1,-4],[-1,-1],[-2,-1],[-1,1]],[[5381,7810],[1,2],[-4,8],[-2,0],[-3,-3],[-7,3],[-1,-1],[-1,-3],[-3,-4],[-3,-1],[-4,-4],[-4,-3],[-3,-2],[-2,1],[3,4],[-2,0],[-3,-3],[-3,-3],[0,-4],[-1,-7],[2,-2],[3,-10],[3,-4],[0,-4],[-1,-3],[-3,-3],[-1,2],[-1,0],[-1,-6],[1,-17],[3,-12],[2,-5],[6,-8],[6,-4],[11,-14],[6,-4],[1,-3],[4,-10],[3,-12],[3,-19],[3,-9],[4,-11],[10,-15],[9,-11],[9,-7],[6,-1],[16,1],[3,0],[2,-2],[1,-5],[-1,-3],[-3,-3],[-3,-5],[-1,-6],[3,-5],[15,-11],[16,-10],[4,-5],[6,-8],[13,-11],[2,-5],[9,-11],[3,-9],[1,-6],[-2,-7],[-1,-5],[-1,-5],[-3,2],[-4,5],[-6,20],[-11,2],[-2,1],[-4,4],[0,2],[-1,3],[-1,1],[-4,0],[-3,-3],[-4,-7],[-3,-11],[-4,-16],[-1,-7],[3,-6],[6,-4],[5,-5],[3,-6],[0,-14],[2,-8],[-3,-5],[-4,2],[-5,-3],[-4,-5],[-2,-5],[1,-13],[-1,-5],[-7,-9],[-4,-9],[-1,-4],[-2,-5],[-9,0],[-2,6],[0,8],[2,5],[3,2],[2,10],[0,8],[1,3],[1,3],[3,1],[3,1],[1,11],[-3,5],[-1,6],[-1,13],[-5,15],[-3,14],[-2,7],[-3,4],[-5,0],[-3,1],[-9,10],[-1,1],[0,3],[2,3],[-1,6],[-1,5],[-2,4],[-2,2],[-5,-1],[-1,-1],[-3,0],[-2,-2],[-1,0],[3,8],[-1,1],[-3,4],[-5,0],[-1,0],[-1,-2],[0,2],[0,3],[-6,15],[-3,6],[-2,1],[-3,-1],[-5,2],[-4,1],[-1,-1],[-3,-2],[-1,2],[-1,2],[-5,6],[-6,3],[-11,20],[-4,8],[-8,8],[-4,11],[-4,5],[-6,3],[-1,0],[-2,-1],[-1,-1],[-1,2],[1,2],[1,0],[0,5],[-7,11],[-3,4],[-1,3],[-1,3],[-1,2],[-2,1],[-1,0],[-2,1],[0,5],[0,5],[0,3],[-2,10],[-4,8],[-2,20],[-2,5],[-3,4],[-9,5],[-12,13],[-3,0],[-7,5],[-5,0],[-6,-4],[-7,-12],[-6,-13],[-2,-2],[-8,-4],[-6,-2]],[[5344,7714],[1,-2],[1,0],[1,3],[0,3],[-2,-1],[-1,-3]],[[2854,6247],[3,-2],[3,-1],[2,0],[1,-1],[4,-5],[2,-3],[10,-6],[3,-10],[1,-3],[-3,-2],[-3,-1],[-3,0],[-3,2],[-1,1],[-3,1],[1,2],[-1,0],[-2,0],[-1,-4],[-2,-3],[-2,0],[-1,3],[-1,-1],[-2,-2],[-1,-8],[-2,4],[-2,3],[-3,1],[-6,0],[-3,2],[-2,6],[-1,2],[-2,1],[-2,8],[-1,1],[-6,1],[-1,4],[0,4],[2,4],[1,1],[3,0],[4,2],[1,1],[2,2],[11,-4],[3,0],[3,0]],[[4943,8019],[1,-2],[-2,-1],[-1,1],[-2,0],[-2,-1],[1,5],[4,0],[1,-2]],[[6087,7034],[-4,-7],[-1,0],[-6,-3],[-11,-6],[-7,-4],[-9,-5],[-8,-4],[-8,-4],[-7,-3],[4,-8],[6,-12],[4,-8],[5,-11],[5,-9],[4,-9],[-3,-4],[-5,-5],[-1,-1],[0,-1],[-2,-10],[-2,-8],[-1,-1],[-7,-2],[-8,-3],[-5,-2],[-1,-2],[-3,-9],[-3,-10],[-6,-8],[-6,-9],[-1,-1],[-4,1],[-8,3],[-7,2],[-5,2],[-6,2]],[[5970,6875],[1,7],[0,4]],[[5984,6997],[1,5],[1,6],[1,5],[-1,13],[0,7],[2,8],[-1,9]],[[5993,7069],[3,-1],[2,-3],[3,-7],[5,-3],[1,-2],[3,-4],[3,-1],[9,-3],[8,9],[6,7],[7,8],[5,6],[9,9],[5,6],[7,8],[7,8]],[[8441,6582],[-2,-1],[-2,1],[-2,1],[0,1],[2,2],[0,3],[0,1],[5,-3],[0,-2],[-1,-3]],[[8452,6596],[-2,-9],[-1,-2],[-2,1],[-1,5],[1,2],[1,-1],[1,1],[3,7],[1,-1],[-1,-3]],[[8484,6609],[-3,-2],[-2,1],[0,8],[1,-1],[1,-2],[2,-2],[1,-2]],[[8949,6717],[-1,0],[-1,6],[1,-1],[1,-3],[0,-2]],[[8562,6719],[-3,-3],[-1,-3],[-2,-1],[-3,-4],[-2,-1],[0,-4],[1,-3],[-1,0],[-2,-4],[0,-3],[0,-2],[0,-1],[-2,-3],[-2,0],[0,3],[0,3],[2,6],[0,7],[2,1],[1,1],[3,5],[0,3],[-1,2],[0,2],[0,1],[3,-1],[1,-1],[0,-1],[1,2],[1,2],[3,5],[1,5],[2,-4],[-1,-5],[-1,-4]],[[8582,6780],[-1,-1],[-1,2],[-1,6],[1,4],[1,0],[1,-5],[1,-3],[-1,-3]],[[8591,6803],[1,-2],[-3,1],[-1,6],[2,-1],[0,-2],[1,-2]],[[8595,6809],[-2,-5],[-3,4],[-3,3],[2,1],[0,1],[0,2],[2,2],[4,2],[2,0],[1,2],[1,2],[0,1],[3,2],[0,-2],[0,-3],[-2,-1],[-2,-3],[-1,-3],[-2,-2],[0,-1],[0,-2]],[[8628,6927],[-4,-1],[-1,1],[-2,7],[3,5],[4,-5],[1,-1],[-1,-6]],[[8637,6935],[-3,-1],[0,3],[2,8],[1,5],[1,7],[1,2],[1,0],[0,-2],[0,-8],[-2,-7],[-1,-7]],[[8602,7007],[0,-1],[0,5],[2,4],[1,-3],[-3,-5]],[[8621,7051],[-3,0],[-1,1],[0,2],[3,3],[3,0],[-1,-4],[-1,-2]],[[8613,7040],[-3,-2],[0,2],[-1,1],[2,3],[0,1],[-1,2],[1,7],[0,3],[4,1],[1,-3],[0,-8],[-3,-7]],[[8573,7072],[1,-1],[2,0],[1,1],[1,-1],[1,-4],[1,-2],[-2,-1],[-1,0],[-1,-3],[-2,1],[-1,1],[0,2],[0,7]],[[8884,7088],[-1,-1],[-1,2],[0,2],[0,1],[1,0],[1,-2],[0,-2]],[[8585,7075],[-1,0],[-1,5],[-1,2],[1,1],[3,9],[0,-4],[1,-3],[1,-1],[-1,-3],[-1,-1],[-1,-5]],[[8596,7097],[-2,-2],[-1,0],[1,3],[0,1],[1,5],[2,1],[1,0],[-1,-4],[-1,-4]],[[8605,7128],[-2,-3],[-2,2],[1,5],[0,2],[2,-2],[1,-4]],[[8643,7119],[4,-1],[1,-1],[2,1],[2,2],[2,2],[2,-1],[1,-2],[1,-3],[0,-3],[-3,-6],[-2,-7],[5,-1],[5,0],[-1,-4],[0,-4],[1,-1],[1,-3],[0,-2],[-1,-2],[3,-3],[0,-2],[-1,-2],[-7,-15],[-2,-7],[-1,-8],[-1,-6],[-1,-6],[-1,-7],[-1,-7],[0,-6],[0,-6],[-4,-15],[-2,0],[-3,2],[-2,0],[-1,-4],[2,-7],[-6,-8],[-6,-6],[0,3],[1,2],[1,1],[0,2],[1,7],[0,6],[-2,9],[0,3],[1,1],[1,0],[0,1],[0,3],[0,2],[-2,1],[-2,0],[-1,-3],[-1,-6],[-1,-6],[0,-3],[1,-3],[2,-5],[0,-3],[-1,-2],[-8,5],[-2,0],[-1,1],[-2,7],[3,1],[1,1],[1,2],[0,7],[-1,5],[-2,2],[-1,3],[1,4],[0,6],[0,8],[0,2],[3,1],[2,5],[2,5],[3,8],[2,10],[-2,0],[-2,2],[2,4],[-1,6],[-3,7],[-1,8],[-3,3],[-1,2],[-2,-2],[-1,-2],[1,-6],[0,-4],[0,-5],[1,0],[2,1],[1,-1],[1,-2],[0,-4],[0,-3],[-1,-1],[-2,0],[-1,2],[-2,2],[-2,1],[-3,-2],[-3,-6],[-2,-3],[1,4],[0,5],[-1,3],[-2,5],[-1,3],[0,4],[0,4],[3,-4],[1,-6],[2,-2],[3,0],[-2,8],[-1,2],[-2,3],[-4,6],[-2,3],[0,6],[2,2],[1,-1],[4,-2],[0,3],[0,2],[-1,2],[3,2],[4,3],[1,1],[1,2],[1,1],[3,0],[2,2],[2,6],[1,3],[1,3],[5,4],[1,1],[4,-1],[3,-2],[1,-6],[2,-6],[3,-4]],[[8673,7139],[2,-2],[3,1],[0,-1],[-1,-2],[-1,-2],[-3,2],[-1,0],[-1,3],[1,1],[1,0]],[[8682,7149],[-1,-3],[-2,1],[1,2],[0,3],[1,0],[0,-3],[1,0]],[[8590,7149],[-2,-2],[0,3],[0,11],[4,-2],[0,-4],[-2,-6]],[[8731,7157],[4,-2],[4,0],[0,-10],[1,-4],[1,-3],[-1,-5],[2,-1],[-5,-5],[-5,-7],[-2,-5],[-2,-5],[-1,-5],[-1,-6],[-1,2],[-5,9],[-3,3],[-4,1],[-2,0],[-9,-9],[-2,-6],[-2,-10],[-2,-3],[-1,-1],[-1,-1],[-1,-9],[-3,-5],[-2,0],[-3,2],[-1,-1],[1,8],[-2,1],[-3,0],[-1,5],[-1,3],[1,4],[0,3],[1,2],[0,2],[0,2],[-2,1],[-1,2],[0,5],[-1,1],[-2,-1],[-6,-5],[-1,0],[2,3],[5,5],[2,2],[5,7],[3,3],[1,6],[1,4],[1,3],[1,5],[1,1],[3,5],[1,-1],[2,-5],[2,-4],[2,0],[3,2],[1,1],[4,0],[3,2],[1,3],[0,4],[-1,6],[2,0],[1,0],[4,4],[3,2],[3,1],[4,-2],[4,-4]],[[8731,7170],[0,-1],[-1,0],[-2,-2],[0,2],[-1,2],[-1,1],[4,1],[2,-1],[-1,-2]],[[8747,7159],[-3,-5],[-2,0],[-2,2],[0,3],[2,4],[3,6],[1,3],[2,2],[1,-1],[-2,-8],[0,-6]],[[8593,7163],[0,-3],[-2,2],[-1,1],[2,9],[-1,4],[1,1],[3,5],[1,-1],[0,-1],[0,-2],[0,-5],[-3,-7],[0,-3]],[[8873,7184],[0,-3],[-2,1],[-1,2],[1,3],[1,0],[1,-3]],[[8704,7269],[-1,-2],[-3,1],[-1,3],[0,3],[3,3],[2,-5],[0,-3]],[[8842,7362],[-3,0],[0,1],[1,1],[0,3],[1,4],[0,1],[-2,0],[0,5],[2,5],[4,7],[1,2],[1,-4],[-2,-7],[0,-3],[3,-1],[-2,-9],[-4,-5]],[[8922,7567],[1,-1],[5,3],[-1,-9],[0,-9],[0,-15],[1,-7],[1,-6],[2,-5],[3,-3],[4,-10],[2,-13],[2,-7],[1,-6],[0,-3],[0,-3],[0,-4],[0,-4],[0,-10],[-2,-12],[0,-6],[-2,-2],[-1,-3],[-1,-1],[-1,-1],[-1,0],[-1,-1],[0,-4],[-1,-3],[-1,-2],[-1,-4],[-1,-7],[0,-8],[-1,-5],[-3,-2],[-3,1],[-4,-3],[-1,-1],[-3,-10],[-1,-5],[0,-6],[1,-8],[1,-7],[1,-13],[-1,-20],[-1,-7],[-2,-4],[-2,-2],[-1,-3],[-2,-7],[-3,-13],[0,-3],[0,-3],[-1,-5],[0,-4],[0,-5],[1,-5],[4,-13],[2,-3],[1,-3],[-6,-4],[-1,-2],[-4,-7],[-2,-7],[1,-7],[-1,-3],[-1,-2],[-1,-1],[-5,-4],[-2,-3],[-3,-5],[-1,-3],[-2,1],[-2,2],[2,3],[-1,4],[1,9],[-1,4],[2,3],[1,4],[3,4],[1,3],[1,2],[-2,3],[-1,2],[-3,0],[-2,0],[-1,-3],[0,-4],[0,-1],[0,-2],[-4,-5],[1,-5],[1,-2],[1,-2],[0,-1],[-2,-5],[-1,0],[-2,6],[-3,3],[-3,0],[-3,-1],[-2,-4],[-1,-3],[-1,-4],[1,-8],[-1,-7],[-2,-5],[-1,-3],[-3,-4],[-1,0],[-1,2],[-1,2],[1,11],[0,5],[3,3],[-3,4],[-3,2],[-4,-2],[-1,-3],[0,-3],[-3,-4],[-2,-4],[-3,-7],[-1,-8],[-6,3],[-3,1],[-4,-1],[-5,1],[-6,-1],[-8,-3],[1,2],[6,5],[0,1],[-1,3],[-1,0],[-4,-1],[-1,0],[-1,3],[-1,1],[-1,-1],[0,-5],[-1,-1],[-1,1],[0,5],[0,6],[0,4],[1,3],[-1,1],[-2,0],[-1,-2],[-2,-2],[-3,-11],[-1,-7],[2,-5],[6,-7],[1,-2],[0,-3],[0,-3],[-2,-2],[-7,-2],[-6,-5],[-2,-4],[-5,-19],[-4,-12],[-7,-4],[-6,3],[-2,5],[-1,5],[-3,5],[-2,5],[-1,7],[0,10],[-1,6],[1,1],[4,4],[1,2],[2,5],[1,3],[0,4],[-2,2],[-4,0],[-5,-2],[-3,2],[-4,5],[-1,1],[-4,1],[-4,-1],[-3,-2],[-3,-1],[-1,-1],[-4,-6],[-3,-3],[-2,-2],[-6,-1],[-2,-1],[-3,-2],[-1,0],[-3,-3],[-4,-2],[-1,-2],[-4,1],[-7,-4],[-3,-1],[-3,3],[-3,3],[-4,-1],[-2,-6],[-1,-11],[-1,-5],[0,-6],[-2,1],[-9,11],[-8,-2],[-2,-1],[-2,-2],[-3,-1],[-2,2],[-2,2],[-2,0],[-2,-2],[-1,16],[0,2],[2,3],[1,3],[4,1],[3,-1],[3,1],[2,3],[2,5],[3,4],[3,3],[4,3],[3,5],[3,5],[2,4],[3,3],[4,8],[6,8],[2,7],[2,2],[4,3],[7,3],[3,0],[3,-6],[2,1],[1,1],[4,1],[3,-1],[3,0],[4,1],[6,2],[4,2],[3,3],[12,2],[8,5],[1,-1],[2,-1],[0,-3],[-1,-4],[1,-3],[1,-1],[8,0],[2,-1],[3,2],[3,4],[3,4],[3,5],[-2,6],[-1,7],[2,7],[2,6],[3,4],[3,4],[5,12],[4,10],[2,12],[-1,14],[3,11],[4,2],[6,5],[4,1],[0,-2],[0,-3],[-5,-9],[-3,-3],[-2,-2],[-1,-1],[-1,-3],[3,-6],[0,-3],[0,-4],[0,-3],[3,-4],[4,-1],[1,0],[1,1],[4,9],[1,1],[11,7],[5,5],[4,1],[2,3],[7,10],[2,4],[2,5],[2,6],[1,7],[2,4],[10,9],[3,5],[1,3],[2,7],[0,8],[2,5],[1,6],[3,6],[2,5],[2,5],[2,13],[1,7],[0,3],[1,2],[1,3],[1,3],[0,3],[1,9],[0,7],[-2,6],[-2,2],[-1,0],[-2,0],[-2,2],[0,2],[2,1],[1,1],[1,2],[2,7],[1,7],[0,3],[-1,6],[-1,6],[0,4],[1,4],[2,4],[1,1],[2,0],[2,1],[1,2],[1,2],[1,6],[1,4],[-1,9],[1,2],[1,2],[1,-2],[2,0],[2,1],[1,-1],[1,-3],[1,-15],[1,-2],[1,-1],[1,0],[1,2],[1,3],[2,1],[5,-3],[2,2],[1,4],[1,6],[0,6],[-2,2],[-1,0],[-1,-2],[-1,-1],[-8,-3],[0,7],[2,10],[1,3],[1,1],[3,-1],[2,-1],[3,-5]],[[8874,7608],[-1,-1],[-1,1],[0,4],[0,2],[2,2],[2,0],[-2,-8]],[[8924,7783],[-2,-1],[-2,3],[0,3],[1,2],[2,-1],[1,-3],[1,-2],[-1,-1]],[[8918,7795],[-1,-4],[-2,6],[0,6],[1,0],[1,-1],[1,-3],[0,-4]],[[8994,7725],[4,0],[1,0],[3,-1],[10,-9],[4,-1],[3,0],[2,1],[2,2],[7,11],[6,9],[1,0],[0,-3],[0,-3],[-3,-8],[-4,-12],[0,-6],[1,-6],[2,-5],[1,-7],[2,-9],[3,-1],[1,0],[3,2],[3,4],[2,0],[2,0],[-3,-3],[-3,-3],[-2,-5],[-1,-1],[-3,0],[-1,0],[-4,-3],[-3,-2],[-2,-4],[-3,-1],[-3,-1],[-5,-3],[-4,0],[-6,3],[-2,-1],[-7,-5],[-6,-8],[-5,-9],[-4,-10],[-1,-5],[-1,-6],[-1,-4],[0,-4],[-1,-3],[-1,-2],[-4,1],[-5,6],[-11,8],[-12,12],[-7,6],[-12,-2],[-12,-11],[-1,1],[-4,8],[-2,3],[-3,1],[-2,0],[-2,-1],[-2,-4],[-1,-3],[-1,-3],[0,-3],[0,-2],[3,-6],[3,-3],[1,-1],[3,0],[1,0],[5,-8],[6,-8],[1,-2],[-2,-3],[-2,-1],[-3,0],[-2,1],[-5,3],[-2,-2],[-2,-6],[-2,-6],[-1,-3],[-3,-3],[-4,-2],[-2,0],[-1,3],[-1,2],[0,4],[1,6],[1,7],[1,6],[-1,9],[-1,2],[-4,5],[-2,5],[0,6],[0,4],[1,7],[1,4],[2,2],[1,0],[3,3],[3,4],[3,4],[3,5],[2,5],[-3,7],[0,4],[0,4],[3,2],[2,-2],[6,-5],[1,-1],[3,0],[6,-1],[3,0],[1,1],[2,5],[1,6],[0,7],[0,8],[1,6],[4,9],[2,6],[0,14],[2,7],[1,6],[1,13],[-2,13],[-2,7],[-2,6],[0,5],[2,6],[0,1],[0,2],[3,1],[2,1],[1,3],[2,1],[1,-1],[1,-3],[4,-7],[7,-11],[8,-18],[5,-8],[5,-8],[6,-8],[7,-7],[4,-3],[2,-5],[2,-1]],[[7140,7206],[-2,5],[0,3],[-2,6],[-1,5],[-2,8],[-1,5]],[[6393,7767],[-1,-1],[-1,0],[-3,6],[1,6],[1,2],[1,0],[0,-1],[-1,-3],[-1,-3],[2,-4],[2,-2]],[[6397,7774],[-1,-1],[-1,4],[1,3],[2,1],[-1,-5],[0,-2]],[[6463,7799],[-1,0],[-2,1],[-1,3],[2,3],[1,0],[1,-4],[0,-3]],[[7227,7614],[-4,6],[-4,7],[-3,1],[-6,1],[-3,0],[-1,2],[-2,3],[-2,4],[-3,3],[-1,6],[-1,1],[-2,-1],[-3,0],[-1,1],[-3,0],[-4,3],[-3,2],[-5,0],[-2,0],[-7,-1],[-7,2],[-5,1],[-3,0],[-1,0],[-3,0],[-3,1],[-5,3],[-2,0],[-1,0],[-9,-3],[-3,0],[-9,0],[-7,0],[-3,1],[-1,0],[-3,-6],[-2,-1],[-7,1],[-9,4],[-6,4],[-6,5],[-7,7],[-4,3],[-1,-2],[-1,0],[-2,-1],[-4,1],[-1,-4],[-5,-2],[-3,-3],[-1,-2],[-3,-18],[-1,-6],[2,-11],[-2,1],[-3,3],[-1,2],[-3,1],[-9,2],[-2,3],[-1,2],[-2,1],[-4,1],[-7,5],[-3,0],[-10,3],[-1,0],[-1,0],[-4,-2],[-2,-1],[-3,1],[-4,-3],[-3,-4],[-2,-4],[-2,-3],[0,-5],[-2,-2],[-1,-4],[0,-3],[1,-3]],[[6970,7617],[-2,-2],[-3,-1],[-1,-1],[-2,-4],[-1,-3],[-1,-1],[-1,0],[-2,3],[-2,-1],[-2,-2],[-3,-5],[-4,-7],[-3,-4],[-5,-4],[-4,-1],[-2,-2],[-5,-5],[-1,-3],[-3,-2],[-3,-2],[-2,-4],[-1,-5],[-1,-4],[-4,-5],[-3,-4],[-2,-5],[-3,-5],[0,-2],[0,-4],[1,-3],[0,-3],[-1,-2],[-2,-1],[-2,0],[-4,3],[-3,3],[-2,2],[-1,3],[0,3],[1,6],[0,4],[-1,2],[-1,2],[-1,2],[-2,4],[-2,-1],[-1,-1],[-2,1],[-6,0],[-4,-1],[-4,0],[-5,-1],[-7,0],[-2,0],[-1,2],[-1,5],[0,4],[-2,9],[0,6],[-1,8],[-1,9],[0,6],[-5,0],[-4,0],[-5,0],[0,5],[0,6],[0,7],[1,9],[0,8],[1,9],[0,6],[0,7],[-2,-2],[-3,-2],[-3,-3],[-2,6],[-2,5],[-2,8],[-2,6],[-4,4],[-3,3],[-2,4],[-3,5],[-2,4],[-3,4],[-2,-1],[-3,-3],[-3,-2],[-3,-3],[-2,-1],[-3,1],[-3,0],[-6,1],[-4,0],[-5,1],[-6,1],[-7,1],[-4,-1],[-6,-2],[-6,-1],[-5,-2],[-6,-1],[-4,-1],[-3,0],[-3,5],[-4,8],[-3,4],[-3,5],[-4,7],[-3,5],[-3,5],[-2,4],[0,6],[-2,3],[-4,3],[-3,4],[-4,4],[-4,4],[-4,3],[-4,4],[-4,4],[-3,4],[-4,4],[-4,3],[-4,4],[-4,4],[-4,4],[-3,4],[-4,3],[-4,4],[-4,4],[-3,3],[-3,-1],[-4,-2],[-5,-2],[-5,-2],[-8,-4],[-5,-2],[-4,-2],[-5,-2],[-5,-3],[-5,-2],[-6,-3],[-5,-2],[-4,-2],[-4,-2],[-4,-2],[0,-13],[0,-13],[0,-13],[0,-13],[0,-14],[0,-13],[0,-13],[0,-13],[0,-14],[0,-13],[0,-13],[0,-13],[0,-13],[0,-14],[0,-13],[0,-13]],[[6554,7564],[-1,0],[-3,-1],[-4,-2],[-4,-1],[-1,1],[-2,1],[-1,3],[-2,4],[-2,3],[-2,6],[-2,4],[-4,10],[-1,3],[-1,3],[-1,3],[-5,6],[-6,6],[-5,6],[-2,1],[-2,2],[-4,0],[-2,0],[-6,-2],[-6,-2],[-6,-3],[-6,-4],[-1,-1],[-4,-4],[-5,-6],[-5,-10]],[[6458,7590],[-1,6],[0,10],[0,3],[1,8],[2,5],[1,6],[1,7],[-2,12],[-1,2],[-1,1],[-2,0],[-3,0],[-2,-1],[-2,4],[-3,1],[-2,-2],[-1,0],[-2,1],[-2,2],[0,3],[-1,3],[-3,6],[-2,3],[-3,0],[-4,0],[-2,1],[0,3],[1,7],[0,4],[-1,3],[0,3],[-1,3],[-3,4],[-2,6],[-4,12],[-3,13],[-1,2],[-3,2],[-6,2],[-4,2],[-1,2],[-1,3],[0,3],[1,3],[1,4],[3,2],[6,1],[6,-1],[5,-5],[2,-2],[2,0],[4,2],[1,0],[5,0],[-1,2],[-2,2],[-2,0],[-1,1],[-3,5],[-4,6],[-1,2],[-1,4],[1,4],[3,3],[3,5],[1,6],[1,3],[3,4],[3,-1],[5,4],[9,-1],[11,1],[3,0],[6,-3],[4,-2],[5,-1],[3,2],[-3,4],[-7,5],[-2,5],[3,12],[5,10],[2,13],[0,13],[-2,4],[1,4],[1,3],[1,4],[-1,4],[-1,7],[-1,2],[-4,3],[-6,0],[-6,2],[-2,-1],[-1,-3],[-1,-1],[-4,-3],[-1,-1],[-2,1],[-2,3],[-2,0],[-5,2],[-3,5],[-1,1],[-9,4],[-3,0],[-7,-4],[-5,-5],[-2,-1],[-3,-3],[-1,0],[-2,0],[-1,0],[-3,-5],[-6,-6],[-3,-3],[-3,-2],[-3,-2],[-4,0],[-1,-1],[-4,-1],[-3,-1],[0,-2],[1,-4],[-3,1],[-2,-2],[1,-3]],[[6367,7853],[-1,0],[-7,6],[-5,4],[-4,3],[-1,1],[-1,1],[-1,3],[0,3],[0,2],[1,1],[2,0],[1,0],[1,-1],[2,-2],[3,0],[2,1],[0,3],[-3,10],[-3,9],[-4,9],[-1,3],[-4,8],[-4,8],[-3,7],[-1,2],[-5,1],[-9,1],[-4,1],[-2,-2],[-3,-1],[-2,3],[-2,4],[-1,5],[0,4],[0,6],[-1,6],[-2,3],[-4,2],[-5,5],[-2,10],[3,13],[4,9],[3,4],[1,4],[1,3],[-1,3],[-1,3],[-3,3],[-2,3],[1,8],[2,11],[3,9],[4,5],[3,4],[1,3],[0,5],[0,4],[1,3],[1,3],[2,2],[2,3],[3,1],[3,-3],[4,-5],[5,-11],[4,-7],[1,-2],[3,-4],[3,-2],[4,3],[5,3],[1,2],[1,2],[-1,5],[0,4],[-1,4],[-2,7],[-1,11],[-1,4],[1,0],[2,0],[2,-1],[3,3],[4,5],[7,7],[2,5],[1,5],[2,3],[5,1],[4,2],[3,4],[5,3],[4,2],[2,2],[1,3],[5,7],[3,5],[3,5],[1,3],[3,0],[4,-2],[4,-2],[3,-3],[0,-4],[0,-2],[2,-1],[1,-1],[2,1],[4,0],[5,4],[6,7],[6,2],[3,-1],[3,-5],[2,-5],[2,-2],[1,0],[3,1],[3,0],[2,-2],[4,0],[5,1],[0,1],[3,-1],[3,-2],[2,-3],[5,-8],[2,-2],[5,-3],[3,-3],[2,-4],[2,-3],[3,-5],[3,-7],[1,-6],[0,-6],[2,-2],[1,0],[1,0],[1,3],[0,4],[0,7],[-1,5],[-1,2],[0,2],[0,3],[2,1],[3,-1],[3,-3],[5,-4],[5,-7],[4,-5],[5,-4],[4,-1],[3,1],[4,3],[3,4],[2,3],[1,4],[5,6],[5,4],[2,0],[1,-2],[5,3],[2,1],[4,1],[5,-2],[3,-5],[4,-3],[3,0],[3,2],[2,3],[1,4],[2,2],[0,1],[6,-2],[3,0],[1,1],[4,-1],[6,-5],[3,-6],[4,-8],[2,-2],[3,-1],[2,-1],[3,-1],[8,-2],[1,0],[1,-2],[-1,-4],[1,-1],[6,3],[2,2],[2,6],[2,7],[1,2],[2,1],[1,-1],[2,-4],[3,-4],[4,-1],[2,-1],[4,0],[8,2],[8,4],[5,5],[2,8],[1,8],[2,6],[-1,5],[-4,5],[-1,2],[-10,3],[0,2],[-1,0],[-9,5],[-5,2],[-1,3],[-1,4],[-3,3],[-6,4],[-1,2],[1,3],[4,2],[6,6],[2,1],[5,1],[4,4],[3,3],[2,3],[-1,4],[-4,10],[-1,6],[0,4],[3,4],[1,2],[2,5],[1,2],[5,1],[5,0],[4,-1],[5,0],[4,-1],[3,-1],[2,2],[1,2],[0,3],[-2,3],[-7,4],[-3,3],[-2,-1],[-4,1],[-4,2],[-3,1],[-1,3],[1,4],[1,2],[2,1],[3,0],[3,1],[0,1],[1,2],[-1,1],[-1,2],[-2,0],[-2,-1],[-2,-1],[-4,2],[-4,2],[0,2],[3,3],[1,3],[0,3],[0,4],[1,5],[2,3],[3,2],[7,-3],[10,-3],[1,0],[1,2],[1,1],[12,1],[3,2],[1,1],[12,2],[2,2],[2,2],[2,0],[4,1],[4,2],[4,1],[4,0],[4,1],[1,1],[1,2],[4,2],[7,2],[2,-1],[3,-1],[5,1],[3,2],[2,-2],[2,-1],[2,1],[1,5],[1,4],[3,2],[1,1],[2,1],[1,2],[7,0],[5,4],[1,-2],[8,1],[9,2],[6,2],[9,3],[5,2],[6,1],[6,1],[3,4],[4,1],[3,0],[3,1],[1,2],[1,3],[-1,3],[0,3],[3,1],[3,1],[3,1],[5,5],[4,3],[3,2],[8,-1],[7,-1],[7,-3],[3,-3],[3,-3],[3,-1],[3,-1],[3,1],[2,2],[1,2],[2,2],[7,1],[2,-2],[3,-8],[2,-10],[4,-14],[2,-6],[-1,-4],[0,-5],[0,-5],[-3,-6],[1,-3],[7,-3],[9,1],[6,3],[3,-1],[2,1],[1,5],[2,1],[3,-3],[1,-5],[2,-4],[0,-4],[1,-5],[1,-1],[2,2],[2,1],[0,1],[-1,2],[0,2],[0,2],[2,1],[3,-1],[5,-1],[5,-7],[3,-1],[2,0],[3,0],[3,2],[2,3],[1,1],[2,0],[1,-1],[0,-3],[-1,-4],[-4,-3],[-4,-4],[-2,-6],[-1,-6],[1,-3],[1,-2],[0,-3],[1,-1],[2,2],[5,6],[2,1],[4,1],[6,0],[4,-2],[2,-3],[2,-2],[1,1],[1,2],[0,3],[0,3],[7,6],[4,4],[1,1],[3,-1],[2,0],[5,4],[4,4],[1,3],[0,3],[1,1],[6,1],[1,1],[5,3],[7,5],[4,3],[6,1],[1,1],[3,2],[3,3],[3,1],[-2,-7],[-2,-8],[-1,-3],[-7,1],[0,-2],[1,-4],[1,-2],[1,-1],[1,-3],[7,-7],[9,-9],[9,-10],[7,-7],[2,-3],[2,-3],[5,-10],[4,-10],[8,-16],[7,-17],[8,-17],[4,-11],[9,-21],[2,-7],[5,-12],[4,-12],[3,-11],[2,-1],[1,3],[0,2],[1,1],[3,3],[1,1],[2,0],[2,1],[1,3],[0,6],[-1,2],[1,3],[1,1],[2,1],[1,0],[2,3],[2,1],[2,0],[2,0],[1,-3],[1,-3],[2,0],[3,0],[0,-2],[-1,-5],[-1,-3],[0,-2],[2,-2],[5,1],[2,0],[1,-3],[0,-2],[1,-3],[-1,-3],[1,-2],[5,0],[3,2],[5,0],[5,-3],[3,0],[3,1],[5,0],[3,2],[2,3],[1,3],[1,1],[5,0],[2,0],[2,4],[2,2],[3,0],[3,0],[6,-3],[4,-3],[4,-4],[2,-3],[2,-5],[2,-4],[2,-5],[1,-5],[2,-9],[2,-3],[2,0],[2,-1],[3,-1],[7,-6],[2,0],[2,-2],[0,-3],[0,-3],[0,-3],[3,-5],[1,-4],[2,-5],[1,-2],[1,-1],[3,1],[3,-1],[11,-3],[1,0],[1,-3],[2,0],[2,0],[2,0],[2,3],[1,2],[4,3],[3,4],[2,3],[2,1],[1,-2],[0,-3],[-1,-2],[-2,-3],[1,-2],[2,-1],[3,-4],[4,-9],[1,-2],[2,-2],[2,-1],[2,-1],[2,-4],[1,-4]],[[6138,5059],[-1,0],[1,3],[3,4],[1,0],[0,-1],[0,-1],[0,-1],[-4,-4]],[[6163,5413],[-4,-10],[-4,-12],[-7,-23],[-6,-12],[-4,-8],[-1,-2],[0,-10],[0,-24],[0,-49],[1,-48],[0,-49],[0,-24],[0,-8],[3,-11],[4,-9],[5,-14],[3,-7],[0,-2],[0,-5]],[[6153,5086],[-4,-10],[-3,-4],[-5,-2],[-1,0],[-2,1],[-1,-2],[0,-4],[-1,1],[-1,1],[1,-6],[0,-4],[-1,-4],[-2,-4],[0,-3],[-5,-8],[-6,-1],[-4,-5],[-1,-3],[-2,-8],[1,-11],[-2,-9],[0,-4],[-4,-6],[-1,-5],[-1,-6],[-1,-2],[-2,-12],[-1,-8],[-1,-2],[0,-2],[-1,-5],[-1,-2],[-1,-2],[-4,-19],[-3,-9],[-2,1],[-2,-3],[0,-1]],[[6089,4914],[-1,0],[-2,3],[-4,7],[-5,6],[-4,7],[-4,6],[-4,6],[-5,7],[-4,6],[-4,6],[-3,4],[-1,2],[-1,5],[0,1],[-1,1],[-2,1],[0,2],[1,4],[1,5],[0,4],[0,4],[-1,6],[0,1],[-3,4],[-6,7],[-6,6],[-6,7],[-5,7],[-6,7],[-6,7],[-6,7],[-6,6],[-6,7],[-6,7],[-6,7],[-6,7],[-6,7],[-6,7],[-6,6],[-5,7],[-3,3],[-2,2],[-2,0]],[[5941,5126],[0,10],[1,25],[0,22],[0,11],[3,7],[1,5],[1,7],[1,6],[3,4],[1,3],[3,8],[2,10],[2,3],[2,3],[1,2],[2,2],[2,1],[0,2],[0,6],[0,2],[1,5],[2,3],[1,3],[1,2],[0,5],[0,3],[0,5],[0,12],[-2,9],[-1,11],[1,4],[-1,6],[-1,0],[-1,2],[-1,6],[-1,5],[0,1],[-4,5],[-2,12],[-2,2],[-1,11],[0,3],[1,12],[0,2],[-1,2],[-4,3],[-3,4],[1,2],[0,2],[-1,1],[-5,19]],[[5943,5427],[6,11],[5,12],[8,15],[6,13],[6,12],[5,10]],[[7045,7456],[-2,0],[-3,1],[-2,-1],[-2,-2],[-2,-2],[-4,-1],[-4,0],[-2,0],[-7,1],[-2,0],[-2,-1],[-4,-1],[-2,-4],[-1,-3],[0,-1],[-3,3],[-1,3],[-2,2],[-1,0],[-5,-4],[-1,0],[-1,2],[0,4],[0,3],[-2,1],[-3,0],[-1,2],[0,2],[0,2],[0,2],[-1,1],[-2,0],[-2,-2],[-2,-2],[-2,-1],[-2,0],[-2,-1],[-1,-5],[-6,-1],[-2,1],[-1,3],[-2,6],[-1,0],[-2,1],[-3,0],[-4,-3],[-1,2],[-1,1],[-1,-2],[-1,0],[-4,0],[-6,0],[-2,1],[-2,0],[-4,-2],[-2,0],[-3,-1],[0,8],[-2,6],[1,4],[1,5],[1,3],[1,-1],[2,-2],[1,0],[1,2],[-1,2],[0,2],[1,2],[1,2],[6,4],[6,2],[3,-1],[5,-4],[3,-2],[2,-1],[2,-6],[1,0],[1,1],[1,2],[1,5],[2,2],[6,4],[0,1],[0,1]],[[6970,7501],[1,1],[3,1],[6,1],[2,0],[2,-2],[2,-2],[2,0],[1,0],[1,0],[0,-2],[1,-1],[2,2],[2,2],[2,1],[1,1],[1,1],[1,3],[3,6],[2,1],[1,0],[0,-1],[0,-1],[3,-1],[1,1],[1,2],[-1,4],[0,1],[0,1],[0,1],[5,-3],[1,0],[2,2],[2,3],[1,2],[9,8],[1,1],[0,1],[-4,2],[-2,-1],[-2,0],[-1,1],[-4,1],[-1,1],[-4,5],[-2,2],[-2,2],[-2,0],[-2,-2],[0,1],[-1,2],[0,3],[0,3],[-1,1],[-2,-1],[-3,1],[-2,1],[-1,6],[-1,3],[0,3],[-1,1],[-2,1],[0,4],[0,1],[-1,1],[-1,-1],[-1,-2],[1,-4],[-1,-4],[0,-1],[-1,-2],[-2,0],[-2,2],[0,-12],[-1,-1],[-2,2],[-2,-1],[-3,1],[-3,2],[-2,1],[-2,1],[-3,2],[-1,8],[-1,3],[-1,1],[-5,-3],[-2,2],[-3,3],[-3,1],[0,1],[0,2],[7,9],[3,6],[2,3],[3,1],[2,1],[1,6],[1,1],[1,0],[3,2],[6,5],[0,2],[-1,1],[-2,2],[-2,2],[-2,-1],[-1,-1]],[[6963,7478],[0,1],[-1,0],[-2,1],[-2,1],[-1,0],[0,-1],[1,-2],[1,-2],[2,-1],[2,3]],[[6993,7485],[0,2],[-1,0],[-2,-1],[0,-1],[1,-2],[1,-1],[1,3]],[[6977,7482],[1,0],[-1,5],[1,4],[-3,0],[-1,1],[-2,4],[0,1],[-1,-2],[-1,-2],[1,-3],[1,-2],[1,-1],[0,-1],[-1,-4],[1,-1],[3,0],[1,1]],[[7869,5801],[-1,-2],[-1,5],[0,1],[2,-4]],[[7862,5834],[-1,-1],[-1,1],[0,3],[1,2],[0,1],[1,-6]],[[7900,5783],[-5,8],[-9,3],[-1,3],[0,1],[-1,-5],[-5,-4],[-2,3],[-2,3],[0,3],[2,3],[2,2],[1,8],[-1,10],[-2,3],[-2,2],[-2,-4],[-1,-6],[-2,-3],[-2,-1],[-3,0],[-2,10],[0,8],[0,9],[1,5],[-3,7],[-1,7],[-1,4],[-1,-2],[0,-2]],[[7858,5858],[0,2],[-5,20],[-1,10],[1,7],[1,3],[-2,3],[-2,5],[-4,6],[0,9],[-1,10],[-1,4],[-1,7],[-1,5],[-1,15],[1,1],[2,0],[4,1],[0,3],[0,2],[2,3],[3,7],[2,8],[2,4],[1,5],[3,7],[5,4],[3,1],[3,2],[4,2],[1,0],[4,-2],[2,-1],[2,0],[3,0],[2,0],[4,2],[6,-2],[4,2],[6,2],[3,-2],[2,-2],[0,-4],[1,-2],[1,-2],[1,0],[1,3],[2,4]],[[7921,6010],[0,-1],[1,-4],[1,-3],[1,-3],[2,-3],[1,0],[4,3],[5,-4],[1,-2],[2,-4],[2,-3],[5,0],[1,7],[-1,4],[-2,8],[-1,5],[1,1],[4,1],[1,1],[1,5],[1,-1],[3,-1],[2,4],[2,3],[0,-1],[1,-3],[1,-1],[2,-2],[2,-3],[1,-4],[1,-1],[3,1],[1,0],[1,4],[1,2],[1,-1],[1,0],[3,5],[2,4],[1,1],[2,-2],[1,1],[1,5],[2,3]],[[7986,6031],[0,-3],[-1,-6],[-1,-6],[-2,-5],[-1,-3],[0,-11],[0,-3],[0,-3],[1,-1],[2,-10],[2,-10],[2,-7],[0,-5],[-1,-12],[-2,-12],[0,-5],[1,-6],[1,-7],[0,-10],[-1,-6],[-1,-4],[-1,-4],[-2,-2],[-1,3],[-2,1],[-2,-2],[-1,-1],[-3,-6],[-3,-6],[-5,-1],[-2,-4],[-2,-1],[-3,0],[-3,-1],[0,-2],[0,-10],[0,-2],[0,-1],[-2,0],[-3,1],[-3,3],[-3,0],[-2,-4],[0,-2],[-1,0],[-1,-1],[-1,-2],[0,-2],[1,-5],[0,-6],[0,-5],[1,-3],[5,-9],[2,-2],[0,-2],[-1,-5],[1,-7],[-2,0],[-3,3],[-1,2],[-2,-2],[0,1],[-2,3],[-1,4],[-2,0],[-3,-1],[-4,-1],[-1,0],[0,-1],[-2,-6],[-1,1],[-4,2],[-3,1],[-1,-1],[1,-5],[1,-4],[-1,-2],[-2,-2],[-2,-4],[-1,-3],[-1,-1],[-4,0],[-3,0],[-2,-4],[-1,-2],[-1,-1]],[[784,4525],[0,-1],[-1,0],[0,1],[0,2],[0,1],[1,-2],[0,-1]],[[670,4860],[0,-1],[-1,0],[0,1],[0,1],[1,0],[0,-1]],[[152,4915],[1,-1],[0,-1],[-1,1],[0,1],[0,1],[0,-1]],[[216,4924],[1,0],[0,-1],[-1,0],[0,1],[0,1],[1,0],[-1,-1]],[[244,4927],[-1,-1],[0,1],[0,1],[1,-1]],[[696,4948],[-1,0],[0,1],[-1,1],[0,1],[1,0],[1,1],[0,-1],[0,-1],[0,-2]],[[248,5003],[-1,0],[0,1],[1,0],[0,-1]],[[231,5024],[1,-1],[0,-1],[1,-2],[0,-1],[-1,0],[-1,1],[0,1],[1,-1],[0,1],[0,2],[-1,0],[0,1],[-1,0],[0,1],[1,-1]],[[9854,5114],[0,-3],[-1,0],[0,2],[0,3],[-1,3],[1,-1],[1,-3],[0,-1]],[[9709,5133],[-1,1],[0,1],[1,-1],[0,-1]],[[9846,5138],[0,-2],[-1,1],[1,2],[-1,8],[-1,1],[-1,2],[2,-2],[1,-1],[0,-5],[0,-4]],[[9805,5242],[2,-2],[0,-2],[-1,-1],[-2,-5],[2,4],[0,3],[-1,2],[-1,2],[1,0],[0,-1]],[[9806,5261],[-1,0],[0,1],[4,1],[0,1],[0,-1],[0,-1],[-1,0],[-2,-1]],[[9805,5283],[-1,-1],[1,1],[0,1],[0,4],[1,0],[0,-2],[0,-2],[-1,-1]],[[9805,5290],[0,-1],[-1,3],[-1,3],[0,1],[0,-1],[1,-1],[0,-1],[1,-3]],[[629,5291],[5,-7],[-2,0],[-5,3],[-4,6],[1,2],[1,-3],[2,-2],[1,5],[1,1],[-4,5],[2,-1],[3,-3],[-1,-6]],[[9800,5360],[-2,-3],[0,1],[0,1],[2,2],[1,0],[0,-1],[-1,0]],[[9804,5364],[-2,-2],[-1,0],[3,3],[0,-1]],[[574,5410],[2,-5],[0,-3],[-2,1],[-1,1],[2,0],[0,1],[-1,1],[-1,1],[0,-2],[-1,2],[0,1],[1,1],[1,1]],[[3263,6170],[-2,-1],[-1,1],[0,4],[1,1],[2,-2],[0,-3]],[[3260,6177],[-1,-1],[-1,3],[-2,1],[-2,3],[0,1],[0,1],[1,1],[3,-3],[1,-3],[1,-2],[0,-1]],[[8508,7097],[-1,-1],[-1,1],[0,1],[-2,3],[0,2],[1,3],[4,5],[9,5],[2,0],[4,-2],[1,-4],[-1,-3],[-1,-3],[-4,-4],[-4,-2],[-7,-1]],[[8520,7162],[1,-3],[-3,1],[-1,2],[0,3],[2,0],[1,-3]],[[8506,7163],[-2,0],[-1,2],[-1,0],[1,3],[2,5],[1,2],[3,-1],[1,-3],[-2,-4],[-2,-4]],[[8549,7178],[0,-2],[-2,2],[2,3],[0,-3]],[[8504,7184],[0,-1],[-2,0],[-1,4],[0,3],[-2,2],[2,3],[3,-5],[0,-6]],[[8557,7189],[-1,-6],[-2,0],[-1,3],[-1,-1],[-1,-1],[-1,5],[0,4],[2,2],[2,-1],[2,-1],[1,-4]],[[8575,7188],[-2,-3],[-4,4],[-1,3],[3,4],[2,4],[2,1],[0,-13]],[[8511,7286],[-1,-4],[-1,2],[-1,9],[2,-3],[1,-4]],[[8636,7343],[-2,-2],[-1,2],[0,1],[1,2],[1,1],[1,-2],[0,-2]],[[8514,7357],[-1,-7],[-1,0],[-1,1],[-1,1],[-1,7],[2,3],[2,-2],[1,-3]],[[8565,7408],[7,-25],[6,-17],[6,-12],[8,-23],[2,-13],[0,-7],[2,-11],[-1,-6],[0,-10],[-1,-4],[-1,-4],[0,-7],[1,-4],[0,-5],[0,-2],[1,0],[2,2],[1,0],[0,-6],[-2,-15],[-2,-11],[-2,-9],[-4,-9],[-3,-3],[-3,-1],[-5,-1],[-4,2],[-4,-1],[-2,-2],[-1,-3],[1,-5],[0,-4],[-2,1],[-3,2],[-3,0],[-2,1],[-1,5],[-2,0],[-3,-3],[-4,-1],[-2,-1],[0,-3],[0,-2],[3,-4],[-1,-3],[-3,-2],[-1,4],[-2,5],[-1,0],[-2,-1],[0,-5],[1,-3],[1,-4],[-2,-4],[0,-3],[-2,-2],[-4,5],[0,3],[2,3],[0,4],[0,2],[-6,-9],[-4,-10],[-2,1],[-1,3],[-1,1],[-4,-7],[-1,-5],[-1,0],[-1,2],[0,5],[0,4],[-5,5],[-1,5],[1,3],[3,-2],[3,0],[-1,3],[-1,1],[2,1],[2,3],[-2,0],[-2,-1],[-1,1],[-1,6],[-2,6],[-1,7],[2,3],[1,6],[2,8],[1,3],[2,2],[1,2],[-1,1],[-2,1],[0,2],[1,1],[2,3],[3,3],[1,6],[-1,1],[-2,2],[1,3],[0,2],[0,2],[-2,3],[-2,4],[1,4],[-1,6],[0,5],[0,3],[-1,6],[0,6],[-2,-1],[-1,-1],[-4,2],[-2,0],[0,5],[1,6],[4,5],[2,0],[2,2],[2,1],[3,-3],[3,-1],[1,-6],[1,-1],[1,2],[2,3],[0,1],[0,2],[-3,1],[-2,7],[0,3],[-1,2],[1,6],[-3,7],[-1,2],[0,6],[-1,4],[-1,2],[0,3],[0,2],[1,0],[1,2]],[[8517,7360],[1,1],[0,2],[0,5],[2,3],[4,8],[1,4],[2,3],[2,3],[3,1],[3,1],[7,-1],[1,1],[5,0],[1,-1],[3,0],[4,0],[2,1],[1,2],[2,4],[1,6],[2,5],[1,0]],[[5598,7617],[-4,-1],[-2,-2],[-1,-4],[0,-1],[-1,0],[-1,1],[-2,3],[-3,0],[-7,-6],[-1,-3],[0,-7],[-1,-1],[-1,-1],[-3,0],[0,1]],[[5557,7634],[0,1],[0,4],[0,3],[-1,3],[1,2],[2,0],[1,-1],[1,3],[4,2]],[[5565,7651],[3,1],[1,2],[-1,2],[0,2],[4,5],[1,2],[0,1],[0,2],[-1,3],[0,1],[2,2],[2,1],[1,1],[1,-2],[0,-1],[0,-2],[2,-2],[2,-2],[2,-1],[2,-3],[3,-5],[0,-2],[3,-3],[2,-2],[0,-5],[7,-4],[2,0],[1,0],[0,-2],[-1,-3],[-3,-10],[0,-2],[-2,-2],[-1,-1],[1,-3],[0,-2]],[[6340,6890],[-1,-1],[-1,0],[-1,3],[-2,8],[1,3],[0,1],[0,1],[1,1],[0,3],[1,2],[1,-3],[3,-9],[0,-3],[0,-2],[-2,-4]],[[6345,6828],[-5,0],[-6,0],[-5,-1],[-5,0],[-3,6],[-1,6],[-1,6],[-2,9],[-8,2],[-5,1],[-7,1],[-5,2]],[[6332,6911],[0,-2],[1,-7],[2,-7],[1,-5],[1,-3],[-2,1],[-1,1],[-2,1],[-4,-8],[-3,-4],[0,-1],[3,-2],[3,0],[2,1],[1,-1],[1,-5],[0,-4],[3,-13],[2,-5],[2,-7],[1,-5],[1,-3],[1,-5]],[[7836,6473],[2,-6],[3,-6],[4,-8],[1,-4],[3,-4],[0,-3],[1,-4],[0,-4],[1,-2],[1,0],[1,0],[1,2],[1,5],[0,1],[1,-4],[1,-1],[1,-1],[1,-1],[0,-4],[0,-3],[-1,-3],[-1,-4],[0,-6],[-1,-4],[1,-4],[6,-18],[3,-3],[7,-3],[3,-3],[2,-2],[2,1],[2,5],[3,3],[5,5],[1,0],[3,-2],[4,-5],[3,-5],[2,-3],[1,-2],[0,-3],[-1,-2],[-2,-2],[-2,-2],[-1,-3],[1,-1],[3,0],[3,-3],[1,-2],[0,-3],[1,-3],[1,-1],[3,0],[1,-1],[1,-1],[1,-5],[0,-4],[-2,-4],[-1,-3],[-1,-4],[-1,-4],[-5,-8],[-1,-1],[-8,5],[-3,-1],[-2,0],[-1,0],[-1,-2],[2,-4],[0,-5],[-1,-4],[-3,-3],[-1,-1],[0,-2],[1,-2],[2,-3],[3,-2],[9,-12],[2,-3],[3,-4],[3,-3],[8,-4],[3,-3],[1,-2],[0,-2],[-1,-2],[-1,-5],[0,-3],[1,-2],[1,-4],[3,-6],[2,-3]],[[7925,6231],[2,0],[2,-2]],[[7929,6229],[1,-4],[2,-5],[0,-4],[1,-5],[2,-6],[3,-5],[3,-7],[2,-4],[1,-2],[7,-12],[2,-4],[2,-8],[2,-1],[1,-2],[0,-4],[0,-3],[1,-10],[1,-3],[1,-4],[1,-2],[1,-2],[1,-1],[2,3],[1,2],[0,-1],[1,-7],[2,-2],[1,-3],[2,-2],[4,-8],[3,-3],[1,-1],[1,-1],[1,-3],[-1,-2],[-1,-2],[-4,-5],[-1,-2],[1,-3],[1,-4],[1,-4],[2,-3],[3,-5],[3,-5],[2,-4],[1,-4],[-1,-3],[-1,-4],[-1,-4],[-2,-2],[0,-2],[0,-4],[1,-3],[0,-3],[0,-6]],[[7921,6010],[2,1],[2,3],[3,3],[1,4],[1,3],[0,4],[0,11],[1,5],[0,6],[-1,5],[0,8],[0,3],[0,3],[2,3],[1,4],[1,6],[0,4],[-1,2],[-1,2],[-3,3],[-2,3],[-1,3],[0,3],[1,3],[-2,3],[-5,3],[-3,4],[0,4],[-3,6],[-3,7],[-2,11],[0,13],[0,11],[2,13],[-2,10],[-3,4],[-3,4],[-3,5],[-3,7],[-3,10],[-5,13],[-2,6],[-2,-1],[-3,1],[-4,4],[-4,2],[-3,0],[-3,-1],[-1,-2],[0,-2],[1,-2],[0,-1],[-2,-1],[-2,-3],[-1,-4],[-1,-7],[-2,-2],[-2,-1],[-3,-2],[-3,-3],[-1,-2],[0,-2],[-1,1],[-1,2],[0,3],[-1,3],[-3,1],[-3,3],[-3,6],[-2,3],[-2,1],[-1,-3],[-3,-5],[-2,-2],[-1,1],[-2,-2],[-1,-4],[-1,-4],[-4,-4],[-4,-6],[-3,-5],[-4,-7],[-1,-1],[-2,1],[-2,2],[-2,3],[3,12],[3,14],[1,6],[0,4],[0,4],[-2,4],[-1,3],[0,2],[0,2],[2,3],[1,5],[2,10],[2,11],[0,6],[-2,7],[-1,7],[1,9],[0,4],[-2,2],[-5,1],[-2,0],[-1,-1],[-2,-3],[-1,-1],[-4,-1],[-3,3],[-2,5],[-1,7],[2,7],[1,7],[1,5],[0,2],[-1,3],[-2,4],[-2,5],[-1,3],[-2,0],[-1,-3],[-1,-4],[-1,-1],[-1,1],[0,3]],[[7780,6354],[1,3],[1,13],[2,8],[2,4],[2,1],[3,0],[2,0],[1,2],[0,1],[-2,1],[0,2],[0,4],[1,3],[1,1],[1,4],[2,7],[1,3],[2,0],[3,3],[4,6],[2,6]],[[5975,7089],[1,5],[1,5],[2,8],[2,7],[5,21],[3,9],[1,12],[4,11],[3,4],[2,3],[0,4]],[[5999,7178],[5,0],[3,1],[1,2],[2,-1],[1,-3],[-1,-2],[-2,-3],[1,-1],[1,0],[2,-2],[1,-2],[3,-12],[-2,-5],[-2,-5],[-1,0],[-2,-2],[-1,-3],[-1,-2],[0,-2],[2,-2],[1,-1],[-1,-1],[-2,1],[-2,0],[-1,0],[-2,-1],[-2,-2],[-1,-2],[0,-1],[-1,-4],[1,-3],[1,-1],[0,-1],[0,-1],[-1,-2],[-2,-2],[0,-2],[-1,-2]],[[4790,5434],[-3,1],[-10,8],[-7,5],[-24,27],[-7,11],[-8,16],[-17,32],[-4,5],[-5,3],[-3,2],[-2,3],[-2,9],[-4,5],[-8,8],[-6,13]],[[4680,5582],[1,2],[3,8],[3,8],[2,5],[3,5],[2,4],[3,4],[6,11],[1,2],[1,8],[1,10],[1,3],[4,2],[1,1],[1,7],[1,9],[0,2]],[[5693,6451],[0,-29],[0,-29],[0,-28],[0,-29],[-7,0],[-7,0],[-7,0],[-6,0],[0,-8],[0,-7],[0,-7],[0,-7]],[[5666,6307],[-14,13],[-13,14],[-13,14],[-14,13],[-13,14],[-13,14],[-14,13],[-13,14],[-13,13],[-14,14],[-13,14],[-13,13],[-13,14],[-14,14],[-13,13],[-13,14],[-10,9],[-9,-9],[-8,-7],[-10,-10]],[[5416,6508],[-12,-12],[-9,-9],[-1,0],[-9,16],[-8,12],[-3,4],[-14,6],[-14,7],[-14,6]],[[5264,6925],[3,3],[5,3],[2,3],[1,2],[4,9],[2,5],[2,7],[1,5],[0,4],[0,5],[-2,13],[-2,12],[2,5],[1,2],[2,6],[1,1],[4,2],[2,4],[2,4],[0,3],[2,3],[3,2],[1,4],[5,5],[5,5],[5,5],[4,4],[1,3],[0,3],[-2,7],[0,8],[0,7],[0,4],[1,11],[0,1]],[[5319,7095],[4,-4],[5,-1],[13,-14],[4,-1],[9,-2],[10,6],[4,1],[7,-6],[4,-1],[5,0],[9,-5],[2,-2],[5,-7],[3,-3],[18,-7],[3,-4],[2,-9],[0,-11],[2,-8],[2,-10],[3,-7],[3,-6],[3,-4],[8,-5],[9,-3],[10,0],[15,-8],[14,-9],[3,-4],[7,-4],[13,-21],[7,-8],[6,-1],[4,1],[9,8],[3,4],[8,18],[3,9],[1,7],[0,7],[-1,6],[-2,6],[-2,8],[-1,15],[1,11],[2,6],[2,7],[7,12],[7,8],[13,12],[7,0],[3,1],[5,8],[3,0],[3,-2],[10,1],[4,-2],[5,-5],[7,-3],[4,-3],[5,-4],[1,-10],[-1,-3],[0,-4],[5,-7],[14,-3],[3,-2],[4,-5],[3,-2],[9,0],[6,1],[6,-2],[2,-2],[2,-4],[2,-10],[1,-3]],[[3308,5980],[-1,-6],[-3,4],[-1,4],[0,3],[2,6],[2,3],[1,2],[0,-5],[0,-11]],[[7218,5705],[1,-4],[-2,3],[-2,2],[-1,2],[4,-2],[0,-1]],[[7221,5739],[-2,-1],[-1,4],[-1,1],[1,1],[0,1],[1,-4],[2,-2]],[[7221,5749],[3,0],[3,0],[2,-1],[3,-9],[9,-16],[5,-16],[1,-3],[0,-3],[2,-1],[1,-2],[5,-15],[0,-3],[0,-4],[1,-2],[1,-2],[2,0],[1,-3],[1,-12],[0,-4],[0,-2],[7,-19],[0,-2],[0,-2],[0,-2],[1,-3],[2,-9],[1,-2],[2,-8],[0,-16],[-1,-7],[-1,-8],[-1,-8],[-2,-6],[-2,-5],[-7,-11],[-2,-2],[-10,-7],[-6,-6],[-7,-2],[-6,4],[-5,8],[-2,12],[-2,13],[-2,14],[-2,44],[-1,12],[-2,15],[1,7],[1,7],[0,-15],[0,-1],[1,1],[1,15],[0,6],[3,16],[0,3],[0,6],[0,3],[3,12],[1,6],[1,7],[0,7],[-1,7],[3,-2],[2,-2],[1,-2],[2,1],[1,0],[-1,4],[-3,3],[-6,3],[-2,2],[-1,3],[1,3],[0,1]],[[5798,3450],[-3,-1],[0,-1],[-2,1],[-2,-1],[-2,0],[-1,-1],[-2,-4],[-4,-11],[-1,-2],[0,-4],[-1,-4],[-1,-2],[-1,-1],[-4,1],[-4,1],[-2,4],[-2,4],[-1,3],[-2,2],[0,1],[-2,1],[0,1],[-1,1],[0,2],[-1,2],[0,5],[-1,3],[-2,5],[-1,4],[-2,6],[-1,5],[-1,5],[0,2],[1,2],[3,3],[3,2],[1,3],[2,6],[1,3],[1,2],[1,2],[2,5],[2,6],[2,6],[2,2],[4,2],[4,5],[4,5],[6,5],[3,1],[2,1],[0,-1],[1,-3],[1,-3],[3,-4],[1,-1],[3,-6],[3,-4],[3,-5],[2,-2],[1,-1],[1,-4],[1,-3],[1,-3],[0,-3],[-1,-7],[-2,-7],[-1,-3],[-2,-2],[-1,-3],[-1,-6],[0,-6],[-2,-3],[-2,-2],[-2,-2],[-4,-4]],[[5582,8368],[-2,0]],[[5580,8368],[3,7],[1,4],[1,6],[1,2],[0,-3],[0,-4],[-2,-8],[-2,-4]],[[5652,8291],[0,1],[0,2],[0,5],[-1,3],[-2,4],[-3,2],[-3,2],[-2,1],[-1,1],[-1,1],[0,1],[-1,1],[-3,2],[-2,0],[-1,-2]],[[5632,8315],[-1,2],[-2,6],[1,4],[0,4],[4,11],[-1,2],[-2,4],[-3,2],[-2,5],[-6,0],[-6,0],[-1,0],[-6,3],[-5,3],[-4,2],[-3,2],[-1,3],[-3,-1],[-2,0]],[[5589,8367],[-1,5],[1,6],[-1,9],[-4,12],[0,12],[0,2]],[[5584,8413],[8,7],[9,7],[2,1],[9,4],[1,1],[8,-1],[6,-1],[5,0],[3,1],[2,-1],[3,-3],[2,0],[2,2],[11,-1],[3,0],[3,-1],[5,-2],[3,-1],[7,1],[3,0],[2,0],[5,5],[2,1],[1,1],[2,-1],[1,-4],[4,-7],[4,-1],[10,-3],[2,-2],[6,-6],[4,-3],[2,-3],[3,-5],[2,-3],[4,-3],[4,-2],[1,0]],[[5759,8497],[3,0],[2,-1],[0,-4],[4,-4],[4,-3],[0,-1],[1,-3],[-1,-3],[0,-1],[-1,-2],[-2,-5],[0,-4],[-2,-8],[1,0],[4,1],[1,-1],[1,-1],[0,-5],[2,-2],[1,-4],[0,-2],[3,-3],[0,-2],[2,-7],[1,-5],[0,-3],[-1,-4],[-1,-2]],[[5584,8413],[-1,11],[1,22],[1,11],[5,6],[3,5],[1,6],[0,6],[2,5],[7,15],[6,1],[8,4],[9,4],[2,-5],[1,-3],[10,-12],[3,-3],[4,-14],[10,-7],[8,2],[4,4],[6,6],[3,4],[0,5],[-1,18],[-2,8],[1,5]],[[8153,6465],[0,-1],[-1,-1],[0,-1],[-1,0]],[[3249,6225],[-3,0]],[[3246,6225],[0,1],[2,1],[1,0],[0,-2]],[[4758,6777],[-3,0],[0,-3],[1,-4],[0,-5],[-1,-2],[0,-3],[0,-3],[1,-4],[0,-3],[0,-2],[-1,-2],[-2,-1],[-4,-1],[-2,0],[-3,1],[-2,0],[-2,0],[-2,-1],[-2,-2],[-2,-4],[-3,-4],[-2,-3],[-2,-1],[-2,0],[-3,3],[-1,1],[-1,0],[-2,-2],[-2,-1],[-1,0],[-3,2],[-4,4],[-2,1],[-2,1],[-3,1],[-2,0],[-3,0],[-3,-3],[-3,-1],[-3,-2],[-4,-2],[1,-5],[1,-3],[0,-3],[0,-3],[-2,-3],[-2,-4],[-1,-3],[-1,-4],[-1,-2],[-2,-4],[-1,-4],[0,-3],[-1,-4],[-1,-1],[-3,-1],[-3,-1],[-2,-1],[0,-2],[-1,-4],[0,-3],[-1,-2],[0,-6],[-2,-5],[0,-7],[-1,-6],[-1,-9],[-1,-9],[-2,-8],[-1,-5],[-1,-3],[-2,-3],[-1,-3],[-2,-3],[-3,-3],[-3,-3],[-2,-3],[-1,-1],[-1,-2],[-2,-4],[-2,-6],[-1,-4],[-2,-8],[-1,-4],[-1,-2],[-2,-2],[-3,-2],[-3,-2],[-2,-3],[-3,-2],[-2,-2],[-1,-4],[-1,-4],[-2,-5],[-1,-7],[0,-4],[-2,-14],[-1,-8],[0,-5],[-1,-6],[-1,-10],[0,-8],[0,-5],[0,-3],[-2,-4],[-1,-3],[-2,-4],[-2,-2],[0,-3],[-2,-3],[-1,-4],[-2,-3],[0,-2],[1,-4],[-1,-4],[-1,-5],[-2,-6],[-3,-3],[-3,0],[-5,0],[-4,0],[-5,0],[-4,1],[-4,2],[-5,0],[-3,0],[-4,-1],[-11,0],[-4,-1],[-6,-2],[-2,0]],[[4527,6418],[2,27],[4,15],[3,7],[5,3],[4,15],[2,14],[2,6],[1,5],[-1,4],[3,8],[3,11],[2,7],[3,12],[1,2],[0,3],[-2,-2],[-1,-5],[-2,-3],[0,4],[2,6],[3,6],[6,7],[11,24],[4,4],[4,10],[1,8],[0,20],[2,11],[2,8],[3,15],[2,7],[2,14],[1,5],[3,2],[4,7],[6,5],[7,8],[3,6],[3,8],[2,15],[4,17],[3,13],[3,6],[3,9],[4,3],[9,2],[14,7],[12,10],[3,5],[4,8],[6,11],[11,13],[5,7],[8,18],[5,15],[5,10],[3,8],[2,9],[1,14],[-1,6],[-3,8],[-2,3],[-1,4],[1,8],[0,12],[1,21],[4,16],[9,22],[2,9],[1,14],[0,5],[11,20],[7,15],[2,4],[6,7],[20,15],[12,11],[7,8],[4,10],[11,37],[11,52],[1,6],[5,2],[3,0],[3,2],[4,4],[3,-1],[-2,-3],[0,-6],[3,-8],[4,-8],[7,-11],[6,-4],[8,-3],[10,5],[5,0],[3,2],[3,-3],[5,-1],[5,2],[4,4],[3,5],[0,-2],[0,-3],[1,-2],[2,-6],[1,-3],[3,1],[2,-2],[6,1],[6,-1]],[[5206,7704],[-2,-1]],[[5783,7802],[-1,3],[-2,4],[-1,1],[1,1],[1,1],[1,1],[0,4],[-1,4],[-1,2],[0,4],[0,5],[1,9],[2,12],[1,6],[-1,4],[1,7],[-1,4],[-2,5],[-2,11],[-3,3],[-3,5],[-1,3],[-1,3],[-2,3],[-3,4],[-2,7],[-2,4],[0,1],[-3,5],[-2,4],[-1,4],[0,3],[-2,7],[-2,5],[-2,4],[-1,2],[-2,4],[-3,2],[-3,1],[-2,-1]],[[5739,7963],[0,2],[6,6],[2,-1],[3,0],[6,0],[3,3],[2,-1],[1,2],[3,2],[0,-1],[4,-1],[3,-2],[2,-2],[2,-2],[2,-1],[1,-1],[1,-3],[2,-1],[3,0],[2,-1],[-1,-3],[1,-1],[1,1],[1,-1],[0,-2],[1,-1],[2,3],[2,0],[5,-2],[2,-7],[2,-2],[1,-1],[2,1],[2,1],[0,-1],[2,-4],[1,-6],[0,-3],[-1,-4],[-1,-5],[-1,-3],[1,-2],[0,-2],[2,0],[3,-4],[2,-3],[2,-2],[1,0],[1,-1],[0,-2],[0,-3],[-1,-4],[0,-2],[2,-2],[0,-3],[0,-2],[1,-2],[3,-3],[4,-3],[1,-3],[1,-3],[0,-6],[0,-5],[5,-6],[0,-2],[-1,-1],[-6,-1],[-1,0],[-2,5],[-1,0],[-2,-2],[-1,-1],[-2,1],[-1,1],[-1,1],[-1,1],[-1,-2],[-2,1],[-1,1],[-1,-4],[-1,-1],[0,7],[-1,2],[-1,0],[-3,-2],[-2,-2],[-1,-2],[0,-4],[0,-4],[2,-7],[-1,-2],[0,-5],[-3,-4],[-3,-2],[-1,-5],[-1,-4],[-3,-3],[-2,-4],[0,-3],[0,-2],[0,-2],[0,-1],[-1,-1],[-4,-1],[-1,0],[-2,-2]],[[6386,4210],[-3,-10],[1,8],[4,13],[1,1],[-3,-12]],[[6342,4414],[0,-2],[-3,1],[-1,7],[2,0],[0,3],[1,1],[1,-7],[0,-3]],[[6375,4468],[2,-6],[1,-6],[5,-14],[2,-5],[2,-6],[0,-12],[3,-17],[3,-27],[1,-27],[1,-13],[2,-12],[4,-12],[1,-13],[-3,-14],[-3,-14],[0,-2],[-2,-3],[-1,0],[-2,3],[-2,6],[-3,13],[-1,6],[-1,2],[-3,-1],[-2,-4],[0,-3],[0,-7],[1,-7],[0,-7],[0,-8],[1,-3],[1,-2],[2,-6],[0,-13],[-1,-7],[-2,-5],[0,-3],[1,-4],[-1,-2],[-3,-2],[-1,-2],[-2,-6],[-2,-12],[0,-6],[1,-19],[0,-13],[-3,-25],[-2,-12],[-3,-15],[-4,-18],[-4,-24],[-3,-24],[-3,-15],[-2,-15],[-4,-25],[-4,-26],[-4,-28],[-7,-32],[-1,-4],[-1,-16],[-2,-14],[-2,-14],[-3,-23],[-1,-8],[-1,-6],[-3,-15],[-2,-5],[-1,-6],[0,-7],[-1,-7],[-3,-13],[-4,-11],[-3,-4],[-6,-6],[-3,-1],[-6,0],[-6,-3],[-7,-7],[-6,-7],[-3,-4],[-3,-2],[-8,0],[-2,2],[-9,12],[-3,2],[-6,1],[-2,1],[-2,2],[-2,6],[-5,5],[-1,2],[-1,4],[-1,4],[-1,4],[-1,9],[-2,5],[-4,11],[-1,3],[0,11],[0,8],[0,13],[0,7],[2,6],[-1,6],[-1,6],[-1,7],[-1,6],[-5,12],[-1,5],[-1,6],[-2,18],[0,6],[0,13],[1,7],[1,4],[0,4],[1,3],[1,2],[1,3],[2,17],[2,3],[3,3],[3,4],[2,6],[1,12],[4,12],[2,6],[3,10],[3,13],[1,7],[1,6],[1,15],[0,7],[0,7],[-2,7],[-4,13],[0,3],[0,9],[0,7],[-1,7],[-2,7],[-2,12],[-1,21],[0,7],[-1,7],[-1,6],[1,11],[12,40],[1,4],[-1,13],[0,7],[1,2],[1,2],[2,0],[10,2],[1,1],[3,4],[3,6],[2,2],[1,-1],[1,-2],[1,-2],[4,3],[1,0],[2,0],[1,2],[0,4],[1,3],[1,1],[5,1],[3,1],[5,2],[4,-9],[1,-1],[1,0],[1,1],[-2,5],[-1,3],[0,3],[2,6],[2,5],[6,8],[6,9],[1,0],[2,-1],[1,-11],[0,-1],[1,0],[1,1],[1,4],[0,3],[-1,4],[0,3],[0,2],[2,6],[3,6],[1,7],[1,3],[2,4],[1,-1],[0,-3],[1,-3],[-1,-3],[-1,-3],[0,-4],[1,-1],[2,1],[1,8],[3,7],[1,3],[1,3],[3,-1],[3,-1],[-5,7],[-1,10],[5,18],[1,3],[0,1],[1,2],[-3,6],[-1,3],[1,4],[1,4],[1,3],[2,1],[1,-2],[3,-5],[2,0],[2,4],[2,6],[3,4],[3,2],[5,10],[3,19],[0,5],[0,7],[-2,6],[-1,8],[0,2],[3,-1],[1,1],[2,7],[5,14],[2,0],[1,-3],[1,-3],[1,-3],[3,-6],[1,-5]],[[7039,5370],[-1,0],[0,1],[0,1],[0,1],[1,0],[0,-1],[0,-1],[0,-1]],[[7041,5424],[0,-1],[-1,0],[0,1],[0,1],[1,1],[0,2],[1,0],[0,-1],[0,-1],[-1,-1],[0,-1]],[[2453,6260],[-3,-2],[-1,2],[7,5],[1,0],[0,-1],[-3,-2],[-1,-2]],[[1919,6263],[-2,-1],[-2,4],[0,2],[2,2],[1,-3],[1,-4]],[[2585,6353],[-2,-2],[0,7],[1,6],[1,4],[3,0],[2,1],[0,-1],[-2,-5],[-3,-10]],[[2591,6407],[1,-3],[-1,1],[-1,2],[0,2],[1,0],[0,-2]],[[2041,6429],[0,-5],[-3,2],[0,3],[0,5],[1,0],[1,-2],[1,-1],[0,-2]],[[1950,6575],[-1,0],[-1,3],[-1,7],[0,1],[3,-9],[0,-1],[0,-1]],[[1897,6589],[0,-3],[-9,11],[2,1],[3,-1],[4,-8]],[[1928,6624],[1,-6],[-1,0],[-2,4],[-1,4],[0,2],[0,1],[3,-3],[0,-2]],[[1887,6598],[0,-1],[-3,7],[0,4],[-1,2],[-3,2],[3,9],[1,19],[1,-3],[-2,-20],[0,-2],[1,-3],[1,-4],[0,-4],[2,-4],[0,-2]],[[1914,6683],[0,-3],[-1,1],[-2,-8],[-1,-1],[1,12],[2,1],[1,1],[0,-3]],[[1801,6801],[-1,-2],[-4,4],[2,6],[0,7],[1,2],[1,-3],[1,-9],[0,-5]],[[1715,6851],[-1,-2],[-3,12],[0,3],[1,1],[1,0],[0,-3],[2,-3],[0,-2],[0,-6]],[[1883,6854],[-2,-13],[-2,0],[-5,4],[0,3],[2,16],[1,2],[4,2],[0,-2],[1,-5],[1,-7]],[[1857,6857],[-1,-1],[-2,4],[-7,12],[-2,6],[-1,3],[1,6],[2,-1],[2,-4],[1,-4],[1,-4],[4,-2],[1,-10],[1,-5]],[[1814,7010],[-1,0],[-2,2],[0,3],[1,0],[1,-2],[1,-2],[0,-1]],[[2301,6679],[0,-12],[-2,-10],[-5,-20],[-3,-12],[-4,-36],[-2,-24],[0,-11],[0,-2],[0,-1],[-1,-25],[1,-21],[-1,-3],[-1,-6],[-1,-9],[0,-4],[0,-3],[2,-13],[0,-10],[5,-17],[3,-6],[3,-5],[2,-3],[-1,-7],[-1,-4],[-1,-6],[-1,5],[1,6],[1,4],[0,2],[-2,3],[-4,8],[-5,16],[4,-25],[1,-4],[1,-1],[1,-2],[0,-3],[0,-2],[4,-17],[5,-17],[0,-5],[2,-6],[11,-24],[7,-19],[3,-17],[1,-6],[1,-7],[5,-8],[1,-6],[3,-3],[2,-9],[3,-5],[-1,0],[-3,3],[0,-2],[3,-4],[5,-4],[2,0],[-2,2],[-2,3],[1,0],[3,-3],[11,-1],[4,-8],[6,-3],[4,-9],[3,-10],[3,-1],[2,0],[5,2],[9,6],[3,3],[6,4],[9,1],[3,-1],[7,3],[3,3],[1,3],[0,2],[7,3],[1,0],[6,1],[3,1],[4,1],[3,-5],[0,-2],[-2,-2],[1,-2],[3,-3],[5,-2],[2,1],[3,5],[4,5],[0,5],[-1,3],[-1,0],[0,2],[1,4],[-1,1],[-2,-3],[-1,0],[0,1],[1,2],[8,8],[2,4],[3,3],[6,11],[2,22],[1,4],[4,7],[0,2],[0,4],[0,12],[0,9],[0,10],[1,9],[1,2],[2,15],[5,6],[8,8],[2,1],[26,8],[4,2],[4,5],[3,2],[6,0],[2,1],[1,0],[0,1],[1,1],[3,-1],[7,-3],[2,-1],[6,-3],[6,-2],[1,1],[1,1],[1,2],[-1,2],[-1,0],[-1,-1],[-1,0],[-3,1],[1,1],[2,0],[2,1],[3,2],[2,-2],[4,-7],[2,-2],[0,-11],[1,-2],[0,-3],[-1,-8],[-1,-7],[-2,-6],[-4,-9],[-4,-7],[-6,-16],[-1,-7],[0,-6],[1,-6],[0,-2],[-1,-2],[-1,0],[-2,-3],[-3,-8],[0,-3],[1,-2],[2,1],[2,0],[1,1],[1,0],[0,-5],[-1,-3],[-1,-1],[-2,-1],[-1,-2],[-1,-2],[0,-5],[1,0],[2,4],[1,-1],[0,-1],[-2,-14],[-2,-14],[-2,-9],[-1,-12],[-1,-5],[-2,-5],[-3,10],[-2,2],[0,3],[1,11],[-1,7],[-1,0],[-1,-4],[-2,-3],[0,-4],[-2,-8],[-1,-2]],[[2438,6022],[-1,1],[-8,16],[-7,17],[-3,5],[-3,5],[-4,8],[-11,17],[-5,8],[-5,9],[-5,6],[-4,3],[-2,2],[-2,3],[-1,0],[0,-4],[1,-1],[2,-2],[2,0],[1,-1],[5,-5],[1,-3],[-13,10],[-6,1],[0,2],[2,5],[0,1],[-1,1],[-3,-4],[-1,0],[0,2],[0,2],[-2,4],[-1,-1],[-1,-2],[-3,-4],[0,-2],[5,-1],[2,-1],[-1,-2],[-4,0],[-5,-1],[-9,-12],[-9,-5],[-12,-11],[-5,-1],[-3,-2],[-8,5],[-11,10],[-16,3],[-10,14],[-11,6],[-7,13],[-4,1],[-2,2],[-10,5],[-9,3],[-10,11],[-6,4],[-5,5],[-12,8],[-4,4],[-4,7],[-6,7],[-3,5],[-3,3],[-5,10],[-2,5],[-2,2],[-2,1],[-7,-1],[-9,5],[-4,1],[-9,7],[-12,8],[-3,9],[-4,9],[-6,11],[-3,5],[-7,6],[-3,4],[-6,4],[-9,9],[-3,8],[-2,7],[-5,8],[-5,15],[-2,6],[-1,9],[-1,5],[-1,4],[0,3],[3,3],[5,1],[3,4],[0,3],[0,2],[-2,5],[-3,1],[-2,1],[0,1],[1,2],[2,5],[3,6],[2,5],[0,8],[0,7],[0,7],[-6,7],[-1,3],[-2,9],[-3,9],[0,20],[-4,17],[-4,9],[-2,3],[-6,13],[-5,8],[-4,14],[-5,10],[-6,15],[-4,8],[-19,26],[1,0],[6,-6],[1,0],[0,4],[-1,3],[-1,1],[-1,-1],[-2,1],[-1,1],[-3,1],[-4,5],[-1,4],[-1,5],[-5,11],[-2,6],[1,0],[1,-2],[2,-1],[2,0],[1,1],[-1,2],[-1,1],[-8,6],[-2,4],[-7,7],[-1,2],[-1,7],[-2,0],[-1,-2],[-4,-2],[-1,3],[0,2],[3,2],[2,6],[0,2],[-1,-2],[-2,-3],[-2,-2],[-3,-1],[-2,1],[-1,1],[-3,6],[-1,17],[2,6],[3,6],[1,4],[2,-3],[1,0],[-1,3],[-2,3],[-1,3],[0,2],[-1,5],[-5,10],[-6,-1],[-2,1],[-2,4],[-2,6],[-1,6],[0,3],[0,3],[-9,4],[-3,4],[-3,6],[-1,4],[-1,3],[-1,5],[-1,7],[1,8],[2,4],[-7,3],[-2,0],[-2,-2],[-2,2],[-4,3],[-4,8],[-6,16],[-5,5],[-2,5],[-3,5],[-2,6],[0,3],[-1,1],[-3,4],[-3,7],[-1,6],[-1,9],[-2,3],[-2,1],[0,4],[0,3],[-1,4],[-4,11],[-2,8],[-2,3],[-1,4],[0,8],[-2,10],[-4,12],[-3,8],[-1,8],[1,9],[-1,5],[0,1],[0,2],[1,-1],[1,1],[0,6],[-1,1],[-3,2],[-1,1],[-7,2],[-4,3],[-1,7],[-2,3],[-1,2],[-5,5],[-1,-3],[-1,-3],[-2,-1],[-2,0],[-3,2],[-8,11],[-2,1],[-2,1],[-1,2],[-6,5],[1,-3],[2,-3],[1,-8],[-1,-7],[-1,-22],[1,-4],[2,-7],[2,-11],[0,-8],[2,-7],[-1,-16],[1,-4],[2,-8],[4,-7],[1,-4],[5,-6],[3,-7],[7,-10],[2,-4],[6,-15],[0,-4],[1,-6],[3,1],[2,-4],[0,-2],[0,-2],[2,1],[1,-1],[3,-17],[2,-2],[2,-1],[3,-2],[0,-4],[0,-4],[2,-5],[-1,-6],[2,-6],[0,-5],[0,-4],[5,-10],[7,-8],[1,-10],[2,-9],[3,-3],[3,-3],[-1,-4],[0,-3],[4,-7],[1,-10],[3,-6],[1,1],[-2,6],[-1,4],[0,6],[0,1],[7,-10],[0,-7],[2,-4],[1,-6],[1,-3],[0,-5],[2,-8],[0,-12],[1,-8],[4,-12],[4,-3],[0,-6],[3,-16],[4,-9],[2,-7],[0,-4],[-1,-7],[0,-5],[2,-14],[3,-8],[4,-1],[0,-1],[0,-2],[1,-2],[1,2],[1,3],[-1,4],[0,3],[1,2],[1,0],[7,-10],[1,-4],[2,-4],[2,-5],[1,-5],[2,-3],[1,-8],[5,-4],[2,-7],[1,-4],[-2,-11],[-1,-3],[-3,-5],[-3,-5],[-3,-4],[-3,-2],[-2,0],[-2,7],[-3,19],[-2,4],[-1,6],[-2,5],[-7,8],[-4,8],[-4,5],[-4,8],[-10,13],[-5,7],[-2,6],[-2,0],[-2,-1],[0,2],[0,4],[-1,2],[-6,10],[-2,5],[0,6],[2,16],[0,10],[0,5],[-1,0],[0,3],[-1,8],[-1,8],[-6,18],[-4,3],[-4,3],[-10,15],[-2,8],[-1,4],[0,9],[-2,-5],[-2,-4],[-4,0],[-5,-4],[-3,4],[-1,5],[-2,5],[-3,1],[-2,0],[-3,7],[-2,2],[-4,1],[-3,4],[-1,3],[-1,6],[-1,3],[-5,6],[-4,7],[-3,4],[-2,4],[0,2],[6,0],[7,-3],[4,1],[2,2],[2,2],[0,-2],[0,-3],[2,-4],[2,-2],[2,0],[-2,3],[-1,6],[1,2],[0,3],[-3,-1],[0,2],[2,4],[3,12],[1,12],[-3,10],[-4,8],[-10,21],[-6,10],[-2,4],[-1,2],[-5,3],[-4,6],[-7,8],[-3,5],[-2,10],[-2,1],[0,8],[0,12],[-1,3],[-4,4],[-1,8],[0,8],[-1,6],[-7,10],[0,4],[0,5],[-1,4],[-3,9],[-4,8],[-2,4],[0,8],[-1,2],[1,0],[1,1],[0,5],[-6,9],[-2,11],[-3,7],[-1,2],[-2,11]],[[1746,7058],[8,1],[8,1],[8,1],[8,2],[8,1],[8,1],[8,1],[8,2],[3,0],[-2,-9],[-1,-3],[13,-8],[13,-9],[13,-8],[14,-9],[13,-8],[13,-9],[13,-8],[13,-9],[10,0],[10,0],[10,0],[10,0],[9,0],[10,0],[10,0],[10,0],[0,7],[0,6],[0,7],[0,6],[6,0],[6,0],[6,0],[6,0],[6,0],[7,0],[6,0],[6,0],[0,-1],[3,-5],[2,-7],[3,-6],[4,-3],[6,-9],[8,-15],[6,-10],[5,-5],[4,-4],[1,-4],[3,-7],[4,-19],[0,-8],[2,-8],[3,-10],[3,-6],[2,-2],[3,-3],[3,-6],[3,-3],[4,-2],[5,-5],[7,-8],[5,-4],[2,0],[2,3],[2,5],[2,3],[2,2],[0,2],[0,3],[1,8],[3,11],[3,6],[4,1],[3,3],[1,3],[2,0],[3,-2],[5,-2],[6,-1],[4,0],[1,2],[1,0],[0,-2],[1,0],[2,0],[2,-2],[2,-6],[7,-10],[1,-4],[2,-5],[5,-7],[3,-7],[0,-5],[3,-9],[4,-12],[2,-6],[-1,-1],[1,-4],[1,-6],[2,-4],[3,-4],[3,-8],[3,-10],[4,-8],[4,-5],[3,-5],[0,-5],[0,-4],[0,-3],[0,-4],[1,-3],[1,-3],[-1,-5],[0,-2],[0,-1],[4,-9],[2,-7],[2,-11],[2,-7],[2,-3],[4,-1],[3,-2],[2,-4],[3,-2],[3,-1],[3,-2],[3,-4],[5,-3],[8,-1],[6,-4],[4,-5],[2,-1],[1,1],[0,1],[2,2],[3,1]],[[9711,5520],[0,-2],[-1,0],[0,1],[1,2],[1,5],[1,2],[1,2],[0,-2],[-2,-2],[-1,-6]],[[9765,5590],[1,-1],[2,0],[2,-4],[-1,1],[-1,1],[-1,1],[-1,-1],[-1,1],[0,2]],[[9752,5595],[3,-3],[5,1],[-1,-1],[-2,0],[-1,-1],[-1,0],[-3,2],[-2,3],[0,1],[2,-2]],[[9689,5605],[-1,-1],[-2,0],[-2,2],[1,0],[2,0],[2,-1]],[[9635,5826],[-1,0],[0,1],[1,0],[0,-1]],[[5598,7617],[2,0],[3,1],[2,2],[1,1],[2,0],[2,0],[2,-1],[3,2],[2,2],[1,-1],[1,-2],[1,0]],[[5117,6286],[0,-10],[0,-15],[0,-17],[0,-15],[0,-18],[0,-14],[0,-17],[0,-17],[-1,-2],[0,-10],[0,-12],[-2,-13],[-3,-10],[-1,-9],[-1,-5],[-1,-3],[0,-3],[-1,-5],[-1,-3],[0,-1],[-3,-2],[-6,-9],[0,-8],[-6,2],[-6,2],[-1,0],[-1,-1],[0,-4],[-9,0],[-7,-1],[-9,0],[-7,-1],[-8,-1],[-7,-1],[-5,-8],[-5,-8],[-7,-2],[-7,2],[-5,0],[-1,-1],[0,-3]],[[4683,5898],[0,5],[-1,3],[-1,1],[1,4],[0,9],[0,3],[1,6],[-1,3],[0,2],[-2,4],[-1,4],[-1,4],[0,3],[-2,5],[-1,1],[-2,0],[0,-1],[-1,-3],[-1,0],[-1,3],[-1,2],[0,2],[-2,4],[-2,7],[0,6],[2,3],[0,2],[0,3],[0,3],[-1,3],[0,5],[0,8],[-2,4],[-1,3],[-2,3],[-1,5],[0,6],[1,5],[-3,9]],[[4658,6037],[5,-4],[1,1],[2,3],[2,4],[2,6],[1,8],[0,7],[1,6],[1,4],[2,5],[2,4],[3,3],[1,0],[3,-5],[5,-11],[5,-7],[1,-5],[2,0],[2,8],[2,7],[1,1],[3,1],[3,0],[2,0],[4,-1],[2,-1],[2,-1],[5,-1],[6,2],[4,2],[4,1],[0,3],[0,4],[1,3],[1,2],[1,1],[0,-9],[1,-1],[4,-1],[5,0],[6,0],[5,0],[6,0],[6,0],[5,0],[6,0],[6,0],[5,0],[6,0],[6,0],[5,0],[6,0],[6,0],[5,0],[6,0],[6,0],[5,0],[2,17],[1,16],[2,13],[-5,9],[-3,7],[-1,14],[0,14],[-1,15],[-1,14],[-1,14],[-1,15],[0,14],[-1,14],[-1,15],[-1,14],[-1,14],[0,15],[-1,14],[-1,14],[-1,15],[0,14],[-1,14],[-1,14],[-1,15],[-1,14],[0,14],[-1,15],[-1,14],[-1,14],[-1,15],[0,14],[-1,14],[-1,15],[-1,14],[-1,14],[0,15],[-1,14],[-1,14],[-1,13],[9,0],[9,0],[9,0],[13,0],[10,1]],[[5404,7249],[-1,-2],[-3,0],[-2,3],[0,6],[3,-1],[2,-4],[1,-2]],[[5397,7259],[-2,-1],[-1,2],[-1,1],[3,1],[1,-1],[0,-2]],[[7727,5756],[-2,-3],[0,5],[3,4],[2,1],[-1,-3],[-1,-3],[-1,-1]],[[7727,5815],[3,-10],[-1,-2],[0,-1],[-1,1],[0,5],[-2,4],[-2,-1],[1,4],[1,1],[1,-1]],[[7737,5815],[-1,0],[-1,0],[0,1],[1,6],[1,-7]],[[7728,5845],[-1,-1],[0,1],[0,5],[1,5],[1,6],[1,1],[0,-3],[-1,-7],[0,-4],[-1,-3]],[[7737,5860],[-1,-12],[-2,2],[-2,7],[1,2],[-1,4],[4,1],[1,-4]],[[7724,5857],[0,-3],[-2,3],[0,10],[1,-6],[1,-1],[0,-3]],[[7736,5870],[-1,-1],[-1,10],[0,1],[2,-5],[2,-3],[-1,-1],[-1,-1]],[[7725,5884],[0,-1],[-1,1],[-2,4],[1,3],[0,1],[1,0],[1,-1],[0,-1],[0,-2],[0,-2],[0,-2]],[[7723,5897],[0,-2],[-1,-4],[-2,3],[0,1],[1,3],[2,-1],[0,1],[0,-1]],[[7733,5909],[1,-1],[0,-6],[-2,-7],[-1,-1],[-1,0],[1,10],[-1,6],[0,4],[2,-2],[1,-3]],[[7730,5938],[0,-9],[-1,4],[-1,6],[1,4],[0,1],[0,-1],[1,-2],[0,-3]],[[7633,6095],[-1,-1],[-1,1],[2,7],[1,-3],[-1,-4]],[[7624,6102],[-2,-5],[-1,8],[3,5],[2,4],[1,3],[1,-3],[-2,-8],[-2,-4]],[[7710,6120],[-1,-1],[-2,4],[0,9],[1,2],[1,0],[1,-1],[0,-1],[0,-2],[0,-2],[0,-8]],[[7602,6260],[-1,-1],[-3,5],[-2,7],[4,1],[3,-2],[0,-3],[0,-5],[-1,-2]],[[7602,6310],[4,-4],[1,0],[2,-3],[0,-1],[0,-3],[-1,-2],[-3,-2],[-1,2],[-1,5],[-2,3],[-1,2],[2,3]],[[7596,6330],[1,-8],[-2,3],[-1,4],[0,4],[2,-3]],[[7583,6331],[0,-5],[-1,2],[-2,8],[0,5],[1,-3],[2,-7]],[[7780,6354],[-3,4],[-1,2],[-2,0],[-2,-2],[-1,-3],[-2,0],[-2,-1],[-3,2],[-2,1],[0,-1],[1,-5],[0,-4],[0,-3],[-1,-1],[-2,-2],[-1,-1],[-2,0],[-2,2],[-2,0],[-2,-1],[-1,-1],[0,-2],[-1,-10],[-1,-3],[-1,-2],[-1,-1],[-2,1],[-1,0],[-8,-4],[-1,-1],[-2,0],[-2,0],[-2,0],[-3,4],[-2,1],[-1,-2],[-1,-5],[-2,-4],[-3,-7],[0,-12],[0,-7],[-2,-8],[-1,-4],[2,-18],[-1,-2],[-2,-1],[-2,-2],[-2,-2],[-1,0],[-2,1],[-1,0],[0,-1],[2,-8],[2,-3],[2,0],[1,-1],[0,-2],[1,-4],[2,-8],[0,-6],[-1,-6],[0,-2],[1,-1],[2,-6],[3,-8],[4,-10],[3,-7],[3,-6],[5,-9],[1,-5],[0,-9],[1,-6],[1,-4],[1,-3],[2,-11],[1,-1],[4,6],[1,-1],[0,-2],[0,-3],[-1,-4],[-1,-3],[-6,-8],[-1,-6],[0,-10],[0,-12],[0,-9],[0,-2],[-1,-1],[-2,0],[-3,-4],[-2,-1],[-1,-1],[-1,-2],[-1,-4],[1,-10],[1,-9],[3,-7],[2,-5],[2,-8],[2,-6],[4,-7],[6,-11],[3,-6],[2,-7],[1,-6],[1,-8],[0,-5],[0,-15],[-1,-3],[-1,-4],[1,-5],[1,-4],[0,-4],[1,-8],[2,-5],[3,-4],[0,-2],[0,-5],[1,-4],[0,-5],[1,-7],[2,-6],[2,-18],[0,-1],[-1,-4],[-1,-3],[-1,-1],[-1,-4],[-3,-9],[-4,-17],[-5,-10],[-4,-8],[-3,-4],[-1,-3],[0,-2],[1,-4],[0,-7],[-1,-5],[-1,-5],[0,-4]],[[7741,5771],[-1,-1],[-3,-8],[-1,4],[-1,4],[1,10],[-2,19],[1,2],[1,1],[2,8],[2,7],[0,8],[2,6],[0,5],[0,6],[0,5],[0,4],[1,5],[3,3],[-1,1],[-1,2],[-3,-3],[-2,1],[0,4],[0,3],[0,3],[2,2],[0,6],[-1,4],[1,6],[-2,0],[-1,1],[1,3],[1,3],[-1,5],[1,6],[0,7],[-1,6],[0,5],[-1,8],[-1,10],[-2,7],[-2,11],[-5,15],[0,6],[0,5],[-1,3],[-1,-19],[-1,4],[-1,10],[-1,5],[1,10],[-3,10],[0,8],[-2,11],[0,2],[3,-2],[-2,6],[-2,-1],[-2,7],[0,18],[-2,7],[1,8],[-2,25],[-3,9],[1,7],[0,6],[0,12],[1,3],[2,3],[-2,-1],[-1,-1],[-3,0],[-4,-1],[-1,9],[-2,4],[-1,9],[-1,10],[0,1],[-3,4],[0,3],[-3,6],[-3,5],[0,-3],[1,-2],[-1,-6],[1,-10],[-1,-7],[-2,-8],[-1,-4],[-4,-8],[-3,-3],[-2,-1],[-2,1],[-2,5],[-1,3],[0,6],[-1,1],[-1,0],[2,-8],[-1,-4],[3,-7],[-1,-2],[-4,-4],[-2,1],[-1,-1],[0,-3],[-1,-2],[-7,-5],[-1,-5],[-1,-6],[-3,-8],[-5,-7],[-1,1],[-1,1],[0,7],[1,7],[0,6],[-1,-4],[-3,-9],[-1,-3],[-3,1],[-3,-1],[-2,9],[0,4],[0,2],[0,3],[0,3],[-1,-5],[0,-4],[-1,-3],[-4,-4],[0,5],[-1,4],[1,4],[0,6],[1,9],[0,3],[0,4],[-1,-5],[0,-5],[-1,-2],[-1,-1],[-3,-6],[-1,-5],[-4,-5],[-2,0],[-1,7],[2,22],[1,3],[1,4],[1,13],[2,5],[0,11],[1,2],[2,8],[1,15],[-1,7],[-2,7],[-2,22],[-4,18],[-1,6],[-2,7],[2,0],[-4,6],[-1,3],[-1,15],[1,8],[-1,-1],[-1,-5],[-1,-2],[0,-9],[0,-2],[-1,-4],[-3,4],[-3,4],[-3,9],[-3,10],[1,2],[2,0],[4,-7],[2,-2],[2,2],[2,3],[1,7],[-1,2],[-2,1],[-1,2],[-2,4],[0,2],[-1,3],[-2,2],[-1,3],[1,4],[1,4],[-3,0],[-4,5],[-1,2],[-1,1],[-3,1],[-3,-2],[1,-8],[0,-3],[-2,1],[-3,12],[1,3],[1,3],[-1,1],[-1,-1],[1,12],[0,1],[-1,-3],[-1,-4],[-3,-7],[-1,1],[-1,2],[1,4],[1,1],[1,2],[-2,5],[-1,3],[-2,5],[-1,0],[1,-6],[0,-9],[-3,10],[-7,14],[-1,4]],[[5533,7691],[0,-3],[0,-2],[3,-2],[3,-4],[4,-7],[1,-2],[2,-1],[3,-3],[2,-1],[2,-1],[7,-6],[2,-2],[2,-3],[1,-2],[0,-1]],[[5537,7595],[-5,5],[-1,6],[-7,11],[-7,8],[0,1],[0,1],[0,1],[-1,1],[-1,-1],[-1,0]],[[7439,8015],[3,1],[1,1],[1,2],[3,2],[0,2],[0,5],[2,4],[4,1],[2,1],[1,-1],[3,1],[2,0],[2,-1],[1,-1],[3,0],[1,2],[0,3],[1,0],[1,-2],[1,-1],[1,-1],[3,2],[1,2],[1,3],[1,2],[2,-1],[2,0],[3,3],[3,2],[2,1],[0,2],[-1,5],[0,4],[3,3],[4,0],[3,2],[0,5],[2,1],[1,1],[3,0],[3,2],[1,1],[5,3],[3,1],[2,2],[1,2],[3,1],[2,3],[3,3],[1,0],[5,2],[1,0],[1,1],[3,0],[0,3],[3,2],[2,1],[1,2],[2,3],[2,2],[5,0],[4,0],[2,0],[2,4],[1,3],[0,2],[2,0],[2,-3],[1,-2],[3,-2],[1,-3],[2,0],[1,2],[1,4],[3,0],[2,0],[1,-2],[0,-2],[1,-4],[2,-2],[4,0],[1,0],[3,0],[3,-1],[4,-1],[1,0],[4,0],[5,-1],[2,1],[5,-1],[1,-3],[1,-6],[1,-6],[0,-5],[1,-2],[2,-1],[1,-2],[2,-2],[1,-4],[2,0],[1,1],[3,0],[3,0],[2,-2],[1,-2],[2,-2],[2,0],[4,1],[2,-1],[1,-1],[3,0],[1,1],[4,2],[2,2],[2,0],[1,-1],[1,-2],[2,1],[0,2],[2,0],[1,-1],[3,-2],[3,-3],[1,0],[3,1],[1,0],[1,-1],[2,-1],[1,1],[2,1],[7,-2],[2,-3],[1,-2],[1,-2],[2,-2],[5,1],[1,2],[4,4],[1,4],[2,1],[2,1],[1,0],[2,0],[3,3],[2,1],[2,3],[1,2],[1,4],[1,3],[1,4],[1,7],[1,4],[-1,2],[-1,2],[-3,0],[-1,2],[-2,3],[-1,3],[-1,4],[0,3],[0,2],[-1,2],[-2,3],[0,2],[0,4],[2,7],[0,3],[0,2],[0,1],[1,4],[1,2],[1,4],[2,2],[3,0],[1,1],[0,5],[1,3],[1,2],[1,3],[8,4],[4,6],[1,3],[1,7],[1,3],[2,-1],[2,-4],[2,0],[2,-2],[7,-4],[3,-2],[2,0],[3,-1],[2,-3],[4,-4],[3,-1],[5,-1],[7,0],[2,-1],[5,-3],[5,-3],[5,-3],[4,-2],[2,-2],[2,-2],[3,1],[3,0],[7,-2],[4,-3],[4,-1],[1,-3],[0,-3],[0,-2],[0,-6],[1,-4],[0,-4],[1,-4],[0,-5],[0,-2],[1,-1],[1,-3],[0,-3],[-1,-2],[1,-3],[1,-2],[2,0],[2,-1],[2,-4],[4,-4],[2,-1],[2,-2],[5,-2],[4,-1],[2,-1],[2,-4],[3,-1],[2,-1],[4,-1],[2,1],[3,1],[1,0],[3,-1],[3,0],[3,0],[2,3],[3,4],[3,1],[4,1],[2,1],[8,3],[4,0],[2,2],[2,2],[4,1],[4,-2],[4,-1],[5,-1],[4,-2],[2,-2],[4,-2],[4,1],[6,1],[3,-1],[4,-4],[3,-3],[3,-6],[2,-3],[3,-3],[3,0],[8,0],[4,-2],[4,0],[1,-2],[-1,-4],[1,-6],[-1,-3],[1,-2],[1,-1],[1,-3],[2,-1],[3,-3],[6,-7],[3,-3],[2,-1],[4,0],[5,0],[9,0],[6,-2],[2,-1],[6,-2],[7,-2],[5,-2],[4,3],[3,0],[2,-2],[3,-3],[2,0],[4,2],[10,8],[4,3],[2,-1],[3,1],[1,1],[5,1],[3,0],[2,1],[5,1],[8,5],[3,1],[6,-2],[3,1],[3,3],[4,3],[1,4],[2,6],[4,4],[3,4],[4,4],[4,3],[5,3],[5,6],[4,3],[2,1],[3,-2],[4,0],[4,0],[1,-1],[4,-3],[4,-2],[2,-5],[5,-6],[3,-2],[2,-1],[4,-1],[4,0],[2,1],[3,3],[6,3],[2,0],[4,-2],[6,-3],[2,-2],[1,-3]],[[9034,5999],[-1,-2],[-1,0],[-1,1],[0,2],[2,1],[1,0],[0,-2]],[[9045,6046],[-1,-3],[-1,5],[0,2],[1,1],[1,0],[0,-5]],[[9048,6055],[0,-1],[-2,0],[0,1],[1,5],[2,3],[1,0],[-1,-2],[0,-3],[-1,-3]],[[9047,6125],[-1,0],[-1,0],[0,1],[-1,1],[2,0],[1,-1],[0,-1]],[[9048,6225],[-1,-1],[2,6],[0,1],[1,-3],[-2,-3]],[[9047,6264],[-1,-2],[-1,2],[0,3],[1,0],[1,-1],[0,-2]],[[5913,3637],[-3,0],[-5,0],[-3,0],[-4,0],[-4,1],[-3,0]],[[5891,3638],[0,18],[-1,4],[0,6],[-1,4],[1,4],[0,6],[0,5],[-3,3],[0,1]],[[5887,3689],[-1,4],[0,6],[2,8],[0,16],[0,6],[0,11],[0,13],[0,12],[0,10],[-1,5],[0,2],[-1,6],[-2,11],[-1,9],[-2,5],[-1,3],[-1,4],[-2,7],[-1,4],[-1,4],[0,8],[-2,15],[-1,11],[-2,12],[-1,8],[0,1],[0,3]],[[5869,3893],[3,6],[4,9],[5,10],[4,8],[4,8],[5,11],[5,10],[1,1],[0,1],[-2,9],[4,11],[0,7],[0,7],[0,3],[1,3],[4,5],[3,9],[2,8],[4,14],[0,3],[0,3],[-1,5],[-2,7],[-2,6],[-1,10],[1,9],[1,5],[0,2],[-1,3],[-1,2],[-2,1],[0,4],[0,4],[0,2],[4,4],[1,2],[0,2],[0,4],[1,8],[2,7],[0,3],[-1,2],[0,5],[0,6],[0,19],[1,18],[-1,11],[-2,12],[0,9],[1,7],[1,3],[-2,1],[-2,0],[-2,1],[-3,5],[-5,5],[-6,3],[-8,2],[-7,12],[-6,2],[-2,1],[-5,8],[-8,1],[-9,0],[-5,0],[-1,1],[0,11],[0,9]],[[5844,4283],[-1,8],[-1,9],[-1,3],[-1,6],[-1,7],[0,3],[0,1],[6,5],[3,3],[3,2],[7,4],[6,3],[6,4],[5,3],[3,3],[3,2],[7,5],[2,1],[4,3],[2,1],[8,5],[9,6],[3,3],[6,4]],[[5922,4377],[1,-2],[4,-14],[3,-9],[4,-7],[1,2],[2,1],[6,1],[2,0],[2,3],[3,1],[3,1],[1,-1],[4,-10],[0,-8],[1,-11],[0,-5],[0,-7],[0,-9],[-3,-11],[-1,-5],[-1,-8],[-2,-4],[-1,-3],[0,-3],[1,-3],[2,-5],[1,-3],[0,-3],[0,-4],[0,-3],[1,-2],[3,-2],[2,-7],[4,-7],[5,-12],[2,-3],[2,-1],[1,-4],[-1,-4],[-1,-2],[0,-4],[1,-2],[1,-1],[2,0],[2,1],[1,1],[-1,17],[-1,9],[-1,4],[-1,1],[1,3],[1,8],[2,7],[1,3],[1,2],[6,2],[3,2],[2,2],[1,6],[0,16],[1,15],[-1,9],[1,13],[1,8],[0,2],[-1,11],[-4,12],[-6,15],[-3,8],[-3,9],[-7,15],[-3,5],[-2,2],[-5,2],[-1,3],[-1,4],[-1,9],[0,6],[-1,10],[-1,15],[0,5],[-2,11],[-1,10],[0,3],[0,3],[3,8],[1,5],[1,3],[2,8],[0,4],[1,2],[5,1],[4,0]],[[5971,4517],[6,0],[6,0],[1,-1],[2,-1],[1,1],[2,1],[2,3],[2,4],[4,0],[5,-5],[2,-4],[1,-3],[3,-2],[6,-1],[4,2],[3,4],[3,2],[3,1],[2,-2],[1,-3],[3,-2],[5,-2],[4,2],[5,6],[3,5],[1,6],[1,4],[1,1],[2,1],[5,0],[4,-2],[5,-6],[3,4],[5,7],[5,4],[5,0],[5,2],[3,5],[3,3],[4,2],[3,2],[5,6],[5,7],[5,8],[3,5]],[[6123,4581],[2,-6],[2,-5],[-1,-3],[-2,-3],[3,-4],[-2,-6],[0,-4],[0,-1],[1,-3],[-2,-6],[-2,-5],[0,-4],[1,-7],[0,-12],[1,-10],[1,-6],[0,-4],[-1,-6],[1,-11],[0,-5],[-1,-6],[2,-2],[1,-6],[-1,-7],[0,-4],[-3,-4],[0,-2],[0,-3],[3,0],[0,-4],[0,-4],[0,-6],[0,-4],[1,-5],[-1,-5],[0,-4],[0,-5],[1,-13],[0,-16],[0,-2],[2,-2],[1,-1],[0,-4],[-2,-6],[0,-4],[0,-5],[3,7],[1,0],[1,-3],[0,-3],[0,-2],[0,-4],[1,-5],[0,-4],[-2,-3],[-2,-5],[0,-5],[0,-3],[-2,-1],[0,-2],[1,-4],[0,-4],[-3,-12],[-7,-17],[-3,-6],[-2,-7],[0,-2],[-1,-3],[-3,-9],[-3,-1],[-2,-3],[1,-8],[-2,-2],[-4,-6],[-11,-12],[-1,-3],[-3,-8],[-3,-2],[-2,-2],[-4,-1],[-1,1],[-1,0],[-1,-2],[-7,-5],[-7,-4],[-2,-2],[-1,-3],[-6,-4],[-9,-10],[-7,-10],[-5,-10],[-2,-1],[-2,-4],[0,-5],[-1,-2],[-4,-11],[-6,-12],[-1,-3],[-2,-7],[0,-4],[-3,-2],[-1,5],[-1,-9],[-2,0],[-1,2],[-4,-5],[-4,-4],[-5,-10],[-8,-19],[-12,-18],[-1,-1],[-1,0],[-4,7],[-2,0],[2,-4],[1,-3],[0,-6],[0,-9],[-2,-18],[0,-4],[2,-6],[3,-6],[3,-8],[4,-22],[0,-12],[4,-14],[0,-7],[2,-16],[0,-12],[-1,-8],[2,-4],[1,3],[0,5],[0,8],[1,4],[1,-1],[1,-3],[0,-4],[1,-3],[0,-4],[-2,-16],[1,-7],[2,-11],[-3,-13],[-3,-30],[0,-5],[1,-2],[1,-1],[1,4],[1,0],[1,-2],[-2,-14],[-1,-6],[-5,-15],[-3,-7],[-5,-6],[-10,-10],[-22,-14],[-8,-7],[-5,-4],[-11,-13],[-5,-9],[-2,-10],[-1,-5],[-2,-6],[1,-5],[2,-4],[2,-2],[1,-3],[1,-1],[1,8],[1,2],[1,0],[-1,-9],[-1,-34],[0,-1]],[[5962,4492],[-1,1],[-1,1],[-1,0],[0,-2],[1,-3],[1,0],[1,3]],[[5964,4486],[1,2],[0,1],[0,2],[-1,1],[-1,0],[-1,-2],[0,-3],[1,-1],[1,0]],[[4545,6319],[-2,-6],[-1,2],[0,4],[1,5],[1,3],[2,1],[-1,-9]],[[4658,6037],[-3,4],[-2,5],[-2,4],[-3,3],[-2,2],[-1,4],[-1,2],[-2,1],[0,1],[1,1],[-1,3],[-2,7],[-1,3],[-2,-1],[-1,1],[0,2],[0,2],[-2,2],[-1,0],[-2,5],[-1,9],[-1,7],[-2,5],[-1,2],[-1,0],[0,1],[-1,1],[-1,1],[-2,-2],[-2,1],[0,2],[-2,0],[-1,-2],[-2,1],[-1,3],[-1,3],[-1,3],[-3,6],[-6,10],[-6,4],[-7,0],[-4,0],[-1,1],[-1,0],[-1,-1],[-1,-1],[-1,1],[0,-3],[-3,-1],[-5,0],[-3,-2],[-3,-2],[-4,-2],[-6,1],[-3,1],[-1,1],[-2,1],[-2,-1],[-1,-5],[-2,-8],[-1,-5],[-1,-1],[-1,-6],[-1,-10],[-1,-5]],[[4540,6096],[0,26],[2,10],[0,8],[3,19],[4,15],[4,20],[1,20],[0,19],[-1,18],[-2,11],[-2,16],[-2,9],[-5,8],[-1,4],[1,2],[3,1],[2,6],[-4,-3],[4,19],[2,12],[-1,8],[1,5],[-3,11],[-3,13],[-1,2],[-2,2],[0,-4],[-1,-2],[-1,1],[-3,10],[-4,16],[-2,2],[-1,-2],[-1,-2],[-1,-14]],[[4526,6382],[0,6],[0,6],[1,8],[1,10],[4,0],[6,0],[7,0],[6,0],[6,0],[7,0],[6,0],[6,0],[7,0],[6,0],[7,0],[6,1],[6,0],[7,0],[6,0],[6,0],[7,0],[4,0],[0,7],[0,6],[-1,8],[0,9],[0,8],[-1,7],[0,8],[0,7],[0,7],[-1,3],[-1,8],[0,3],[0,4],[1,4],[3,7],[3,5],[5,6],[3,4],[2,1],[5,2],[4,3],[4,4],[2,1],[0,7],[0,7],[0,8],[0,7],[0,8],[0,8],[0,8],[0,8],[0,8],[0,7],[0,8],[0,8],[0,8],[0,8],[0,8],[0,8],[0,7],[0,8],[0,7],[4,0],[5,0],[5,0],[5,0],[6,0],[5,0],[5,0],[5,0],[5,0],[5,0],[6,0],[5,0],[5,0],[5,0],[5,0],[6,0],[5,0],[5,0],[0,7],[0,9],[0,13],[0,13],[0,11],[0,12],[0,9]],[[3273,6148],[0,-3],[-2,1],[0,3],[1,3],[1,0],[0,-4]],[[6601,4004],[-4,-2],[-4,1],[-1,3],[0,1],[1,1],[0,4],[0,7],[1,2],[2,3],[1,5],[2,3],[2,0],[2,-6],[2,-6],[-1,-7],[-1,-2],[-1,-4],[-1,-3]],[[5922,4377],[-2,4],[-1,-1],[-2,-3],[-1,-1],[0,1],[-1,2],[-1,5],[-2,4],[-1,1],[-1,2],[0,2],[1,1],[-1,1],[0,2],[-3,3],[0,1],[2,2],[2,3],[1,3],[1,5],[1,6],[1,2],[0,4],[0,4],[1,6],[0,5],[-1,2],[0,3],[0,6],[2,4],[6,5],[4,3],[1,2],[2,3],[0,4],[0,1],[-4,0],[0,1],[-3,11],[1,13],[1,5],[0,6],[-1,5],[-1,2],[-1,2],[1,7],[1,1],[2,9],[1,5],[-2,4],[-1,6],[0,4],[-1,1],[1,3],[2,2],[1,1],[2,1],[5,11],[0,2],[-1,4],[-2,5],[0,3],[0,6],[-1,2],[-3,5],[-2,5],[0,4],[1,6],[-1,3],[-2,3],[-1,4],[0,3],[-2,2],[-1,0],[-1,-2],[-1,0],[-1,1],[0,2],[0,3],[-1,3],[-1,2],[0,2]],[[5914,4642],[1,1],[5,-6],[2,0],[3,-1],[3,-6],[1,0],[2,0],[4,1],[2,-1],[3,-3],[1,0],[1,0],[1,1],[0,1],[-1,4],[1,2],[1,2],[2,-3],[7,-11],[0,-1],[4,-11],[1,-5],[0,-2],[2,-10],[0,-5],[0,-3],[0,-3],[0,-4],[0,-1],[2,-6],[0,-5],[0,-5],[0,-4],[-1,-7],[-1,-3],[1,-2],[1,-3],[1,-3],[1,-4],[1,-4],[0,-1],[1,0],[1,-1],[2,-2],[1,-4],[0,-5],[1,-2]],[[8093,5323],[-1,-1],[-1,2],[0,18],[1,1],[1,-3],[0,-8],[0,-7],[0,-2]],[[7894,5341],[-1,0],[-1,0],[0,2],[1,5],[0,1],[1,-5],[0,-3]],[[7814,5356],[-2,-1],[0,1],[0,2],[1,2],[1,-1],[0,-3]],[[8267,5424],[1,2],[0,3],[1,0],[1,0],[4,-4]],[[7785,5489],[-1,-2],[-2,1],[1,10],[1,1],[2,-2],[0,-2],[-1,-6]],[[7773,5556],[2,-6],[-1,-3],[-1,0],[-1,0],[-1,-2],[-1,0],[-1,4],[-2,2],[0,2],[2,1],[1,-1],[2,2],[1,1]],[[7835,5543],[5,-2],[2,-2],[5,-18],[8,-12],[3,-5],[2,-2],[3,-7],[3,-8],[6,-24],[1,-10],[0,-16],[-1,-24],[-2,-12],[1,-6],[2,-8],[-1,-9],[1,-6],[0,-19],[1,-6],[1,-3],[8,-12],[0,-4],[4,-14],[7,-31],[2,-14],[0,-4],[-1,-1],[-2,-2],[-2,3],[0,2],[0,3],[-1,2],[-1,3],[-1,2],[0,-4],[0,-5],[-2,-1],[-3,2],[-3,-2],[-4,-6],[-2,-1],[-2,6],[-1,4],[-1,3],[-13,14],[-4,4],[-5,10],[-11,12],[-8,12],[-3,7],[-7,6],[-3,8],[-1,1],[-2,3],[2,7],[-1,8],[-1,6],[-5,13],[-3,9],[-4,8],[-2,5],[-2,6],[1,2],[1,2],[-1,4],[-3,7],[-1,9],[0,16],[-4,22],[-3,32],[0,11],[0,11],[-3,12],[-3,8],[-1,7]],[[7780,5555],[1,3],[0,8],[1,2],[1,1],[1,0],[3,-8],[6,-5],[1,-1],[3,2],[1,-1],[1,-2],[1,-6],[1,-4],[3,0],[2,0],[0,-1],[1,-4],[0,-8],[0,-4],[-2,-6],[-1,-5],[1,-2],[2,-3],[1,-3],[1,1],[1,1],[1,4],[1,3],[4,4],[4,3],[1,0],[0,-2],[2,-4],[1,-1],[1,-1],[2,1],[2,2],[1,5],[1,4],[3,7],[0,5],[1,3]],[[8044,5301],[2,-8],[1,-2],[4,-6],[3,-2],[4,-1],[4,-1],[1,1],[1,1],[2,-1],[8,-9],[2,-2],[4,1],[1,-1],[4,-7],[2,0],[2,0],[-3,3],[-2,2],[-1,5],[1,4],[2,3],[1,3],[0,9],[1,5],[1,5],[1,4],[-2,3],[0,6],[0,5],[1,3],[2,-2],[1,-2],[2,0],[1,1],[0,2],[0,5],[0,8],[2,6],[3,4],[3,2],[11,4],[17,9],[5,3],[2,2],[1,2],[3,8],[5,13],[3,10],[8,15],[6,14],[1,3],[1,7],[0,4],[-1,4],[1,1],[1,1],[1,0]],[[8198,5466],[6,2],[2,2],[2,5],[1,2],[1,6],[-3,3],[-2,5],[0,5],[4,8],[1,3],[1,-4],[2,0],[1,-1],[2,1],[2,4],[1,7],[4,9],[1,7],[1,7],[10,22],[1,4],[6,23],[1,0],[2,-2],[0,-7],[0,-3],[-1,-5],[-1,-5],[1,0],[3,3],[3,8],[1,7],[2,3],[3,-1],[0,-2],[0,-5],[0,-2],[1,-7],[3,-3],[3,-3],[3,-3],[1,-2],[1,-3],[0,-4],[1,-5],[-3,-4],[1,-7],[0,-5],[-1,-3],[-3,-3],[9,3],[2,2],[3,4],[2,-4],[1,-7],[-1,-1],[-4,-3],[0,-1],[1,-4],[2,1],[3,2],[3,4],[1,0],[2,-1],[3,-2],[1,-2],[2,-3],[0,-5],[4,-2],[7,-7],[1,-1],[1,0],[4,1],[1,-1],[1,-3],[0,-3],[0,-4],[0,-3],[-1,-2],[-3,-3],[-6,-5],[-6,-3],[-4,0],[-4,3],[-2,-1],[-2,-1],[-2,-9],[4,-9],[7,-10],[0,-2],[0,-3],[-1,-2],[-1,-1],[-4,-1],[-4,-2],[-3,-1],[-3,-2],[-3,0],[-4,5],[-1,0],[-2,-2],[-1,-6],[-1,-2]],[[8253,5597],[-2,-3],[0,3],[0,5],[2,4],[4,1],[0,-3],[0,-4],[-1,-2],[-3,-1]],[[5649,4168],[6,2],[6,2],[6,3],[5,1],[2,1],[12,-2],[6,-2],[2,-1],[2,-4],[5,-9]],[[5554,3757],[0,-24],[0,-26],[0,-26],[0,-25],[0,-26],[0,-26],[0,-25],[0,-26],[0,-8],[-2,0],[-6,-3],[-4,-4],[-1,-5],[-2,-3],[-3,-1],[-1,-3],[0,-4],[-1,-3],[-2,-2],[-4,1],[-5,3],[-7,1],[-8,-2],[-6,1],[-3,3],[-4,2],[-4,1],[-2,1],[-5,3],[-1,4],[0,4],[-2,3],[0,3],[1,2],[0,4],[0,5],[-2,2],[-1,0],[-2,2],[0,3],[-1,3],[-3,3],[-3,-2],[-2,-3],[-1,-6],[-1,-2],[0,-5],[0,-3],[-1,-3],[-1,-1],[-1,0],[-2,-1],[-4,-5],[-1,-3]],[[5456,3535],[-3,5],[-9,18],[-3,4],[-5,11],[-10,33],[-2,7],[-2,16],[-2,12],[0,7],[1,4],[-1,5],[-1,5],[-4,6],[-1,21],[-2,13],[0,11],[-1,10],[0,7],[1,12],[-2,14],[-4,14],[-4,20],[0,9],[0,23],[-1,10],[1,11],[-2,12],[0,6],[1,5],[0,-2],[1,0],[1,6],[0,6],[-2,15],[-4,15],[-9,24],[-3,9],[-1,8],[-11,32],[-5,23],[-3,19],[-3,9],[-16,64],[-4,10],[-7,12],[-1,4],[-3,11],[-4,16],[-2,14],[0,17],[1,12]],[[9653,3881],[-1,-2],[-1,0],[-1,1],[0,1],[0,4],[3,-2],[0,-2]],[[9666,3949],[1,-1],[3,1],[-1,-10],[-3,-2],[-1,0],[-1,2],[-2,2],[0,3],[-1,8],[3,1],[1,2],[0,-2],[1,-2],[0,-2]],[[9649,3965],[-1,0],[-2,4],[-4,2],[-2,3],[-1,5],[2,1],[2,6],[-1,2],[-3,0],[0,2],[5,3],[1,-2],[1,-1],[0,-10],[2,-2],[2,-7],[0,-2],[-1,-4]],[[9625,3992],[-1,-1],[2,5],[0,4],[0,6],[0,2],[2,0],[1,-2],[-2,-2],[0,-2],[0,-4],[0,-1],[0,-3],[-2,-2]],[[9560,4018],[3,-4],[4,2],[4,-6],[11,-17],[3,-4],[3,-1],[1,-3],[2,-4],[2,-3],[1,-3],[0,-3],[1,-2],[4,-6],[2,-5],[3,-3],[1,-3],[2,-1],[2,-3],[3,-3],[7,-8],[5,-9],[2,-5],[3,-5],[4,-3],[3,-5],[2,-9],[-1,-4],[-2,-2],[-2,0],[-1,-1],[-6,6],[-1,1],[-2,0],[-1,1],[0,2],[-4,3],[-3,3],[-1,3],[0,3],[-1,2],[-5,3],[-3,3],[-2,4],[-3,4],[-6,6],[-2,2],[-3,3],[-6,11],[-3,3],[-2,5],[-5,12],[-3,5],[-3,4],[-2,5],[-2,6],[-4,9],[0,4],[0,4],[-1,2],[-2,2],[0,2],[0,4],[0,2],[4,-6]],[[9442,4071],[0,-1],[0,9],[0,4],[1,-7],[-1,-5]],[[5416,6508],[3,-33],[2,-29],[0,-18],[0,-4],[1,-4],[2,-3],[9,-26],[-2,-5],[1,-8],[3,-4],[7,-15],[1,-3],[-1,-3],[-5,-18],[0,-5],[-1,-23],[-1,-17],[-1,-23],[-1,-27],[-1,-23],[-2,-30],[-1,-29],[-7,-16],[-13,-28],[-10,-23],[-6,-15],[-10,-30],[-5,-19],[-3,-11],[-2,-4],[2,-14],[2,-25]],[[5377,5973],[-5,0],[-2,-2],[-4,-5],[-4,-3],[-5,-5],[-3,-4],[-3,-3],[-4,-7],[-1,-6],[-4,-1],[-6,1],[-3,6],[-9,6],[-5,2],[-3,1],[-12,1],[-14,-2],[-6,-3],[-2,-1],[-3,-4],[-4,-4],[-8,-18],[-12,0],[-7,2],[-5,3],[-9,9],[-10,13],[-4,2],[-3,1],[-1,0],[-12,-13],[-2,0],[-3,-1],[-2,-4],[-1,-1],[-2,-1],[-2,1],[-2,2],[-2,4],[-4,15],[-1,2],[-3,5],[-3,6],[-3,4],[-1,0],[-2,0],[-9,6],[-10,6],[-2,-1],[-2,-1],[-3,-5],[-4,-1],[-5,1],[-3,0],[-4,-1],[-3,-2],[-4,-3],[-5,-9],[-1,-1],[-1,-1],[-2,-23],[-1,-7],[-3,-9],[-5,-9],[-3,-5],[0,-8],[-1,-11],[0,-8],[1,-6],[-1,-2],[0,-3],[0,-3],[1,-2],[0,-2],[0,-1],[-2,-3]],[[9664,3512],[1,0],[0,-1],[0,-1],[0,-1],[0,-1],[-1,1],[-1,0],[0,1],[0,1],[1,0],[0,1],[-1,0],[0,1],[1,-1]],[[5202,5438],[-2,-1],[-2,0],[2,8],[1,-2],[2,-1],[-1,-4]],[[5377,5973],[5,-12],[4,-14],[4,-10]],[[5237,5458],[-1,-2],[-2,1],[-1,4],[-2,1],[-2,5],[-1,-1],[3,-14],[-1,-6],[-8,0],[-6,-2],[-4,0],[-2,3],[-1,5],[-1,-1],[0,-3],[-1,-2],[-5,0],[-2,3],[-2,5],[-2,1],[0,-1],[2,-4],[0,-6],[-4,-7],[-2,0],[-2,3],[-1,4],[0,7],[-1,5],[-1,0],[1,-4],[0,-4],[0,-7],[2,-5],[-3,-2],[-1,0],[-2,0],[-1,2],[0,4],[-1,2],[0,-8],[-2,-1],[-1,0],[-5,-1],[-1,0],[0,1],[1,3],[0,3],[-2,-3],[0,-5],[-1,-1],[-3,1],[-3,3],[-1,3],[-3,3],[-6,11],[-1,5],[-2,7],[-1,6],[-2,10],[1,1],[1,-1],[1,2],[-3,1],[0,1],[-1,4],[1,4],[2,2],[1,1],[1,2],[1,3],[-5,-4],[-4,5],[-1,3],[0,2],[2,0],[3,0],[2,2],[-1,1],[-2,0],[-1,1],[0,4],[0,-1],[-1,-3],[-3,-2],[-1,2],[-1,5],[0,2],[-1,2],[-5,13],[-7,11],[-5,7],[-9,4],[-18,0],[-1,1],[1,2],[2,1],[6,6],[-1,1],[-6,-4],[-2,0],[-3,-8],[-15,-1],[-2,0]],[[2690,6047],[-1,-2],[-1,-1],[-2,-7],[0,-1],[0,5],[-1,1],[-2,-2],[0,-2],[1,-4],[1,0],[1,-1],[3,-23],[-1,-4],[-2,-7],[-1,-6],[-2,-3],[-3,-15],[-2,-24],[2,-22],[-1,-20],[1,-4],[0,-6],[-2,-1],[-1,3],[0,4],[1,3],[0,5],[0,3],[-1,-6],[-2,-2],[-1,-1],[-1,-3],[1,-6],[2,-4],[0,-2],[0,-4],[-1,-12],[0,1],[-1,1],[-1,0],[0,-4],[0,-3],[-1,-2],[-1,-2],[1,-1],[1,-1],[2,0],[1,-6],[0,-5],[-3,-4],[0,-4],[-2,-4],[-1,-4],[0,-3],[1,-10],[2,-7],[1,-4],[2,-1]],[[2618,5821],[0,1],[-2,7],[-4,7],[-14,24],[-5,14],[-3,10],[-3,5],[-7,11],[-2,4],[-8,15],[-5,8],[-1,4],[3,4],[1,0],[1,-3],[2,-4],[1,0],[2,2],[0,1]],[[283,4085],[-3,-4],[-1,4],[1,5],[2,1],[1,-4],[0,-2]],[[3105,5883],[-1,-6],[-1,3],[0,5],[-1,2],[-1,1],[-1,2],[1,2],[4,-4],[0,-5]],[[3251,6192],[0,-2],[-1,0],[0,2],[0,2],[0,-1],[1,-1]],[[5093,8143],[2,1],[4,0],[4,-1],[4,-1],[4,2],[3,-2],[3,2]],[[5109,8164],[3,-3],[0,-1],[1,-1],[-4,-2],[-3,4],[-3,-1],[-1,2],[0,1],[3,1],[4,0]],[[5135,8241],[-3,-4],[-1,1],[-1,1],[1,3],[4,5],[0,-6]],[[5141,8254],[-5,-4],[0,1],[3,3],[2,0]],[[5117,8144],[-3,0],[-3,3],[-5,-2],[-4,2],[-3,0],[-2,2],[-2,3],[2,3],[1,0],[5,1],[4,-2],[8,-6],[1,0],[2,0],[-1,2],[-2,1],[-2,2],[-2,3],[5,0],[-1,2],[-1,2],[-5,8],[1,2],[1,5],[2,4],[1,1],[2,2],[5,8],[3,7],[2,7],[3,22],[1,3],[2,4],[2,-1],[1,-1],[5,3],[8,8],[3,7],[2,3],[10,6],[5,2],[8,0],[6,2],[7,0],[2,-4],[2,-3],[3,-1],[3,-1]],[[5166,8107],[-5,0],[-2,0],[-1,1]],[[5147,8259],[-2,-1],[-1,1],[6,2],[4,1],[1,0],[-8,-3]],[[5164,8263],[-5,-1],[-2,1],[1,1],[5,0],[1,-1]],[[5175,8266],[-3,-2],[-1,0],[0,1],[3,1],[1,0]],[[5187,8270],[-3,0],[1,1],[2,2],[1,0],[-1,-3]],[[5141,8657],[0,-6],[-3,0],[-1,3],[0,1],[0,4],[-1,4],[1,2],[1,1],[2,-4],[1,-5]],[[5137,8702],[-2,-1],[-2,1],[1,6],[1,0],[1,1],[2,-3],[-1,-4]],[[5225,8832],[-3,0],[-3,1],[-2,2],[-1,1],[4,2],[4,2],[1,-3],[1,-3],[-1,-2]],[[5235,8851],[-3,0],[-2,1],[4,3],[7,2],[1,2],[1,0],[1,-2],[0,-3],[0,-1],[-9,-2]],[[5311,8920],[-1,-2],[-3,2],[-7,-1],[-2,1],[2,3],[6,3],[3,0],[3,-4],[-1,-2]],[[5332,8964],[-2,-2],[-3,1],[-1,1],[1,3],[2,1],[3,0],[1,-1],[-1,-3]],[[5347,8980],[-2,-1],[0,3],[1,2],[2,1],[3,1],[3,0],[0,-1],[-1,-2],[-6,-3]],[[5344,8988],[-2,-1],[0,3],[2,2],[1,2],[1,2],[1,1],[3,-1],[0,-4],[-1,-3],[-5,-1]],[[5360,9093],[-4,-3],[1,6],[2,5],[3,4],[2,-2],[-1,-2],[0,-3],[0,-1],[-3,-4]],[[5385,9116],[1,-1],[5,0],[1,0],[-1,-2],[-2,-2],[-4,-1],[-2,-3],[-1,0],[-3,0],[-2,-1],[-3,-3],[-2,2],[0,-1],[-1,-2],[-1,-1],[-3,-1],[-1,6],[2,1],[1,3],[2,0],[1,0],[4,5],[4,1],[2,0],[3,0]],[[5422,9155],[3,-6],[2,-3],[-1,-7],[-4,-3],[-5,-1],[-4,1],[-2,1],[-1,2],[-1,0],[-4,-2],[-2,0],[-3,2],[-1,2],[3,4],[2,3],[4,-1],[3,-1],[1,3],[0,3],[1,1],[4,-1],[0,6],[2,1],[1,-1],[1,-1],[1,-2]],[[5437,9133],[1,-1],[3,6],[5,2],[0,2],[1,1],[0,4],[1,2],[2,1],[2,1],[1,0],[3,-2],[1,-2],[2,-5],[-1,-5],[-5,-4],[-4,-1],[-4,-5],[-2,-3],[-2,-1],[-1,0],[-1,1],[-2,0],[-2,-3],[-7,-2],[-2,0],[-1,3],[-1,0],[-3,-4],[-2,-1],[-2,0],[-3,1],[-8,-6],[-8,-1],[-2,0],[-1,4],[6,5],[4,4],[14,2],[9,10],[2,11],[2,4],[-1,2],[-3,0],[0,4],[2,4],[4,5],[3,2],[4,6],[2,1],[2,0],[3,-1],[-1,-3],[-3,-6],[-5,-6],[0,-3],[2,-3],[1,-5],[0,-5],[-4,-7],[-1,-3]],[[5486,9192],[3,-3],[1,1],[3,1],[3,-2],[1,-2],[3,0],[1,-3],[1,-3],[-2,-3],[-2,-1],[-1,-3],[1,-4],[-5,-2],[-6,-1],[-2,2],[-4,-3],[-5,-6],[-2,-1],[0,2],[-3,1],[-5,0],[1,2],[0,1],[4,1],[1,3],[-1,5],[1,3],[0,2],[2,2],[8,-1],[1,2],[-1,1],[-4,3],[1,1],[3,1],[2,1],[1,2],[0,1],[1,0]],[[5832,9204],[-6,-2],[0,2],[1,2],[1,4],[2,0],[3,-2],[1,-2],[-2,-2]],[[5577,9221],[-2,-1],[-2,-1],[-1,1],[-2,0],[-2,0],[-2,3],[0,2],[3,2],[4,2],[4,-1],[1,0],[-1,-7]],[[5534,9220],[3,-4],[2,1],[1,1],[1,0],[3,-1],[0,-3],[-4,-4],[-3,-5],[-4,-1],[-2,1],[-4,-3],[-2,-3],[-3,-4],[0,-2],[-1,-2],[-10,-1],[-4,-1],[-4,1],[-2,3],[1,1],[4,1],[0,2],[1,2],[1,0],[1,3],[2,1],[3,-1],[2,3],[1,0],[1,-2],[1,3],[-1,2],[1,1],[3,4],[2,3],[2,2],[3,0],[0,3],[0,2],[0,2],[2,5],[2,0],[1,-4],[0,-6]],[[5549,9228],[1,-1],[1,1],[2,-1],[2,-3],[2,-1],[0,-1],[-2,-2],[-3,0],[-3,0],[-1,2],[-1,3],[-3,3],[0,3],[2,0],[3,-3]],[[5655,9247],[1,-2],[0,-3],[-2,-3],[-6,-4],[0,-1],[-2,-1],[-3,-1],[-2,1],[0,3],[0,1],[-3,-1],[-2,2],[0,2],[1,1],[2,3],[4,1],[2,0],[9,6],[0,-1],[1,-3]],[[5667,9248],[-6,-2],[-3,2],[-1,2],[0,5],[0,2],[3,2],[2,-1],[0,-1],[3,-1],[3,-3],[-1,-5]],[[5651,9263],[-1,-2],[-1,-2],[-2,-2],[-7,-7],[-4,-1],[-1,-1],[-1,-1],[-5,1],[-2,-2],[-1,-1],[-3,0],[-2,0],[-6,3],[-3,3],[-2,3],[5,-1],[2,1],[3,0],[2,2],[4,0],[8,2],[3,-1],[7,6],[2,0],[3,1],[2,-1]],[[5857,9203],[1,-7],[0,-3],[0,-3],[-1,-1],[-2,0],[-5,0],[-7,3],[-4,3],[-1,0],[-1,-1],[1,-2],[0,-3],[-1,-2],[-1,-2],[-1,-2],[-2,-2],[-5,-2],[-12,-4],[-1,-1],[-4,-10],[-1,-2],[-2,-1],[-4,-2]],[[5572,9160],[-3,0],[-11,-1],[5,-5],[1,-2],[1,-3],[-1,-5],[-2,-5],[-3,-4],[-5,-3],[8,-4],[-5,-5],[-3,-2],[-3,0],[-5,2],[-12,4],[-5,2],[-5,0],[-3,0],[-11,4],[-2,-1],[-4,-1],[0,-4],[0,-8],[0,-7],[-1,-4],[-2,-2],[-4,-8],[-10,5],[-6,3],[-5,-4],[-10,-8],[-6,-15],[-3,-4],[-5,-2],[-3,-1],[-2,-5],[5,-6],[2,-4],[2,-5],[0,-4],[-1,-2],[-4,-4],[-10,-12],[-9,-13],[-4,-3],[2,-11],[-3,-3],[-7,-4],[-3,-1],[-3,-1],[-11,-1],[2,-12],[1,-5],[0,-3],[-1,-3],[-1,-5],[-2,-20],[-2,-2],[-2,-5],[-6,-13],[-6,-9],[-7,-12],[6,-4],[6,-3],[1,-5],[0,-7],[0,-5],[-2,-4],[-2,-4],[-1,-1],[-8,1],[-10,2],[-3,0],[-6,-1],[-5,-3],[-3,-2],[-1,-1],[-3,-6],[-7,-10],[-3,-4],[1,-6],[-6,-12],[4,-11],[0,-1],[2,-4],[-2,-4],[-1,-1],[0,-6],[1,-6],[-1,-3],[0,-4],[5,-18],[0,-4],[0,-2],[-2,-11],[-2,-15],[4,-4],[5,-5],[3,-2],[5,-5],[3,-5],[0,-4],[-1,-4],[-2,-3],[-1,-3],[-1,-3],[0,-1],[-6,0],[-3,-1],[-2,-2],[1,-6],[3,-12],[3,-8],[1,-5],[-1,-6],[-1,-3],[0,-4],[-1,-7],[-2,-4],[-3,-4],[-3,-3],[-3,-1],[-3,-1],[-1,-1],[-1,-5],[-2,-5],[-4,-6],[0,-2],[2,-7],[1,-8],[-1,-8],[-1,-8],[-2,-5],[-3,-2],[-2,1],[-2,7]],[[5316,8584],[0,2],[-1,2],[-6,2],[-1,0],[-3,2],[-1,0],[-4,1],[-2,6],[-3,6],[0,2],[0,10],[-1,4],[0,5],[-2,-4],[1,-6],[-2,-3],[-3,-1],[1,-4],[1,0],[0,-4],[-1,-6],[-5,-12],[-1,-2],[-1,-1],[-2,1],[-4,-4],[-3,0],[-1,4],[-5,5],[-2,0],[2,-3],[2,-3],[-1,-3],[-1,-1],[-2,-1],[-7,-4],[2,-3],[-2,-3],[-2,-1],[-1,-1],[-1,-3],[-7,-6],[-11,-15],[-6,-5],[-4,-4],[-3,0],[-5,-4],[-11,-3],[-8,1],[-5,-1],[-3,3],[0,1],[0,1],[0,2],[-3,0],[0,-1],[-1,-3],[-1,-1],[-3,2],[-1,2],[1,3],[2,2],[0,1],[-1,2],[-1,0],[-3,-1],[-3,1],[-9,6],[-2,3],[-8,6],[-3,5],[-2,6],[0,6],[1,9],[1,2],[7,-3],[7,-5],[1,0],[2,4],[4,3],[-1,1],[-6,-4],[-2,2],[-4,5],[0,2],[2,2],[0,3],[-1,3],[1,3],[3,4],[4,4],[3,4],[3,3],[-1,0],[-3,-1],[-3,-3],[-4,-4],[-5,-4],[-4,-1],[-1,-1],[-3,-1],[-3,-5],[-3,-2],[-5,-1],[-1,4],[2,13],[1,7],[2,4],[3,1],[2,3],[1,0],[1,-1],[6,-2],[2,4],[4,1],[6,4],[0,1],[-4,-1],[-3,0],[-3,-1],[-2,1],[-1,3],[1,3],[6,7],[2,3],[1,2],[0,2],[1,4],[6,7],[5,3],[1,-3],[-1,-8],[0,-3],[4,12],[1,3],[2,2],[5,1],[1,2],[-5,0],[-13,-5],[-6,-4],[-1,-4],[-4,-4],[-2,-4],[0,-4],[-2,-3],[-3,-1],[-4,-6],[-2,-4],[-4,-4],[-2,-3],[-1,-1],[-1,-3],[-2,0],[-1,2],[0,3],[1,6],[2,4],[0,4],[-1,4],[1,3],[2,0],[3,-1],[3,0],[6,3],[-1,2],[-3,0],[-4,0],[-4,3],[-3,5],[-1,8],[1,3],[11,8],[2,3],[-1,1],[-4,-5],[-6,-2],[-3,3],[-2,4],[-1,9],[0,5],[0,6],[2,1],[3,-1],[2,0],[6,1],[14,3],[8,-2],[4,0],[5,3],[5,1],[3,-3],[2,-2],[0,-4],[2,-2],[1,0],[-1,3],[0,5],[14,5],[2,1],[-6,1],[-1,5],[2,6],[0,1],[-3,-3],[-1,-5],[0,-4],[0,-2],[-3,-1],[-7,0],[-4,1],[-4,1],[-1,1],[1,3],[-1,1],[-2,-3],[-1,-5],[-3,-1],[-9,2],[-12,-1],[-5,-3],[-4,1],[-6,4],[-2,4],[-1,7],[0,3],[5,2],[3,0],[2,1],[-2,1],[-3,3],[-2,4],[-3,1],[-2,4],[0,6],[0,4],[2,1],[4,-1],[9,1],[9,-4],[7,-2],[12,1],[7,3],[-1,1],[-8,-2],[-7,0],[-13,4],[-5,2],[-6,-1],[-3,1],[-2,4],[1,8],[3,2],[2,-2],[1,0],[2,3],[2,2],[1,4],[5,4],[2,0],[4,2],[2,-1],[1,-1],[1,-2],[4,0],[10,3],[1,1],[2,3],[-6,-1],[-6,-2],[-3,-1],[-1,3],[2,2],[2,2],[1,4],[2,1],[2,0],[5,1],[4,1],[6,-1],[9,-1],[6,-4],[2,0],[2,1],[1,2],[-4,1],[-1,2],[1,2],[7,2],[8,1],[-1,2],[-18,-3],[-4,2],[-4,0],[-2,-1],[-7,-2],[-1,1],[1,4],[4,7],[0,1],[2,2],[11,4],[5,4],[2,1],[2,-1],[4,1],[6,-1],[4,-6],[2,-1],[9,-7],[0,2],[-8,9],[-3,2],[-2,5],[1,4],[2,3],[9,2],[1,1],[1,3],[-2,2],[-3,0],[-3,1],[0,3],[1,2],[5,4],[2,1],[5,2],[8,-3],[1,-2],[-2,-4],[0,-2],[2,0],[4,6],[6,1],[2,2],[3,0],[4,-5],[1,-2],[1,-1],[2,-5],[1,0],[1,2],[3,2],[5,1],[7,-2],[3,1],[1,0],[-1,4],[-1,2],[1,3],[2,2],[5,3],[4,1],[3,2],[4,3],[0,2],[-1,2],[-3,0],[-1,1],[3,3],[5,3],[-1,2],[-3,1],[-3,-1],[-4,-3],[-4,-3],[1,-2],[2,-3],[-3,-4],[-16,-12],[-8,-3],[-4,1],[-1,3],[-1,2],[-2,5],[-3,0],[-2,-1],[-1,1],[2,5],[2,4],[4,3],[3,4],[2,6],[6,5],[9,14],[7,5],[3,4],[5,2],[3,4],[3,1],[6,3],[3,4],[-2,0],[-5,-2],[-3,-1],[0,4],[2,4],[4,4],[18,12],[2,-2],[2,-3],[6,0],[6,7],[5,7],[-2,-1],[-3,-3],[-6,-4],[-3,-1],[-1,1],[-1,3],[-2,0],[-2,0],[-1,2],[-1,5],[3,7],[1,4],[2,4],[8,10],[2,6],[3,3],[5,-1],[1,1],[-1,3],[-5,3],[0,2],[16,5],[8,0],[3,2],[4,2],[3,2],[-1,2],[-8,-3],[-6,-1],[-2,0],[-2,-1],[-6,0],[-2,11],[1,6],[3,0],[0,6],[3,4],[4,1],[2,1],[3,3],[4,-1],[5,1],[-1,1],[-6,2],[-1,4],[2,1],[2,2],[2,0],[4,6],[2,3],[3,-1],[4,3],[3,-1],[4,2],[5,1],[18,1],[0,2],[-4,1],[-13,0],[-6,0],[-3,0],[-1,1],[0,1],[2,2],[1,3],[5,7],[6,4],[4,-1],[5,-4],[4,-1],[1,-1],[2,-6],[2,0],[-1,5],[3,5],[-1,1],[-4,-1],[-4,1],[-3,4],[-1,3],[2,3],[2,1],[-1,2],[-8,-5],[-5,-1],[-2,1],[1,4],[0,4],[6,8],[3,1],[4,-1],[3,-2],[3,0],[3,2],[0,2],[-7,1],[-2,2],[1,1],[5,2],[4,4],[6,1],[4,3],[1,-1],[1,-1],[1,-10],[4,-8],[2,0],[-2,7],[1,2],[2,1],[1,2],[-2,0],[-2,3],[-2,8],[1,2],[5,4],[6,1],[7,-3],[2,0],[4,1],[7,2],[4,1],[2,0],[1,1],[-2,1],[-1,1],[-1,0],[-7,-1],[-17,0],[-2,2],[0,2],[2,4],[2,2],[6,3],[7,0],[8,7],[2,4],[2,7],[4,6],[11,3],[1,2],[-1,2],[0,6],[3,6],[2,2],[1,0],[2,-2],[3,-4],[4,-2],[6,-1],[2,1],[-5,3],[-3,3],[0,3],[1,2],[3,0],[3,0],[3,2],[0,2],[1,2],[0,2],[5,5],[13,3],[1,-1],[0,-10],[-2,-6],[0,-4],[3,4],[3,13],[3,6],[3,3],[2,1],[2,1],[3,2],[1,-2],[1,-3],[-2,-11],[0,-3],[-1,-5],[-7,-10],[1,-2],[1,1],[2,1],[9,10],[7,-1],[0,1],[-3,3],[-2,3],[-1,3],[0,9],[2,4],[6,-1],[4,1],[2,-2],[3,0],[3,7],[5,0],[4,-4],[5,-3],[5,-4],[1,1],[-2,10],[-3,3],[-5,2],[-6,5],[-2,2],[1,1],[5,2],[6,-2],[6,4],[2,-1],[5,1],[2,-2],[2,1],[1,3],[8,2],[4,-2],[3,-2],[1,-4],[2,-7],[3,-5],[2,-2],[3,0],[1,2],[-2,2],[-1,3],[1,6],[2,2],[8,9],[6,4],[4,1],[7,10],[2,2],[2,0],[-1,3],[-3,1],[-1,3],[5,4],[6,6],[3,1],[2,-2],[6,-3],[4,-3],[2,-2],[2,1],[1,2],[2,1],[4,0],[2,-2],[2,0],[1,-1],[1,-2],[-4,-3],[-5,-6],[-6,-6],[-1,-4],[-2,-10],[-4,-6],[-1,-4],[2,-2],[5,2],[6,5],[1,6],[14,17],[7,9],[8,7],[4,2],[2,-5],[-2,-7],[-3,-4],[3,-2],[-1,-5],[-1,-2],[0,-3],[0,-3],[2,1],[9,5],[2,6],[3,4],[1,4],[3,3],[7,0],[0,1],[-8,5],[-1,2],[3,3],[7,6],[4,-1],[2,-1],[9,-1],[7,-4],[0,-6],[-2,-3],[-1,-1],[-9,-5],[-2,-2],[3,-1],[6,2],[2,-2],[-2,-5],[0,-8],[-1,-5],[0,-4],[1,-2],[2,9],[1,2],[3,4],[2,6],[3,8],[4,5],[2,1],[8,0],[3,-2],[3,-3],[2,-2],[7,-2],[2,-2],[0,-1],[2,0],[5,3],[3,0],[4,-4],[-1,-4],[1,-1],[5,0],[5,-1],[9,-7],[1,-4],[0,-4],[-13,-4],[-6,-4],[-9,-2],[-32,3],[1,-3],[22,-7],[1,-2],[-1,-4],[0,-3],[1,-2],[1,-2],[3,-1],[5,1],[3,-2],[2,2],[1,6],[1,1],[3,-2],[2,-6],[1,0],[1,4],[3,0],[4,0],[4,-1]],[[5710,9281],[8,-2],[2,0],[4,-4],[2,1],[-1,-3],[-3,-1],[-6,-1],[-1,0],[-5,0],[-3,3],[-4,1],[0,1],[3,3],[4,2]],[[4751,9264],[-3,0],[-1,1],[4,3],[12,7],[5,6],[9,3],[1,-4],[-1,-4],[-8,-4],[-9,-2],[-9,-6]],[[5533,9469],[-3,-3],[-5,4],[-3,4],[1,2],[9,0],[2,-2],[1,-2],[-2,-3]],[[5600,9711],[3,-2],[9,1],[4,-10],[3,-10],[4,-1],[8,1],[7,1],[4,-1],[6,-3],[3,-2],[-3,-2],[-5,-1],[-1,-6],[6,-2],[9,-5],[6,0],[10,2],[9,-4],[9,-5],[-21,-5],[-2,-2],[-3,-4],[-3,-3],[-3,-2],[-7,-4],[-3,-1],[-8,0],[-3,-1],[-2,-3],[-3,-2],[-7,-1],[-4,3],[2,1],[0,2],[-1,4],[6,4],[2,2],[-1,1],[-2,0],[-5,1],[-1,0],[-4,-3],[-6,-1],[-5,-1],[-23,-3],[-3,1],[-2,6],[9,4],[2,5],[2,3],[3,3],[5,6],[1,0],[-12,5],[-5,3],[-6,6],[-1,5],[-7,4],[1,6],[-6,-1],[-4,4],[4,2],[19,3],[11,2],[5,0]],[[5746,9714],[-4,0],[-8,4],[-1,4],[1,1],[4,0],[6,-5],[6,-1],[-4,-3]],[[5312,9712],[0,-4],[5,0],[5,-4],[6,-2],[2,-2],[1,-2],[3,-4],[2,-4],[-4,-1],[-6,6],[-5,4],[-6,3],[-4,0],[-3,1],[-7,11],[-2,2],[-4,4],[-2,5],[0,3],[6,0],[5,-3],[4,-5],[1,-2],[-2,-2],[2,-3],[3,-1]],[[5806,9729],[9,0],[8,1],[1,-1],[-10,-3],[-12,1],[-11,1],[-13,-4],[-4,2],[7,3],[7,1],[1,2],[2,0],[10,0],[5,-3]],[[5466,9786],[1,0],[2,1],[1,1],[1,1],[7,-1],[10,-3],[3,-2],[4,-3],[3,-5],[-2,-4],[-4,-4],[-1,-2],[1,-3],[0,-3],[-2,-3],[6,3],[11,10],[2,0],[1,0],[6,-2],[4,-5],[1,-1],[1,-2],[1,-3],[-1,-3],[0,-1],[-3,-2],[-1,-1],[3,0],[3,-1],[3,-4],[3,-1],[11,1],[7,-1],[4,-6],[6,1],[0,3],[2,1],[8,0],[4,-2],[4,-3],[-7,-4],[6,-4],[10,-3],[6,-4],[2,-1],[1,-2],[-4,-2],[-5,-2],[-10,0],[-9,-1],[-17,-2],[-3,0],[-1,-1],[-1,-2],[-6,-5],[-7,-6],[-2,-3],[-2,-5],[-1,-3],[1,-3],[0,-3],[-5,-2],[-3,0],[-4,0],[-3,-1],[-1,-2],[1,-3],[-1,-8],[-1,-7],[-2,-6],[-2,-3],[-3,-1],[-8,-1],[-6,-5],[-5,-10],[-3,-4],[-5,-6],[1,-3],[2,-2],[-3,-4],[-5,-5],[0,-2],[2,-3],[0,-4],[-3,-3],[-7,-1],[-6,1],[-3,2],[-3,4],[-4,2],[-3,1],[-13,7],[-11,12],[-11,4],[-7,2],[-3,2],[-4,3],[-3,3],[-2,4],[-2,3],[0,3],[1,2],[1,1],[9,1],[3,0],[3,-2],[3,-1],[6,10],[36,5],[11,1],[12,0],[-2,2],[-2,4],[-1,0],[-9,-1],[-13,-2],[-7,0],[-7,1],[-6,-1],[-7,-3],[-7,-1],[-7,-1],[-14,0],[-4,2],[-4,3],[-2,2],[-1,2],[-1,6],[2,2],[1,1],[1,0],[4,0],[3,-1],[7,-3],[-2,4],[21,4],[10,4],[5,1],[5,0],[-2,2],[0,2],[4,1],[2,1],[8,1],[17,0],[7,1],[4,3],[-5,-1],[-5,-1],[-2,1],[-5,2],[-3,3],[7,7],[3,3],[-7,-1],[-3,-1],[-8,-6],[-6,-2],[-7,-1],[-7,0],[-2,1],[-2,3],[-1,2],[0,2],[3,3],[1,3],[0,3],[-2,0],[-3,-2],[-2,-4],[-3,-2],[-4,0],[-1,2],[-2,2],[-1,1],[-2,0],[-3,-1],[-3,-2],[1,-2],[1,-3],[-2,-2],[-1,-3],[4,-2],[2,-3],[-4,-1],[-4,-2],[-3,-3],[-4,-2],[-5,0],[-7,-1],[-14,-1],[-7,4],[-1,2],[-1,1],[-5,2],[-6,5],[-5,7],[-3,0],[-5,2],[-3,2],[-2,3],[-1,3],[0,2],[3,1],[-7,3],[-7,4],[3,2],[2,0],[20,-4],[2,0],[2,2],[-1,1],[-3,1],[-5,0],[-1,0],[-2,3],[-1,3],[-1,2],[0,2],[3,3],[2,3],[-3,2],[-8,0],[-3,-1],[1,-4],[-2,-3],[-6,-3],[-3,2],[-3,5],[-4,5],[-1,2],[-1,4],[-2,3],[-2,3],[-1,2],[1,2],[2,3],[-2,3],[-2,2],[0,2],[2,2],[2,0],[1,0],[5,-2],[3,-3],[1,1],[2,3],[3,1],[10,1],[11,-4],[3,-2],[2,0],[-1,2],[-1,3],[2,1],[9,-2],[4,0],[10,3],[16,2],[6,-3],[0,-1],[0,-2],[0,-1],[-4,-2],[-20,-1],[-14,-7],[19,1],[3,-1],[1,-5],[2,-1],[4,-1],[3,-1],[4,-3],[3,-2],[2,0],[1,2],[-1,3],[0,3],[0,3],[0,3],[4,2],[6,6],[6,4],[6,-2],[7,-5],[5,-8],[5,-7],[6,-10],[3,-4],[3,-1],[12,-10],[1,0],[-2,8],[-6,13],[-5,10],[-1,4],[0,5],[0,2],[1,1],[3,6],[4,3],[-2,4],[2,3],[4,3],[4,0],[3,-2],[8,-7]],[[5903,9799],[-26,-3],[-3,2],[43,6],[2,1],[8,1],[7,-2],[-2,-1],[-29,-4]],[[5520,9809],[-6,-3],[-10,2],[1,3],[3,1],[6,0],[6,-3]],[[5580,9806],[3,-1],[15,1],[3,-2],[1,-3],[2,-1],[4,-1],[8,-4],[3,0],[2,2],[2,6],[0,6],[-1,4],[1,2],[3,1],[3,-1],[4,2],[2,2],[4,0],[6,-2],[2,-1],[-2,-2],[0,-4],[-3,-8],[6,0],[9,2],[3,2],[5,3],[5,0],[3,0],[1,2],[0,1],[3,0],[4,-3],[2,-1],[4,1],[1,0],[3,-1],[16,-3],[5,-1],[3,-1],[2,-1],[17,0],[12,-1],[4,-2],[4,-4],[1,-9],[-3,-2],[-24,-11],[-6,-3],[-3,-4],[-5,-7],[-2,-2],[-11,-3],[-3,0],[-8,1],[-3,0],[-10,-4],[-4,-2],[-3,-3],[-5,-1],[-6,1],[-23,1],[-4,2],[-2,4],[5,5],[-27,-2],[-29,1],[-2,1],[-1,2],[-10,1],[-7,1],[-7,3],[-6,3],[2,2],[2,1],[5,0],[5,-1],[9,1],[2,3],[3,1],[3,2],[-9,2],[-10,0],[-6,-2],[-7,-1],[-7,0],[-12,0],[-6,2],[-9,4],[-3,2],[-1,1],[0,3],[9,2],[4,1],[3,3],[-14,1],[-6,2],[-6,3],[5,2],[19,1],[5,-1],[5,-2],[6,-2],[5,3],[-5,1],[-4,5],[-1,2],[0,2],[3,0],[1,-1],[7,-4],[5,-1],[2,4],[0,1],[-1,2],[-3,3],[-2,3],[4,1],[3,0],[7,-3],[7,-1],[3,-2],[6,-4],[6,-3]],[[9637,5154],[-1,-2],[-1,2],[1,1],[0,1],[1,-1],[0,-1]],[[9698,2160],[2,-3],[-3,-1],[-1,1],[-1,1],[-1,2],[2,0],[1,1],[1,-1]],[[9616,2260],[1,-5],[-2,0],[-3,1],[-1,3],[-2,-2],[-2,0],[1,3],[4,5],[1,6],[0,2],[3,0],[1,0],[1,-1],[-1,-1],[-1,-2],[0,-3],[0,-2],[-1,-1],[1,-2],[0,-1]],[[9670,2485],[0,-3],[-3,1],[0,-2],[2,-2],[1,-2],[2,1],[1,-3],[-1,-2],[-1,-2],[-5,-1],[-3,-4],[-3,1],[-3,-4],[-4,-2],[-1,1],[1,3],[2,3],[0,4],[1,2],[3,2],[0,3],[1,3],[-1,6],[1,6],[4,0],[6,-9]],[[9631,2554],[0,-3],[-1,-1],[-1,0],[-1,0],[-1,1],[-1,0],[-1,1],[1,3],[3,1],[1,-1],[1,-1]],[[9637,2582],[2,-7],[-3,1],[-1,2],[2,3],[0,1]],[[106,2631],[-1,-1],[0,4],[0,2],[2,1],[1,-3],[-2,-3]],[[106,2664],[-1,-1],[-2,0],[-2,-6],[0,5],[-1,1],[-3,0],[0,-1],[1,-1],[1,-1],[-2,-2],[2,-6],[1,0],[2,-4],[0,-1],[-3,-2],[-2,-2],[-2,0],[-1,0],[0,4],[0,2],[1,3],[2,3],[-1,3],[-3,2],[-4,-1],[-1,1],[2,3],[3,0],[2,3],[11,-2]],[[9830,2830],[-4,-3],[0,2],[1,5],[2,3],[1,0],[1,2],[0,-4],[-1,-5]],[[9808,2806],[3,0],[3,4],[3,4],[3,2],[5,7],[1,1],[4,1],[1,2],[1,0],[-1,-4],[-2,-1],[0,-2],[1,-2],[-2,-3],[1,-4],[-2,-4],[2,1],[2,3],[-1,2],[1,4],[2,1],[-1,3],[0,2],[3,-1],[1,0],[1,1],[1,0],[1,-2],[2,0],[-1,-3],[-2,-3],[0,-2],[-3,-3],[-2,-2],[3,0],[4,4],[3,4],[0,-5],[-2,-4],[-2,-3],[-2,-1],[-2,-2],[-1,-3],[0,-3],[1,-2],[2,-3],[-2,-6],[2,0],[1,-1],[2,-3],[-1,-5],[-1,-2],[-4,-9],[-2,-4],[-3,-3],[0,-5],[-1,-3],[-7,-12],[-1,-2],[-6,-19],[-3,-8],[-2,-2],[-2,-2],[-6,-4],[-2,-4],[-2,-4],[-3,-1],[0,-1],[2,-1],[1,-2],[-1,-3],[-2,-2],[-2,0],[-1,-2],[5,1],[1,-1],[1,-3],[0,-2],[1,-4],[4,-2],[4,-1],[0,-1],[1,-6],[-1,-3],[-1,-1],[-1,-1],[-3,0],[-2,1],[-2,3],[-6,-1],[-1,-1],[-1,1],[3,4],[-2,1],[-1,1],[-1,-1],[-1,-2],[0,-3],[-1,-1],[-2,-1],[-2,3],[-2,3],[-3,4],[0,-3],[3,-5],[1,-4],[-3,-2],[-3,-3],[-2,-1],[-3,-2],[-2,-3],[-2,-1],[-4,0],[-2,-1],[0,-5],[-2,-2],[-3,-1],[1,-1],[1,-1],[-3,-13],[0,-5],[0,-9],[-2,-8],[-4,0],[1,-2],[3,-2],[-1,-3],[-3,-7],[-2,-4],[-1,-9],[-2,-8],[-3,-10],[0,-1],[1,-3],[1,-2],[0,-3],[0,-1],[-2,-1],[-1,-1],[-7,-2],[-2,-3],[-2,-5],[-3,-5],[-7,-10],[-4,-8],[-1,-3],[-1,-2],[-10,-3],[-7,-1],[-3,1],[-4,2],[-2,1],[-4,-2],[-1,-1],[-3,1],[-3,-1],[0,1],[-1,3],[0,3],[0,3],[-2,1],[-1,2],[-1,1],[-3,1],[-5,-1],[-2,0],[-3,8],[-1,2],[-4,3],[-1,-1],[-3,-4],[-1,-1],[-7,0],[-8,1],[-3,2],[0,4],[6,10],[-2,-2],[-4,-4],[-2,1],[2,4],[1,2],[-1,3],[-3,-4],[-3,-1],[-1,4],[1,4],[0,1],[9,2],[4,2],[1,2],[-5,1],[-1,3],[1,2],[5,4],[-4,-1],[-3,1],[0,4],[1,3],[4,0],[-2,3],[0,3],[1,0],[4,-4],[3,-2],[-1,3],[0,3],[1,0],[2,1],[0,1],[-3,1],[-2,2],[0,3],[0,3],[2,4],[2,-3],[2,1],[-1,2],[-1,3],[0,2],[6,8],[2,-8],[0,3],[0,2],[0,2],[0,2],[0,2],[3,2],[3,6],[3,2],[2,-2],[1,-2],[0,2],[-1,2],[0,6],[4,8],[5,8],[5,8],[2,3],[6,3],[3,-1],[1,0],[5,6],[2,1],[2,-2],[1,-1],[-1,6],[1,2],[4,5],[6,4],[4,2],[3,3],[2,0],[-1,2],[1,3],[1,-1],[1,1],[-2,2],[5,4],[2,5],[1,1],[2,1],[1,4],[2,1],[1,-1],[1,-1],[0,2],[-2,2],[2,2],[2,2],[2,-1],[2,-2],[-2,3],[0,2],[2,2],[2,0],[2,-4],[-1,3],[1,3],[3,5],[3,7],[1,-2],[1,-3],[-1,-4],[1,1],[0,3],[0,7],[4,11],[1,1],[1,1],[2,0],[-1,2],[-1,2],[1,5],[1,7],[1,6],[2,6],[2,10],[1,3],[4,0],[1,2],[3,4],[3,6],[2,6],[2,14],[2,14],[3,11],[6,8],[5,6],[2,1],[3,1],[3,-2],[-6,-1],[0,-4],[-1,-4],[1,-3],[1,-3],[3,-2],[3,-2],[2,-6],[0,-7],[0,-6],[2,-6]],[[9875,3094],[0,-3],[-2,1],[-1,3],[-2,2],[0,1],[-1,4],[2,3],[0,1],[1,0],[0,-2],[2,-4],[1,-6]],[[9812,3172],[0,-3],[2,2],[1,3],[2,3],[0,-5],[1,-1],[6,-3],[1,-3],[1,-1],[1,1],[1,1],[2,-1],[5,-5],[1,-2],[-1,-3],[1,-2],[0,-2],[2,-1],[2,3],[1,1],[2,-5],[0,-2],[1,-3],[1,-2],[2,-8],[0,-2],[-1,-3],[2,-6],[-1,-1],[-4,1],[0,-1],[3,-5],[2,-7],[1,-4],[6,-14],[-1,-4],[0,-3],[-1,-3],[2,-7],[-1,-2],[-1,-7],[-1,-2],[0,-2],[3,-1],[1,-1],[1,-2],[1,2],[1,1],[2,-3],[6,-4],[1,-1],[1,-3],[1,-6],[1,-3],[2,-1],[2,1],[1,2],[-1,7],[-1,10],[0,4],[0,3],[0,4],[-1,3],[-1,2],[-1,2],[0,3],[2,2],[1,-3],[1,-3],[4,-10],[3,1],[0,-4],[2,-4],[0,-5],[2,-14],[2,-14],[3,-5],[0,-3],[-2,1],[0,-1],[0,-1],[2,-2],[2,-2],[2,0],[1,-1],[9,-8],[4,-4],[11,-5],[3,-1],[2,1],[3,2],[3,3],[3,5],[2,6],[2,3],[3,2],[1,2],[2,2],[7,-1],[2,-3],[4,-2],[1,-2],[0,-4],[-2,-6],[-2,-6],[-1,-14],[-1,-14],[-1,-6],[-3,-4],[-2,-4],[-3,-2],[-1,-7],[-1,-10],[0,-2],[1,-2],[1,-3],[-2,-5],[-1,0],[-1,5],[-1,2],[-4,2],[-4,0],[-3,0],[-3,-2],[-5,-4],[-1,-2],[-1,-3],[-3,-6],[0,-7],[0,-4],[1,-2],[4,-4],[-4,-14],[-4,-14],[-2,-4],[-2,-4],[-2,-9],[-4,-7],[-2,-6],[-2,-5],[-2,-7],[-4,-8],[-1,-6],[-3,-5],[-4,-6],[-4,-5],[-6,-8],[-2,-2],[-2,-2],[-3,2],[0,2],[-1,5],[0,2],[-3,2],[-4,-3],[-1,1],[0,1],[0,7],[0,2],[-1,1],[-1,0],[0,-2],[1,-1],[-3,-2],[-2,-1],[-1,1],[0,2],[1,2],[0,2],[5,9],[5,12],[4,13],[1,7],[1,12],[-1,5],[-2,5],[-4,10],[-5,5],[-4,1],[-3,2],[-3,4],[-3,5],[-6,5],[-5,3],[-4,5],[-1,3],[0,3],[0,3],[0,3],[1,3],[1,1],[6,7],[7,3],[1,0],[1,1],[2,2],[3,5],[1,3],[1,10],[0,10],[2,12],[3,7],[1,5],[-1,7],[1,3],[1,1],[1,1],[-2,7],[-3,11],[0,3],[0,3],[1,3],[-2,1],[-1,3],[-2,10],[0,2],[2,-1],[2,-8],[0,4],[2,2],[1,2],[2,0],[-4,8],[-1,0],[-2,-2],[-2,-1],[-2,1],[-1,2],[-1,3],[-1,7],[-1,2],[-5,14],[1,0],[5,-6],[0,2],[1,3],[0,3],[-1,3],[-2,2],[0,3],[1,2],[0,2],[-2,4],[-1,1],[-1,-2],[1,-3],[-1,0],[-6,7],[-1,6],[-2,7],[0,-3],[0,-4],[2,-7],[4,-8],[1,-3],[-1,-2],[-1,-1],[-1,2],[-2,7],[-1,3],[-15,37],[2,4],[3,4],[1,2],[0,2],[-1,1],[-1,-1],[-2,-2],[-1,-2],[-1,-5],[-1,-1],[-2,3],[0,2],[0,3],[-1,1],[-1,1],[-2,5],[-1,2],[2,5],[0,6],[-2,6],[-3,6],[-4,10],[-5,10],[5,2],[5,0],[-2,-6],[1,-4],[1,-3],[3,-9],[1,-3],[1,-2],[1,-2]],[[245,4645],[-1,1],[1,0],[0,-1]],[[209,4690],[0,-1],[0,1],[-1,1],[0,1],[1,-1],[0,-1]],[[6631,6348],[-2,-1],[-1,1],[0,7],[4,9],[3,11],[2,-10],[-3,-5],[-2,-9],[-1,-3]],[[6566,6623],[3,-16],[4,-14],[3,-8],[4,-10],[6,-10],[3,-3],[11,-7],[6,-3],[8,-2],[5,-6],[2,0],[3,2],[3,0],[5,-8],[2,-7],[2,-3],[2,-6],[1,-6],[5,-9],[3,-10],[3,-8],[3,-5],[5,-2],[3,-2],[0,-5],[0,-6],[-1,-5],[-3,-10],[-1,-6],[-3,-10],[-4,-16],[-2,-4],[-7,-8],[-5,-10],[-5,-18],[-5,-17],[-1,-6],[-4,-1],[-2,1],[-2,1],[1,5],[0,5],[-2,0],[-2,-1],[-4,-13],[-2,-6],[-1,-7],[-1,-10],[-2,-8],[0,-8],[0,-4],[1,-10],[0,-10],[1,-6],[0,-8],[-2,-2],[-2,-1],[-6,-1],[-7,-2],[-7,-5],[-3,-4],[-5,-10],[-3,-24],[-4,-10],[-4,-2],[-7,-1],[-11,-3],[-4,-2],[-6,-15],[0,-5],[1,-3],[0,-4],[0,-4],[-3,-9],[-3,-7],[-8,-4],[-3,2],[-3,2],[-5,0],[-9,-2],[-3,-5],[-5,-3],[-4,-6],[-9,-2],[-6,-4]],[[6474,6143],[-2,7],[-1,8],[-2,7],[-2,8],[-1,5],[-2,2],[-1,6],[-1,6],[-2,5],[-1,6],[-1,6],[-1,6],[-2,5],[-1,6],[-1,6],[-1,6],[-1,5],[-2,6],[-1,6],[-1,6],[-1,5],[-2,6],[-1,6]],[[6443,6278],[4,3],[5,3],[5,3],[4,4],[5,3],[5,3],[5,3],[5,4],[4,3],[5,3],[5,4],[5,3],[4,3],[5,4],[5,3],[5,3],[5,3],[3,3],[1,7],[1,7],[1,6],[1,6],[1,7],[1,6],[1,6],[1,7],[1,6],[1,7],[1,6],[1,6],[1,7],[1,6],[1,6],[1,7],[1,6],[1,6],[-2,6],[-2,7],[-3,8],[-2,8],[-2,5],[-2,7]],[[6557,6685],[2,8],[1,2],[1,-1],[2,1],[2,4],[0,3],[1,0],[1,-2],[0,-7],[-1,-5],[-1,-18],[-1,-3],[-1,-2],[0,-4]],[[6893,6558],[-1,-4],[-1,-2],[-1,4],[-1,1],[-1,-1],[-1,0],[-3,5],[-1,-5],[-4,-1],[-1,4],[0,3],[-2,-3],[-2,4],[0,4],[-1,1],[-1,2],[-1,1],[-2,5],[0,5],[-1,6],[-3,23],[-2,2],[-11,4],[0,4],[0,10],[0,7],[-4,9],[-1,6],[-2,5],[-3,1],[-3,0],[-2,-2],[-1,-4],[7,1],[1,-1],[2,-3],[-2,0],[-2,2],[-3,0],[-10,-3],[-5,-4],[-8,1],[-9,-3],[-8,-1],[-4,-7],[-1,2],[-2,1],[-11,6],[0,2],[-2,2],[-2,-3],[-2,-1],[-6,3],[-4,-2],[-2,-3],[0,-5],[-6,1],[-3,1],[-4,-1],[-10,2],[-3,-1],[-3,-3],[-2,-2],[-2,-1],[-2,3],[-1,2],[-1,-1],[-2,-3],[-5,-2],[-5,1],[-4,2],[0,1]],[[2733,5606],[-2,0],[-3,2],[-2,5],[0,2],[0,1],[1,5],[2,2],[2,-6],[-1,-2],[0,-4],[3,-2],[0,-3]],[[2803,5659],[-1,-2],[0,2],[1,3],[0,-3]],[[2808,5660],[0,-2],[-2,5],[0,2],[0,5],[2,1],[1,0],[0,-1],[1,-5],[-1,-3],[-1,-2]],[[2715,5724],[0,-3],[-2,5],[1,1],[1,0],[0,-3]],[[2836,5600],[-1,2],[-7,16],[-5,21],[-2,9],[2,1],[1,-1],[1,2],[1,3],[-1,6],[3,5],[1,3],[1,-1],[2,-5],[2,-3],[4,-5],[2,-1],[-3,5],[-4,6],[-2,4],[-1,6],[-1,-2],[-1,-2],[-1,-2],[-1,2],[0,2],[-3,0],[0,2],[-1,1],[0,-4],[1,-2],[0,-3],[-1,0],[-1,3],[-1,2],[-1,11],[-3,5],[-2,1],[-1,1],[-1,3],[-3,2],[-2,5],[-4,4],[-5,1],[-5,0],[-2,-3],[-1,-2],[-1,-1],[-3,-3],[-1,-5],[-1,-3],[-1,-5],[1,-2],[-10,-14],[-2,-2],[-5,-2],[-1,-1],[-1,-3],[0,-4],[0,-4],[1,-3],[1,-2],[3,-8],[5,-11],[1,-3],[1,-6],[-1,-3],[-2,-1],[-4,0],[-2,-3],[-1,-3],[-2,-3],[-6,-3],[-5,0],[-2,3],[0,9],[-3,16],[-1,11],[-1,-2],[-2,-1],[0,-2],[-1,-9],[0,-2],[-2,0],[-3,3],[-3,3],[-5,17],[-1,3],[0,4],[-4,1],[-3,3],[-4,0],[-1,-1],[-2,2],[-1,5],[-3,-3],[-5,1],[-4,2],[-3,-1],[-2,-3],[0,-9],[0,-1]],[[2706,5735],[2,-3],[4,-5],[0,-3],[0,-2],[1,-8],[1,-1],[2,2],[1,-2],[-1,-1],[-1,-2],[0,-6],[3,-3],[2,-3],[5,2],[2,-1],[1,1],[-1,5],[-2,4],[0,1],[1,-1],[1,-3],[3,-3],[5,-11],[5,-2],[4,0],[4,1],[6,5],[5,7],[3,4],[12,7],[4,8],[2,1],[2,1],[3,6],[2,4],[2,3],[6,-2],[4,-2],[3,0],[3,-1],[1,-4],[1,-1],[7,0],[5,-1],[12,-10],[7,-10],[3,-10],[9,-13]],[[1436,3779],[0,-1],[-1,0],[0,2],[0,2],[0,1],[1,-1],[0,-2],[0,-1]],[[3044,4127],[-2,4],[-9,13],[-4,7],[-3,3],[-8,11],[-1,4],[-1,11],[-1,4],[-2,4],[-7,5],[-3,3],[-2,5],[-4,3],[-5,8],[-2,6],[-3,3],[-9,6],[-5,5],[-8,8],[-4,5],[-9,6],[-3,2],[-9,14],[-6,5],[-5,8],[-16,16],[-2,5],[-2,9],[-4,4],[-3,12],[-6,6],[-6,9],[-2,8],[-3,10],[-1,5],[-3,6],[-1,10],[-2,5],[2,3],[1,1],[2,16],[-1,9],[-5,15],[-2,7],[-2,9],[-2,6],[-3,11],[-3,11],[-4,7],[-1,3],[-1,3],[-2,3],[-1,8],[-1,15],[-3,8],[-9,14],[0,5],[-1,10],[-2,11],[-10,33],[-2,10],[-3,16],[-2,9],[-2,16],[-4,12],[-2,11],[-3,13],[0,7],[-5,13],[-2,11],[-4,9],[-4,7],[-2,5],[-6,24],[-1,8],[-4,13],[-4,9],[-2,8],[-4,7],[-19,21],[-7,9],[-2,4],[-1,7],[0,3],[2,4],[3,-3],[2,1],[1,5],[0,7],[-2,9],[-6,18],[1,4],[1,4],[-3,9],[-2,7],[-2,5],[2,20],[1,5],[10,20],[2,9],[4,5],[5,8],[4,7]],[[8339,5487],[0,-4],[-1,-2],[-1,1],[-1,2],[-1,-2],[-2,-2],[-2,-4],[-2,-1],[-1,1],[0,3],[4,6],[3,2],[2,4],[1,0],[1,-3],[0,-1]],[[8365,5534],[1,-4],[2,1],[3,-1],[1,-3],[0,-1],[-4,-4],[-2,4],[-3,-3],[-2,2],[-3,-2],[-1,4],[0,3],[4,5],[4,-1]],[[8391,5554],[-3,-1],[-1,0],[-2,6],[0,3],[-2,3],[0,3],[3,0],[4,4],[6,-6],[1,-2],[-2,-1],[-1,-6],[-3,-3]],[[8493,5585],[0,-3],[-2,7],[-1,2],[1,7],[2,-3],[0,-10]],[[8414,5611],[0,-2],[0,-1],[-3,-3],[-1,0],[0,5],[1,2],[1,-2],[1,2],[1,-1]],[[8251,5638],[-1,-4],[-2,5],[1,7],[0,1],[2,2],[0,-11]],[[8259,5657],[-2,-1],[0,3],[0,4],[1,-1],[1,-1],[0,-4]],[[8466,5710],[-1,-3],[-3,3],[-1,2],[1,3],[1,1],[1,0],[2,-3],[0,-3]],[[8435,5716],[0,-6],[-2,-2],[-2,2],[-1,3],[0,2],[1,-1],[2,4],[1,0],[1,-2]],[[8498,5736],[0,-1],[-1,3],[1,7],[0,1],[1,-4],[-1,-6]],[[8499,5721],[3,-4],[3,1],[-1,-9],[1,-2],[3,-8],[0,-6],[-2,-6],[-1,-2],[-2,-4],[0,-2],[1,-2],[3,-1],[2,-4],[1,-9],[2,-7],[0,-3],[-1,-13],[0,-5],[2,-4],[1,-2],[1,-3],[1,-8],[0,-12],[-1,-5],[-1,-4],[-3,-9],[-4,-8],[-2,1],[-1,-3],[2,-6],[-1,-15],[-1,-10],[-1,5],[-1,6],[-1,14],[-1,6],[-1,6],[-1,5],[-2,5],[-2,12],[-1,0],[-2,-4],[-1,-2],[0,-4],[-1,-3],[-3,-5],[-2,-6],[-1,-7],[-1,-6],[1,-5],[2,-2],[2,-4],[1,-2],[2,-14],[0,-14],[-2,-6],[-4,-12],[-3,-4],[-2,2],[-1,7],[0,3],[1,7],[0,6],[-1,2],[-1,0],[-1,-1],[-3,-8],[-1,-2],[-1,0],[-2,0],[-8,7],[-6,7],[-5,7],[-4,10],[-1,7],[0,8],[-2,11],[0,4],[0,4],[2,7],[2,3],[1,3],[1,2],[1,4],[-1,4],[0,2],[-4,8],[-2,5],[-6,5],[-1,2],[-2,2],[-1,1],[-2,0],[-1,-1],[-1,-3],[0,-3],[0,-3],[-2,-15],[-3,4],[-3,3],[-1,3],[0,3],[-1,2],[0,2],[-2,-5],[-1,-4],[-2,0],[-3,-1],[0,2],[-1,10],[-2,3],[-3,-1],[-3,-5],[-1,-2],[0,-5],[-4,-12],[-2,-10],[-2,-10],[-1,-3],[-1,-2],[-2,1],[-2,2],[-2,6],[1,7],[2,5],[1,5],[2,17],[0,6],[1,3],[3,7],[2,5],[2,1],[5,3],[3,2],[3,0],[3,2],[3,3],[0,4],[0,4],[0,3],[1,2],[1,2],[2,2],[4,2],[1,1],[1,3],[2,5],[2,-1],[1,-2],[4,-2],[3,-4],[1,-6],[1,-4],[0,-11],[0,-2],[-3,-5],[1,-1],[4,5],[2,2],[4,2],[1,2],[1,2],[1,7],[2,7],[1,3],[1,2],[1,1],[5,-5],[3,2],[1,7],[0,11],[1,3],[2,3],[2,-1],[3,-4],[2,-1],[1,3],[1,6],[1,0],[4,-2],[3,1],[1,7],[0,8],[-3,23],[1,5],[2,0],[3,-6],[7,-8],[2,-5],[1,-6]],[[8501,5746],[-1,0],[-1,4],[0,6],[2,7],[2,-6],[0,-3],[0,-2],[1,-4],[-1,-2],[-2,0]],[[8479,5759],[0,-3],[-3,7],[-1,6],[1,-1],[2,-2],[1,-7]],[[8460,5748],[0,-3],[-2,1],[-1,-1],[-2,-5],[-1,-2],[-7,-1],[-5,1],[-2,3],[-1,5],[0,3],[1,4],[1,2],[4,5],[1,3],[2,5],[5,1],[0,-1],[1,-1],[1,0],[2,-3],[3,-3],[-1,-8],[1,-3],[0,-2]],[[8491,5755],[-1,-2],[-1,4],[-1,3],[-2,5],[-1,2],[1,4],[0,7],[1,3],[1,1],[1,3],[1,0],[0,-3],[-1,-8],[2,-10],[-1,-6],[1,-2],[0,-1]],[[8330,5788],[-3,-2],[-1,6],[2,5],[3,-2],[2,-2],[-1,-2],[-2,-3]],[[8452,5795],[0,-1],[1,6],[1,0],[0,-1],[0,-3],[-2,-1]],[[8406,5787],[-1,-1],[-2,-2],[-1,4],[1,7],[2,5],[1,1],[1,1],[1,0],[0,-2],[1,-3],[-2,-9],[-1,-1]],[[8419,5706],[-1,-1],[-2,1],[-2,2],[-2,13],[-2,3],[-3,2],[-2,2],[-1,2],[-5,12],[0,8],[1,4],[1,4],[2,1],[3,0],[2,0],[4,6],[0,2],[0,9],[0,7],[-1,6],[1,3],[1,2],[2,6],[0,4],[0,4],[0,3],[2,1],[5,5],[1,0],[7,-4],[1,-6],[1,-2],[-2,-7],[0,-5],[-3,-7],[-2,-7],[-1,-12],[-1,-4],[-2,-7],[-1,-4],[0,-9],[0,-3],[0,-3],[4,-14],[1,-3],[0,-2],[-1,-3],[-2,-6],[-1,-2],[-2,-1]],[[8426,5728],[-1,-1],[0,3],[0,5],[2,18],[0,5],[3,10],[2,9],[4,10],[0,5],[3,10],[3,13],[0,5],[0,2],[1,3],[0,3],[2,5],[0,-3],[0,-6],[0,-4],[0,-1],[0,-6],[-1,-9],[1,-10],[-1,-11],[-2,-5],[-2,-3],[-2,-2],[-3,-6],[-1,-6],[-1,-6],[-3,-19],[-4,-8]],[[8437,5834],[1,-8],[-2,0],[-1,6],[1,1],[1,1]],[[8258,5670],[-3,-4],[1,5],[0,5],[3,10],[2,3],[3,8],[2,3],[4,8],[4,8],[1,1],[1,0],[2,1],[2,4],[7,15],[5,11],[5,14],[3,4],[0,1],[5,13],[2,2],[2,1],[1,2],[1,2],[2,6],[0,6],[0,4],[-1,5],[1,8],[1,3],[4,15],[1,3],[1,-2],[0,-2],[0,-7],[0,-3],[0,-3],[-1,-5],[3,-14],[2,-9],[0,-3],[-3,-6],[-1,-1],[-4,-2],[-1,-1],[-2,-5],[-2,-5],[0,-3],[-1,-3],[-7,-4],[-3,-2],[-1,-2],[-1,-3],[0,-6],[-5,-19],[-2,-6],[-2,-4],[-2,-3],[-4,-2],[-2,-4],[-2,-7],[-2,-6],[-3,-4],[-3,-4],[-3,-3],[-3,-2],[-1,-3],[0,-3],[-2,-2],[-1,-1],[-3,-3]],[[8329,5848],[0,-3],[-1,-5],[0,-1],[-1,2],[-2,1],[0,3],[1,0],[2,2],[1,1]],[[8460,5837],[2,-2],[2,1],[2,5],[3,-2],[2,-7],[1,-2],[1,-5],[-1,-10],[0,-10],[0,-2],[2,-2],[1,-2],[1,-2],[1,-4],[0,-7],[2,-6],[0,-2],[-1,-3],[-2,0],[-1,-2],[0,-2],[-1,1],[-1,6],[-2,3],[1,-10],[0,-5],[0,-4],[-3,3],[-3,3],[-1,1],[1,7],[0,3],[-2,6],[2,14],[0,3],[-1,3],[-1,5],[-2,5],[-1,0],[-3,-3],[-2,1],[-1,13],[-1,13],[-1,3],[-1,3],[1,3],[1,-1],[2,-3],[2,-2],[1,-2],[1,-3]],[[8461,5846],[-4,-1],[-1,3],[-2,8],[2,1],[2,0],[1,-3],[2,-5],[0,-3]],[[8467,5852],[0,-3],[-1,0],[-1,2],[-1,4],[0,4],[2,-2],[0,-4],[1,-1]],[[8402,5853],[3,-3],[3,2],[3,0],[3,-4],[-1,-3],[0,-2],[6,6],[1,-1],[0,-5],[0,-5],[-1,-4],[-1,-5],[-2,-5],[-2,-3],[-2,-2],[-2,-2],[0,-3],[0,-4],[-1,-3],[-2,-1],[-4,-6],[-9,-4],[-3,-3],[-2,-4],[-1,-3],[-1,-1],[-1,2],[0,1],[2,9],[-1,3],[0,3],[0,7],[2,6],[0,7],[1,13],[1,18],[0,3],[-1,2],[-4,2],[-1,2],[1,4],[1,2],[2,0],[1,-2],[6,-5],[3,-4],[3,-5]],[[8334,5858],[-2,-2],[-1,1],[0,3],[0,2],[-2,10],[1,2],[1,-1],[1,-2],[2,-1],[0,-3],[0,-2],[1,-2],[-1,-5]],[[8335,5885],[2,-1],[1,1],[1,3],[1,-5],[2,-4],[-1,-3],[-2,-1],[-2,1],[-2,-1],[-2,0],[-2,4],[-1,6],[-1,1],[0,3],[0,2],[0,1],[1,1],[2,-2],[3,-5],[0,-1]],[[8406,5893],[-1,-2],[-3,6],[-2,3],[0,1],[1,2],[4,0],[2,-4],[0,-2],[-1,-4]],[[8478,5905],[2,-4],[0,-4],[0,-3],[1,-2],[2,-1],[2,-2],[1,-3],[-1,-3],[1,-5],[-2,-6],[0,-10],[1,-4],[0,-3],[0,-3],[0,-3],[3,-10],[0,-3],[0,-3],[-1,-2],[2,0],[2,-4],[1,-5],[0,-2],[-2,4],[-1,1],[-6,-1],[-3,2],[-2,0],[-2,7],[-2,1],[-2,3],[-2,8],[-1,5],[2,4],[0,4],[0,3],[-1,0],[-2,1],[-2,4],[0,3],[-2,2],[-2,5],[-3,2],[-1,2],[-2,4],[-2,5],[-1,9],[-1,10],[7,-3],[8,1],[9,2],[2,-3]],[[8436,5892],[5,-7],[4,-12],[0,-9],[0,-3],[-2,4],[-4,5],[-2,1],[-1,1],[0,3],[-1,3],[-1,1],[-1,1],[-2,6],[-2,1],[-2,-1],[-3,-9],[-4,-6],[0,2],[2,8],[1,13],[0,4],[-1,5],[0,6],[3,-3],[4,-2],[2,-3],[1,-3],[4,-6]],[[8397,5905],[-1,-1],[-1,0],[0,3],[1,2],[1,-4]],[[8391,5895],[-3,-14],[-1,5],[1,3],[-2,3],[0,2],[0,3],[2,3],[0,9],[3,3],[1,1],[0,-3],[0,-4],[-1,-11]],[[8437,5901],[0,-5],[-1,2],[-3,10],[-1,3],[1,3],[3,-4],[1,-9]],[[8424,5924],[2,-9],[-3,6],[-3,4],[-3,7],[-2,3],[-1,1],[1,3],[1,0],[1,0],[5,-12],[2,-3]],[[8352,5960],[1,0],[5,1],[2,0],[1,-4],[1,-1],[2,-1],[2,2],[2,-3],[2,-6],[3,-5],[2,-3],[0,-2],[-1,-4],[-1,-5],[1,-6],[1,-11],[0,-3],[-2,-5],[-1,-5],[0,-2],[-1,-1],[0,-4],[-1,1],[-1,-1],[-1,-1],[-1,-3],[-2,1],[-1,1],[-1,2],[0,3],[-1,1],[-3,5],[-1,3],[0,4],[-1,4],[-1,4],[-1,2],[-1,3],[0,2],[0,8],[-3,9],[0,2],[-3,3],[-1,3],[-1,2],[-1,5],[0,1],[-2,0],[-1,0],[0,4],[2,2],[2,1],[5,-2],[1,-1]],[[8386,5964],[1,0],[1,0],[3,-5],[0,-2],[0,-3],[-1,-6],[-1,-2],[-1,-2],[-3,5],[-2,3],[0,5],[1,8],[2,-1]],[[8340,5976],[0,-4],[-5,6],[0,2],[0,1],[1,1],[2,-2],[2,-4]],[[8453,5969],[0,-4],[-1,2],[-2,-1],[-2,-3],[-3,4],[0,4],[2,7],[0,11],[1,3],[1,2],[1,1],[2,-8],[1,-1],[2,-3],[0,-7],[0,-4],[-2,-3]],[[8393,5993],[0,-2],[-6,8],[0,2],[0,1],[0,1],[6,-10]],[[8389,6048],[0,-2],[-2,-4],[2,-8],[-1,-6],[-2,0],[0,1],[0,2],[0,2],[0,3],[-1,3],[-1,4],[-1,3],[1,4],[3,0],[2,-2]],[[8363,6256],[4,-3],[10,-11],[3,-2],[4,-2],[3,-1],[2,2],[1,3],[2,7],[2,0],[1,-2],[1,-3],[1,-5],[-1,-5],[-2,-4],[-1,-6],[-1,-17],[0,-6],[1,-5],[2,-8],[1,-2],[2,-3],[1,-2],[0,-4],[0,-4],[2,-1],[1,-2],[0,-4],[-1,-4],[-1,-9],[-6,-23],[0,-4],[-2,-10],[-5,-2],[-5,-4],[-3,-4],[-2,-4],[-1,-7],[1,-2],[0,-3],[0,-4],[-1,-2],[-2,-7],[-1,-5],[-1,-3],[-1,-3],[0,-3],[1,-3],[3,-12],[4,-12],[0,-2],[1,-1],[-2,-4],[0,-5],[0,-6],[3,-14],[1,-4],[1,-3],[1,-3],[2,-3],[4,-4],[2,-1],[2,0],[0,3],[2,1],[0,3],[-2,4],[0,2],[1,1],[1,1],[3,4],[3,4],[3,-1],[4,-1],[3,-2],[2,-4],[2,-6],[2,-7],[0,-3],[-1,-4],[0,-3],[2,-2],[3,0],[2,5],[0,6],[-1,2],[1,3],[1,2],[1,-2],[2,-4],[5,-4],[2,0],[1,0],[2,-3],[2,-2],[-2,-5],[-5,-1],[-2,-3],[2,-7],[2,-6],[2,-4],[2,-5],[0,-4],[-1,-5],[2,0],[2,-1],[4,-4],[1,0],[1,1],[-1,-14],[-2,-13],[-2,1],[-3,6],[1,6],[1,7],[-1,1],[-1,0],[-2,-2],[-2,0],[-3,0],[-6,7],[-3,1],[0,3],[0,7],[-2,8],[-1,3],[-1,2],[-7,9],[-1,1],[-2,7],[-5,10],[-2,1],[-1,0],[-1,-2],[1,-4],[0,-3],[0,-4],[0,-3],[3,-5],[0,-3],[2,-7],[0,-8],[-2,-3],[-3,4],[0,3],[0,3],[-3,7],[0,2],[-5,7],[-4,8],[-8,9],[-1,0],[-2,-1],[-1,-1],[-4,-4],[-1,-3],[0,-4],[-3,-4],[-4,-1],[-3,3],[-3,4],[-2,0],[-2,8],[-3,0],[-3,-5],[0,11],[0,11],[0,3],[2,3],[6,12],[1,3],[0,5],[-2,4],[-2,3],[-3,1],[-2,2],[-1,4],[-1,-7],[1,-10],[0,-6],[-1,-2],[-2,0],[-1,0],[-1,3],[-1,6],[-3,5],[-1,6],[-1,1],[-2,-1],[-1,3],[-1,8],[0,7],[-1,7],[-2,6],[0,6],[-2,23],[0,2],[0,2],[-2,3],[-1,3],[0,3],[0,11],[1,3],[1,1],[1,-2],[2,-3],[1,-1],[1,-2],[3,-7],[1,-1],[3,0],[2,1],[1,3],[0,3],[0,3],[-1,10],[-1,8],[0,7],[0,6],[3,11],[0,8],[0,11],[0,6],[0,3],[-1,6],[-1,6],[5,30],[1,6],[1,6],[0,8],[3,2],[3,3],[2,0],[1,-1],[4,2],[1,0]],[[8386,6272],[-2,-4],[-1,1],[1,4],[0,2],[1,3],[1,1],[2,-3],[-2,-4]],[[8367,6283],[0,-4],[-1,2],[-1,3],[1,2],[0,3],[1,-3],[0,-3]],[[8375,6299],[0,-5],[-2,0],[-2,3],[0,2],[0,1],[0,1],[4,-2]],[[8387,6357],[-1,-1],[0,6],[2,1],[1,0],[-2,-6]],[[8385,6381],[-2,-5],[-1,0],[0,3],[2,5],[1,-3]],[[8643,5358],[-1,0],[0,1],[0,1],[1,0],[0,-1],[0,-1]],[[8738,5609],[-2,-1],[-1,4],[1,5],[1,4],[1,1],[0,1],[1,5],[1,-3],[-1,-9],[-1,-4],[0,-3]],[[9264,4523],[5,-3],[1,-4],[-1,-1],[-5,-1],[0,2],[-4,2],[-1,4],[-2,-2],[1,3],[-2,3],[-1,4],[0,2],[3,-2],[6,-7]],[[9285,4529],[-1,-3],[-1,1],[-3,-1],[-1,0],[-1,3],[0,1],[2,-1],[0,3],[3,-1],[2,-2]],[[9191,4575],[-1,-4],[-2,1],[0,1],[0,3],[2,0],[1,-1]],[[9196,4607],[1,0],[2,4],[2,1],[1,-2],[-2,-13],[-2,2],[-6,3],[0,6],[-1,2],[-1,5],[-2,6],[-1,4],[1,-2],[2,-4],[5,-8],[0,-2],[1,-2]],[[9180,4645],[4,-4],[2,1],[2,-1],[2,-5],[0,-4],[1,-4],[0,-1],[-2,-2],[0,2],[-1,1],[-3,0],[-3,1],[-4,0],[2,4],[0,2],[-2,5],[0,3],[0,2],[2,1],[0,-1]],[[9175,4637],[0,-1],[-2,1],[-4,8],[1,5],[2,4],[3,-4],[1,-5],[0,-2],[-1,-6]],[[9239,4668],[1,-1],[4,0],[1,-3],[1,-1],[2,-2],[1,-2],[0,-1],[0,-1],[-1,-1],[0,-3],[-1,1],[-2,-2],[-3,3],[-1,1],[0,2],[-2,4],[-3,3],[1,2],[2,1]],[[8988,4687],[0,-3],[-4,3],[-4,6],[-2,2],[-1,4],[2,-3],[5,-3],[4,-6]],[[9196,4681],[1,-4],[-2,4],[1,5],[0,3],[0,1],[-2,3],[1,4],[1,1],[1,1],[0,-6],[0,-3],[-1,-9]],[[8988,4695],[-2,0],[-4,4],[-2,3],[6,-1],[1,-1],[1,-3],[0,-2]],[[9111,4848],[-1,0],[-1,2],[-2,3],[-3,7],[0,6],[1,1],[1,1],[6,-7],[0,-3],[0,-6],[-1,-4]],[[9331,4799],[0,-6],[-1,-1],[-1,2],[-2,-2],[-1,-2],[-1,-1],[-3,0],[-3,1],[-3,3],[-2,4],[-2,5],[-2,6],[1,7],[-1,5],[-4,5],[-1,1],[-2,6],[-2,3],[-2,5],[-1,2],[-1,7],[0,4],[0,11],[0,6],[1,0],[2,-3],[1,-1],[4,-1],[2,-5],[3,-9],[0,-3],[1,-2],[3,-4],[1,-2],[3,-10],[1,-2],[2,-1],[1,-2],[3,-4],[2,-5],[2,-5],[1,-5],[1,-7]],[[9087,4871],[-1,0],[-3,5],[0,2],[0,3],[3,4],[2,-4],[1,-7],[-2,-3]],[[9295,4871],[-1,-1],[-1,8],[0,5],[-1,4],[0,2],[2,5],[0,1],[2,-2],[0,-5],[1,-5],[-1,-9],[-1,-3]],[[9055,4912],[-2,-2],[-1,1],[-1,4],[1,4],[2,2],[1,1],[1,-2],[0,-3],[-1,-5]],[[9219,4936],[1,-1],[5,6],[2,-4],[3,-2],[3,-1],[-2,-9],[1,-4],[1,-4],[-1,-6],[-1,-5],[-3,-8],[-1,-1],[-1,-1],[-4,0],[-1,-4],[0,-5],[2,-5],[2,-7],[-2,-6],[-3,-4],[-2,-2],[-5,2],[-5,-1],[-1,-2],[0,-4],[-1,-3],[-1,-2],[-2,-6],[-3,-4],[-4,-5],[-1,-1],[-4,0],[-3,-3],[-1,-2],[-2,-2],[-3,-3],[-3,-4],[-1,-1],[-7,0],[-9,-1],[-3,0],[-3,0],[-1,2],[-4,8],[-2,3],[-3,0],[-5,-3],[-8,12],[-3,3],[-2,2],[-4,1],[-3,3],[-1,5],[0,7],[2,5],[4,-2],[1,0],[2,1],[1,-1],[2,-1],[6,2],[3,-2],[4,-3],[3,-1],[3,1],[5,3],[1,0],[4,0],[4,4],[1,18],[1,6],[1,1],[1,0],[1,-3],[-1,-4],[-1,-3],[0,-7],[1,-7],[2,-5],[3,-1],[3,4],[3,0],[3,-3],[3,0],[2,3],[1,1],[2,0],[1,1],[2,6],[1,7],[2,5],[6,9],[1,1],[2,1],[3,-1],[3,4],[0,7],[0,7],[-3,17],[0,2],[0,3],[1,3],[3,0],[3,-1],[2,-3],[1,-2]],[[9267,4948],[0,-2],[-1,2],[1,3],[0,-3]],[[9240,5003],[-1,-5],[-1,3],[-2,4],[1,2],[2,2],[1,-6]],[[9224,5014],[0,-3],[-1,0],[-2,6],[-1,1],[1,2],[2,-4],[1,-2]],[[9220,5021],[-1,0],[0,4],[1,3],[1,-2],[1,-4],[-2,-1]],[[8915,5022],[0,7],[0,4]],[[8915,5033],[1,0],[3,0],[2,-1],[14,-12],[4,-5],[1,-1],[2,0],[1,-1],[6,-7],[10,-7],[10,-6],[3,-2],[3,0],[7,-3],[3,-2],[6,-8],[2,-3],[3,-4],[4,-5],[1,-1],[1,-1],[4,0],[4,1],[1,-1],[1,-1],[2,-1],[0,-4],[3,-4],[3,-2],[3,-4],[2,-5],[2,-5],[2,-5],[4,-1],[3,-1],[12,-25],[1,-4],[0,-16],[-1,-13],[3,-4],[4,-2],[5,-3],[6,-4],[17,-17],[3,-2],[3,0],[4,0],[1,-1],[3,-3],[1,-2],[3,-6],[2,-6],[1,-2],[1,-1],[0,-3],[1,-11],[0,-6],[-1,-2],[-3,-1],[-10,-2],[-6,2],[-5,-7],[0,-3],[0,-2],[4,-14],[3,-12],[2,-5],[3,-4],[2,-5],[3,-5],[5,-10],[2,-3],[3,-3],[6,-7],[0,-3],[2,-10],[1,-7],[0,-3],[0,-3],[5,-6],[1,-2],[2,-14],[1,-7],[3,-2],[3,0],[9,4],[1,1],[1,-1],[2,-3],[0,-6],[-1,-7],[0,-6],[1,-5],[5,-4],[1,-1],[8,-2],[3,-1],[3,-2],[1,-1],[-1,-3],[-1,-1],[-2,-1],[-3,-2],[0,-4],[2,-3],[1,-5],[2,-2],[1,-1],[3,-1],[3,-2],[3,-3],[2,-1],[5,-1],[3,-3],[5,1],[-4,-4],[-2,-2],[-5,2],[-1,-2],[2,-5],[4,-3],[1,-2],[-1,-2],[-4,-5],[-1,-1],[-3,0],[-5,2],[-4,3],[-1,3],[-1,2],[-3,5],[-2,2],[-3,1],[-3,0],[-5,3],[-12,2],[-3,1],[-3,4],[-2,1],[-1,-1],[-5,-1],[-1,0],[-3,3],[-4,2],[-1,-1],[-1,-1],[-5,3],[-3,1],[-3,3],[-2,3],[-1,3],[-2,7],[-2,7],[-3,5],[-7,9],[-1,2],[-3,8],[0,6],[1,5],[-1,-2],[-2,0],[-4,4],[-2,4],[-3,12],[-2,6],[-4,11],[-1,6],[-2,6],[-1,2],[-1,2],[-1,3],[-1,3],[-7,4],[-1,2],[-1,1],[-4,0],[-3,1],[-5,4],[-3,1],[-3,1],[-3,1],[-1,2],[-1,2],[-1,6],[-2,0],[-3,1],[-2,2],[-3,1],[-1,-2],[-1,-5],[-1,0],[-1,1],[-1,0],[-1,-3],[-2,-2],[-2,0],[-5,3],[-2,2],[-2,3],[-1,4],[-2,3],[-1,2],[2,-5],[6,-23],[-2,0],[-1,0],[1,-4],[-2,-1],[-1,0],[-3,2],[-3,1],[-1,-1],[0,-2],[1,-4],[1,-6],[-4,-2],[-5,-1],[-5,-3],[-5,0],[-3,1],[-3,1],[-2,-1],[-3,-2],[-2,1],[-1,3],[-1,3],[-1,2],[-2,0],[-2,-1],[4,0],[1,-3],[0,-4],[3,-3],[3,2],[6,-1],[6,-6],[1,0],[1,-1],[4,-6],[2,-5],[2,-6],[0,-2],[0,-6],[0,-3],[-4,-5],[-4,-3],[-7,-6],[-5,-7],[-4,1],[-2,4],[-1,1],[-3,2],[-2,1],[-7,-2],[-7,-1],[-3,0],[-3,1],[-3,3],[-3,-1],[-2,-3],[-3,0],[-4,6]],[[9248,4910],[-2,-5],[-1,5],[-2,3],[-1,4],[-2,8],[0,4],[1,4],[0,4],[-1,9],[-2,8],[-7,19],[-2,4],[-2,5],[-2,1],[-3,1],[-1,1],[-3,3],[-2,4],[-6,10],[-4,3],[-1,4],[-10,12],[-2,3],[-4,0],[-3,2],[3,2],[0,4],[0,4],[4,-7],[5,-6],[2,-5],[2,0],[5,-4],[3,-3],[3,-4],[3,-6],[6,-4],[1,-2],[3,-8],[4,-6],[2,-4],[18,-30],[3,-8],[0,-6],[-1,-2],[-2,-5],[0,-6],[0,-5],[-2,-5]],[[9178,5030],[-6,0],[-2,1],[-1,3],[-2,5],[-2,1],[0,1],[4,4],[3,1],[6,-4],[0,-3],[0,-2],[0,-5],[0,-2]],[[9107,5052],[-1,-3],[-2,1],[-1,0],[1,1],[1,3],[1,0],[1,-2]],[[9084,5071],[10,-4],[0,2],[1,-1],[0,-3],[-2,0],[-1,0],[-1,-2],[-3,-5],[-2,1],[-2,-1],[-4,0],[-5,2],[-1,-2],[-2,1],[-1,-3],[-1,1],[-1,3],[0,1],[3,2],[-1,5],[2,2],[3,0],[2,2],[6,-1]],[[9159,5094],[0,-2],[-2,1],[-4,6],[0,4],[1,3],[2,-1],[2,-4],[1,-7]],[[5544,8321],[1,-1],[8,-1],[8,-1],[12,0],[14,-1],[13,-1],[15,-1],[16,-1],[1,1]],[[5655,8151],[2,-4],[0,-3],[0,-2],[0,-3],[1,-2],[4,-8],[2,-8],[2,-3],[3,-4],[0,-2],[-1,-1],[-1,0],[-1,-1],[0,-1],[0,-1],[1,-3],[2,-6],[0,-5],[-1,-1],[-2,-3],[-1,-3],[-7,-2],[-2,-2],[-4,-6],[-2,-3],[-4,-6],[-7,-10],[-2,-4],[-2,-4],[-5,-9],[-1,-4],[0,-3],[2,-7],[0,-4],[0,-3],[-1,-3],[0,-1],[2,-2],[2,-3],[0,-1],[0,-2],[-1,-1],[-3,1],[-3,3],[-1,-1]],[[5626,8010],[-2,1],[-8,4],[-5,3],[0,2],[-1,3],[-2,3],[-5,2],[-2,2],[-8,1],[-4,0],[-2,-1],[-2,0],[-2,-4],[-2,-2],[-2,0],[-2,1],[-2,2],[-3,2],[-2,-1],[-2,1],[-1,0],[-1,-1],[-1,0],[-2,-1],[-1,-1],[-2,-2],[-2,-2],[-1,-5],[-4,2],[-2,-1],[-1,-1],[-2,1],[1,2],[0,2],[0,2],[0,4],[-1,1],[-2,0],[-1,1],[0,1],[-1,1],[-2,3],[-1,4],[-2,2],[-1,-2],[-2,-3],[-2,0],[-3,-7],[-5,0],[0,3],[0,3],[-3,1]],[[5396,8279],[6,-4],[3,-2],[-1,2],[0,2],[0,3],[0,4],[-6,2],[-4,1]],[[5394,8291],[1,-1],[4,0],[9,5],[16,7],[17,7],[4,0],[4,2],[2,2],[1,2],[2,4],[5,7],[9,2],[4,4],[7,4],[16,5],[7,1],[6,0],[6,-4],[7,-4],[1,-3],[-4,1],[-5,5],[-1,0],[4,-13],[2,-5],[5,-4],[4,-1],[12,2],[4,3],[1,2]],[[3114,6224],[0,1],[-1,1],[0,1],[0,1],[2,0],[0,-1],[0,-1],[0,-1],[-1,-1]],[[3182,6227],[-2,-1],[-1,1],[-1,1],[3,2],[3,0],[2,-1],[0,-1],[-4,-1]],[[3163,6246],[1,-1],[0,3],[6,-2],[3,-2],[4,-1],[0,-8],[-3,-4],[-2,-3],[-1,-4],[-4,-5],[-4,-1],[-3,0],[-2,0],[-1,1],[-2,-1],[-3,2],[-2,-1],[-5,1],[-2,-2],[-2,0],[-1,0],[-2,1],[-3,0],[-2,1],[1,9],[0,4],[-1,4],[-1,2],[-1,3],[2,1],[1,3],[0,3],[1,1],[2,1],[7,-2],[17,-1],[1,0],[1,-2]],[[8469,7461],[-2,-2],[0,3],[1,3],[2,0],[-1,-4]],[[8625,7634],[1,-4],[1,-3],[1,-3],[1,-2],[0,-2]],[[8629,7620],[-1,-1],[-2,1],[-3,0],[-4,-5],[-2,-2],[-2,-4],[-3,-3],[-2,-4],[-2,-5],[-1,-5],[-4,-6],[-1,-6],[-1,-6],[3,-6],[0,-5],[-2,-11],[1,-11],[-1,-4],[-10,-7],[-3,-4],[-3,-10],[-5,-4],[-3,-4],[-4,-2],[-2,-7],[-3,-4],[-3,-2],[-3,-3],[-5,0],[-4,-3],[-3,-5],[-8,-7],[-1,-5],[0,-7],[0,-6],[-1,-5],[-1,1],[-1,-1],[-1,-5],[0,-5],[3,-2],[2,-2],[3,-1],[3,-2],[5,-11],[4,-4],[1,-2],[3,-3],[2,-3],[1,-4]],[[8517,7360],[-1,0],[-1,1],[-6,5],[-4,-3],[-1,-4],[-2,-1],[-1,7],[-3,0],[-5,7],[-2,-2],[-1,-2],[-2,-6],[-4,-5],[-1,-1],[-2,1],[1,1],[-2,6],[-6,2],[-2,2],[-1,1],[6,6],[1,1],[-1,1],[-1,1],[-5,-1],[-2,2],[-4,-1],[-2,2],[5,6],[0,4],[0,2],[3,8],[2,5],[7,6],[3,1],[2,-1],[2,1],[-2,2],[-2,2],[-3,-1],[-4,4],[0,4],[7,24],[0,2],[-1,6],[-1,5],[-5,4],[-2,0],[-6,7],[-3,3],[-1,-1],[0,-5],[-1,-1],[-2,-1],[-1,5],[-1,5],[-4,4],[-2,2],[1,6]],[[4522,7077],[4,-3],[3,1],[5,-3],[2,-1],[-2,-3],[-2,-4],[-5,1],[-4,4],[-2,2],[0,2],[1,4]],[[4304,7313],[0,-1],[-1,0],[-2,0],[-1,3],[1,1],[2,0],[1,-1],[0,-2]],[[4287,7363],[2,0],[9,1],[2,-1],[0,-4],[-2,-2],[-5,-1],[-8,3],[-3,4],[0,2],[0,1],[1,1],[4,-4]],[[4218,7399],[2,-3],[-3,0],[-2,-1],[-2,1],[-4,0],[-2,3],[0,3],[1,2],[3,0],[7,-5]],[[4204,7403],[-3,0],[-3,4],[4,2],[2,-1],[0,-2],[1,-2],[-1,-1]],[[4228,7405],[-1,-1],[-8,4],[-2,2],[-4,5],[10,-6],[5,-4]],[[4247,7410],[0,-1],[-6,2],[-1,2],[-1,4],[1,1],[2,1],[4,-1],[2,-3],[0,-3],[-1,-2]],[[4135,7454],[-2,-3],[-2,1],[0,1],[0,6],[2,1],[2,-2],[0,-4]],[[4794,7325],[-3,0],[-9,-10],[-3,0],[-5,4],[-10,2],[-3,1],[-4,-3],[-3,0],[-3,-3],[-1,1],[2,8],[3,15],[0,9],[0,8],[-1,8],[-1,5],[2,13],[0,7],[-2,8],[6,-1],[-2,3],[-2,2],[-2,0],[-1,0],[-5,-3],[-3,-1],[0,6],[-1,6],[2,2],[2,1],[2,3],[1,3],[0,6],[1,5],[4,5],[-2,-1],[-2,-3],[-4,-10],[-1,-6],[-3,-1],[-3,-1],[-2,0],[-2,2],[0,4],[0,3],[2,6],[0,9],[2,7],[0,3],[-1,3],[2,3],[2,2],[2,6],[4,16],[5,17],[0,2],[-1,2],[0,5],[3,20],[1,2],[1,6],[1,10],[0,6],[0,3],[0,4],[-2,8],[-2,16],[0,5],[1,3],[-2,0],[-1,3],[0,4],[3,7]],[[5949,6988],[6,9],[2,6]],[[1153,3982],[-1,-1],[0,2],[-1,3],[0,1],[1,-2],[1,-3]],[[1214,4116],[-1,-2],[0,2],[-2,1],[-1,2],[-1,0],[0,1],[1,0],[2,-2],[1,-1],[1,-1]],[[1092,4125],[0,-2],[0,1],[-2,2],[-1,2],[3,-3]],[[1195,4127],[0,-1],[-3,6],[2,-1],[1,-4]],[[1088,4136],[0,-1],[-1,1],[-1,3],[-2,3],[0,2],[1,-2],[1,-2],[2,-4]],[[1089,4155],[0,-1],[-1,0],[-1,1],[0,2],[1,2],[1,2],[1,2],[2,2],[1,1],[0,-1],[-4,-4],[-1,-3],[0,-2],[1,-1]],[[852,4165],[4,-3],[1,-4],[-1,-3],[-2,1],[-1,1],[-1,5],[-4,-1],[-3,1],[-2,7],[0,3],[1,2],[3,2],[3,-1],[2,-4],[0,-6]],[[838,4173],[0,-1],[-2,1],[0,1],[0,2],[0,2],[3,-1],[-1,-4]],[[794,4212],[-1,0],[-1,0],[0,6],[1,2],[1,-2],[1,-6],[-1,0]],[[1015,4227],[2,-3],[-2,2],[-3,0],[1,1],[2,0]],[[1012,4226],[-1,-1],[-3,4],[1,0],[2,-2],[1,-1]],[[793,4224],[-1,0],[-1,1],[0,2],[0,2],[2,-2],[0,-1],[0,-2]],[[959,4243],[0,-1],[-1,0],[-1,3],[0,3],[-1,3],[-1,2],[0,2],[0,3],[1,-5],[1,-4],[1,-3],[1,-3]],[[1041,4257],[0,-1],[0,5],[1,0],[-1,-4]],[[971,4271],[0,-3],[-1,2],[-2,4],[0,2],[3,-5]],[[1148,4578],[-1,-1],[0,6],[2,-1],[0,-1],[0,-2],[-1,-1]],[[1137,4612],[-2,-5],[0,5],[1,1],[1,-1]],[[1138,4625],[4,-3],[2,1],[-2,-3],[-4,-2],[-1,-1],[-2,1],[-1,3],[4,4]],[[1109,4641],[-1,-1],[-1,3],[0,2],[2,2],[1,-1],[-1,-5]],[[1123,4669],[-1,-1],[-1,3],[1,2],[1,0],[1,0],[1,-2],[0,-1],[-2,-1]],[[1109,4671],[-3,-2],[-1,0],[-1,5],[0,3],[1,1],[4,-1],[1,-2],[0,-2],[-1,-2]],[[6423,6601],[-2,-1],[-2,-1],[-2,0],[-2,0],[-1,1],[-2,5],[-1,7]],[[6411,6612],[0,3],[1,2],[-2,17],[-1,13],[0,2],[2,3],[1,7],[1,6],[3,15],[3,6],[4,4],[4,-8],[4,-6],[1,-7],[-1,-6],[-1,-9],[0,-4],[0,-4],[2,-6],[1,-8],[0,-5],[-1,-5],[-1,-5],[-3,-12],[-1,-2],[-4,-2]],[[5783,7802],[3,-6],[4,-3],[8,-4],[1,1],[0,1],[-1,1],[1,2],[1,0],[2,-2],[4,2],[5,5],[5,1],[5,-3],[2,-3],[2,-3]],[[5825,7791],[-1,-4],[0,-3],[-1,-9],[-1,-4],[-2,-4],[-14,-5],[1,2],[0,4],[-1,3],[2,3],[-4,1],[-1,-1],[-1,-3],[1,-6],[-2,-4],[0,-2],[0,-4],[-1,-2],[0,-2],[2,0],[-1,-4],[-4,-7],[-2,-5],[0,-18],[-1,-11],[-1,-3]],[[5630,7732],[0,3],[-1,1],[-2,2],[-2,2],[-1,3],[1,3],[1,3],[2,2],[2,-1],[1,1],[0,2],[-3,3],[-4,3],[-4,-2],[-4,-7],[-3,-1],[-2,5],[-3,2],[-5,1],[-3,2],[-1,3],[-2,2],[-4,2],[0,2],[2,0],[2,1],[1,1],[0,1],[-2,1],[-2,1],[-1,1],[0,1],[0,1],[0,1],[1,0],[0,1],[1,2],[1,2],[0,1],[0,1],[0,2],[-1,1],[-2,1],[-4,2],[-2,3],[-1,0],[-3,1],[-2,3],[-2,3],[-2,3],[0,1],[-1,1],[1,1],[0,1],[-1,3],[1,4],[0,3],[0,2],[-1,0],[-1,-1],[-2,3],[-2,5],[-1,2],[-3,2],[-2,2],[-2,4],[-1,4]],[[5635,7945],[1,1],[4,3],[1,2],[1,3],[2,-1],[6,-5],[6,0],[1,0],[1,0],[8,-3],[1,0],[1,0],[3,-2],[3,0],[3,2],[3,0],[2,0],[2,-4],[5,-6],[2,-3],[2,1],[3,1],[3,4],[8,5],[6,2],[6,2],[7,1],[2,4],[1,3],[1,5],[4,2],[4,1],[1,0]],[[9056,7684],[-1,1],[1,1],[1,0],[0,-1],[-1,-1]],[[9051,7687],[1,0],[1,0],[0,-1],[0,-1],[-1,0],[-1,1],[0,1]],[[9065,7697],[-1,-1],[-1,1],[-1,0],[1,0],[0,1],[1,0],[1,-1]],[[9074,7703],[0,-1],[-2,1],[0,3],[0,1],[6,3],[1,-2],[1,-1],[-6,-4]],[[9060,7747],[5,-4],[5,0],[-1,-3],[-2,0],[-4,-6],[-4,0],[-1,-2],[-6,-8],[0,-3],[-4,-6],[-5,-6],[-1,-10],[-3,4],[0,4],[1,4],[5,7],[3,4],[0,4],[3,3],[1,3],[1,2],[5,13],[2,0]],[[9127,7794],[-5,-4],[-5,-2],[-7,-8],[-2,-5],[-4,-2],[-3,1],[-1,-1],[-1,-4],[-1,-3],[-7,-9],[-3,-7],[-3,-1],[-5,-8],[1,7],[1,3],[4,5],[1,6],[2,5],[5,6],[4,6],[3,2],[3,6],[3,2],[0,4],[1,5],[1,-1],[3,-6],[2,0],[5,1],[8,12],[3,2],[2,0],[1,-1],[0,-1],[0,-2],[0,-2],[0,-3],[-1,-3],[-5,0]],[[6332,7804],[0,-1],[-2,5],[0,3],[1,2],[1,-5],[0,-4]],[[9157,7813],[-4,-3],[-3,0],[6,14],[4,2],[5,9],[9,10],[1,1],[6,-1],[-9,-11],[-1,-5],[-4,-4],[-3,-2],[-1,-2],[-6,-8]],[[9221,7885],[-5,-6],[-2,0],[0,2],[-1,1],[5,1],[4,9],[4,5],[2,2],[1,0],[-8,-14]],[[9252,7935],[-1,-3],[-2,0],[0,1],[1,4],[1,1],[1,-3]],[[9279,7994],[-1,-3],[-1,1],[0,1],[2,3],[1,5],[2,0],[1,-1],[0,-2],[-4,-4]],[[9299,8024],[-2,-2],[-3,1],[0,5],[6,15],[2,-1],[-1,-3],[-2,-6],[1,-7],[-1,-2]],[[9330,8081],[-3,-6],[-5,-1],[-3,-2],[-2,-4],[-1,-2],[-3,1],[-2,2],[0,7],[-1,3],[1,2],[3,0],[3,4],[7,2],[2,5],[3,11],[3,4],[3,1],[1,-6],[-1,-6],[-1,-6],[-4,-9]],[[9344,8102],[-1,-2],[-2,1],[-3,3],[-1,2],[1,3],[5,4],[2,0],[1,-1],[0,-5],[-2,-5]],[[9323,8111],[-3,-1],[-1,2],[-1,2],[0,2],[2,2],[2,-2],[1,-4],[0,-1]],[[8965,8317],[6,-15],[0,-3],[-1,-3],[-1,-4],[0,-5],[1,-4],[-1,-1],[5,-17],[4,-11],[1,-5],[0,-5],[1,-10],[1,-15],[-1,-5],[0,-5],[-1,-3],[-2,-2],[-1,-5],[0,-15],[1,-8],[1,-6],[2,-6],[0,-6],[0,-3],[3,-4],[1,-3],[0,-4],[0,-5],[1,-2],[1,-1],[6,-43],[2,-13],[6,-22],[3,-14],[2,-6],[1,-7],[1,-7],[2,-7],[2,-8],[5,-7],[2,-3],[1,-3],[0,-11],[-1,3],[-2,7],[-2,5],[-3,5],[-4,5],[-4,8],[-3,2],[-2,2],[-4,2],[-2,0],[-10,-1],[-4,-2],[-4,-3],[-2,-6],[-1,-11],[-9,-38],[-2,-10],[-1,-11],[0,-9],[1,-3],[2,-8],[2,-5],[2,-2],[2,-2],[1,-1],[1,-2],[1,-6],[3,-13],[2,-9],[1,-3],[3,1],[2,0],[2,-1],[1,-2],[1,-11],[1,-9],[0,-3],[-2,-7],[0,-4],[0,-3],[-1,-3],[-1,-2],[0,11],[-1,8],[-1,7],[-2,5],[-6,1],[-6,1],[-1,1],[-2,3],[-1,2],[-2,1],[-1,-1],[-3,-4],[-2,-5],[-2,-5],[-1,-6],[-3,-16],[-1,-5],[-2,-4],[-2,2],[-2,3],[0,4],[-1,5],[-2,16],[1,14],[4,20],[1,6],[-1,6],[-1,6],[0,11],[0,3],[1,6],[2,6],[2,6],[1,6],[-2,16],[-3,11],[-3,10],[-1,3],[0,3],[3,13],[1,6],[1,13],[2,7],[1,8],[0,37],[0,6],[-2,11],[-1,7],[1,8],[2,7],[1,6],[0,13],[-3,12],[-2,5],[-4,7],[-3,3],[-1,3],[1,1],[1,2],[-2,3],[-2,5],[0,20],[1,5],[2,5],[1,6],[2,14],[0,14],[-1,5],[0,12],[0,3],[4,4],[4,2],[2,-1],[3,-4],[2,0],[1,0],[3,2],[2,5],[-2,3],[1,4],[3,1],[1,4],[-2,0],[2,5],[0,4],[-1,4],[-5,11],[-4,7],[6,0],[2,2],[1,3],[1,3],[2,-1]],[[9667,8327],[1,-3],[-11,10],[-6,6],[-1,3],[2,0],[2,-3],[4,-2],[4,-4],[5,-7]],[[8810,8357],[-4,-10],[-2,0],[-2,2],[-4,0],[-1,0],[2,3],[6,5],[2,0],[2,1],[1,-1]],[[8831,8357],[2,-2],[4,0],[1,-1],[-3,-3],[-2,-5],[-1,-5],[-1,-1],[-2,-3],[-2,-3],[-2,-2],[-2,0],[-4,10],[-1,2],[-6,-4],[-1,0],[1,5],[3,7],[2,1],[3,8],[1,2],[9,-5],[1,-1]],[[5544,8321],[4,4],[3,6],[2,6],[1,5],[0,5],[4,2],[8,0],[3,2],[5,7],[4,7],[2,3]],[[5582,8368],[-3,-6],[-7,-11],[2,-2],[3,0],[3,-3],[3,0],[5,2],[1,10],[0,9]],[[9628,8342],[0,-8],[-3,4],[-2,4],[-2,0],[-2,2],[-2,4],[-4,5],[-1,3],[0,4],[-2,3],[-7,6],[2,0],[3,3],[8,-2],[2,0],[-1,-4],[0,-5],[4,-9],[2,-3],[3,-3],[2,-4]],[[9182,8583],[-2,0],[-1,1],[0,1],[3,3],[2,3],[2,-2],[0,-1],[-4,-5]],[[9544,8559],[-4,-5],[-1,1],[0,1],[0,2],[4,3],[4,10],[2,7],[-1,3],[0,2],[12,5],[9,7],[2,0],[1,-6],[1,-9],[-1,-4],[-10,-3],[-9,-6],[-9,-8]],[[5994,8938],[1,-2],[0,-4],[0,-2],[0,-2],[-2,-2],[-2,5],[-2,0],[-2,2],[-1,3],[2,1],[1,0],[3,2],[2,-1]],[[6944,9014],[-5,0],[-5,4],[-5,9],[1,2],[3,-1],[5,0],[3,-2],[5,-1],[-1,-4],[0,-1],[2,-2],[-2,-3],[-1,-1]],[[6186,9026],[-1,-1],[-6,3],[0,2],[0,1],[2,0],[3,-1],[1,-2],[1,-2]],[[6396,9169],[0,-6],[-2,-2],[-1,-1],[-1,4],[-1,1],[-5,-4],[-2,-4],[-6,-7],[-13,-5],[-7,-2],[-7,0],[-6,4],[-4,8],[0,2],[-1,3],[0,4],[1,5],[1,5],[2,4],[6,5],[6,4],[3,0],[8,1],[21,-12],[5,-3],[3,-4]],[[6870,9189],[-2,-5],[-5,0],[-1,1],[-1,1],[5,5],[4,0],[0,-2]],[[9484,9152],[-1,0],[1,4],[0,2],[-3,3],[-5,2],[-1,1],[0,5],[1,8],[-2,4],[0,4],[6,4],[3,3],[2,3],[1,0],[2,-3],[0,-5],[-2,-4],[-4,-1],[-1,-3],[1,-4],[0,-6],[0,-5],[3,-5],[1,-3],[-1,-2],[-1,-2]],[[9699,9192],[-8,-1],[-16,5],[-5,3],[-4,4],[-5,2],[-1,1],[1,2],[1,2],[5,4],[4,2],[5,1],[28,-8],[1,-2],[1,-1],[-1,-3],[-2,-1],[-1,-2],[-1,-6],[-1,-1],[-1,-1]],[[6679,9212],[0,-3],[0,-5],[-1,-4],[-3,-1],[-3,-1],[-5,1],[-3,-1],[-3,0],[-3,1],[-2,1],[-2,1],[0,3],[-2,4],[-3,1],[-3,1],[-4,1],[-1,0],[-3,-2],[-1,1],[-8,9],[-1,2],[-1,2],[-1,2],[-2,6],[1,3],[3,2],[1,0],[4,5],[5,1],[2,0],[1,-1],[6,-4],[3,-3],[3,-4],[3,-3],[9,-5],[6,-5],[6,-3],[2,-2]],[[6848,9247],[0,-2],[-1,0],[-2,3],[-1,3],[0,7],[0,1],[1,1],[1,0],[-1,-4],[3,-9]],[[9463,9263],[-1,-1],[-4,1],[-2,2],[0,4],[3,0],[2,-2],[2,-4]],[[6469,9294],[2,-4],[3,-3],[2,0],[1,-1],[0,-4],[-3,-5],[-1,-2],[2,-2],[0,-1],[-3,-1],[0,3],[-2,2],[-3,2],[-1,2],[-2,4],[-5,4],[-3,-1],[-4,2],[-1,1],[-1,2],[2,2],[6,1],[3,0],[3,-1],[0,2],[0,1],[1,-1],[4,-2]],[[8831,9303],[-7,-5],[-2,0],[-3,3],[-2,0],[-1,0],[-2,-1],[-2,0],[-5,2],[-1,2],[1,1],[1,0],[1,0],[4,2],[14,0],[2,0],[2,-2],[0,-2]],[[0,9304],[4,1],[5,2],[4,0],[4,-1],[4,0],[4,2],[3,-1],[3,0],[12,-3],[3,0],[4,-3],[2,-1],[2,-2],[2,-2],[5,-3],[6,-3],[2,-2],[0,-2],[0,-3],[-8,-6],[-7,-1],[-13,-2],[-18,-4],[-7,-1],[-2,0],[-7,3],[-7,1],[9996,-1],[-7,-5],[-14,-1],[-8,-3],[-2,0],[-4,10],[0,3],[1,3],[4,5],[2,3],[10,5],[8,7],[5,1],[5,3],[-9996,1]],[[7156,9348],[-14,-1],[-6,1],[-1,1],[0,3],[7,4],[3,3],[4,4],[5,4],[5,0],[15,-4],[2,-3],[0,-1],[-6,-4],[-4,-2],[-6,-4],[-4,-1]],[[7208,9372],[-2,0],[-16,2],[-5,3],[-1,3],[0,2],[14,12],[6,-3],[1,-3],[4,-4],[0,-9],[-1,-3]],[[7073,9381],[-2,1],[-4,1],[-7,4],[-2,3],[1,3],[1,2],[6,1],[6,-1],[3,0],[7,-3],[-7,-2],[-2,-3],[0,-3],[1,-1],[-1,-2]],[[8340,9394],[-7,-3],[-6,0],[-4,5],[3,1],[6,1],[3,0],[4,-3],[1,-1]],[[6536,9406],[13,-2],[10,-1],[6,-2],[2,-1],[-1,-4],[-2,-1],[-4,-5],[0,-2],[0,-5],[0,-3],[-2,-3],[-1,-1],[-7,0],[-3,-1],[0,-3],[0,-2],[-3,-5],[-5,-1],[-1,-1],[1,-3],[-2,-2],[0,-4],[1,-1],[0,-4],[4,-5],[-1,-3],[-3,-4],[0,-5],[-3,-5],[5,-4],[2,-5],[2,-5],[6,-10],[6,-10],[12,-14],[12,-10],[5,-3],[11,-5],[2,-1],[2,-2],[-5,-4],[-5,-2],[0,-1],[-3,-1],[-14,3],[-1,0],[-1,3],[-2,2],[-3,0],[-4,-1],[2,-2],[2,-1],[4,-4],[-1,-2],[-2,0],[-8,6],[-1,-1],[-1,-2],[-4,2],[-1,-1],[-3,-1],[-2,2],[0,2],[-1,1],[-12,-2],[-5,0],[-6,1],[-6,3],[-1,-1],[0,-2],[-2,1],[-5,3],[-4,1],[-13,3],[-10,3],[3,2],[4,0],[0,2],[-1,3],[0,3],[2,2],[5,-1],[0,4],[2,0],[5,-2],[2,2],[-8,4],[-8,5],[1,2],[-3,1],[-3,0],[-3,3],[1,5],[2,3],[-1,0],[-13,-2],[-6,0],[-8,2],[-6,-2],[-7,-1],[-3,1],[-4,2],[-3,2],[-2,5],[-2,7],[0,3],[0,6],[1,3],[3,5],[2,2],[4,2],[3,1],[5,-2],[5,0],[2,2],[2,2],[2,3],[3,2],[1,1],[1,2],[1,3],[1,3],[1,3],[3,4],[-1,2],[0,2],[2,2],[-6,1],[-2,1],[-3,2],[1,2],[1,1],[6,5],[3,2],[3,1],[3,-1],[4,0],[3,1],[-4,3],[0,2],[-1,5],[0,3],[2,2],[3,2],[4,1],[3,1],[4,2],[3,1],[6,-2],[3,1],[3,1],[10,4],[4,1],[3,0],[6,-2],[5,-3]],[[6962,9394],[-8,-3],[-2,0],[-5,1],[-2,-1],[-3,2],[0,3],[1,2],[1,3],[0,8],[4,5],[5,2],[17,2],[2,0],[3,-2],[3,-2],[3,-4],[3,-2],[4,-3],[1,-4],[0,-2],[-8,-1],[-13,-3],[-6,-1]],[[7131,9414],[-2,0],[-12,2],[-4,3],[1,1],[3,0],[14,-6]],[[7097,9415],[-5,-2],[1,3],[5,4],[10,2],[4,-1],[0,-1],[-4,-4],[-2,-1],[-9,0]],[[8949,9440],[7,-2],[5,-3],[20,-14],[2,-3],[1,-3],[1,-12],[-1,-1],[-7,-1],[-10,2],[-7,0],[-7,0],[-6,2],[-15,1],[-11,5],[-12,3],[-3,1],[-7,-1],[-10,-5],[-3,0],[-4,0],[-3,4],[7,1],[6,1],[7,1],[5,5],[3,4],[6,8],[2,3],[3,2],[3,1],[3,0],[11,2],[7,0],[7,-1]],[[8459,9437],[-2,0],[-3,2],[-1,2],[0,1],[3,1],[3,-1],[2,-2],[1,0],[-3,-3]],[[7320,9450],[-1,-1],[-2,0],[-1,-1],[-7,2],[-9,1],[2,3],[7,1],[10,-2],[3,-2],[-2,-1]],[[7297,9451],[-3,-2],[-4,1],[-2,2],[-2,2],[2,1],[4,0],[2,0],[2,-3],[1,-1]],[[8782,9441],[-2,-2],[-2,3],[-9,8],[-2,3],[-5,3],[-2,2],[0,3],[7,-2],[11,-8],[6,-6],[-2,-4]],[[8916,9446],[-14,-5],[-3,1],[-6,4],[-2,11],[2,3],[3,1],[3,0],[13,1],[2,-1],[3,-1],[1,-2],[0,-2],[-1,-7],[-1,-3]],[[7354,9473],[-2,-4],[-7,2],[-2,1],[5,2],[3,2],[6,0],[-3,-3]],[[8149,9469],[-1,-3],[-2,-2],[-1,-2],[-2,-2],[-6,-3],[-4,-5],[-1,0],[-16,3],[-3,0],[-5,4],[-8,3],[-3,4],[1,1],[2,1],[7,-1],[2,1],[1,4],[0,3],[1,1],[2,2],[24,-4],[9,-3],[3,-2]],[[7406,9503],[3,-1],[7,1],[1,0],[2,-3],[-3,-4],[-2,-2],[-7,1],[-8,0],[-4,3],[2,2],[5,2],[3,1],[1,0]],[[7282,9528],[1,-2],[0,-2],[-1,-1],[-4,0],[-2,-5],[-2,1],[-1,3],[-4,-2],[-2,0],[-2,3],[-1,0],[-1,2],[6,5],[4,-3],[2,0],[0,3],[0,2],[3,1],[4,0],[0,-5]],[[9077,9525],[7,0],[11,4],[1,0],[26,-2],[2,-1],[1,-3],[-1,-1],[-1,-3],[4,-2],[8,0],[5,2],[16,-1],[13,-2],[5,-3],[3,-2],[3,-2],[3,2],[2,2],[2,0],[2,0],[-5,-13],[-2,-1],[-7,-3],[-14,-4],[-6,-1],[-16,0],[-21,1],[-5,2],[-4,1],[-6,5],[-3,1],[-10,2],[-4,1],[-6,3],[-6,3],[-15,5],[1,6],[2,5],[2,5],[3,5],[3,1],[6,-4],[-1,-5],[2,-3]],[[8775,9527],[-5,-1],[-8,0],[0,4],[2,2],[2,5],[-1,3],[0,5],[1,3],[3,4],[2,-2],[2,-4],[1,-2],[6,-4],[2,-1],[-6,-5],[0,-2],[1,-3],[-2,-2]],[[9246,9568],[-3,-2],[-6,4],[2,1],[5,2],[0,-1],[1,-1],[1,-3]],[[8889,9551],[3,-1],[4,1],[3,-1],[3,-7],[1,-1],[2,-1],[1,-1],[5,0],[2,1],[1,3],[0,3],[0,3],[0,4],[0,3],[1,2],[2,2],[7,4],[5,4],[7,-1],[8,-4],[12,-8],[6,-3],[7,-2],[7,0],[4,0],[7,2],[3,0],[44,-16],[1,-1],[2,-2],[-9,-2],[-7,-4],[-2,-3],[3,-3],[2,-3],[-14,-9],[-5,-3],[-5,-1],[-11,3],[-7,-1],[-6,2],[-7,6],[-3,3],[-2,4],[-1,7],[1,5],[4,2],[3,3],[0,2],[-1,3],[-11,0],[-7,-1],[-6,-2],[2,-12],[1,-4],[2,-2],[10,-13],[2,-1],[6,-3],[6,-5],[-10,-6],[-4,-2],[-4,-1],[-3,1],[-2,1],[-3,3],[-3,3],[-3,2],[-6,0],[-6,-2],[-7,-2],[-18,-2],[-5,-2],[-6,0],[-7,3],[-7,4],[-2,0],[-2,-1],[-2,-3],[-1,-4],[-2,-5],[-3,-3],[-3,-2],[-3,0],[-3,1],[-4,1],[-21,6],[-3,2],[-2,2],[-6,8],[-4,2],[-3,1],[-6,4],[-6,6],[-1,2],[-1,3],[1,3],[5,-1],[4,0],[-2,12],[1,11],[3,2],[9,-2],[-3,4],[-2,5],[1,3],[2,2],[4,1],[6,1],[2,1],[1,2],[3,2],[6,1],[11,4],[3,0],[3,-2],[2,-3],[3,-2],[9,-4],[6,-3],[8,-8]],[[7681,9577],[2,-1],[-1,-2],[-3,1],[-3,-2],[0,-1],[-2,-4],[-5,2],[-7,1],[-5,1],[-10,2],[0,2],[2,2],[6,-2],[5,2],[10,-1],[3,2],[8,-2]],[[7690,9573],[-2,-1],[-1,1],[-1,0],[0,3],[3,4],[0,1],[1,1],[3,-1],[2,-2],[-2,-4],[-3,-2]],[[8124,9597],[4,-4],[1,-2],[-2,-1],[0,-1],[-1,-2],[-1,0],[-4,2],[-2,3],[-4,1],[-5,3],[-1,1],[2,1],[7,-1],[3,1],[3,-1]],[[7710,9596],[-1,-1],[-3,0],[-3,3],[-1,3],[2,1],[6,-6]],[[9142,9599],[-21,0],[2,1],[7,4],[19,2],[-4,-2],[-1,-4],[-2,-1]],[[6882,9575],[-11,-4],[-7,-3],[-7,-3],[-6,-1],[-11,-4],[-18,-4],[-12,-4],[-12,-3],[-14,-4],[-13,-3],[-3,0],[-10,-4],[-7,-1],[-28,-9],[-12,-6],[-4,0],[-3,0],[-3,-2],[-3,-3],[-6,-4],[-3,-3],[-3,-2],[-2,-1],[-3,0],[-2,0],[-5,-3],[-1,-2],[6,-1],[1,-3],[-2,-1],[-4,-3],[-2,-2],[-4,-2],[-2,-1],[-7,0],[0,-3],[1,-2],[-1,-1],[-2,-2],[-2,0],[-10,5],[-2,-2],[0,-3],[-1,-3],[-1,-3],[-2,-1],[-3,-1],[-11,2],[-1,-2],[2,-3],[2,-5],[1,-2],[-1,-4],[-5,-5],[-19,-7],[0,-2],[2,-5],[1,-3],[-1,-2],[-2,-2],[-3,0],[-2,0],[-4,3],[-4,1],[0,-2],[5,-4],[2,-5],[-3,-2],[-9,-6],[-4,-8],[-9,-4],[-6,0],[-6,1],[-5,1],[-14,1],[-7,2],[-8,4],[-6,-1],[-6,-1],[-7,-4],[-5,7],[2,4],[-10,9],[-2,4],[2,2],[3,1],[6,4],[6,2],[6,1],[1,1],[3,4],[2,4],[3,2],[3,3],[9,13],[2,1],[18,3],[2,1],[-6,2],[-5,0],[-2,1],[-2,2],[-1,2],[2,2],[8,8],[8,6],[8,3],[-2,1],[-3,2],[-9,0],[-4,3],[-1,2],[0,2],[3,2],[3,2],[3,-1],[4,-1],[3,-1],[2,-3],[3,0],[8,9],[-1,2],[-1,3],[1,1],[4,1],[3,1],[6,-1],[9,-2],[0,1],[2,6],[2,3],[9,5],[-1,1],[0,3],[10,3],[7,3],[6,5],[3,1],[3,0],[7,2],[12,2],[7,2],[2,5],[5,2],[9,1],[3,-1],[2,-2],[4,0],[2,1],[1,2],[0,3],[0,4],[3,2],[1,1],[11,0],[6,0],[12,-3],[7,0],[8,0],[6,0],[15,4],[26,4],[7,3],[6,3],[4,1],[3,0],[3,1],[7,3],[3,1],[3,0],[3,2],[3,4],[2,3],[8,5],[14,5],[12,3],[7,2],[4,1],[10,-2],[13,-3],[6,-4],[4,-4],[2,-2],[0,-3],[-1,-3],[-1,-3],[1,-2],[-9,-7],[-10,-8],[-1,-1],[-11,-3]],[[7674,9620],[-1,-1],[-1,-1],[-4,1],[-6,-2],[-3,1],[-2,2],[-9,0],[-2,0],[4,2],[12,2],[19,7],[1,-3],[-1,-2],[-3,-3],[-4,-3]],[[7486,9630],[-6,-1],[-4,2],[-1,1],[2,3],[2,1],[10,1],[1,-2],[0,-1],[-4,-4]],[[7983,9633],[-3,0],[-1,3],[3,3],[3,0],[3,-1],[1,-1],[1,-1],[0,-2],[-7,-1]],[[6367,7853],[0,-3],[-3,0],[0,-4],[-1,-2],[-8,-5],[-2,0],[-1,-1],[0,-3],[0,-3],[2,-3],[-1,-2],[-1,0],[-2,1],[-1,2],[-1,0],[-2,0],[-6,-9],[-3,-3],[-3,-1],[-6,-3],[-2,0],[-2,1],[-1,-1],[0,-5],[-2,3],[-2,3],[-1,0],[1,-5],[1,-4],[-1,-2],[0,-2],[-1,-1],[-2,-1],[0,-7],[-1,-5],[-2,-4],[-2,-7],[-2,-3],[-1,-4],[-1,-5],[-1,1],[-1,3],[-1,-3],[0,-3],[-3,-3],[-3,-4],[-1,-6],[0,-3],[0,-3],[1,-2],[5,-2],[3,-2],[2,-5],[3,-4],[2,-5],[2,-6],[2,-13],[1,-12],[3,16],[2,2],[-1,-4],[-1,-7],[-2,-10],[0,-7],[0,-7],[0,-3],[-1,-10],[1,-2],[1,-2],[3,-4],[2,-5],[0,-8],[1,-2],[2,-2],[7,-15],[4,-10],[2,-5],[2,-8],[2,-1],[1,-2],[3,-3]],[[6110,7685],[-3,3],[-10,14],[-5,10],[-17,23],[-2,1],[-9,4],[-4,2],[-9,16],[-4,-2],[-4,1],[-2,1],[-2,2],[-2,4],[-2,6],[-2,4],[-7,6],[-9,3],[0,1],[0,2],[7,4],[2,2],[-4,3],[-1,1],[-2,1],[2,2],[2,1],[4,-2],[3,-5],[3,-2],[2,3],[10,3],[1,3],[0,4],[-1,0],[-1,0],[0,4],[2,5],[5,9],[2,11],[2,3],[2,-2],[0,-2],[0,-2],[2,3],[1,6],[4,0],[2,-1],[3,1],[-5,8],[-7,9],[-3,-1],[-1,2],[-3,7],[-2,6],[3,0],[3,-1],[5,4],[2,1],[3,-2],[5,0],[0,3],[-2,5],[5,4],[5,2],[9,6],[4,1],[1,2],[0,2],[-1,5],[-2,4],[-5,1],[-2,-6],[-7,-2],[-4,1],[3,3],[2,2],[1,1],[-5,-1],[-3,-4],[-7,-5]],[[6061,7896],[0,3],[0,2],[0,2],[1,2],[1,1],[0,1],[-1,0],[-1,1],[0,1],[0,2],[1,1],[0,2],[0,5],[1,4],[2,3],[4,1],[4,2],[2,3],[3,7],[2,1],[4,0],[3,-1],[7,0],[7,0],[2,1],[1,2],[0,4],[1,5],[2,7],[2,4],[0,2],[-1,1],[-1,0],[-1,1],[0,2],[1,1],[0,4],[0,3],[-1,4],[-2,1],[-3,2],[0,4],[1,4],[2,3],[1,1],[3,-1],[2,1],[1,1],[-1,2],[-3,1],[-3,2],[-2,3],[0,3],[2,1],[3,2],[3,4],[2,4],[2,3],[0,3],[0,3],[-2,4],[0,4],[1,2],[0,2],[-2,1],[-2,0],[-2,-1],[-3,0],[-4,5],[-4,4],[-3,0],[-2,1],[-1,2],[-1,3],[-1,1],[-2,0],[-2,-2],[-4,1],[-3,3],[-4,4],[-3,0],[-3,1],[-5,5],[-1,0],[-1,-2],[-1,-4],[0,-1],[-1,0],[-2,-1],[-2,3],[-7,8],[-3,6],[-1,5],[-2,2],[-2,4],[-2,1],[-3,-2],[-2,-1],[-1,-1],[-4,-1],[-7,-2],[-1,-3],[-2,-2],[-2,1],[-2,3],[-3,1],[-2,-1],[-2,2],[-1,3],[-2,2],[-3,1],[-4,1],[-2,-2],[-4,-3],[-2,1],[-1,4],[-2,1],[-2,5],[0,4],[0,2],[1,2],[0,3],[-1,2],[-1,2],[-1,6],[-1,2],[0,3],[1,2],[-1,1],[-1,0],[-2,0],[-1,1],[-1,3],[-1,4],[-1,1],[-2,0],[-3,-1],[-3,-1],[-1,0],[-3,2],[-4,2],[-7,0],[0,1],[0,1],[2,2],[-1,2],[-1,1],[0,4],[0,3],[-1,4],[-1,3],[-1,2],[0,2],[3,1],[4,2],[1,1],[0,2],[-8,12],[-3,10],[-2,5],[-3,4],[-2,2],[-4,-1],[-4,0],[-5,1],[-4,0],[-7,-5],[-2,-1],[-5,2],[-4,2],[-2,0],[-1,-1],[-1,-1],[-2,-10],[-2,-1],[-2,-2],[-3,0],[-1,0],[-3,1],[-3,2]],[[5778,8610],[1,4],[-1,5],[0,5],[1,3],[2,0],[2,-3],[3,-2],[3,2],[1,5],[2,2],[2,-2],[4,0],[3,0],[3,1],[0,1],[1,3],[2,3],[2,3],[15,-3],[12,-5],[1,2],[1,3],[-4,3],[-2,1],[-3,6],[-4,4],[-4,0],[-6,-1],[-8,1],[-7,8],[-5,2],[-3,7],[-1,3],[3,-3],[1,3],[0,4],[-2,2],[-2,2],[-9,-6],[-10,-2]],[[5857,9203],[5,-1],[11,-4],[3,0],[3,2],[3,5],[3,1],[3,-1],[1,1],[-2,5],[1,2],[11,-5],[5,-3],[10,-4],[2,-1],[0,-3],[0,-3],[-2,-1],[-5,0],[-16,4],[-2,-2],[2,-3],[4,-2],[2,-4],[7,0],[7,-1],[3,0],[1,-1],[-3,-4],[1,-1],[8,4],[4,1],[2,-1],[0,-3],[-1,-4],[0,-3],[-3,-6],[-3,-2],[-2,-3],[5,2],[3,2],[5,9],[2,1],[15,0],[4,0],[14,-5],[4,0],[5,0],[1,2],[2,1],[15,-5],[22,-11],[30,-18],[18,-16],[2,-3],[6,-2],[2,1],[3,-1],[21,-14],[7,-1],[-1,3],[-2,3],[2,-1],[3,-2],[3,-6],[5,-4],[5,-6],[4,-3],[4,-1],[3,-1],[5,-2],[3,-16],[2,-3],[0,-7],[4,-3],[2,0],[0,-5],[-2,-12],[-2,-5],[-19,-22],[-12,-8],[-22,-10],[-18,-4],[-7,0],[-14,2],[-7,2],[-10,5],[-8,3],[-6,1],[-11,1],[-24,5],[-4,2],[-15,10],[-6,-2],[-4,-1],[-2,4],[1,1],[0,1],[-8,3],[-7,0],[-4,3],[-4,1],[-2,-1],[-2,0],[-9,5],[-4,4],[-4,6],[1,2],[1,2],[-15,4],[-14,0],[3,-2],[6,-1],[4,-2],[4,-4],[-1,-5],[6,-5],[5,-5],[0,-1],[2,-1],[7,-2],[1,-4],[-1,-2],[1,-2],[5,-3],[3,-1],[4,-1],[-1,-4],[-4,-2],[-3,-1],[2,-1],[4,1],[15,-6],[8,-5],[8,-10],[3,-6],[0,-2],[-1,-3],[-1,-3],[0,-3],[-3,-9],[-2,-3],[-4,-4],[4,-6],[3,-7],[4,-10],[1,-4],[0,-7],[3,-2],[-1,-1],[-1,-2],[0,-9],[5,-7],[7,-4],[4,-1],[6,2],[4,-3],[9,-8],[5,-9],[2,-2],[9,-3],[7,-2],[12,-5],[1,-1],[6,5],[9,3],[3,5],[0,3],[-3,7],[0,7],[-3,2],[-3,2],[-9,-1],[-4,0],[-3,2],[-4,4],[-7,12],[-4,3],[-2,3],[-1,3],[0,5],[4,0],[3,3],[3,11],[5,1],[2,0],[11,-5],[13,-13],[3,-2],[3,0],[5,0],[1,-1],[3,-2],[2,-1],[12,-4],[14,-8],[6,0],[2,5],[0,2],[6,4],[4,1],[6,-1],[1,1],[-2,7],[-3,6],[-4,3],[-6,11],[-3,6],[-1,5],[0,5],[1,4],[15,9],[5,5],[5,7],[2,2],[8,2],[11,5],[9,8],[8,12],[4,3],[3,0],[4,-2],[4,-3],[5,-1],[6,1],[6,-1],[9,-5],[2,-2],[1,-2],[-3,-5],[0,-3],[2,2],[3,0],[3,-1],[3,-2],[2,-3],[3,-2],[0,3],[1,3],[-2,7],[4,10],[2,4],[5,11],[-1,7],[0,8],[-1,4],[-3,6],[-6,4],[-6,1],[-2,4],[0,4],[2,6],[5,14],[5,18],[0,5],[0,2],[0,2],[-1,6],[-1,4],[-21,17],[-1,1],[-1,2],[2,1],[2,0],[16,-8],[3,0],[26,2],[12,-2],[10,-4],[8,-11],[7,-10],[7,-8],[0,-7],[-7,-2],[-7,0],[-18,-3],[-4,-4],[-12,-13],[-1,-3],[1,-4],[5,-4],[12,-5],[5,-12],[4,-5],[3,-3],[2,0],[6,0],[5,-2],[1,-1],[1,1],[4,1],[23,6],[4,3],[2,3],[1,14],[2,4],[2,6],[-1,4],[0,4],[11,3],[11,3],[5,-1],[1,3],[-3,6],[-2,2],[2,1],[2,-1],[3,-1],[6,1],[21,11],[9,7],[5,2],[8,6],[4,2],[6,0],[7,3],[8,4],[11,4],[1,0],[2,-1],[5,-4],[-2,-2],[-1,-3],[2,-1],[2,-1],[2,1],[2,2],[5,2],[2,3],[-2,2],[-3,5],[-3,1],[-3,0],[10,7],[20,10],[11,5],[11,0],[8,0],[-3,-2],[-14,-2],[-2,-1],[0,-2],[3,0],[2,-2],[-2,-2],[-1,0],[-1,-6],[-2,-4],[4,-6],[0,-5],[-2,-3],[-4,1],[-4,-2],[-6,-2],[-1,-2],[-1,-2],[4,-1],[3,0],[11,-1],[1,0],[4,1],[4,1],[4,0],[3,1],[2,-1],[4,-5],[4,1],[2,10],[6,6],[8,5],[7,1],[7,3],[3,1],[7,-2],[9,0],[8,-3],[6,-1],[9,5],[20,15],[2,-3],[3,4],[16,5],[4,0],[0,-1],[1,-5],[3,-3],[5,-6],[-2,-2],[-3,-1],[-3,-4],[0,-10],[6,-2],[8,-3],[3,0],[3,1],[1,1],[1,2],[1,3],[0,2],[-2,5],[1,6],[7,0],[10,1],[4,4],[5,6],[3,5],[-2,9],[-6,-2],[-9,20],[-4,8],[3,4],[8,2],[7,7],[2,2],[3,0],[21,-5],[24,-1],[20,-4],[23,-8],[12,-6],[9,-6],[-1,-5],[4,2],[8,-4],[6,-2],[5,-2],[2,-3],[8,-3],[8,-4],[1,-1],[10,-3],[6,-1],[5,-7],[13,-10],[3,-4],[12,-6],[6,-5],[3,2],[9,12],[6,15],[3,7],[-6,1],[-5,-3],[-2,1],[-4,2],[-5,6],[-7,10],[-1,10],[-2,4],[-6,3],[-4,3],[-16,6],[-3,-2],[0,-4],[-1,-2],[-2,3],[-1,3],[0,5],[1,6],[2,10],[4,-1],[2,1],[3,5],[-1,4],[-2,2],[1,5],[2,11],[1,14],[-2,4],[-2,2],[-9,-2],[-3,1],[-1,2],[0,3],[3,3],[2,6],[-4,-1],[-2,2],[4,3],[4,9],[10,3],[7,4],[12,8],[9,8],[5,9],[4,10],[6,21],[6,16],[10,17],[6,1],[2,0],[1,-1],[-2,-1],[0,-2],[2,-1],[5,0],[8,1],[13,-1],[23,2],[4,-1],[8,-5],[5,1],[10,-3],[5,-2],[5,-3],[-1,-12],[-1,-8],[-3,-16],[-2,-3],[-5,-11],[-3,-8],[-4,-5],[-6,-3],[-1,-2],[0,-3],[6,-9],[13,-9],[4,-11],[1,-8],[-1,-21],[-2,-3],[-2,-3],[-3,-4],[2,-6],[2,-22],[0,-18],[-1,-6],[-1,-13],[0,-4],[1,-7],[3,-5],[4,-4],[10,-6],[10,-7],[1,-3],[1,-3],[-4,-3],[-6,-8],[-3,-6],[0,-5],[1,-7],[-1,-6],[-2,-6],[-3,-4],[-10,-6],[-21,-34],[-5,-4],[-8,2],[2,-5],[3,-7],[0,-4],[-6,0],[-8,-5],[-3,-3],[-6,-2],[-5,2],[-5,3],[1,3],[1,1],[4,2],[3,2],[-2,1],[-1,0],[-4,-4],[-4,0],[-6,4],[-4,4],[-2,1],[-3,-2],[-15,1],[-4,-1],[-2,-1],[1,-2],[2,-2],[1,-5],[1,-3],[6,-4],[8,-2],[8,-5],[10,-3],[23,1],[5,0],[6,-1],[10,-5],[4,0],[7,4],[2,10],[1,4],[26,14],[4,3],[8,8],[3,5],[2,14],[3,5],[17,16],[2,4],[1,8],[-1,5],[-1,5],[-3,8],[-3,5],[-3,7],[2,13],[3,6],[15,6],[13,2],[14,5],[6,1],[4,-1],[4,-5],[4,-7],[10,-10],[4,-7],[0,-9],[0,-22],[-2,-9],[4,-3],[2,-2],[5,-3],[3,-3],[3,-1],[6,-1],[16,1],[10,1],[-1,1],[-2,1],[-8,1],[-11,2],[-15,4],[-2,9],[0,6],[4,10],[2,2],[3,1],[4,1],[-1,7],[-2,6],[-3,9],[-4,16],[-5,0],[-4,3],[-19,9],[-18,7],[-12,1],[-4,-1],[-10,-7],[-7,-2],[-12,3],[-11,-1],[-4,1],[-1,4],[3,12],[-2,5],[-4,7],[-3,5],[0,5],[7,22],[3,5],[8,10],[3,8],[-1,4],[-16,24],[-4,9],[-2,2],[-4,4],[-6,3],[-2,4],[17,23],[7,4],[10,2],[5,3],[9,4],[5,4],[2,3],[1,4],[0,9],[-1,7],[-1,5],[-3,5],[-3,6],[2,1],[2,1],[6,0],[6,-3],[3,-7],[3,-6],[0,-4],[0,-3],[2,-4],[1,-2],[1,-3],[-1,-3],[-1,-1],[-3,-3],[-4,-11],[-4,-1],[0,-9],[7,-9],[-1,-7],[-2,-2],[-4,-4],[1,-3],[1,-2],[11,-4],[10,-3],[18,-1],[5,-4],[2,3],[17,-1],[13,-10],[7,-4],[6,-1],[11,1],[2,1],[2,3],[-5,0],[-3,-1],[-2,0],[-4,1],[-2,2],[-3,3],[-5,11],[-9,3],[-5,-1],[-6,0],[-11,6],[-6,2],[-13,6],[-3,3],[-3,5],[-3,8],[-2,5],[3,1],[8,4],[13,2],[5,-2],[13,-9],[7,-1],[11,5],[1,2],[-2,5],[-4,3],[-6,1],[-8,-2],[-2,2],[0,3],[1,2],[5,0],[3,2],[6,6],[7,3],[7,1],[26,-1],[15,-9],[15,-4],[6,-3],[2,-1],[1,-2],[1,-5],[18,-13],[5,-1],[11,-1],[13,3],[6,0],[6,-1],[4,-1],[3,-3],[-2,-4],[-1,-2],[-4,-7],[-1,-2],[-12,-7],[-5,-2],[-1,-9],[-1,-2],[0,-4],[2,-7],[0,-4],[-1,-6],[-3,-6],[0,-5],[1,-7],[1,2],[-1,4],[1,3],[6,8],[4,12],[4,3],[3,1],[4,-4],[1,-4],[0,-7],[0,-7],[-3,-10],[-5,-7],[-2,-4],[2,-3],[3,-3],[3,-1],[3,0],[1,1],[0,3],[-1,3],[0,4],[6,2],[6,2],[4,4],[1,3],[1,4],[-2,7],[-2,6],[-7,13],[-5,6],[3,10],[6,11],[2,3],[0,2],[1,3],[-1,3],[0,2],[-6,8],[-4,3],[-12,1],[-3,2],[-9,8],[-1,2],[-2,6],[-1,2],[-2,1],[-9,4],[-5,1],[-9,1],[-5,1],[-8,6],[0,2],[-3,7],[-1,4],[0,3],[3,5],[2,6],[-2,4],[-4,1],[-3,2],[-2,4],[-1,5],[0,3],[0,4],[1,3],[4,4],[-1,2],[1,3],[24,4],[10,1],[48,1],[3,1],[21,2],[9,2],[10,-2],[3,0],[7,1],[4,5],[11,2],[17,2],[8,0],[2,-2],[2,-2],[-9,-6],[-10,-6],[-7,-2],[-8,-5],[0,-2],[-1,-1],[1,-4],[0,-3],[8,-3],[6,-4],[5,-3],[5,-2],[1,1],[-16,10],[-5,2],[-1,3],[0,4],[2,1],[3,2],[1,1],[7,2],[20,3],[5,5],[2,3],[6,3],[-2,1],[-5,1],[-3,2],[-14,18],[-4,3],[-11,2],[-5,2],[5,6],[6,2],[4,0],[4,-2],[6,-5],[9,2],[-3,2],[-6,3],[-5,4],[-8,4],[-9,2],[-9,1],[3,6],[5,-1],[1,2],[3,3],[12,-8],[6,2],[5,4],[11,9],[1,4],[-5,3],[-4,1],[-6,0],[0,2],[2,3],[5,2],[14,-4],[23,9],[6,5],[16,6],[8,-1],[16,8],[23,3],[13,0],[11,4],[15,2],[6,2],[26,4],[14,3],[3,3],[-13,-2],[-3,2],[-3,-2],[-2,-1],[-6,3],[-2,-1],[-2,-2],[-2,0],[-2,0],[-1,4],[3,6],[3,-3],[5,4],[3,0],[8,-3],[5,3],[7,1],[8,-1],[3,0],[2,3],[13,-2],[9,1],[6,0],[10,-1],[4,-2],[-2,-4],[-10,-7],[3,-1],[5,3],[16,5],[3,-1],[-2,-4],[-1,-2],[10,2],[9,5],[4,1],[5,-3],[3,3],[1,3],[7,0],[3,3],[5,2],[4,1],[9,3],[3,-1],[6,-1],[5,-1],[11,-4],[1,-2],[2,0],[3,-3],[-3,-4],[-2,-6],[-4,-3],[2,0],[2,0],[4,4],[3,3],[-1,12],[-6,6],[-4,2],[-10,6],[-4,3],[-4,3],[2,2],[19,-3],[10,1],[11,0],[14,3],[6,-3],[7,0],[8,-2],[3,2],[-13,3],[-6,0],[-2,1],[2,4],[3,5],[-3,4],[-2,3],[-1,4],[3,5],[5,3],[3,4],[6,5],[31,18],[14,7],[6,1],[6,-1],[13,6],[4,0],[18,-5],[4,-3],[9,-2],[12,-2],[5,-2],[2,-2],[2,-4],[-9,-2],[-9,-6],[-14,-4],[-16,-2],[-3,-2],[31,-1],[9,1],[2,-6],[3,0],[9,2],[5,1],[10,-2],[2,1],[5,0],[9,-3],[4,-3],[-6,-6],[-7,-6],[-9,-9],[-2,1],[-5,0],[1,-4],[8,0],[4,-2],[9,2],[13,0],[2,0],[5,3],[2,5],[2,4],[4,1],[5,-1],[8,0],[20,1],[17,-2],[14,3],[18,-2],[7,-2],[6,-4],[5,-1],[5,-3],[4,-4],[-2,-3],[-2,-3],[5,3],[5,0],[3,-1],[6,-2],[1,-9],[2,-2],[1,-3],[-2,-3],[-1,-2],[4,1],[6,3],[2,1],[1,2],[-2,3],[-2,1],[2,1],[6,0],[2,-4],[2,-4],[4,-13],[8,2],[0,-4],[-3,-9],[-4,-6],[-1,-2],[-2,0],[0,4],[-1,2],[-2,1],[-7,1],[-14,8],[-4,1],[-1,-1],[0,-1],[8,-5],[6,-9],[6,2],[2,0],[3,-5],[6,-1],[4,-3],[-3,-9],[-19,-16],[-20,-10],[-9,-6],[-16,-5],[-11,-6],[-15,-5],[-4,-5],[-11,-3],[1,-2],[1,-2],[-1,-3],[-2,-2],[-8,-5],[-12,-3],[-24,-20],[-12,-4],[-14,0],[-3,-2],[-10,-12],[-3,-2],[-14,-2],[-14,-20],[-8,-7],[-7,-3],[7,0],[9,3],[10,7],[2,3],[1,3],[3,3],[5,2],[17,2],[8,-1],[10,0],[7,4],[4,1],[4,1],[2,2],[6,1],[14,3],[3,2],[4,5],[9,-2],[6,1],[16,9],[9,3],[3,3],[-2,1],[-2,1],[-9,-3],[-9,-1],[-9,1],[-1,1],[-2,4],[3,4],[3,3],[6,4],[5,1],[18,-4],[4,0],[2,6],[6,0],[6,-1],[-3,-2],[-6,-2],[2,-5],[3,-3],[11,-5],[9,-2],[7,0],[11,2],[2,2],[2,4],[-2,7],[2,-1],[3,-2],[4,-4],[4,-8],[3,-3],[-2,-4],[-6,-7],[4,-4],[6,-3],[0,-11],[-1,-6],[-3,-6],[-3,-2],[-3,-4],[0,-4],[1,-2],[4,-4],[10,-2],[1,2],[-2,1],[-7,2],[-3,1],[-2,4],[3,4],[3,4],[3,7],[1,5],[0,5],[2,2],[3,3],[2,0],[2,1],[-3,2],[-2,0],[-5,3],[-1,5],[10,1],[6,3],[21,1],[14,6],[32,-2],[23,-4],[31,-1],[12,-3],[1,-1],[1,-2],[-5,-1],[-8,0],[-3,-5],[2,-7],[15,-8],[13,-3],[9,-5],[4,0],[19,0],[11,-2],[10,2],[11,0],[4,-1],[4,-3],[6,-1],[8,-1],[4,1],[2,1],[-1,2],[-6,2],[1,2],[2,1],[11,-4],[4,0],[4,3],[3,4],[2,4],[1,1],[2,1],[1,1],[-3,4],[-4,4],[0,4],[-1,1],[-1,6],[3,6],[2,2],[9,-2],[4,3],[2,2],[10,2],[5,0],[7,-3],[23,-11],[-1,-4],[5,1],[3,2],[6,1],[4,2],[1,-1],[2,-1],[-1,-3],[-2,-2],[1,-2],[1,0],[7,-3],[7,5],[4,6],[2,1],[19,-4],[6,-2],[2,-1],[0,-2],[4,-2],[4,-1],[-1,-2],[0,-2],[9,0],[4,-2],[4,-3],[0,-2],[1,-2],[4,0],[1,0],[-1,-4],[-6,-4],[-3,-2],[-4,-3],[2,0],[10,-1],[6,-5],[0,-4],[-3,-2],[-9,-5],[-5,-2],[-3,-1],[-3,0],[4,-3],[16,0],[4,-3],[4,-7],[0,-9],[-4,-4],[-9,-1],[-13,10],[-8,4],[-11,7],[-2,-1],[3,-6],[5,-4],[10,-9],[15,-19],[4,1],[2,3],[1,3],[-1,4],[2,-2],[3,-4],[4,-6],[-6,0],[-8,-2],[-3,-2],[2,-4],[6,-1],[3,-4],[4,-6],[11,-17],[7,-3],[7,-7],[7,-3],[4,0],[2,4],[2,-1],[2,-8],[4,-3],[3,-1],[3,2],[5,3],[4,5],[5,11],[4,6],[4,2],[-1,3],[0,3],[3,8],[3,9],[3,5],[6,10],[3,2],[2,-4],[1,-4],[1,-2],[1,0],[8,-9],[8,-6],[8,-4],[11,-3],[17,1],[3,4],[6,3],[9,2],[6,3],[9,2],[5,-1],[9,-3],[20,-9],[5,-3],[3,-3],[7,-6],[4,-2],[4,-2],[1,1],[0,1],[-2,1],[-2,2],[5,2],[0,2],[2,1],[6,1],[-6,2],[-2,0],[-3,1],[0,3],[2,2],[2,4],[2,2],[3,2],[2,0],[6,-2],[4,4],[3,0],[6,-5],[6,-6],[3,0],[9,2],[10,1],[-2,3],[-6,9],[0,10],[-4,3],[-6,1],[8,3],[6,8],[4,1],[5,2],[-1,1],[-15,1],[-3,-1],[-2,-3],[-7,0],[-1,6],[0,4],[9,8],[4,1],[24,0],[7,2],[10,4],[-3,2],[0,5],[-9,7],[1,2],[1,1],[2,0],[14,-2],[6,-4],[15,-4],[41,-1],[4,-1],[18,-2],[7,-2],[17,-2],[8,-2],[7,-2],[10,-2],[5,-2],[-1,-5],[-21,1],[-7,2],[-9,0],[-3,-1],[-6,-5],[-6,-2],[-5,0],[3,-4],[5,-1],[16,5],[43,2],[7,0],[-1,-3],[-6,-7],[-5,-5],[-8,-5],[-3,0],[6,11],[-3,0],[-2,0],[-7,5],[-1,0],[-1,-1],[0,-2],[-2,-6],[3,-3],[0,-4],[-10,-3],[-4,0],[-4,2],[-1,0],[-1,-2],[1,-2],[0,-2],[-2,-2],[0,-2],[2,-3],[3,-1],[17,3],[8,4],[8,6],[15,16],[6,6],[4,2],[4,1],[27,-2],[16,-4],[15,-5],[7,-4],[6,-6],[1,-2],[0,-3],[-4,-3],[-16,-1],[-7,-2],[-2,-2],[0,-1],[-1,-2],[1,-1],[8,0],[7,-1],[10,-4],[1,-1],[3,-4],[1,0],[15,0],[1,-1],[1,-2],[-4,-4],[-4,-3],[-8,-7],[5,3],[16,5],[4,1],[5,0],[12,-5],[5,-4],[9,-11],[-3,-2],[-6,-1],[20,-8],[8,0],[19,2],[9,0],[17,6],[17,3],[16,1],[8,3],[22,0],[22,-1],[16,-2],[18,-6],[18,-9],[11,-8],[2,-2],[3,-6],[1,-5],[2,-6],[-1,-6],[-3,-3],[-1,-5],[0,-5],[-3,-7],[3,-5],[8,-3],[17,-4],[5,-3],[0,-8],[2,-8],[1,-13],[3,-4],[5,-3],[1,-4],[-6,-15],[-4,-3],[-4,-4],[7,2],[4,5],[3,10],[4,1],[2,4],[0,9],[-2,8],[0,5],[1,5],[12,9],[6,4],[5,2],[16,2],[7,2],[9,-1],[5,1],[7,1],[6,0],[10,-7],[35,-1],[6,-2],[23,-3],[2,0],[5,3],[15,11],[7,-1],[2,-2],[3,-4],[3,-3],[2,-7],[2,-10],[3,-2],[5,-1],[10,-4],[10,-4],[3,-10],[5,-7],[13,0],[13,2],[13,13],[0,5],[-3,7],[-5,7],[-4,12],[-11,2],[1,3],[4,4],[4,6],[1,5],[-1,10],[10,-1],[11,-1],[20,-4],[16,-2],[9,-3],[5,-3],[6,-2],[2,5],[3,2],[8,-4],[6,-1],[10,1],[13,-2],[14,1],[13,2],[5,0],[5,-2],[8,-6],[15,-7],[13,-2],[15,-6],[14,-3],[11,-4],[2,-1],[0,-2],[1,-2],[9,-2],[16,-14],[-9995,-2],[6,-2],[5,-2],[2,0],[2,0],[3,-3],[2,-2],[11,-4],[5,-5],[5,-5],[-2,1],[-4,4],[0,-4],[1,-3],[6,-3],[7,-2],[4,-2],[1,-2],[1,-4],[-1,-3],[4,1],[3,3],[-2,2],[-11,8],[-3,3],[4,-1],[15,-11],[5,-4],[-2,0],[-1,-3],[1,-1],[2,1],[3,1],[3,-2],[4,-2],[7,-4],[43,-25],[1,-4],[1,-2],[1,-3],[0,-4],[-4,-6],[7,1],[0,1],[2,2],[2,1],[2,-2],[2,-3],[-1,-5],[-1,-3],[0,-7],[1,-5],[2,-2],[1,-3],[0,-8],[-3,-3],[-1,-6],[2,0],[5,-1],[2,-1],[3,-3],[0,-2],[1,-4],[1,-3],[1,-2],[4,5],[1,1],[3,2],[2,-6],[-1,-8],[1,0],[1,0],[1,3],[1,1],[2,3],[2,4],[-2,3],[-2,2],[-5,1],[-3,3],[-1,3],[3,1],[2,2],[2,5],[-1,3],[0,3],[-2,4],[-2,2],[-3,1],[-2,2],[-2,0],[-3,1],[-1,1],[0,1],[3,1],[16,0],[6,2],[2,0],[3,-2],[9,-2],[0,-1],[-2,-1],[-3,-5],[0,-2],[0,-4],[2,0],[3,1],[-2,3],[0,3],[1,2],[1,0],[3,-3],[2,0],[9,-1],[3,0],[1,1],[-2,2],[-12,3],[0,2],[11,-3],[5,-2],[5,-1],[6,0],[7,-2],[6,-7],[6,-8],[6,-5],[6,-3],[10,-10],[2,-1],[1,-1],[-2,-2],[-2,-2],[3,1],[4,1],[1,0],[2,-1],[1,-2],[0,-2],[-1,-2],[10,0],[3,-1],[1,-5],[-3,-4],[-1,1],[-2,1],[-1,0],[-5,-1],[-6,-5],[-4,-3],[-1,-3],[1,-6],[-1,-4],[-3,-2],[-6,2],[-3,1],[-3,2],[-3,2],[-4,4],[-2,0],[-1,-1],[2,-2],[3,-3],[4,-4],[2,-5],[-1,-2],[-2,0],[-1,0],[-4,1],[-3,0],[-9,-1],[-3,-1],[-1,1],[-1,2],[-4,1],[-3,1],[-2,0],[-1,2],[-3,3],[-5,1],[-3,1],[-2,-1],[7,-4],[5,-7],[-1,-1],[0,-1],[3,-1],[2,1],[0,-2],[-1,-7],[-1,-1],[-10,-2],[2,-1],[3,-1],[3,1],[2,-1],[2,-5],[0,-5],[-2,-2],[-3,-2],[-5,-4],[-6,-1],[-3,0],[-3,0],[-1,-2],[-1,-2],[2,1],[3,0],[3,-2],[0,-2],[-3,-2],[0,-1],[1,-3],[-1,-2],[1,-1],[3,0],[4,-2],[4,-2],[1,-1],[1,-3],[1,-2],[-1,-1],[-8,0],[-1,0],[-1,3],[-1,2],[-3,1],[-1,-1],[1,-8],[-1,-2],[-2,-2],[-4,-1],[-3,1],[-3,4],[0,3],[2,2],[0,2],[-1,3],[-2,-3],[-2,-3],[-3,-4],[-2,0],[-2,0],[-5,3],[-2,2],[-6,7],[-3,4],[-7,4],[-7,4],[-6,2],[-3,0],[-3,-1],[-4,0],[-1,1],[-2,2],[-1,1],[-5,5],[-4,3],[0,3],[1,3],[-1,7],[-2,7],[-4,7],[-13,4],[-11,3],[-3,1],[-4,-1],[-8,-5],[-6,-1],[-17,0],[-3,0],[-2,3],[-1,3],[1,6],[0,2],[-1,1],[-1,0],[-3,3],[-3,4],[-3,4],[-2,5],[3,0],[3,-1],[0,1],[1,5],[2,3],[1,2],[2,7],[0,4],[-3,-2],[-3,-7],[-2,-2],[-2,-1],[-1,0],[-3,1],[-2,2],[0,6],[-1,2],[-1,-1],[-1,-3],[-2,0],[-2,-1],[1,-4],[0,-3],[-3,-2],[-5,0],[-2,3],[-2,-5],[-1,-5],[0,-6],[2,-6],[2,-3],[5,-4],[3,-3],[0,-3],[0,-4],[-3,-4],[-2,-3],[-3,-8],[-2,-4],[-8,-6],[9994,-2],[-5,-7],[-5,-6],[-9,-2],[-12,-9],[-5,-1],[-7,4],[-15,2],[-4,4],[-7,9],[-2,1],[-2,4],[-9,3],[-7,-2],[-6,2],[-2,-2],[3,-1],[6,-1],[8,1],[3,-1],[2,-3],[3,-5],[-2,-4],[-2,-1],[-7,4],[-8,-1],[-3,1],[-10,6],[-8,-6],[-11,-4],[-8,0],[-15,-6],[4,0],[11,4],[6,0],[10,2],[5,3],[2,2],[3,2],[4,-1],[2,-2],[1,-4],[2,-4],[-2,-3],[-2,-1],[-2,-3],[10,5],[6,-3],[3,1],[6,5],[9,3],[2,-1],[1,-1],[-2,-10],[1,-7],[7,-8],[7,-5],[3,0],[2,1],[1,4],[2,3],[2,-3],[2,-3],[3,-8],[0,-2],[-1,-4],[2,-2],[4,-1],[1,-7],[1,-10],[-2,-1],[-1,0],[-5,-3],[0,-1],[6,-1],[1,-2],[-1,-5],[0,-2],[2,-1],[1,3],[0,4],[0,2],[4,-8],[0,-4],[3,-3],[8,-6],[2,-2],[0,-4],[-2,-1],[-2,-3],[2,-4],[2,-3],[3,-1],[2,-6],[0,-4],[-3,-5],[-5,-6],[-3,-2],[-1,-4],[0,-5],[-3,1],[-2,1],[-26,11],[-10,2],[-9,1],[-1,0],[0,3],[0,2],[2,3],[-1,3],[-1,0],[-1,-2],[-3,0],[-2,2],[-2,0],[-1,-3],[0,-2],[0,-2],[1,-2],[5,-2],[-1,-2],[-7,-1],[-6,-2],[-7,-5],[-3,-4],[-20,-9],[-5,-4],[-2,0],[-2,-1],[-3,-4],[-10,-6],[-3,1],[-3,-5],[-2,-2],[-7,-1],[-4,-1],[-9,-7],[-5,3],[-7,-10],[-7,-8],[-2,0],[-5,3],[-2,-2],[1,-3],[2,-4],[-1,-1],[-2,1],[-2,0],[-1,-1],[0,-2],[-3,-4],[-2,0],[-3,-1],[-1,-3],[1,-3],[-5,-4],[-4,-5],[-2,0],[-2,-3],[-3,-1],[-3,0],[-6,-6],[-15,-12],[-5,-2],[-5,-3],[0,-3],[0,-3],[-3,-4],[-2,-13],[-1,-2],[-1,-2],[-5,1],[-5,5],[-2,2],[-1,2],[0,4],[-1,2],[-1,1],[-5,10],[-10,7],[-1,2],[-12,-2],[-4,0],[-5,2],[-9,-1],[-11,-4],[-4,-2],[-11,-4],[-7,-6],[-14,-20],[-4,-5],[-1,-1],[-3,0],[-1,4],[0,4],[1,6],[2,5],[1,10],[1,4],[1,4],[-5,-1],[-6,-7],[-10,-7],[-5,-1],[-4,-5],[-2,0],[-3,-2],[-1,-8],[-1,-5],[-2,-1],[-3,0],[-2,1],[-3,8],[-4,3],[-2,1],[-2,-1],[-3,-5],[-4,-4],[0,5],[-3,2],[-3,1],[-4,0],[-1,-1],[-1,-3],[-3,-3],[-2,-2],[-3,-3],[-1,-3],[-1,-4],[-2,-11],[0,-12],[-5,-10],[-2,1],[-1,-1],[-1,-1],[2,-6],[-1,-2],[-1,-1],[-2,-1],[-6,-8],[-5,-6],[-9,-15],[-3,-10],[-2,-11],[1,-6],[1,-3],[2,-3],[3,-2],[5,-3],[0,-2],[0,-2],[2,3],[2,8],[3,3],[2,-1],[12,-6],[2,-3],[0,-6],[-1,-2],[-2,-5],[-4,-5],[-5,-6],[-1,-5],[0,-2],[2,-8],[0,-5],[-1,-8],[0,-4],[2,-3],[2,-2],[3,1],[3,-1],[3,-2],[0,-7],[1,-7],[1,-12],[-2,-4],[-2,-2],[-4,-5],[-2,-1],[-4,2],[-5,10],[2,5],[5,4],[2,3],[2,4],[-3,0],[-2,-2],[-5,1],[-3,-2],[-2,-4],[1,-8],[-2,-1],[-4,-3],[-5,-3],[-2,-3],[-4,-14],[-4,-11],[-2,-9],[1,-8],[1,-8],[1,-4],[5,-8],[2,-7],[1,-8],[-4,-3],[-7,-9],[-2,-1],[-10,0],[-4,5],[-6,-2],[-4,-2],[-7,-6],[-6,-8],[-6,-6],[-2,-3],[-3,-7],[-2,-13],[1,-7],[1,-3],[1,-4],[-1,-6],[0,-4],[3,-6],[0,-8],[-2,0],[-5,6],[-5,0],[-12,-7],[-6,-4],[-5,-8],[-2,2],[-1,4],[-2,2],[-3,-1],[-1,-4],[4,-2],[1,-3],[-2,-10],[-2,-4],[1,-10],[0,-4],[-1,-5],[-4,-12],[-6,-16],[-8,-12],[-5,-4],[-3,-3],[-1,-4],[-8,-11],[-10,-12],[-3,-2],[0,4],[-1,4],[-1,6],[-4,5],[0,4],[-1,6],[0,25],[-3,26],[0,8],[-4,7],[-2,7],[-2,7],[0,8],[-4,42],[-1,11],[-6,34],[-2,20],[-2,19],[0,9],[3,25],[2,16],[7,36],[1,4],[1,1],[13,14],[6,8],[3,8],[4,10],[-1,5],[0,3],[-2,4],[-3,4],[1,2],[2,1],[3,2],[6,-3],[7,1],[6,13],[8,-2],[7,2],[2,-1],[1,4],[3,5],[7,7],[10,8],[5,5],[2,6],[4,5],[4,6],[7,18],[14,16],[6,9],[4,3],[4,1],[10,13],[7,10],[8,7],[3,5],[4,11],[2,3],[5,4],[13,7],[7,7],[11,1],[3,3],[3,1],[4,3],[-5,6],[1,3],[1,2],[8,7],[3,6],[-1,3],[0,1],[-5,3],[1,5],[1,5],[4,4],[1,10],[1,9],[3,15],[3,3],[8,7],[2,0],[6,-2],[7,-1],[2,-3],[1,2],[-1,3],[2,1],[4,-1],[-1,2],[-9,2],[-7,3],[-7,6],[-4,1],[-4,0],[-26,-8],[-1,-3],[-1,-3],[1,-5],[-1,-2],[-1,-1],[-2,-3],[-1,-6],[0,-6],[-3,-9],[0,-6],[6,-3],[1,-2],[-2,-4],[-1,-1],[-2,-3],[-1,-1],[-1,0],[-2,3],[-2,6],[-3,0],[-1,-1],[-1,-2],[-2,0],[-3,1],[-3,-1],[-6,-7],[-32,-33],[-3,-4],[-4,-8],[-8,-1],[-3,-1],[-3,-3],[-3,-2],[0,3],[1,3],[1,6],[4,11],[-3,1],[-2,0],[-5,-2],[-4,-4],[-2,1],[1,3],[3,7],[-1,6],[-1,3],[2,2],[6,12],[2,7],[2,8],[0,3],[0,3],[-2,0],[-1,0],[-13,-8],[-5,-2],[-1,3],[-3,2],[-3,6],[-3,1],[-3,-1],[-7,-4],[-8,-2],[-6,1],[-5,-4],[-2,0],[-8,2],[-9,0],[-3,-3],[-7,-4],[-6,-6],[-3,-2],[-3,-3],[-1,-12],[-4,-4],[-4,-3],[-8,-9],[-6,-13],[-3,-5],[-8,-8],[-13,-10],[-11,-16],[-4,-12],[-1,0],[-3,-3],[-1,-6],[0,-4],[-1,-3],[-2,-4],[2,-3],[1,-1],[3,1],[6,3],[11,-5],[5,-5],[0,-5],[0,-5],[-4,0],[-5,0],[-4,-3],[-6,5],[-3,-2],[-3,-5],[-7,-2],[-3,3],[-6,6],[-9,-1],[-2,-7],[-2,1],[-4,-1],[-5,-8],[-2,-1],[-7,1],[-5,5],[-2,0],[-4,-2],[-2,-5],[-11,-3],[-10,1],[-6,12],[11,5],[6,-1],[7,0],[8,4],[-3,3],[-2,1],[-4,-1],[-4,3],[-9,11],[-4,2],[-5,2],[-4,0],[-1,-1],[-2,-3],[-1,-3],[-1,0],[-3,0],[-3,2],[-4,0],[2,1],[3,2],[-6,2],[-3,3],[-4,1],[-15,6],[-6,0],[-4,-2],[-6,-6],[2,-4],[1,-2],[1,-2],[-2,0],[-6,-1],[-4,4],[-2,-5],[1,-4],[4,1],[2,-2],[-1,-5],[-6,-1],[-6,0],[-7,9],[-10,-2],[-5,-5],[-5,-1],[-13,5],[-7,1],[-7,4],[-3,-1],[-5,-12],[-6,-3],[-3,2],[-3,7],[-2,3],[-6,2],[-29,-2],[-10,2],[-8,0],[-9,-4],[-9,1],[-17,-7],[-7,-5],[-9,-9],[-7,-15],[-4,-5],[-8,-7],[-10,-6],[-5,-7],[-3,-5],[-5,-20],[-2,-3],[-12,-7],[-4,-8],[-1,-2],[-6,-4],[-3,-5],[-1,-2],[-8,-4],[-6,-10],[-8,-7],[-12,-19],[-2,-3],[-1,-5],[-1,-4],[-11,-17],[-3,-1],[-6,-8],[-5,-5],[-5,-5],[-6,-6],[-9,-7],[-3,-4],[-5,-9],[-12,-11],[-6,-3],[-8,-10],[0,-2],[-1,-3],[1,-7],[2,-1],[3,-1],[12,-6],[11,1],[9,0],[4,1],[2,0],[1,-4],[0,-6],[-2,-6],[-1,-16],[-1,-8],[1,-7],[2,-1],[3,3],[3,0],[4,-1],[3,12],[-3,1],[-2,5],[2,3],[6,5],[4,1],[4,-1],[-4,-7],[-2,-1],[-1,-1],[-2,-1],[4,-4],[4,-4],[6,-1],[-1,-2],[-4,-3],[-4,-9],[-6,-4],[-2,-3],[1,-2],[2,0],[11,1],[6,2],[8,7],[4,11],[3,3],[1,0],[1,-1],[0,-7],[-4,-9],[-3,-4],[-2,-4],[2,0],[4,0],[2,2],[4,10],[1,8],[0,10],[0,6],[0,4],[-1,4],[1,2],[11,-6],[6,-2],[11,5],[2,-1],[2,-3],[9,-9],[2,-3],[3,-11],[9,-12],[9,-6],[0,-2],[6,-7],[4,-3],[1,-6],[-2,-5],[-4,-5],[-8,5],[-2,0],[1,-3],[6,-8],[5,-4],[0,-10],[0,-6],[-4,-7],[1,-4],[5,-5],[2,-3],[2,-3],[-3,-7],[0,-8],[-3,-3],[-4,-8],[-5,-6],[-3,-12],[-4,-10],[0,-11],[-1,-3],[-4,-11],[-1,-15],[2,-24],[1,-1],[1,-2],[0,-1],[-1,-1],[-3,-7],[0,-5],[1,-4],[0,-10],[-2,-15],[-1,-2],[-1,-4],[0,-4],[-1,-2],[0,-4],[0,-3],[2,-2],[-5,-11],[-1,-14],[-2,-6],[-3,-6],[-7,-8],[-2,-5],[-4,-7],[-4,-5],[-6,-15],[-5,-14],[-11,-19],[-2,-4],[-1,-5],[-3,-9],[-1,-11],[-4,-5],[-3,-12],[-9,-19],[-2,-6],[-8,-10],[-7,-15],[-10,-12],[-2,-6],[-3,-6],[-4,-9],[-6,-8],[-1,-6],[-2,-5],[-4,-3],[-4,-3],[-9,-24],[-1,-4],[0,-3],[-7,-9],[-3,-9],[-6,-6],[-6,-8],[-15,-14],[-4,-5],[-9,-7],[-3,0],[-7,-4],[-5,-4],[-3,2],[-2,4],[-2,0],[-1,0],[-5,4],[-3,0],[-3,2],[-5,-1],[1,20],[-1,5],[-2,-4],[-5,-8],[-3,-1],[-2,0],[1,4],[3,7],[-1,1],[-1,0],[-4,-3],[-2,-3],[-6,-12],[-3,-10],[-3,-3],[-1,-4],[-3,-4],[-3,1],[-2,-1],[-6,3],[-1,-1],[3,-8],[-2,-11],[-2,-2]],[[7991,9684],[-3,-3],[-3,-1],[-4,2],[-10,0],[-16,3],[5,1],[26,1],[1,0],[4,-3]],[[7951,9688],[-3,0],[-4,1],[1,3],[8,0],[3,4],[5,0],[2,-1],[1,-2],[0,-1],[-1,0],[-5,0],[-1,-1],[-6,-3]],[[7857,9749],[-3,-5],[-1,-4],[-8,-13],[-1,-2],[5,2],[4,4],[3,4],[3,2],[3,0],[4,1],[6,3],[7,2],[4,0],[3,-2],[2,-3],[3,-3],[8,-2],[2,-1],[0,-2],[0,-3],[5,-2],[7,1],[3,-1],[4,-1],[2,-3],[1,-2],[1,-4],[1,-4],[0,-6],[-14,-8],[-2,-1],[-6,1],[-7,-1],[-16,-5],[-20,0],[-5,-4],[-2,0],[-2,1],[-1,1],[-12,-1],[-14,0],[-14,0],[-4,-3],[-14,-6],[-13,-4],[-6,-1],[-10,1],[-3,2],[-3,2],[4,2],[3,6],[4,3],[10,6],[1,2],[1,6],[2,2],[1,1],[1,3],[0,3],[1,3],[4,4],[2,2],[3,0],[7,0],[3,0],[-2,1],[-1,5],[0,2],[1,3],[2,1],[2,1],[1,5],[-1,1],[3,2],[1,3],[3,1],[7,2],[0,3],[1,2],[2,1],[3,0],[2,0],[2,-3],[3,-3],[3,0],[4,0],[-3,3],[1,4],[1,2],[1,1],[4,0],[10,-2],[7,-4],[2,-2],[-1,-1],[-3,0],[-2,-1]],[[7117,9772],[4,-2],[2,1],[25,-5],[5,-2],[2,-1],[-22,-1],[-5,0],[0,3],[-5,0],[-8,2],[-3,3],[0,1],[3,1],[2,0]],[[7781,9769],[-6,0],[0,4],[1,1],[3,0],[2,-1],[4,0],[-4,-4]],[[7574,9774],[-7,-1],[-8,1],[-13,6],[-9,2],[-6,4],[-2,5],[4,2],[6,2],[9,0],[12,-1],[11,-3],[25,-3],[9,-2],[-6,-5],[-6,-2],[-6,-2],[-6,-2],[-7,-1]],[[6427,9788],[1,0],[0,-1],[-10,1],[-17,-1],[-10,4],[10,3],[6,0],[7,3],[9,-3],[0,-2],[0,-1],[2,-1],[2,-2]],[[6657,9789],[-10,-2],[-3,1],[-1,1],[-2,1],[-5,1],[1,3],[1,1],[15,4],[7,-3],[4,-5],[-7,-2]],[[7712,9801],[7,-4],[3,-4],[-3,-1],[-3,-3],[-1,-3],[-4,-3],[-1,-4],[2,-1],[2,1],[4,4],[5,3],[6,-2],[2,1],[4,4],[0,3],[1,2],[2,1],[8,-1],[11,-1],[3,-2],[2,-1],[2,-2],[5,-1],[3,-1],[4,-3],[3,-4],[-4,-2],[-2,-4],[-1,-1],[-1,-2],[0,-3],[-1,-3],[-1,-2],[0,-1],[0,-5],[-1,-3],[-4,-3],[-4,0],[-6,2],[-2,0],[-2,-1],[8,-4],[6,-5],[6,-2],[2,0],[2,-6],[1,-2],[-11,-6],[-3,-1],[-17,-1],[-11,-2],[-4,0],[-6,2],[-4,-1],[-6,1],[-4,0],[-8,2],[-9,4],[-2,2],[-2,1],[-10,1],[-2,1],[-16,-1],[-2,1],[-5,5],[-3,0],[-8,-3],[-3,0],[-7,2],[-4,2],[0,1],[0,3],[-4,2],[-5,5],[-3,5],[-12,3],[-8,1],[-6,-1],[-5,3],[9,7],[12,4],[5,4],[6,4],[3,6],[10,4],[3,2],[4,3],[1,0],[8,-4],[2,1],[1,2],[3,2],[10,0],[8,-1],[4,1],[3,0],[20,2],[13,1],[2,0]],[[6390,9796],[-3,-1],[-10,5],[-1,1],[9,4],[10,-1],[2,-2],[-7,-4],[0,-2]],[[6540,9807],[-7,-2],[-5,0],[-1,1],[3,3],[4,1],[3,0],[2,-1],[1,-2]],[[6585,9812],[1,-2],[0,-7],[-1,-3],[0,-3],[-3,-1],[-22,0],[-10,1],[-3,1],[6,3],[2,2],[0,7],[1,1],[17,0],[2,2],[6,0],[4,-1]],[[6486,9802],[-18,0],[-7,0],[0,1],[-2,0],[-6,1],[-3,3],[1,1],[9,1],[3,1],[1,2],[4,3],[9,0],[4,0],[0,-2],[4,-3],[10,-3],[-2,-2],[-3,-1],[-4,-2]],[[6609,9799],[-4,-1],[-11,2],[-2,1],[-2,2],[-1,8],[0,2],[-1,1],[-3,3],[-2,2],[2,1],[12,-1],[27,-1],[13,-2],[4,-2],[4,-3],[-23,-1],[-4,-1],[0,-3],[0,-3],[-3,0],[-6,-4]],[[6511,9819],[-4,-3],[-13,3],[1,2],[2,0],[0,2],[-2,1],[1,3],[8,-2],[1,-1],[6,-1],[1,-3],[-1,-1]],[[6317,9841],[13,-3],[9,1],[3,0],[3,-1],[3,-1],[4,-4],[0,-5],[-2,0],[-16,2],[-7,5],[-2,1],[-3,-2],[-3,-3],[-3,0],[-3,-4],[-3,0],[-1,0],[-4,-3],[-9,0],[-2,-1],[-3,-4],[-3,-1],[-7,-1],[-2,3],[-1,3],[-2,1],[-9,-1],[-7,1],[-6,2],[-7,1],[6,2],[33,5],[13,1],[7,4],[9,2],[2,0]],[[6726,9840],[2,-3],[-1,-3],[-2,-3],[-1,-4],[-9,-1],[-2,-1],[-3,-3],[-8,-1],[-7,-5],[-9,1],[-12,3],[-11,-3],[-7,0],[-8,4],[-1,1],[-1,3],[1,2],[2,6],[3,3],[1,1],[2,2],[3,1],[11,1],[4,-1],[1,-2],[5,0],[10,1],[13,2],[8,2],[7,0],[7,-1],[2,-2]],[[6396,9845],[4,-1],[11,0],[3,-1],[15,-8],[3,-1],[4,-3],[-16,-5],[-5,-3],[-19,-1],[-12,-2],[-3,-1],[2,-3],[-6,-3],[-19,0],[-3,-1],[-3,-3],[0,-1],[6,0],[1,-1],[1,-1],[1,-2],[-1,-3],[-3,0],[-2,0],[-6,2],[-1,-1],[-1,-1],[-1,-3],[-3,-1],[-6,2],[-2,0],[-2,-2],[-2,0],[-6,-1],[-3,2],[3,2],[7,4],[-2,1],[-7,1],[-6,-1],[-3,-2],[-2,-1],[-7,0],[-4,3],[-3,2],[-3,2],[21,8],[7,4],[7,1],[8,1],[3,1],[3,0],[2,0],[4,-3],[13,0],[3,3],[0,5],[-1,4],[2,6],[8,3],[17,3],[4,0]],[[7222,9841],[-26,-3],[-2,2],[-1,1],[4,4],[3,2],[16,1],[13,-2],[4,-1],[-1,-2],[-1,-1],[-9,-1]],[[6698,9846],[-9,-1],[-14,2],[-7,1],[0,1],[2,1],[12,4],[24,1],[4,-3],[-3,-2],[-9,-4]],[[6519,9856],[21,-6],[20,1],[8,-2],[12,-5],[18,-5],[4,-2],[-3,-2],[-21,-5],[-14,-2],[-12,0],[-5,0],[-5,4],[-12,3],[-12,-1],[-1,2],[-3,1],[-4,0],[-9,2],[0,3],[5,2],[4,0],[1,4],[6,8],[2,0]],[[6628,9852],[4,-3],[1,-4],[3,-2],[0,-3],[-2,-3],[-6,-1],[-10,0],[-9,1],[-5,6],[-10,1],[-5,6],[5,2],[7,-1],[11,5],[1,0],[3,-1],[9,-2],[3,-1]],[[6409,9852],[-4,0],[-2,0],[-3,2],[-1,1],[-1,1],[3,1],[1,1],[1,0],[2,1],[3,0],[5,-1],[2,-2],[-5,-3],[-1,-1]],[[6760,9832],[-5,0],[-6,1],[-6,3],[-7,3],[2,2],[6,2],[9,4],[13,1],[7,0],[7,1],[2,2],[1,4],[1,3],[2,1],[7,2],[6,0],[7,-2],[4,-1],[3,-3],[2,-2],[0,-3],[0,-3],[2,-2],[-12,-6],[-13,-4],[-32,-3]],[[7543,9857],[-10,-4],[-34,3],[-2,2],[0,1],[4,3],[29,-1],[10,-1],[3,-3]],[[7681,9854],[1,-3],[3,-2],[2,-2],[18,-7],[8,-1],[4,-1],[1,-2],[-1,-4],[-3,0],[-2,-1],[-12,-2],[-3,-2],[-3,-4],[2,-1],[1,-2],[4,-7],[1,-2],[3,-1],[-3,-3],[-3,-1],[-37,-4],[-25,-2],[-8,-1],[-3,0],[-7,-3],[-12,-4],[-6,0],[-18,6],[-23,4],[-3,3],[-5,1],[-7,1],[-3,5],[4,4],[6,3],[10,1],[9,2],[7,5],[4,5],[8,5],[-14,-1],[-5,1],[1,1],[3,4],[1,1],[5,2],[3,4],[9,2],[3,1],[4,-1],[7,2],[7,1],[7,1],[6,1],[7,1],[6,3],[3,5],[17,0],[3,-1],[2,-3],[3,-1],[3,0],[8,-5],[2,-1]],[[6647,9867],[-6,-1],[-11,1],[-3,2],[1,1],[7,2],[5,0],[6,-2],[3,-2],[-2,-1]],[[6605,9881],[2,-3],[4,-1],[12,-1],[3,-3],[-5,-1],[-14,-2],[1,-3],[3,-3],[-3,-3],[-4,-2],[-9,-2],[-8,3],[-9,3],[-5,-2],[-4,-2],[-4,1],[-5,2],[-13,-2],[-4,2],[-3,5],[9,1],[10,-1],[7,5],[9,2],[7,5],[3,1],[8,0],[2,1],[8,1],[2,-1]],[[6767,9884],[-3,0],[-18,0],[-9,2],[-1,1],[-11,1],[4,2],[15,1],[25,-2],[2,-1],[0,-1],[-4,-3]],[[6619,9890],[-10,-1],[-1,1],[0,1],[1,1],[1,3],[4,2],[32,1],[4,-1],[-2,-3],[0,-1],[-29,-3]],[[5847,5122],[-1,-1],[0,-2],[1,-5],[3,-9],[2,-2],[2,-3],[1,-6],[1,-8],[-1,-9],[1,-7],[1,-4],[0,-6],[0,-7],[-1,-4],[-1,-1],[-1,-1],[-1,1],[-2,-1],[-2,-1],[-1,0]],[[5821,5104],[1,0],[6,3],[1,-1],[0,-6],[1,-1],[1,0],[1,1],[4,5],[1,3],[2,4],[2,4],[1,4],[1,2],[1,1],[2,-1],[1,0]],[[4526,6382],[-1,3],[2,30],[0,3]],[[6166,6147],[2,-1],[-1,2],[0,1],[1,3],[3,-6],[0,-6],[-1,-2],[0,2],[-1,1],[0,1],[-1,2],[-3,-1],[-2,2],[-2,5],[-1,4],[1,1],[1,2],[1,3],[-1,3],[2,0],[1,-4],[0,-7],[0,-2],[0,-1],[1,-2]],[[6024,6646],[-2,4],[-1,3],[-2,2],[-5,3],[-1,3],[1,2],[1,-2],[1,-2],[4,-3],[5,-8],[1,0],[-2,-2]],[[6016,6665],[0,-1],[-1,2],[0,5],[1,2],[0,-3],[0,-4],[0,-1]],[[6345,6828],[2,-6],[0,-5],[3,-13],[4,-10],[1,-3],[1,-6],[-1,-2],[0,-2],[3,-6],[5,-4],[2,-2],[2,-2],[-2,-3],[3,-7],[4,-8],[3,-1],[5,-12],[8,-7],[4,-9],[0,-1],[-1,1],[-2,2],[-1,-2],[1,-4],[0,-4],[2,-4],[2,-3],[1,-6],[-1,-12],[-1,0],[-1,1],[-1,0],[-1,0],[2,-9],[1,-6],[2,-6],[1,-7],[1,-4],[5,-8],[1,-7],[2,-12],[3,-7],[1,-6],[3,-4]],[[6423,6601],[2,-2],[2,0],[1,-2],[-2,-3],[-1,-8],[2,-1],[2,-1],[2,-1],[1,0]],[[6443,6278],[-6,-2],[-7,-2],[-7,-2],[-8,-2],[-7,-2],[-10,-3],[-9,-2],[-8,-2],[-8,-3],[-7,-2],[-4,-2],[-5,-5],[-8,-8],[-8,-7],[-4,-4],[-4,-11],[-2,-5],[-4,-9],[-3,-8],[-3,-8],[-1,-8],[-3,-12],[-2,-3],[-3,-3],[-3,-3],[-5,0],[-2,8],[-3,7],[-2,3],[-1,0],[-5,-1],[-5,-1],[-7,2],[-8,1],[-7,1],[-3,1],[-5,5],[-1,1],[-2,1],[-5,0],[-6,0],[-5,-2],[-6,1],[-5,-1],[-2,-2],[-2,0],[-2,-2],[-1,0],[-1,1],[-2,0],[-2,1],[-2,3],[-2,3],[-1,2],[-2,1],[-2,0],[-2,-2],[-1,-2],[-3,-5],[0,-2],[1,-4],[0,-1],[-2,-2],[0,-6],[-1,-2],[0,-7],[1,-6],[1,-2],[0,-2],[-1,-5],[-1,-1],[-1,-5],[-1,-2],[-2,-2],[-5,-8]],[[6188,6127],[0,4],[-2,7],[0,5],[-1,5],[-1,4],[-3,3],[0,6],[-2,5],[-2,4],[-2,8],[-1,10],[-6,14],[-9,12],[-2,7],[-5,14],[-2,12],[-5,13],[-1,5],[0,6],[-2,7],[0,5],[-6,23],[-2,4],[-2,5],[0,4],[0,3],[-4,4],[-4,9],[-11,16],[-6,2],[-4,5],[-3,8],[-4,12],[-6,14],[-5,19],[2,7],[0,5],[-2,9],[-1,6],[-2,6],[1,9],[1,10],[1,5],[0,6],[-1,11],[-1,6],[0,4],[-2,2],[-2,5],[2,0],[-3,6],[-1,3],[-1,9],[-1,6],[-5,15],[-2,9],[-5,11],[-5,9],[-4,3],[-1,4],[-3,0],[-3,5],[-2,0],[-3,1],[-3,10],[-2,9],[-5,11],[1,3],[2,5],[-1,7],[-1,4],[-2,9],[-6,20],[-2,3],[-2,3],[-2,9],[-1,8],[-4,3],[-8,29],[-4,9],[-2,7],[-5,11],[-2,11],[-5,10],[-5,17],[-6,18],[-3,3],[-7,1],[-3,1],[-3,-4],[0,5],[2,7],[3,14],[0,12],[4,37]],[[6024,6451],[0,-13],[1,-11],[4,-15],[4,-8],[1,-4],[0,-2],[0,-2],[-1,2],[-2,1],[0,-7],[1,-5],[0,-9],[1,-10],[-1,-9],[1,-16],[1,-19],[0,-12],[3,-29],[3,-15],[2,-4],[2,-2],[3,-1],[6,-8],[4,-9],[2,-4],[2,-5],[1,1],[1,1],[1,-4],[7,-8],[1,-4]],[[5946,5729],[-5,0],[-1,1],[0,1],[0,3],[0,4],[1,6],[2,7],[0,1],[0,2],[-1,1],[0,1],[1,4],[0,1],[0,2],[0,1],[-2,6],[0,1],[-12,21],[-2,5],[-1,0],[0,1],[-6,4],[0,1],[0,1],[1,3],[0,1],[0,1],[-3,42],[0,1],[0,1],[1,1],[0,1],[0,2],[1,8],[0,7],[1,11],[1,4],[-14,1],[0,-1],[0,-1],[0,-2],[0,-1],[0,-3],[1,-2],[0,-1],[0,-1],[-19,-1],[8,-16],[0,-1],[0,-1],[0,-6],[0,-10],[0,-6],[0,-3],[2,-8],[0,-1],[0,-2],[-14,-23],[0,-1],[-2,-10],[-1,-5],[-1,-2],[-3,-7],[-12,-25],[-2,-1],[-6,-1],[-3,0],[-1,0],[0,-1],[-1,-1],[-1,1],[-7,14],[-13,17],[-1,-2],[-8,-7],[-1,-2],[-1,-1],[0,-9],[-2,-4],[-2,-5],[-6,-2],[-4,-3],[-3,-4],[-1,-1],[-1,-2],[-2,-5],[-1,-4],[1,-4],[-22,0],[-2,3],[-3,13],[-2,-1],[-21,2],[-2,-2],[-6,-5],[-3,-1],[-3,2],[-11,26],[-2,3],[-1,1],[-1,5],[-3,3],[0,1],[-1,3],[0,6],[0,3],[-2,1],[-14,-6],[-2,1],[-3,-1],[-1,-1],[-1,-4],[-1,-3],[0,-4],[0,-3],[-1,-4],[-4,-8],[-1,-4],[0,-10],[0,-4],[-1,-3],[-2,-3],[0,-2],[0,-3],[-1,-7],[0,-2],[-2,-8],[-1,-2],[0,-6],[0,-1],[-7,-5],[-2,-2],[-1,-4],[-1,-2]],[[5634,5813],[1,6],[2,9],[0,5],[-1,4],[-2,4],[-2,0],[-1,2],[-1,2],[-2,2],[-1,4],[-1,5],[1,18],[-1,3],[-2,1],[0,1],[0,3],[-1,11],[-2,9],[1,4],[-2,7],[-3,3],[-3,-1],[-3,-1],[-2,0],[-2,1],[-1,3],[0,3],[0,4],[2,8],[2,6],[5,6],[1,3],[1,4],[0,4],[0,4],[-1,4],[-1,5],[-1,6],[0,4],[0,3],[1,3],[3,4],[0,1],[2,2],[1,1],[4,5],[1,2],[-1,2],[-1,2],[-1,3],[0,3],[-1,6],[0,3],[-1,3],[1,2],[2,3],[1,1],[3,2],[1,2],[1,4],[-1,3],[1,3],[2,6],[1,2],[2,3],[1,4],[1,4],[0,5],[-1,12],[3,6],[2,4],[4,0],[6,1],[4,2],[3,0],[7,-3],[0,1],[1,4],[0,8],[0,26],[0,26],[0,25],[0,26],[0,26],[0,25],[0,26],[0,26]],[[5943,5427],[-6,-14],[-5,-10],[-1,-1],[-1,-2],[-5,0],[-5,1],[-4,6],[-4,-4],[-3,-2],[-2,0],[-4,-1],[-5,-3],[-3,-3],[-1,-2],[-1,-5],[-1,0],[-1,0],[-1,2],[-3,3],[-2,5],[-1,4],[-1,2],[-5,-6],[-2,-1],[-2,0],[-4,3],[-3,3],[-2,0],[-3,-4],[-3,-5],[-2,-5],[-1,-3]],[[4535,5895],[-1,3],[-1,4],[1,3],[2,2],[4,3],[2,-2],[1,0],[0,2],[-1,1],[-2,2],[-1,3],[-2,-2],[-1,-3],[0,-1],[-2,-1],[0,2],[-1,3],[1,1],[0,11],[0,5],[0,5]],[[4539,5966],[0,6],[-2,5],[-3,4],[0,4],[1,3],[2,3],[1,2],[-1,-1],[-3,-1],[-1,-1],[0,6],[-2,6],[-3,11],[-3,5],[-2,9],[-3,4],[-2,1],[-2,0],[-1,-4],[-3,6],[4,2],[7,7],[9,22],[7,25],[1,6]],[[7887,5260],[-4,-3],[-5,3],[2,6],[3,1],[3,-2],[1,-1],[1,-2],[-1,-2]],[[4270,1818],[0,-3],[-4,3],[-1,1],[1,2],[3,0],[1,-1],[0,-2]],[[3969,2070],[3,-3],[2,2],[2,0],[1,-1],[1,-1],[2,0],[3,-4],[-1,-5],[3,1],[2,-3],[1,0],[1,1],[2,2],[1,-2],[1,-4],[2,-2],[1,-4],[2,-5],[1,-1],[2,0],[2,1],[-1,-5],[0,-4],[3,-3],[-2,-2],[-2,-3],[-4,-1],[-1,0],[-3,5],[-2,5],[-4,7],[-1,2],[0,1],[-4,1],[-3,2],[-2,3],[-1,2],[-1,2],[-3,0],[-2,2],[-3,2],[-9,7],[-4,-1],[-1,2],[0,3],[2,2],[-9,1],[-2,1],[2,1],[11,0],[4,0],[1,-1],[3,-3],[4,0]],[[4841,4262],[-2,0],[0,3],[2,3],[1,-1],[0,-3],[-1,-2]],[[4601,4724],[-1,0],[-1,1],[0,1],[1,2],[0,2],[1,0],[1,-2],[0,-1],[0,-1],[-1,-2]],[[9636,4512],[-2,-1],[-1,0],[-2,5],[1,1],[2,0],[0,-3],[2,-2]],[[9460,4504],[-2,-2],[-2,1],[-2,2],[-1,4],[-2,3],[-3,1],[-2,2],[0,1],[-2,1],[-1,2],[0,3],[1,1],[2,-1],[10,-12],[2,-3],[2,-3]],[[9614,4564],[-2,-1],[-1,0],[-2,0],[-2,-4],[-1,0],[-1,0],[-1,4],[0,1],[2,0],[0,3],[2,2],[3,1],[3,-1],[1,-1],[-1,-3],[0,-1]],[[9491,4586],[4,-4],[2,1],[3,-3],[2,2],[1,-3],[4,-12],[0,-4],[2,-3],[-2,0],[-2,1],[-3,-1],[-2,3],[-4,1],[-3,3],[-7,8],[0,5],[-1,2],[0,5],[-3,2],[-3,0],[0,3],[1,4],[2,0],[2,-2],[5,-6],[2,-2]],[[9486,4629],[1,-6],[0,-2],[-2,5],[-1,-2],[-1,2],[0,5],[0,5],[-1,4],[-1,5],[2,-1],[3,-15]],[[9437,4650],[6,-10],[2,1],[8,0],[5,-6],[3,-4],[1,-5],[2,-2],[2,-3],[0,-5],[0,-1],[-3,-2],[-1,-1],[-5,2],[-5,4],[-8,1],[-5,1],[-1,1],[-1,3],[-2,5],[-2,6],[0,3],[0,7],[0,2],[2,3],[2,0]],[[9448,4666],[2,-1],[1,0],[1,-3],[3,-5],[-1,-2],[-2,1],[-1,0],[0,2],[-3,3],[-2,0],[0,2],[2,3]],[[9421,4658],[-2,1],[-1,0],[-1,2],[1,3],[1,2],[1,-1],[1,-1],[1,0],[0,-4],[-1,-2]],[[9378,4679],[0,-2],[-2,1],[-3,3],[0,1],[2,1],[1,-1],[1,-1],[1,-2]],[[9394,4676],[-1,-1],[-1,3],[2,6],[1,-5],[0,-2],[-1,-1]],[[9391,4684],[-3,-5],[-2,2],[-1,3],[0,5],[0,1],[1,1],[1,1],[1,2],[3,-2],[1,-1],[-2,-3],[0,-1],[1,-1],[0,-2]],[[9371,4682],[0,-1],[-2,2],[-3,7],[1,3],[3,5],[1,1],[1,-3],[-1,-5],[-1,-1],[-1,-4],[2,-4]],[[9435,4694],[-1,-1],[-2,2],[-1,2],[0,3],[1,1],[2,-2],[0,-2],[1,-3]],[[9464,4705],[7,-17],[0,-3],[-1,-2],[0,-6],[1,-2],[1,-1],[4,-6],[1,-8],[0,-2],[1,-4],[0,-7],[4,-10],[0,-5],[-1,-2],[-1,1],[-3,12],[-5,5],[0,2],[-4,6],[-3,11],[-3,20],[1,5],[-3,10],[0,2],[2,0],[1,0],[0,1],[1,0]],[[9381,4709],[2,-5],[2,-10],[0,-4],[-2,0],[0,-2],[-2,5],[-3,1],[-1,3],[-1,7],[0,3],[-2,1],[-4,-1],[-1,-3],[-2,1],[-1,3],[1,3],[2,3],[1,3],[2,7],[2,1],[3,-2],[0,-9],[1,-3],[3,-2]],[[9349,4713],[0,-1],[-2,7],[0,3],[1,3],[1,-8],[0,-4]],[[9365,4717],[-1,-1],[-3,0],[-2,6],[0,5],[2,4],[2,0],[1,-1],[1,-4],[1,-4],[-1,-4],[0,-1]],[[9352,4727],[-1,0],[-1,3],[-1,1],[0,3],[-2,6],[-1,4],[2,4],[2,-3],[2,-4],[3,-2],[-1,-3],[-2,-6],[0,-3]],[[9440,4692],[0,-1],[-4,5],[-2,6],[-8,6],[-2,3],[-2,1],[-4,5],[-4,4],[-2,4],[-1,2],[-1,1],[-3,5],[-2,4],[-1,6],[-3,4],[0,2],[7,-3],[4,-7],[3,-4],[1,-3],[3,-3],[2,-1],[3,-4],[2,-1],[2,-2],[11,-17],[-1,-4],[1,-4],[1,-4]],[[9328,4775],[-3,-1],[-2,1],[1,5],[1,2],[4,-4],[-1,-3]],[[9374,4762],[1,-2],[-3,-4],[-2,2],[-1,2],[0,1],[-2,-1],[-4,2],[-5,8],[-6,16],[-6,8],[-1,3],[0,4],[1,2],[3,-2],[5,-7],[7,-7],[2,-4],[1,-9],[2,-3],[4,-7],[2,-1],[1,0],[1,-1]],[[4652,5612],[-1,-1],[-2,3],[-9,6],[2,3],[7,1],[2,-2],[1,-1],[0,-3],[0,-6]],[[4680,5582],[-1,2],[-5,8],[-6,6],[-11,9],[-4,2],[0,3],[1,6],[-2,7],[1,5],[-1,0],[-2,-3],[-3,1],[-3,5],[-1,1],[-1,2],[-1,12],[-1,5],[-2,3],[-4,1],[-1,7],[-2,5],[0,4],[2,-1],[1,-2],[2,-1],[3,6],[2,3],[0,3],[0,1],[-1,-2],[-4,1],[-1,-3],[-2,0],[-1,7],[0,4],[1,4],[3,1],[1,1],[-3,1],[-3,5],[-1,4]],[[2560,5956],[0,-1],[0,-6],[-1,-3],[-2,-3],[-2,-1],[-5,0],[-6,3],[-5,4],[-3,0],[1,-1],[2,-1],[3,-3],[-1,-1],[-10,6],[-11,11],[-7,2],[-8,3],[-4,7],[-4,3]],[[6359,5832],[0,-16],[0,-15],[0,-16],[0,-27],[0,-9],[0,-14],[0,-7],[-4,-12],[-5,-16],[-5,-16],[-5,-14],[-4,-13],[-4,-13]],[[6201,5846],[5,-9],[5,-18],[7,-14],[8,-13],[3,-5],[3,-2],[16,0],[11,12],[10,9],[3,2],[6,-2],[6,-1],[6,-3],[3,1],[11,10],[7,10],[5,4],[2,0],[7,-3],[8,1],[12,9],[4,2],[2,0],[7,-4],[1,0]],[[6359,5832],[3,1],[9,4],[7,6],[13,5],[10,11],[2,6],[3,7],[4,2],[11,-8],[2,-1],[-1,-5],[0,-5],[-2,-9],[-2,-9],[1,-15],[1,-24],[0,-4],[-1,-3],[0,-3],[-2,-1],[0,-2],[1,0],[3,2],[0,3],[0,2],[3,-3],[2,-2],[1,-3],[0,-2],[-4,1],[-1,2],[-5,-3],[-3,-3],[-1,-5],[0,-19],[-2,-12],[0,-16],[-4,-11],[-1,-8],[-6,-15],[-3,-13],[-1,-6],[-5,-18],[-7,-14],[-2,-17],[-3,-11],[-3,-10],[-6,-18],[-3,-12],[-4,-21],[-1,-14],[-11,-39],[-12,-31],[-7,-26],[-13,-31],[-17,-39],[-23,-47],[-7,-9],[-25,-29],[-16,-24],[-8,-17],[-9,-14],[-7,-13],[-21,-46],[-2,-5],[-2,-4],[-3,-7],[-2,-4],[-5,-13],[-3,-7],[-4,-6],[-1,-5],[-1,-5],[-1,-4],[-3,-13],[-3,-8],[-3,-7]],[[3440,7877],[-1,0],[-2,1],[1,1],[1,1],[1,0],[0,-1],[0,-1],[0,-1]],[[3437,7882],[-3,-3],[-1,2],[1,1],[1,4],[0,1],[-2,8],[1,1],[0,1],[2,-2],[0,-2],[-1,-5],[1,-3],[1,-2],[0,-1]],[[5184,5191],[-2,-4],[-1,1],[-1,3],[-1,6],[0,3],[2,3],[3,4],[1,0],[2,-4],[0,-5],[-3,-7]],[[5206,5274],[-1,-1],[-2,1],[0,2],[2,5],[0,1],[1,-1],[0,-1],[0,-2],[0,-4]],[[3411,5503],[0,-1],[1,7],[1,5],[0,6],[2,6],[2,3],[14,-3],[7,-3],[8,-5],[1,-6],[0,6],[0,5],[2,4],[5,2],[7,-2],[7,2],[8,0],[14,-5],[6,-3],[2,-3],[1,-5],[-1,-6],[-1,-6],[-2,-9]],[[5626,8010],[-1,-2],[-1,-3],[-1,-3],[-2,-3],[-1,-8],[-1,-3],[-4,-7],[-1,-9]],[[5377,7806],[1,1],[3,3]],[[5459,8426],[-2,-3],[-1,0],[-1,4],[0,10],[0,5],[6,18],[3,1],[4,11],[1,5],[2,4],[1,4],[0,2],[2,-1],[1,-1],[-2,-2],[0,-3],[0,-1],[-5,-13],[-1,-8],[-1,-2],[-7,-30]],[[5529,8515],[-2,-1],[-1,-4],[-2,-1],[-2,-1],[-1,-13],[4,-5],[-2,-1],[-2,-1],[-1,-2],[-1,-5],[-5,-3],[-1,-2],[-3,-4],[-1,-6],[-3,-3],[-2,-1],[1,5],[2,5],[-2,3],[-1,4],[-2,4],[2,3],[-1,7],[0,6],[2,3],[2,3],[4,6],[3,4],[6,2],[2,-2],[1,4],[1,1],[2,-1],[3,-4]],[[5532,8520],[-1,-4],[-1,1],[-2,2],[3,4],[4,0],[1,-1],[-4,-2]],[[5511,8584],[-1,-1],[-1,0],[1,3],[0,1],[2,1],[1,0],[-2,-4]],[[5516,8609],[-1,-2],[0,3],[0,2],[2,2],[2,-1],[0,-1],[-2,-2],[-1,-1]],[[5670,8974],[-7,-1],[-5,2],[-3,-1],[-5,0],[-6,-1],[-1,-2],[-2,-1],[-5,3],[-5,5],[-3,-4],[-2,-1],[-3,4],[-1,0],[-1,-1],[-1,-3],[-1,-2],[-1,-2],[0,-6],[0,-1],[-5,1],[0,-2],[1,0],[1,-1],[-2,-2],[-5,0],[0,-1],[1,-2],[-1,-2],[-1,-1],[-5,-1],[-4,0],[0,-1],[-1,-2],[1,-1],[1,-1],[1,-1],[0,-2],[-1,-1],[-4,4],[-1,0],[1,-2],[2,-2],[1,-2],[1,-3],[0,-2],[-4,-7],[-4,-4],[-3,-3],[-1,-4],[1,-2],[3,-3],[1,-6],[2,-5],[3,-4],[0,-3],[-1,-2],[-6,-5],[-7,-7],[-7,-18],[-2,-2],[-6,-3],[-3,-3],[-4,-3],[-8,-3],[-4,-5],[-2,-4],[-2,0],[-1,2],[-3,1],[0,-3],[0,-2],[-4,3],[-2,-3],[-1,-4],[-6,-7],[-6,1],[-1,-1],[2,-1],[0,-1],[-1,0],[-1,0],[-3,-1],[-2,0],[-1,-3],[-1,-4],[-3,-1],[-2,-1],[-1,-2],[5,0],[0,-2],[0,-2],[-1,-1],[-6,-3],[-1,-2],[-1,-2],[-2,0],[0,2],[0,1],[-4,0],[-1,3],[-1,-1],[1,-2],[1,-3],[1,-4],[-1,-2],[-1,-1],[1,-1],[2,-1],[0,-2],[-2,-1],[-3,-4],[-3,0],[-2,-3],[-2,0],[-2,2],[-3,1],[-1,-2],[0,-3],[2,-5],[3,-4],[2,-2],[-2,-1],[-1,-3],[-2,-8],[-1,-3],[-1,-6],[1,-5],[0,-2],[2,-3],[-4,0],[-4,2],[1,-4],[-3,-5],[1,-4],[0,-2],[0,-5],[1,-1],[0,-3],[-1,-2],[1,-1],[0,-6],[1,-10],[-1,-1],[2,-9],[0,-2],[0,-4],[3,-3],[2,0],[3,0],[1,-1],[1,-3],[1,-2],[2,0],[4,2],[2,1],[2,-5],[4,-6],[2,-2],[5,-2],[4,-5],[-1,-5],[2,-2],[5,-3],[2,-3],[1,-2],[1,-3],[2,-6],[-1,-4],[-2,-2],[-5,-4],[-2,-3],[-1,-2],[-5,-5],[-2,0],[-2,-3],[-2,-1],[-1,1],[-6,-4],[1,-2],[4,-1],[2,1],[2,2],[2,1],[1,-1],[2,2],[2,1],[1,-1],[2,-4],[-4,-2],[-2,0],[-1,-7],[-2,-2],[-1,-2],[-5,-2],[-3,-4],[-4,-3],[-2,1],[-3,-3],[-6,-3],[-3,-5],[-6,-4],[-4,-3],[-9,0],[-9,1],[-3,-2],[3,0],[2,-2],[2,1],[6,-1],[3,-1],[4,-5],[-3,-2],[-5,-1],[2,-8],[1,-5],[-2,-3],[0,-14],[-3,-1],[-1,-5],[1,-3],[0,-7],[1,-4],[1,-4],[-1,-4],[-4,-10],[0,-4],[1,-3],[1,-4],[-2,-8],[-2,-7],[-1,-6],[-4,-7],[-2,-5],[-4,-16],[-2,-3],[-3,-2],[-3,2],[-2,1],[-4,0],[-5,-2],[-7,1],[-8,0],[-2,-2],[1,-6],[-2,-1],[-3,2],[-3,-2],[-1,-2],[-4,-5],[-2,-3],[0,-6],[2,-6],[2,-6],[-5,-7],[-2,-1],[-8,2],[-13,-4],[-13,3],[2,4],[0,3],[1,5],[0,5],[0,3],[-1,3],[-3,5],[-7,14],[-2,6],[-1,3],[1,0],[5,-3],[2,0],[1,2],[-2,4],[-1,2],[-1,4],[3,1],[3,-1],[1,4],[-1,6],[-2,2],[-2,0],[-4,10],[-4,5],[-8,18],[-3,13],[-2,-2],[-2,6],[0,5],[-1,4],[-4,2],[0,3],[0,12],[-5,2],[-2,6],[-1,13],[-3,2],[-2,0],[0,3],[1,3],[-2,12],[0,10],[-1,4],[-1,3],[1,4],[0,2],[3,0],[3,-3]],[[5891,3638],[0,1],[-2,1],[-1,-1],[-1,-8],[0,-12],[0,-8],[-6,0],[-7,1],[-6,3],[-6,7],[-3,11],[-2,8],[-2,0],[0,1],[0,9],[0,9],[0,2],[4,12],[2,7],[2,6],[3,8],[4,5],[1,1],[1,0],[6,-7],[7,-7],[1,1],[1,1]],[[3249,6225],[0,-2],[0,-1],[-2,1],[-1,1],[0,1]],[[6542,4913],[0,-5],[-1,2],[-1,3],[-1,3],[-1,2],[2,3],[2,-8]],[[5999,7178],[-2,13],[-1,6],[0,6],[2,10],[-1,4],[0,3],[0,4],[-4,9],[2,16],[1,4]],[[5996,7253],[3,-1],[4,-4],[1,0],[1,6],[1,2],[3,2],[1,9],[1,2],[2,1],[2,0],[2,1],[0,2],[-3,11],[1,3],[1,11],[1,4],[1,2],[3,-1],[5,-2],[1,-3],[2,-3],[3,0],[4,0],[3,-1],[3,2],[5,4],[3,1],[2,2],[8,6],[3,0],[3,-1],[1,-1],[4,-4],[3,-4],[2,-2],[4,0],[6,0],[7,0],[4,1],[5,2],[9,5],[12,10],[7,6],[3,0],[4,0],[4,-1],[5,-1],[2,0],[5,1],[6,2],[4,2],[5,3],[3,5],[1,0],[1,-1],[1,0],[1,-3],[1,-7]],[[2990,6442],[4,-3],[2,1],[0,-1],[-1,-1],[-1,0],[-3,-1],[-1,0],[0,2],[0,3]],[[3009,6437],[-2,2],[-3,0],[0,3],[1,0],[4,-1],[1,-2],[-1,-2]],[[3003,6442],[0,-1],[-2,2],[0,2],[-1,0],[-1,1],[0,2],[3,0],[0,-5],[1,-1]],[[5045,5542],[-9,-4],[-4,-3]],[[7768,5559],[-1,0],[-1,5],[1,7],[2,-9],[-1,-3]],[[7751,5621],[1,-7],[-1,2],[-1,3],[0,4],[0,1],[1,-3]],[[7738,5641],[0,-1],[-2,11],[2,-3],[0,-7]],[[7733,5639],[0,-4],[-2,0],[-1,-3],[-1,8],[1,12],[0,2],[1,-3],[3,-1],[-1,-7],[0,-4]],[[7730,5705],[-2,0],[1,3],[0,2],[1,0],[0,-3],[0,-2]],[[7779,5736],[0,-3],[-1,-4],[-2,-3],[-1,4],[0,4],[1,2],[2,-1],[1,1]],[[7779,5742],[0,-1],[-1,2],[-1,2],[0,3],[1,0],[1,-3],[0,-3]],[[7849,5856],[0,-6],[-2,3],[1,3],[0,1],[1,-1]],[[7844,5874],[0,-1],[-1,1],[-2,0],[-1,8],[0,2],[1,-1],[2,-4],[1,-3],[0,-2]],[[7858,5858],[-1,4],[-2,7],[-1,7],[-3,8],[-2,3],[0,-3],[-1,-3],[-3,4],[-3,5],[-2,8],[-1,-2],[0,-2],[-3,6],[-2,6],[-3,1],[-2,2],[-1,3],[-3,3],[-8,-4],[-10,3],[-4,-3],[-1,2],[-1,3],[1,6],[0,13],[1,8],[0,7],[0,3],[1,4],[-2,2],[-7,4],[-1,2],[-2,-3],[-8,-2],[-4,-2],[-3,-5],[0,-6],[1,-5],[2,-7],[-3,-16],[-1,-4],[1,-20],[0,-10],[-2,-7],[-3,-7],[-1,-10],[-2,-6],[-2,-11],[-2,-14],[-1,-7],[-1,-12],[-6,-18],[-1,-11],[-2,-4],[1,-3],[0,-5],[-1,-14],[0,-12],[1,-6],[2,-12],[0,-3],[-1,-6],[3,-2],[1,-1],[9,6],[3,-1],[2,-6],[0,-4],[2,-26],[1,-4],[2,-5],[2,-5],[0,1],[0,2],[1,2],[1,-5],[2,-9],[5,-48],[1,-6],[1,-6],[-3,3],[-1,11],[0,4],[-1,1],[-2,0],[0,2],[1,3],[0,4],[-2,4],[-3,-3],[0,-7],[2,-6],[4,-13],[2,-5],[2,-2],[2,1],[3,-5],[3,-5],[6,-8],[4,1],[4,2],[3,-1],[3,-2],[3,-6],[5,-16],[8,-14]],[[7780,5555],[-7,18],[-4,7],[0,13],[-1,3],[-2,0],[-1,4],[1,7],[-2,-1],[-3,0],[-2,2],[-1,11],[-1,4],[-3,5],[-3,0],[-1,3],[1,7],[-2,4],[-3,4],[-3,2],[-2,11],[-2,3],[-1,2],[-3,-1],[0,-4],[-2,-4],[-2,0],[-1,3],[-2,11],[0,7],[0,13],[3,11],[1,19],[2,12],[1,4],[2,15],[4,21]],[[6962,7542],[-1,0],[-1,2],[-1,2],[1,1],[1,-2],[1,-2],[0,-1]],[[6882,7325],[1,4],[0,14],[1,5],[5,8],[2,7],[2,5],[2,2],[1,4],[2,5],[0,3],[0,3],[-1,1],[-2,4],[-3,5],[-1,5],[-1,6],[0,5],[2,13],[0,2],[-1,2],[-2,1],[-2,1],[-2,-1],[-3,0],[-2,1],[-1,1],[0,5],[-1,2],[0,1],[-6,2],[-2,2],[0,1],[2,13],[1,1],[1,2],[1,2],[5,4],[6,-2],[4,-1],[5,-1],[2,-1],[2,0],[2,0],[1,2],[2,4],[1,6],[1,5],[1,1],[2,-1],[0,1],[1,2],[0,1],[0,1],[1,-2],[1,0],[0,1],[0,2],[-1,1],[-1,4],[0,1],[1,1],[2,1],[2,0],[0,1],[0,2],[-1,1],[-4,-1],[-4,0],[-1,1],[1,1],[0,1],[9,3],[4,-1],[3,-1],[2,0],[-2,5],[2,1],[0,2],[-2,13],[1,2],[2,2],[0,5],[1,3],[1,2],[3,-2],[3,-5],[2,-1],[1,0],[1,1],[7,5],[4,3],[4,4],[1,2],[1,6],[1,0],[1,0],[4,-7],[2,-4],[0,-1],[-1,-1],[1,-1],[3,-3],[0,-1],[-1,-2],[0,-1],[-1,0],[-4,-6],[-5,-6],[0,-1],[0,-2],[0,-1],[1,-1],[2,-1],[2,-2],[0,-3],[1,-3],[2,-1],[7,2],[1,0]],[[6475,7419],[-1,-3],[-1,8],[-1,9],[1,3],[1,0],[-1,-4],[2,-13]],[[6497,7335],[0,4],[-2,15],[-1,14],[0,7],[1,14],[0,7],[0,6],[0,6],[1,7],[0,7],[0,5],[-2,4],[-2,5],[-1,3],[0,3],[-2,1],[-2,3],[-2,2],[-4,2],[-2,0],[-2,-2],[-1,-3],[-1,5],[0,5],[3,10],[2,-3],[2,-1],[3,0],[3,1],[0,3],[-2,2],[-1,2],[-1,4],[0,5],[1,5],[-1,1],[-1,1],[-3,0],[-5,2],[-4,0],[-1,-5],[3,-7],[-2,3],[-2,5],[-3,8],[-2,9],[0,11],[2,8],[1,8],[2,10],[1,11],[2,-5],[1,-4],[3,-4],[1,-1],[4,-1],[2,0],[3,3],[3,-1],[2,-4],[2,-5],[3,-1],[6,3],[3,1],[2,-1],[2,-1],[1,1],[-1,4],[-1,4],[2,2],[5,-2],[3,1],[0,1],[1,1],[0,4],[0,3],[0,3],[-1,3],[-2,4],[-9,10],[-3,4],[-2,5],[-2,7],[-1,8],[-1,5],[-3,13],[-1,2],[-2,0],[-3,1],[-4,-1],[-6,-2],[-3,0],[-1,-1],[-4,-5],[-2,-5],[-3,-11],[2,-3],[0,-2],[-1,-16],[1,-8],[-1,0],[0,2],[-2,7],[-4,10],[-3,14]],[[6554,7564],[8,-1],[6,0],[8,-1],[3,-1],[3,0],[1,0],[1,2],[1,1],[1,2],[0,1],[-1,1],[-2,3],[-1,13],[0,11],[2,3],[2,2],[3,8],[2,2],[2,2],[9,0],[3,2],[1,2],[2,6],[1,5],[1,2],[1,2],[2,0],[2,-1],[2,-1],[1,-1],[2,-2],[1,-3],[0,-2],[0,-1],[1,0],[1,0],[1,0],[0,1],[0,2],[-2,3],[-4,7],[-2,3],[-1,2],[0,1],[1,2],[2,2],[2,-1],[4,-1],[1,1],[2,6],[4,-6],[4,-7],[1,-1],[3,-1],[3,0],[1,-1],[1,-1],[2,-8],[2,-1],[3,-2],[8,0],[3,0],[2,-3],[2,-2],[0,-1],[0,-2],[-1,-1],[0,-4],[0,-3],[0,-1],[-1,-2],[1,-1],[4,-2],[1,-3],[1,-2],[1,-1],[-1,-2],[-2,1],[-1,-2],[0,-3],[1,-4],[1,-2],[-1,-3],[-1,-4],[0,-3],[0,-2],[4,-3],[7,-7],[1,0],[7,1],[3,1],[2,-1],[5,-2],[2,-1],[2,0],[2,1],[2,3],[0,1],[1,0],[2,0],[4,-2],[4,-4],[3,-4],[1,-4],[2,-8],[2,-12],[3,-8],[3,-4],[2,-8],[2,-17],[1,-4],[1,-1],[4,-5],[7,-9],[4,-4],[6,-8],[6,-7],[6,-11],[2,-2],[5,-6],[6,-6],[4,2],[6,-9],[2,-4],[1,-1],[5,-4],[7,-7],[9,-11],[6,-7],[2,0],[1,0],[2,1],[2,1],[3,-1],[3,-3],[2,-2],[3,-3],[2,-2],[1,-2],[6,-2],[0,-1],[1,-2],[0,-1],[-3,-9],[0,-11],[0,-8],[0,-6]],[[8445,4646],[4,5],[7,3]],[[8469,4669],[3,5],[3,8],[1,4],[4,3],[2,1],[12,5],[3,0],[7,0],[10,1],[2,1],[4,2],[3,2],[1,2],[2,2],[3,-2],[4,-1],[1,-2],[1,-1],[-5,-10],[-5,-7],[-4,-2],[-3,-2],[-3,-3],[-2,-5],[-3,-2],[-3,-1],[-3,-1],[-3,-3],[-3,-5],[-2,0],[-1,0],[-3,-2],[-9,-6],[-6,-8],[-4,-6]],[[8489,4715],[-2,-10],[-2,2],[3,6],[1,1],[0,1]],[[141,3957],[0,-9],[-1,4],[0,2],[1,3]],[[134,3964],[1,0],[0,2],[2,1],[0,-2],[-2,-6],[-2,2],[-3,4],[-1,3],[1,2],[0,-1],[1,-1],[2,-1],[1,-1],[-1,-1],[1,-1]],[[168,4110],[-1,-3],[-1,0],[-1,2],[0,1],[2,4],[1,0],[1,-1],[0,-1],[-1,-2]],[[3305,5768],[-5,-4],[-11,0],[-5,1],[-4,-1],[7,7],[1,3],[3,0],[0,1],[1,16],[0,4],[-1,2],[-1,1],[-2,2],[-1,1],[2,2],[3,1],[3,2],[5,0],[3,2],[5,0],[-3,-7],[-1,-3],[1,-6],[-1,-4],[1,-6],[1,-4],[-1,-3],[0,-6],[0,-1]],[[3312,5828],[-2,-1],[1,2],[2,4],[4,3],[1,0],[0,-3],[-6,-5]],[[5304,7126],[-1,0],[-1,-2],[-1,0],[-2,2],[-1,0],[-1,1],[1,7],[0,2],[5,0],[3,-4],[0,-1],[0,-1],[-1,-2],[-1,-2]],[[5313,7186],[-5,-5],[1,4],[3,4],[1,-1],[0,-2]],[[5238,7311],[7,4],[6,9],[2,2],[16,9],[2,-1],[2,-1],[-1,-3],[-1,-3],[2,-4],[1,2],[0,2],[0,3],[3,0],[3,-1],[3,-2],[-1,-10],[5,-10],[-2,-5],[4,-3],[3,4],[1,5],[6,3],[5,7],[3,1],[0,-6],[2,-5],[-2,-2],[-3,-6],[-5,-14],[-4,-4],[-3,-6],[-1,-4],[-1,-5],[1,-8],[3,-8],[2,-5],[3,-2],[6,-8],[0,-4],[1,-6],[0,-7],[2,-5],[-4,-12],[-3,-9],[-5,-12],[-4,-7],[-9,-12],[-2,-4],[-2,-4],[-1,-4],[1,-5],[3,-11],[4,-8],[4,-3],[7,1],[0,-4],[0,-6],[3,0],[2,1],[2,6],[3,-4],[2,-11],[3,-4],[1,-1],[-2,-1],[0,-1],[1,-1],[2,-1],[2,1],[3,-3]],[[5721,7496],[-7,-2],[-2,2],[2,3],[4,2],[1,0],[2,-3],[0,-2]],[[5996,7253],[2,4],[-2,10],[-2,8],[2,6],[4,6],[5,8],[0,5],[-1,4],[-1,2],[-2,4],[-4,-4],[-3,-4],[-2,-1],[-2,-2],[-1,-4],[-2,-3],[-4,-2],[-6,4],[-7,5],[-4,4],[-3,1],[-2,-1],[-9,-11],[-7,-15],[-2,-3],[-8,-6],[-4,-2],[-3,0],[-9,-3],[-5,0],[-4,-4],[-7,4],[-4,5],[-3,5],[-4,10],[-3,5],[-7,5],[-12,10],[-3,2],[-8,1],[-8,1],[-2,-4],[-1,-15],[-1,-5],[-1,-8],[-1,-2],[-1,-2],[-3,3],[-2,1],[-4,-3],[-8,-5],[-3,-1],[-9,6],[-4,4],[-2,4],[-1,7],[-1,4],[0,3],[-1,3],[-2,2],[-2,-3],[-2,0],[-3,2],[-6,6],[-5,0],[-3,-7],[-3,-2],[-2,-1],[0,2],[2,5],[-8,-1],[-4,-4],[-4,1],[-2,1],[0,2],[3,1],[2,2],[8,1],[2,1],[3,5],[3,5],[1,2],[-3,0],[-13,-2],[-9,1],[-1,-2],[-1,0],[-1,6],[2,2],[2,0],[4,2],[0,5],[-3,4],[-1,2],[-3,0],[-1,2],[-1,6],[-1,7],[-3,3],[1,2],[4,2],[1,9],[-1,5],[-2,1],[-6,4],[-2,0],[-2,5],[-3,3],[-2,-1],[-1,-2],[-2,1],[-2,3],[-3,2],[-1,2],[1,5],[2,0],[1,4],[-2,7],[0,3],[2,1],[2,0],[2,-4],[1,-4],[-1,-4],[1,-4],[1,-1],[1,4],[1,1],[1,-2],[3,-1],[6,2],[1,3],[-4,-1],[-2,2],[-2,5],[-1,4],[0,2],[-1,2],[1,2],[3,2],[3,7],[-1,1],[-2,1],[-1,0],[-2,2],[0,3],[1,2],[0,4],[-3,8],[-1,2],[0,3],[3,4],[3,6],[0,2],[-2,1],[-10,-3],[-4,-2],[-6,-1],[-1,3],[0,3],[2,5],[0,12],[1,7],[3,2],[5,10],[7,12],[8,0],[3,3],[4,0],[1,-2],[1,-3],[4,-3],[7,1],[1,1],[2,2],[-3,5],[1,2],[3,0],[3,-1],[0,-1],[-1,-2],[-1,-3],[1,-1],[9,2],[10,-2],[3,1],[7,0],[2,2],[-3,3],[-2,1],[-1,1],[-2,1],[5,6],[2,1],[13,4],[9,1],[1,2],[-2,0],[-12,2],[-3,3],[-4,5],[-1,1],[-1,3],[1,5],[1,5],[1,2],[5,0],[17,-4],[11,3],[13,-7],[13,2],[2,2],[3,10],[18,15],[6,8],[6,5],[12,5],[9,6],[3,1],[22,-3],[16,-1],[7,7],[4,-2],[0,-3],[-1,-2],[0,-3],[2,-6],[3,-4],[7,-5],[10,4],[2,0],[2,-1],[3,-15],[3,-5],[4,-4],[3,-1],[2,4],[1,2],[4,0],[6,-5],[2,-5],[10,-4],[9,-2],[4,-5],[14,-4],[4,1],[9,4],[16,5],[10,-7],[3,-1],[3,1],[3,-2],[4,1],[12,9],[3,4],[4,2],[4,2],[9,10],[2,5]],[[5778,7601],[-1,-6],[2,-8],[4,-10],[4,-5],[17,-12],[3,-1],[-1,-6],[-1,-4],[-1,-3],[-5,-2],[-14,5],[-3,1],[-2,-1],[-5,-4],[-5,1],[-7,-2],[-2,-8],[-4,-9],[-8,-7],[-6,-4],[-8,-13],[-4,-8],[-2,-2],[-2,-1],[1,4],[1,3],[0,3],[0,4],[3,4],[2,3],[8,6],[2,5],[-6,0],[-6,-1],[-4,0],[-3,0],[-1,4],[-1,3]],[[8288,6596],[1,-4],[0,-2],[-4,1],[0,3],[1,-1],[2,3]],[[8361,6487],[-2,-7],[-2,-7],[0,-7],[0,-7],[0,-6],[-1,-6],[-3,1],[-1,5],[-1,7],[-2,9],[0,2],[-3,5],[-3,3],[-2,4],[1,-1],[-2,5],[-1,5],[-2,15],[-1,4],[-1,3],[0,3],[0,4],[1,5],[0,6],[0,7],[0,7],[1,3],[13,45],[4,9],[2,5],[2,5],[1,7],[2,6],[2,2],[7,5],[3,5],[2,2],[2,0],[1,-3],[1,-3],[2,-1],[3,-3],[1,-3],[1,-5],[-2,-4],[-1,-4],[0,-5],[0,-6],[0,-6],[-2,-14],[-3,-9],[-1,-5],[-1,-11],[-1,-11],[-1,-14],[-3,-14],[-1,-7],[-2,-5],[-3,-11],[-4,-9]],[[6102,4724],[-1,0],[-1,0],[-1,3],[2,2],[2,4],[3,6],[1,3],[1,1],[0,-4],[-2,-10],[-2,-1],[-2,-4]],[[6097,4828],[2,-12],[-1,-2],[-1,-2],[-1,0],[-1,2],[-1,4],[-1,-1],[-2,5],[-2,0],[-1,6],[0,5],[0,9],[2,5],[1,7],[2,-5],[0,-8],[2,-9],[1,-3],[1,-1]],[[6107,4901],[0,-3],[-1,-2],[1,-9],[-1,-6],[-1,-8],[-1,-3],[-2,1],[-1,1],[0,3],[1,14],[-1,11],[3,-1],[3,2]],[[6089,4914],[-1,-5],[-2,-12],[0,-5],[-1,-6],[-1,-4],[-2,-16],[-2,-6],[-2,-15],[-1,-11],[2,-8],[0,-7],[3,-7],[3,-3],[1,-3],[3,-7],[2,-8],[5,-3],[2,-9],[-1,-6],[-2,-4],[-2,-8],[-2,-10],[0,-16],[1,3],[3,-4],[0,-12],[-3,-13],[-1,-6],[0,-6],[2,-16],[3,-8],[0,-2],[-1,-2],[6,-15],[-1,-12],[2,-10],[1,-8],[1,-7],[0,-4],[-1,-5],[4,-1],[2,-4],[1,-4],[3,0],[1,-3],[3,-2],[4,-7],[2,-3],[0,-2],[0,-1]],[[5914,4642],[-2,1],[-3,4],[-4,3],[-3,3],[-2,3],[-3,2],[-3,0],[-2,3],[-3,1],[-2,0],[-1,2],[0,5],[-1,1],[-2,1],[-2,0],[-1,-1],[-1,1],[-1,2],[-2,4],[-1,5],[-2,3],[-3,3],[-7,0],[-2,1],[-1,2],[-2,5],[-2,5],[-2,7],[0,4]],[[5847,5122],[0,1],[2,-1],[2,1],[2,3],[2,0],[1,0],[3,0],[5,0],[5,0],[5,0],[5,0],[5,0],[5,0],[5,0],[5,0],[5,0],[5,0],[4,0],[5,0],[5,0],[5,0],[5,0],[5,0],[3,0]],[[5889,7845],[3,-3],[-3,1],[-9,3],[-4,2],[-1,3],[0,4],[2,-4],[1,-2],[11,-4]],[[6061,7896],[-1,0],[-10,0],[-8,-1],[-5,-9],[-4,0],[-4,-2],[-4,-3],[-4,-7],[-2,3],[-4,0],[-4,-1],[-4,-5],[-2,0],[-5,1],[-5,-3],[-12,-14],[-4,-10],[-2,-2],[-2,-2],[-2,-2],[-1,0],[6,8],[1,2],[1,2],[0,4],[-2,4],[-5,-10],[-2,-2],[-4,-3],[0,-6],[1,-5],[1,-7],[3,-10],[7,-15],[3,-5],[2,-2],[3,0],[5,4],[3,1],[5,-2],[2,3],[2,2],[3,0],[4,-1],[4,-3],[-1,-5],[-2,-4],[-1,-4],[-1,-6],[-4,-2],[-5,1],[-5,-2],[-2,2],[-1,2],[-3,2],[-3,1],[-2,-2],[-3,-7],[-6,-4],[-2,-6],[-5,2],[-5,-1],[-7,-5],[-5,-11],[-6,-6],[-5,-3],[-4,1],[-3,2],[-5,7],[0,3],[1,1],[1,3],[2,13],[0,5],[-1,6],[-5,6],[-4,-1],[-2,1],[-7,9],[-4,0],[-5,-1],[-1,1],[-2,3],[9,11],[9,9],[4,1],[5,4],[6,6],[-1,5],[-1,4],[-3,-1],[-2,-1],[-5,4],[-1,2],[-8,-3],[-4,1],[-8,-3],[-5,3],[-8,7],[-3,2],[-2,0],[-2,2],[2,1],[2,0],[2,1],[1,2],[0,2],[-5,2],[-4,1],[-2,2],[-2,2],[4,0],[5,-2],[7,0],[6,-2],[2,2],[4,4],[0,2],[-6,-3],[-6,2],[-2,2],[-2,4],[-1,5],[0,4],[0,7],[-2,6],[-1,4],[-2,3],[2,-7],[1,-5],[1,-4],[0,-12],[-1,-4],[-3,-1],[-3,0],[-4,2],[1,6],[-2,-2],[-2,-6],[-3,-1],[-5,0],[-9,-4],[-1,-4],[-1,-7],[-2,-3],[0,-2],[-4,-10],[-1,0],[-7,-13],[-1,-1],[-5,-3],[-3,-3],[-2,-1],[-4,1],[-2,-2],[0,-2],[0,-5],[2,-3],[1,-11],[0,-5]],[[3517,3240],[-1,-2],[-2,-4],[-1,-10],[-6,-13],[-1,-7],[-7,-8],[-4,-9],[-3,0],[-2,-4],[-15,-11],[-6,2],[-4,0],[-3,5],[-9,2],[-5,-2],[-7,-6],[-2,0],[-2,1],[-4,2],[-2,5],[-11,5],[-8,13],[-11,1],[-8,-2],[-1,2],[-1,3],[-1,5],[-7,11],[-6,11],[-1,12],[1,12],[2,14],[-1,5],[2,2],[2,1],[2,3],[2,6],[0,4],[-1,8],[-1,11],[-1,5]],[[678,6279],[-1,-3],[-2,0],[-5,6],[-1,3],[1,15],[-2,12],[-3,9],[2,5],[2,4],[3,7],[-2,8],[0,6],[1,1],[6,-7],[12,-10],[3,-6],[1,-8],[2,-1],[1,-5],[3,-4],[1,-3],[-1,-4],[-6,-7],[-7,-4],[-6,-9],[-2,-5]],[[643,6380],[-2,-1],[-1,0],[-1,4],[-2,5],[3,1],[2,-1],[1,-2],[1,-2],[-1,-4]],[[653,6389],[1,-1],[3,2],[2,1],[3,-4],[2,-3],[2,-3],[1,-2],[-1,-2],[-2,-4],[-4,-1],[-2,-2],[-3,1],[-1,0],[0,5],[-1,6],[-2,-1],[-1,2],[-3,5],[0,2],[1,5],[2,0],[2,-2],[1,-4]],[[633,6406],[6,-2],[1,1],[1,-1],[5,-1],[1,-1],[-1,-3],[-3,-2],[-5,2],[-7,1],[0,2],[1,2],[0,3],[1,-1]],[[617,6420],[1,-1],[1,1],[0,-5],[2,-2],[0,-2],[-1,-2],[-3,0],[-2,1],[-1,3],[-2,-1],[0,2],[0,1],[-1,0],[1,-3],[-3,-1],[-1,1],[-1,3],[-3,7],[0,2],[-1,3],[5,1],[2,5],[2,1],[3,-9],[0,-2],[1,-2],[1,-1]],[[551,6442],[-1,-3],[-1,1],[0,2],[0,3],[2,3],[2,4],[1,-1],[-1,-2],[0,-3],[-2,-2],[0,-2]],[[573,6447],[-3,-3],[-1,1],[-3,1],[-1,2],[-2,2],[-2,3],[2,6],[4,5],[7,0],[1,-4],[0,-3],[-1,-3],[0,-5],[-1,-2]],[[2728,6598],[-1,-1],[0,1],[1,1],[1,0],[0,-1],[-1,0]],[[2734,6601],[-2,-1],[2,2],[0,4],[1,-3],[0,-1],[-1,-1]],[[2740,6604],[0,-2],[-1,1],[0,2],[-1,3],[0,1],[3,-3],[0,-1],[-1,-1]],[[2749,6607],[-2,-1],[-1,1],[1,1],[5,2],[-2,-2],[-1,-1]],[[2754,6612],[0,1],[1,2],[1,-1],[0,-1],[-2,-1]],[[2760,6618],[-1,0],[1,2],[0,-2]],[[2767,6632],[-6,-11],[1,3],[2,6],[1,2],[1,2],[2,3],[0,4],[2,2],[0,1],[-3,-12]],[[2721,6707],[-1,-1],[-2,1],[-1,2],[-1,4],[2,-4],[1,-1],[2,-1]],[[2720,6713],[0,-3],[-2,5],[-1,7],[2,-2],[1,-7]],[[2301,6691],[-1,-3],[-2,12],[-4,29],[0,16],[1,5],[1,-22],[4,-29],[1,-8]],[[2296,6756],[-1,-3],[0,5],[2,11],[5,15],[2,2],[-6,-16],[-2,-14]],[[2772,6755],[1,-4],[-3,10],[-3,15],[-2,12],[2,-3],[1,-7],[4,-23]],[[2305,6791],[-1,0],[2,4],[0,2],[2,6],[1,1],[1,-2],[-2,-5],[-3,-6]],[[2312,6805],[-1,0],[1,3],[2,2],[5,6],[2,0],[0,2],[1,1],[0,-3],[-4,-4],[-6,-7]],[[2360,6863],[-2,-1],[6,9],[2,3],[1,0],[-2,-5],[-5,-6]],[[2450,6883],[-1,-1],[-5,5],[0,2],[2,2],[2,0],[2,-2],[1,-1],[0,-1],[0,-2],[-1,-2]],[[2641,6891],[-3,-2],[-3,2],[2,0],[2,-1],[3,3],[2,2],[2,1],[-5,-5]],[[2531,6895],[-2,-3],[0,1],[1,3],[1,2],[0,-3]],[[2532,6901],[0,-2],[0,9],[-1,7],[1,-3],[1,-4],[-1,-7]],[[2521,6917],[0,-3],[-1,1],[-2,0],[1,1],[1,1],[0,1],[2,3],[0,-2],[-1,-2]],[[2540,6924],[-1,0],[-2,1],[-2,1],[0,1],[4,-2],[1,-1]],[[2553,6926],[-2,-1],[-4,0],[0,1],[1,0],[4,2],[1,-2]],[[2738,6968],[-1,-14],[-1,5],[0,4],[1,3],[1,2]],[[1712,7075],[-1,-1],[-2,1],[-2,6],[-1,4],[1,1],[1,-4],[3,-6],[1,-1]],[[1682,7097],[-1,0],[-2,0],[-1,4],[2,0],[1,-1],[1,-2],[0,-1]],[[1712,7107],[2,-4],[-2,0],[-2,0],[-1,2],[-1,3],[0,1],[-1,0],[-1,1],[0,1],[1,1],[4,-4],[1,-1]],[[1665,7137],[-2,0],[-1,0],[-2,6],[5,1],[2,-3],[-2,-4]],[[1658,7144],[-1,-1],[-3,1],[1,1],[1,1],[1,0],[1,-2]],[[1670,7147],[5,-3],[3,1],[1,-1],[0,-1],[-7,-3],[-2,2],[-1,2],[0,2],[1,1]],[[2873,7180],[-1,0],[-2,2],[1,0],[2,-2]],[[2875,7179],[-1,0],[2,7],[5,9],[2,1],[-4,-8],[-4,-9]],[[2895,7211],[-5,-4],[-1,0],[3,3],[3,1]],[[2901,7214],[-3,-2],[-1,1],[4,3],[2,11],[0,6],[-1,9],[0,2],[1,-3],[1,-9],[-1,-6],[-1,-10],[-1,-2]],[[2899,7249],[-1,-1],[-2,6],[2,-2],[1,-2],[0,-1]],[[2907,7366],[-1,-1],[4,12],[3,9],[1,4],[-1,-7],[-2,-6],[-4,-11]],[[2940,7469],[-3,-8],[0,1],[4,11],[-1,-4]],[[2939,7518],[-1,0],[1,5],[2,3],[1,-1],[0,-2],[0,-1],[-2,-3],[-1,-1]],[[2986,7545],[-2,-4],[1,-1],[2,2],[1,2],[4,3],[3,1],[1,0],[1,-2],[3,2],[2,1],[-12,-10],[-2,-1],[-4,-3],[-3,-2],[-2,0],[-12,-8],[-1,0],[-1,1],[-10,-4],[-4,0],[-4,-1],[3,3],[0,1],[-1,1],[-1,-1],[-2,-3],[-2,-1],[-1,4],[1,2],[1,3],[3,3],[3,3],[2,2],[1,-2],[0,2],[1,2],[1,1],[2,0],[2,0],[1,1],[1,0],[2,-1],[3,0],[2,2],[2,0],[6,1],[5,1],[3,2],[4,6],[3,1],[-4,-6],[-2,-3]],[[3056,7561],[-2,-1],[-5,2],[4,2],[1,0],[0,3],[0,1],[2,-5],[0,-2]],[[3041,7567],[-8,-3],[-1,2],[2,1],[3,4],[1,1],[3,-3],[0,-2]],[[3017,7573],[0,-1],[-1,3],[1,3],[1,-1],[-1,-4]],[[3021,7574],[-2,-2],[-1,0],[1,2],[0,4],[1,3],[0,1],[1,1],[0,-9]],[[3093,7729],[-1,-1],[-1,1],[0,2],[1,1],[0,1],[1,-1],[0,-3]],[[3106,7737],[-2,-1],[-2,1],[0,-3],[0,-1],[-2,1],[-1,1],[0,4],[2,4],[1,1],[2,-1],[2,-4],[0,-2]],[[1587,7903],[0,-1],[-1,2],[0,2],[0,1],[1,-4]],[[1600,7914],[0,-2],[-1,-1],[-1,1],[0,1],[-1,-1],[0,3],[0,4],[1,0],[1,-2],[1,-3]],[[1597,7925],[0,-1],[-2,1],[0,2],[0,2],[0,2],[1,0],[1,0],[0,-1],[0,-5]],[[1595,7958],[1,-8],[1,3],[4,-5],[0,-3],[-1,-1],[-1,1],[-1,1],[-1,1],[-2,1],[0,2],[-1,2],[0,4],[0,1],[-1,1],[-1,1],[-2,3],[1,3],[1,4],[1,2],[1,-1],[1,-1],[1,-2],[0,-2],[-4,-3],[2,-1],[0,-1],[1,-2]],[[1588,7973],[-2,1],[-1,1],[0,1],[1,4],[1,0],[0,-3],[1,-2],[0,-2]],[[1583,7977],[1,-2],[-3,2],[-2,1],[0,1],[-1,3],[1,1],[1,1],[3,-4],[0,-3]],[[1589,7987],[1,-1],[-2,-1],[-2,2],[0,-3],[0,-1],[-2,2],[-1,1],[1,2],[1,1],[1,0],[3,-2]],[[3135,7785],[0,-1],[1,-3],[0,-6],[-1,-2],[1,-4],[2,-1],[1,-1],[0,-1],[-6,-9],[-5,1],[-2,-2],[-3,-1],[-1,-4],[-2,0],[-2,0],[-1,1],[-2,-1],[-2,-7],[-1,1],[-1,-3],[-1,-1],[-1,-1],[-1,3],[0,3],[-1,1],[-2,1],[-1,0],[-1,-1],[-1,-2],[-2,-1],[-1,1],[-1,2],[-1,-3],[-1,-4],[1,-4],[-1,-3],[-1,1],[-1,2],[-3,2],[-3,0],[1,2],[2,4],[-1,0],[-1,0],[1,3],[0,4],[-1,-1],[-2,-4],[-3,-3],[0,-5],[-3,-10],[0,-4],[-2,-4],[-2,-3],[-4,1],[-2,-2],[-1,-3],[-1,-1],[-1,4],[0,1],[-1,-5],[-1,-1],[-1,4],[0,3],[-1,-2],[-1,-6],[-1,0],[0,2],[-1,1],[0,-3],[0,-3],[0,-2],[-1,1],[-1,2],[-2,-2],[-1,0],[0,2],[0,2],[-2,-1],[-4,-4],[-2,-6],[1,-1],[1,-1],[-5,-9],[-4,-7],[-4,-13],[-1,-1],[-1,-2],[-1,-8],[-2,-7],[1,-2],[1,-4],[1,-3],[1,0],[1,1],[1,0],[0,-2],[0,-1],[-1,-1],[-3,-2],[-2,-1],[-1,-3],[-2,-4],[-3,-6],[2,-2],[5,-2],[2,-2],[3,-11],[-1,-1],[0,-2],[3,-3],[1,-7],[2,-3],[4,-2],[5,3],[3,3],[0,3],[-2,6],[-1,3],[-2,2],[0,-2],[-1,2],[0,1],[1,1],[1,0],[1,-2],[4,-6],[1,-9],[0,-6],[0,-2],[-1,1],[-2,-1],[-10,-3],[-2,-2],[-5,-3],[0,1],[0,3],[0,6],[-1,1],[-8,-10],[-3,-1],[-2,-2],[-1,1],[0,7],[1,6],[-3,-3],[-1,2],[-1,2],[0,2],[-1,0],[0,-5],[-1,-4],[-1,-11],[-2,-4],[-7,-3],[-4,1],[-4,-1],[-6,-2],[-3,1],[-3,-2],[-10,0],[-2,1],[-3,-4],[-4,-3],[-11,-8],[-3,-4],[-3,-5],[-2,-2],[-1,-1],[-1,-3],[-1,-1],[1,5],[1,4],[1,9],[-1,6],[-1,3],[-1,2],[1,-7],[1,-8],[-1,-5],[-3,-9],[-1,-2],[-1,-2],[-1,0],[-1,-2],[-1,-2],[-1,-5],[0,-4],[6,-2],[1,2],[1,-3],[0,-4],[0,-5],[-1,-4],[-1,-6],[0,-9],[-1,-7],[0,2],[0,9],[-1,-1],[0,-2],[-2,-12],[-2,-7],[-2,-4],[-2,1],[0,-4],[0,-2],[-1,-4],[-1,-2],[-1,0],[-2,-2],[-1,-1],[0,-3],[-1,-2],[-4,-12],[-3,-3],[-1,0],[1,6],[0,6],[-2,2],[-2,1],[-2,0],[-3,5],[-3,3],[-5,8],[0,3],[0,4],[1,6],[2,5],[2,2],[5,2],[1,4],[1,3],[-2,-5],[-5,-2],[-2,-2],[-2,-3],[-1,-4],[-2,-4],[0,-3],[1,-2],[-1,-4],[2,-5],[3,-7],[0,-11],[3,-7],[3,-8],[3,-3],[0,-3],[-1,-5],[-2,-2],[2,0],[1,-1],[1,-4],[0,-5],[0,-2],[-1,-1],[0,2],[0,1],[-1,-1],[0,-1],[-1,-5],[0,-3],[-2,-1],[-2,-6],[-1,-4],[-7,-25],[0,-4],[-1,-1],[-2,-1],[-2,-3],[-1,-3],[-1,-7],[-3,-8],[-1,3],[0,3],[0,8],[3,13],[2,8],[2,3],[2,8],[-2,1],[-3,0],[0,3],[1,4],[-1,3],[-1,0],[-1,1],[1,3],[0,3],[0,3],[1,2],[-1,0],[-2,-3],[0,-1],[-1,3],[-1,-1],[0,-1],[-1,-1],[-2,2],[-2,2],[-2,5],[-1,3],[1,6],[2,1],[2,-1],[4,0],[-1,2],[-1,-1],[-3,5],[-1,3],[-2,1],[-1,-3],[-1,-1],[1,7],[2,0],[2,2],[-1,3],[-1,2],[-3,-2],[0,2],[1,4],[2,0],[1,-1],[2,5],[0,2],[-2,-3],[-1,7],[2,7],[3,3],[2,0],[3,1],[-2,1],[-1,1],[1,3],[1,0],[1,3],[-3,-1],[1,5],[-2,-1],[-1,-1],[-1,-2],[0,-3],[0,-2],[-1,-2],[-2,-1],[-1,2],[0,1],[-1,-5],[0,-1],[-2,4],[0,-1],[0,-1],[0,-2],[-2,-1],[0,-3],[0,-2],[-4,3],[0,-1],[2,-6],[2,-2],[0,-3],[-2,-2],[-2,2],[1,-4],[1,-3],[-1,-3],[0,-3],[0,-3],[0,-3],[1,-12],[1,-3],[1,-3],[1,-3],[-2,-1],[-2,3],[-1,2],[-2,6],[-1,2],[0,2],[0,-5],[1,-4],[6,-11],[1,-4],[1,-3],[0,-3],[-2,2],[-1,3],[-4,3],[-5,2],[-3,7],[1,-3],[-1,-3],[-2,4],[-1,2],[0,3],[-2,0],[-3,-3],[-2,1],[0,5],[1,3],[2,6],[2,3],[1,4],[0,7],[0,-7],[-2,-3],[-2,-2],[-2,-5],[-1,-4],[-1,-8],[1,-2],[1,-1],[4,2],[2,-1],[3,-9],[8,-4],[2,-2],[3,-5],[3,-3],[2,-4],[0,-2],[-1,-3],[0,-4],[-1,-3],[-3,0],[-1,0],[-8,15],[-1,1],[-4,8],[-3,4],[-1,0],[5,-8],[2,-5],[4,-7],[2,-4],[2,-5],[2,-2],[5,-3],[-2,-3],[3,-2],[1,-3],[-1,-4],[-4,1],[0,-3],[1,-2],[-2,-1],[-2,2],[-6,11],[0,-1],[0,-2],[4,-7],[3,-5],[2,-2],[3,-3],[0,-3],[1,-3],[-2,-2],[-2,-2],[-1,3],[-1,2],[-3,4],[-1,5],[-2,-1],[-8,6],[-7,1],[1,-1],[0,-1],[6,-1],[2,-3],[4,-2],[3,-1],[1,-7],[4,-5],[0,-4],[3,0],[4,3],[3,-1],[4,-1],[1,-3],[0,-6],[2,-6],[3,-24],[6,-21],[1,-3],[-2,3],[-4,13],[-2,10],[-2,17],[-1,4],[-1,1],[0,-1],[-1,-2],[1,-2],[-1,-5],[0,-3],[2,-3],[1,-6],[2,-9],[-2,3],[-2,2],[-3,2],[-3,2],[1,-3],[-1,-4],[-2,1],[-1,1],[1,-4],[-2,1],[-2,0],[-1,-4],[-2,-2],[-2,-1],[-3,4],[-1,4],[-1,5],[0,-6],[1,-6],[-1,-4],[4,-1],[3,1],[4,0],[2,0],[2,2],[4,-1],[0,-6],[0,-5],[-1,-5],[1,0],[2,1],[0,10],[4,4],[1,0],[1,-3],[0,-4],[1,-4],[-1,-7],[-5,-8],[-4,-7],[-2,-2],[-3,1],[-3,2],[-2,0],[-1,0],[-1,2],[0,4],[-1,1],[-1,0],[-1,-4],[-3,-1],[-4,1],[-4,4],[2,-4],[10,-7],[1,-2],[1,-2],[-1,-3],[-1,-3],[0,-3],[-1,-2],[-4,-5],[-2,1],[-6,9],[3,-8],[2,-3],[4,-2],[8,3],[3,-3],[-3,-5],[-2,-4],[-3,-1],[-2,-1],[-1,-2],[-2,0],[-2,0],[-5,-1],[-2,1],[-3,-5],[-1,-1],[-2,1],[-1,4],[-1,2],[0,-8],[1,-2],[0,-2],[-4,-4],[-3,-5],[-2,-2],[-1,-2],[-3,-8],[-1,-6],[-1,-6],[0,3],[0,4],[-1,6],[0,-10],[-1,-5],[-11,0],[-5,-2],[-7,-9],[-3,-4],[-6,-14],[-1,-9],[-1,4],[0,2],[0,3],[-2,-5],[2,-8],[-1,-3],[-4,-5],[-3,-1],[-2,-1],[-1,-6],[-3,-5],[-2,-2],[-4,2],[1,-5],[-1,-4],[-2,-2],[-3,-2],[-2,0],[-1,-1],[-1,-2],[-3,-2],[-2,1],[-3,1],[-2,-2],[3,-2],[1,-3],[0,-4],[-1,-1],[-2,-3],[0,1],[-1,2],[0,4],[-1,-1],[0,-2],[-1,-1],[-3,7],[0,-5],[1,-4],[1,-2],[1,-1],[0,-2],[-2,-4],[0,-1],[-2,0],[-1,-3],[0,-2],[-1,-5],[-4,-3],[-1,0],[0,-1],[0,-2],[1,-2],[0,-1],[-1,-2],[-2,-1],[-1,-2],[1,-2],[0,-1],[0,-2],[-2,-3],[0,-2],[1,0],[1,0],[-1,-3],[-1,-3],[-1,-3],[-3,-1],[0,-2],[2,-1],[1,-2],[-2,-6],[-2,1],[-1,1],[0,-4],[0,-3],[0,-4],[-1,-6],[-1,-2],[0,-4],[1,-4],[1,-5],[2,-22],[1,-7],[3,-20],[4,-20],[6,-23],[9,-28],[1,-4],[-1,-4],[-1,-3],[0,-6],[1,-5],[1,-6],[2,-10],[-1,2],[-3,14],[-1,8],[1,12],[-1,-1],[-1,-3],[0,-5],[-1,-2],[-1,7],[0,3],[1,4],[0,1],[-2,2],[0,3],[0,3],[-1,1],[-1,0],[1,-7],[1,-4],[1,-10],[1,-7],[1,-5],[12,-56],[3,-7],[1,-5],[1,-11],[0,-14],[-2,-25],[0,-17],[0,2],[-1,0],[-2,-8],[-2,-7],[-1,-11],[-1,-5],[-3,-6],[-2,0],[-5,-4],[-3,1],[-5,-3],[-2,1],[-2,5],[0,2],[1,3],[1,0],[4,-5],[0,2],[-1,3],[-2,1],[-1,2],[-4,12],[-3,9],[0,6],[-6,3],[-4,5],[-3,10],[-1,16],[-2,2],[-1,2],[2,6],[2,5],[-2,-1],[-1,-2],[-1,-5],[-1,-1],[-1,1],[-1,9],[0,11],[2,4],[-3,0],[-2,-2],[0,-3],[0,-2],[-2,0],[-1,2],[-2,3],[-2,7],[-5,20],[-1,3],[-2,3],[1,1],[1,0],[3,9],[3,5],[1,4],[0,2],[-1,2],[-2,-2],[-1,1],[-1,4],[-2,1],[-1,-1],[1,-3],[1,-2],[0,-5],[0,-2],[-1,-2],[-2,1],[-1,-1],[-1,1],[0,3],[-1,4],[2,22],[3,15],[0,16],[0,2],[0,5],[-3,9],[-15,23],[-11,27],[-10,11],[-7,-3],[-1,-2],[-1,-2],[0,-3],[0,-2],[-2,1],[-3,-1],[-7,-7],[-2,0],[-3,-2],[-1,-1],[-5,-1],[-3,-2],[-2,1],[-1,4],[0,5],[1,-4],[1,-2],[1,1],[0,2],[-1,5],[-4,5],[-5,9],[1,-1],[1,2],[-2,3],[1,2],[1,3],[-2,0],[-2,-2],[0,-3],[0,-2],[-1,1],[-2,2],[-9,7],[-8,4],[6,1],[3,-1],[0,2],[-1,1],[-2,2],[-4,0],[-2,0],[-2,-1],[-2,-3],[-2,-1],[-8,-2],[-7,-2],[2,2],[1,2],[3,2],[1,4],[-1,4],[-1,-1],[-1,-3],[-1,2],[-2,0],[0,-5],[-2,-3],[-1,-4],[-5,-2],[-1,1],[2,3],[0,1],[-2,-1],[-3,-6],[-11,-2],[1,1],[2,1],[3,2],[-1,3],[-1,3],[-1,1],[-1,2],[0,6],[0,4],[-2,4],[-1,-1],[-1,-7],[-1,-8],[0,-3],[-4,0],[-2,0],[-10,-1],[-3,3],[-2,1],[-1,0],[-4,-3],[-5,-2],[-1,1],[-1,0],[-4,-7],[-4,-4],[-10,6],[-3,5],[-2,1],[-3,1],[-2,-6],[-3,-8],[4,-4],[3,-3],[5,2],[3,4],[2,0],[1,1],[1,2],[2,-2],[0,-2],[-1,-2],[-2,-2],[-1,-2],[2,-4],[3,-2],[1,1],[1,5],[2,3],[2,-1],[0,-2],[0,-2],[2,-3],[-1,-4],[1,-2],[-3,-2],[-2,0],[-2,-3],[1,-2],[-2,-1],[-1,1],[0,-1],[-1,-2],[0,-1],[1,-5],[2,-3],[2,-4],[8,-5],[2,0],[1,-5],[2,-1],[1,-1],[0,-4],[-3,-2],[0,-3],[-1,-2],[-1,2],[-1,2],[-3,-5],[-1,-1],[1,5],[-1,2],[-2,5],[-2,4],[-2,1],[-1,2],[-1,0],[-1,0],[-2,1],[-1,3],[0,2],[-2,3],[-8,4],[0,-2],[1,-1],[1,-1],[1,-2],[0,-5],[0,-3],[-1,-3],[0,-3],[-1,-3],[-2,-2],[-1,2],[-2,7],[-2,2],[-3,0],[-3,-1],[-2,-7],[-2,-1],[-7,3],[-8,6],[0,2],[1,0],[3,-1],[0,2],[-3,6],[0,3],[0,4],[-1,0],[-1,-3],[-5,2],[-2,3],[-3,8],[-4,0],[-2,5],[-3,-2],[-2,-2],[-2,-4],[1,-1],[2,-3],[-1,-2],[-5,-2],[-11,3],[-4,2],[-4,4],[-6,4],[-3,1],[-3,-1],[-9,0],[-2,-1],[-2,-2],[-1,2],[0,3],[1,0],[1,2],[1,4],[0,2],[-1,1],[-1,1],[-3,-10],[2,-5],[0,-2],[-6,-1],[-13,-11],[-5,-6],[0,2],[6,8],[-2,1],[-4,-2],[-1,1],[2,6],[-1,5],[-2,1],[-2,-5],[-1,0],[-2,2],[-1,0],[1,-10],[2,-4],[1,-6],[-4,-6],[-3,-5],[0,-5],[-4,-7],[-3,-4],[-7,-9],[-2,-1],[-4,-5],[-4,-3],[-5,-5],[-1,0],[2,4],[4,4],[-3,-1],[-5,2],[-2,0],[0,-1],[-2,-2],[-3,3],[0,2],[-1,2],[-1,0],[-1,-1],[4,-12],[1,-1],[1,-1],[-1,-3],[-2,-2],[-4,-2],[-2,5],[-1,-6],[0,-6],[-1,-1],[-2,-2],[0,1],[-1,2],[-1,-2],[-1,-1],[-2,0],[-2,-1],[0,-3],[0,-2],[3,2],[-1,-6],[-2,-6],[-3,-2],[-3,1],[-1,-1],[-1,-1],[4,-9],[-2,-15],[-2,-5],[-1,-1],[-1,0],[-5,5],[-2,3],[2,-10],[6,-2],[0,-4],[0,-3],[-1,-4],[-1,-5],[1,-3],[1,-9],[0,-4],[1,-12],[1,-5],[5,-19],[2,0],[0,-2],[0,-4]],[[1746,7058],[0,6],[-1,3],[-2,-2],[-1,8],[1,4],[0,4],[-2,9],[-4,12],[-9,14],[-5,4],[-3,6],[-2,2],[-3,0],[-1,-2],[-3,1],[0,7],[-3,9],[-3,1],[-6,0],[-9,5],[-2,3],[-1,5],[-4,5],[-6,4],[-3,-1],[-3,1],[-6,3],[-3,1],[-7,-1],[-2,0],[-2,4],[-2,3],[0,5],[0,4],[0,4],[-1,8],[1,7],[-1,3],[-1,2],[-4,3],[-1,4],[1,5],[-1,3],[-4,3],[-3,8],[-4,4],[-2,6],[-2,5],[-1,3],[-6,13],[-6,10],[-1,6],[0,8],[3,5],[1,5],[0,3],[-1,3],[-2,5],[-8,3],[-6,13],[0,9],[-3,10],[0,7],[0,6],[2,2],[1,-1],[0,-2],[1,-5],[2,-4],[2,-2],[1,-3],[2,-1],[1,-1],[-1,3],[0,1],[-1,5],[-2,6],[-2,3],[-1,7],[-1,1],[-1,2],[2,3],[3,2],[4,0],[10,0],[2,1],[2,0],[1,0],[-3,1],[-1,0],[-2,0],[-4,0],[-1,1],[-2,1],[-1,1],[-3,-4],[-2,1],[-3,3],[-2,1],[-2,-2],[-1,-9],[1,-7],[-2,0],[-1,2],[-3,2],[-2,2],[-3,5],[-2,2],[-2,-4],[0,2],[1,4],[0,8],[3,-6],[-1,4],[-2,5],[-2,1],[-2,8],[-5,5],[-4,8],[-7,14],[-1,12],[-3,14],[2,9],[-1,6],[-1,9],[-1,5],[-7,13],[-6,9],[0,7],[-1,7],[1,6],[2,7],[0,1],[1,0],[-1,-2],[1,0],[1,3],[0,1],[-1,0],[0,1],[1,2],[2,9],[0,10],[2,13],[-1,5],[-1,9],[-1,6],[-2,4],[1,6],[0,5],[-4,8],[-2,10],[0,5],[0,12],[-1,5],[-3,8],[2,7],[1,4],[3,19],[1,2],[1,0],[2,3],[-1,1],[-2,-2],[2,8],[1,6],[1,2],[1,21],[1,16],[1,6],[0,5],[0,7],[0,8],[3,36],[-1,4],[1,6],[-1,15],[1,17],[-1,3],[0,2],[2,-2],[6,0],[5,2],[1,-1],[2,-3],[2,0],[3,0],[-1,1],[-1,0],[-3,3],[-2,3],[-5,0],[-1,2],[-6,-2],[-1,2],[-4,-2],[1,6],[0,7],[0,6],[1,-5],[2,-5],[1,6],[0,7],[-1,3],[-4,2],[-1,7],[8,6],[-4,1],[-2,3],[-2,0],[0,-2],[0,-3],[-1,4],[0,4],[-1,7],[-3,11],[-2,15],[-2,7],[-5,7],[-1,4],[-1,10],[1,8],[-1,5],[2,0],[5,-4],[8,-4],[2,-2],[3,-2],[19,-3],[1,1],[3,1],[1,0],[3,-4],[1,0],[2,0],[1,1],[2,2],[1,-1],[0,-2],[0,-4],[2,-4],[1,-3],[-4,-9],[0,3],[-1,1],[-6,-14],[-2,-7],[-1,-3],[0,-2],[1,0],[2,1],[3,2],[0,1],[-2,-1],[-2,0],[1,3],[0,2],[2,4],[2,3],[2,3],[2,2],[1,4],[3,4],[1,1],[-1,4],[1,0],[1,0],[1,-6],[-1,-3],[-2,-3],[-1,-1],[1,-5],[-1,0],[-1,0],[3,-5],[0,-3],[1,-4],[-1,-6],[-1,-1],[-1,0],[-2,2],[-1,-5],[-1,0],[-1,6],[-3,-2],[-1,-3],[0,-4],[-2,-2],[4,-1],[2,1],[3,-2],[3,2],[0,2],[2,6],[1,1],[1,0],[1,1],[2,3],[0,2],[0,7],[0,5],[-1,1],[0,2],[0,1],[0,2],[0,2],[0,2],[0,2],[2,5],[0,2],[2,4],[0,2],[-2,2],[-1,2],[-1,3],[-1,1],[1,-5],[0,-1],[-3,3],[0,2],[-1,2],[1,2],[1,1],[2,1],[0,1],[-3,5],[-1,2],[-1,1],[-2,0],[0,1],[-1,1],[1,2],[1,0],[2,0],[1,1],[0,1],[0,2],[0,6],[-1,5],[-1,1],[-1,0],[-1,0],[-1,1],[-1,4],[-2,8]],[[9984,8143],[-5,0],[-10,9],[-5,3],[-3,3],[2,1],[6,-2],[5,-5],[2,-4],[3,-2],[4,-2],[1,-1]],[[103,8167],[-2,-3],[-1,1],[0,5],[1,1],[2,-3],[0,-1]],[[111,8168],[-2,-1],[-4,2],[1,3],[3,-2],[2,-2]],[[59,8159],[-1,-2],[-4,3],[-1,1],[3,2],[0,1],[0,1],[-2,2],[-3,3],[-1,2],[1,1],[1,1],[5,0],[2,-3],[2,-1],[4,-1],[-2,-2],[-1,-1],[-2,-5],[-1,-2]],[[79,8163],[-1,-1],[-1,-1],[-4,1],[-3,0],[-3,-1],[-2,-1],[0,2],[0,1],[9,3],[2,2],[2,2],[1,4],[1,1],[2,-2],[-1,-2],[-1,-2],[0,-1],[-1,-5]],[[95,8171],[0,-2],[3,1],[1,-1],[0,-4],[0,-1],[-1,-1],[-1,1],[-1,-2],[-6,-4],[-2,2],[-4,-4],[3,11],[3,1],[1,2],[-1,3],[2,5],[3,0],[1,-2],[0,-2],[-1,-3]],[[9959,8174],[-1,-1],[-1,3],[0,1],[1,2],[1,-1],[1,-2],[-1,-2]],[[9991,8173],[-2,-1],[-3,1],[-1,2],[0,3],[4,3],[4,-4],[-2,-4]],[[111,8179],[-1,-2],[-3,2],[-1,2],[0,1],[1,3],[2,0],[1,-1],[1,-2],[1,-1],[-1,-2]],[[9927,8172],[-2,-2],[-2,2],[0,1],[3,5],[3,0],[1,2],[1,5],[2,0],[1,0],[0,-3],[-2,-3],[0,-3],[-5,-4]],[[179,8187],[6,-3],[6,1],[3,-1],[0,-1],[-5,0],[-1,0],[-4,-1],[-2,-1],[-6,2],[-5,-1],[-1,0],[-1,1],[-2,2],[0,1],[1,0],[4,-1],[1,1],[3,1],[3,0]],[[209,8195],[-2,-1],[-2,1],[1,3],[1,1],[2,2],[3,-1],[1,-2],[-4,-3]],[[148,8181],[-15,-2],[-2,1],[2,1],[3,1],[5,2],[7,3],[5,3],[5,1],[1,3],[-4,2],[0,1],[2,2],[1,2],[4,2],[3,-3],[1,-2],[0,-2],[-1,-3],[-3,-1],[0,-2],[1,-3],[-6,-4],[-9,-2]],[[9825,8200],[-2,-1],[-1,2],[-6,1],[0,2],[3,1],[4,3],[3,-1],[-1,-2],[0,-5]],[[257,8212],[-1,-1],[-1,0],[0,3],[1,1],[3,4],[2,-1],[1,-1],[-1,-1],[0,-2],[-1,-1],[-1,0],[-2,-1]],[[286,8228],[0,-3],[-1,0],[-4,1],[-3,-1],[0,2],[0,1],[5,2],[2,0],[1,-1],[0,-1]],[[9799,8237],[5,-2],[3,1],[5,-3],[5,-5],[-1,-1],[-2,-1],[-1,0],[-4,0],[-2,0],[-4,-4],[-5,3],[-1,5],[-4,1],[-2,2],[5,4],[3,0]],[[334,8256],[-8,-6],[-3,-4],[-2,-5],[-2,-2],[-1,0],[-1,-2],[-3,-3],[-1,0],[-9,-7],[-1,0],[0,2],[3,2],[2,3],[2,4],[1,1],[1,2],[0,4],[0,2],[2,3],[2,1],[1,1],[4,-1],[2,2],[0,1],[-1,1],[0,2],[0,3],[1,3],[2,2],[3,2],[3,2],[3,0],[4,-3],[1,-2],[-1,-2],[-1,-3],[-3,-3]],[[383,8278],[-1,1],[0,2],[0,1],[2,2],[1,1],[1,0],[0,-1],[-1,-2],[-1,-2],[-1,-2]],[[372,8288],[1,-2],[2,1],[2,3],[1,3],[1,1],[1,-2],[2,-2],[-2,-3],[-5,-5],[-1,-4],[0,-1],[4,1],[1,0],[1,-1],[-1,-2],[-2,-1],[-3,-2],[-5,-5],[-2,-3],[-2,-1],[-3,-1],[-5,-2],[-3,-2],[-1,-1],[-1,-1],[-2,0],[-1,-1],[-1,-2],[-1,-1],[-2,0],[-1,-1],[-2,0],[-3,3],[0,1],[2,3],[2,1],[3,0],[3,3],[6,3],[2,2],[2,6],[1,1],[1,3],[3,0],[2,-3],[0,-1],[0,1],[1,2],[1,2],[-1,1],[-3,1],[-2,1],[-2,0],[-1,1],[-1,1],[0,2],[0,2],[1,2],[1,2],[2,1],[3,1],[3,1],[2,0],[1,0],[1,-6]],[[393,8298],[-1,-1],[-1,0],[0,1],[-3,-1],[-1,0],[-1,4],[0,1],[0,2],[2,1],[2,1],[2,0],[3,-3],[2,-2],[0,-1],[-1,-1],[-3,-1]],[[401,8302],[-1,0],[-1,3],[-1,4],[2,1],[1,1],[1,-1],[1,-3],[1,-1],[1,-1],[-1,0],[-3,-3]],[[485,8317],[-3,-1],[-2,1],[-3,3],[0,3],[5,-2],[1,-1],[2,-3]],[[492,8343],[-1,0],[-2,1],[-1,2],[0,2],[4,3],[1,0],[0,-2],[0,-1],[-1,-4],[0,-1]],[[459,8351],[3,-10],[1,-2],[2,-1],[2,-1],[1,-1],[2,-2],[0,-1],[-8,3],[-5,-5],[-1,-1],[-14,0],[-2,-1],[-2,-2],[-3,-5],[-2,-2],[-1,-1],[-4,-2],[-4,1],[-2,0],[-2,3],[-1,4],[0,2],[1,2],[4,3],[1,2],[5,11],[1,1],[2,1],[4,-1],[3,3],[8,5],[2,1],[5,0],[2,-1],[1,-1],[1,-2]],[[573,8350],[-1,0],[-1,4],[-1,1],[2,-1],[1,-2],[0,-2]],[[569,8360],[0,-4],[-1,-1],[0,1],[-2,-1],[-1,1],[1,2],[0,1],[1,0],[0,2],[0,1],[0,2],[1,1],[1,-5]],[[1352,8356],[2,-7],[1,-3],[-3,-1],[-2,1],[-1,0],[-1,2],[1,4],[-1,2],[-2,1],[-1,-2],[-1,4],[2,3],[-1,3],[0,3],[0,1],[2,0],[3,-3],[2,-8]],[[559,8359],[-2,-1],[0,-2],[-1,0],[-2,-2],[-3,-6],[-2,-1],[2,5],[0,2],[0,1],[0,4],[1,0],[1,0],[1,4],[2,0],[2,4],[1,0],[-1,-3],[2,-2],[0,-2],[-1,-1]],[[1309,8346],[1,-1],[1,0],[1,2],[2,0],[1,-1],[1,0],[0,-3],[-1,-5],[-1,-2],[0,-2],[-3,1],[-3,3],[-3,5],[-2,4],[0,2],[-1,1],[-2,7],[-2,5],[-2,0],[-2,2],[-1,3],[1,2],[3,1],[6,-6],[1,-3],[2,-3],[0,-4],[1,-2],[2,-6]],[[546,8371],[0,-4],[-4,3],[-1,1],[1,1],[3,0],[1,-1]],[[536,8370],[1,0],[1,0],[2,4],[0,-1],[-1,-4],[2,-4],[1,-2],[0,-1],[-3,-1],[-3,1],[-1,0],[-2,-2],[0,2],[-1,8],[0,1],[2,3],[1,1],[1,0],[1,-1],[0,-2],[-1,-2]],[[1297,8383],[1,-2],[0,-1],[-4,-3],[0,-1],[-1,-3],[-1,0],[-2,-3],[-3,-3],[1,9],[-3,4],[3,3],[2,-1],[3,0],[3,2],[1,-1]],[[679,8399],[-1,-2],[-3,0],[-1,1],[0,2],[3,4],[1,1],[1,-2],[0,-4]],[[1362,8380],[-1,-6],[-2,-7],[-3,-3],[-2,0],[-2,3],[-1,0],[-2,1],[-1,2],[1,3],[0,2],[-1,-2],[-2,-2],[-3,-2],[-2,-5],[-1,-3],[-2,4],[0,7],[-1,4],[3,5],[3,4],[1,15],[10,7],[0,-1],[4,-5],[3,-7],[1,-4],[0,-6],[0,-4]],[[1290,8429],[5,-1],[5,0],[1,-3],[2,-2],[0,-3],[0,-2],[0,-1],[0,-2],[0,-1],[9,-5],[5,-6],[1,-3],[1,-2],[2,-7],[4,-7],[2,-2],[1,-3],[-3,2],[-6,5],[-1,-3],[-1,-2],[-1,-2],[1,-1],[5,2],[4,-5],[1,-1],[2,-4],[0,-1],[-1,-3],[-1,-1],[2,-1],[4,1],[1,-1],[-1,-10],[1,-4],[0,-2],[-1,-2],[0,-2],[1,-2],[0,-2],[-1,-4],[-2,-1],[-2,0],[-1,1],[-2,4],[-2,6],[-1,1],[-3,1],[0,1],[-2,0],[-1,2],[0,4],[-1,3],[0,2],[-1,0],[-1,-1],[0,-3],[0,-3],[-3,2],[-3,8],[-4,6],[-2,2],[1,1],[2,1],[1,0],[1,1],[-4,7],[0,2],[2,3],[-2,1],[-4,-1],[-2,1],[-1,2],[-1,2],[-4,1],[-1,0],[-2,3],[-1,2],[0,1],[2,2],[2,0],[2,-2],[1,0],[2,2],[1,3],[2,2],[-1,2],[-1,3],[-2,1],[-5,-2],[-4,-3],[-1,1],[-1,2],[5,6],[2,3],[-1,1],[-1,3],[0,6],[1,1]],[[1312,8424],[-2,-1],[-2,1],[-4,5],[0,1],[1,2],[2,3],[1,0],[6,0],[1,-1],[1,-1],[0,-1],[-1,-2],[0,-1],[0,-2],[0,-1],[-3,-2]],[[1330,8416],[0,-10],[-2,1],[-1,0],[-2,-2],[-2,1],[-1,1],[0,1],[0,3],[-1,2],[-5,0],[-1,1],[-1,3],[0,4],[0,1],[3,1],[1,5],[1,1],[4,9],[1,-1],[3,-5],[4,-9],[-1,-7]],[[703,8434],[-2,-1],[0,1],[0,1],[0,1],[1,2],[3,4],[3,2],[1,0],[1,-2],[-2,-3],[-5,-5]],[[716,8439],[-1,0],[-2,1],[0,2],[3,2],[3,0],[0,-1],[0,-2],[-1,-1],[-2,-1]],[[285,8446],[3,-1],[2,0],[2,0],[0,-1],[-3,-3],[-1,0],[-4,3],[1,2]],[[1312,8440],[0,-1],[-3,0],[-2,1],[0,2],[0,2],[1,2],[1,3],[1,6],[5,-6],[2,-3],[0,-4],[-1,-1],[-3,0],[-1,-1]],[[1278,8458],[2,-4],[2,0],[2,-3],[1,-4],[-1,-3],[-1,1],[-1,-2],[-1,-6],[0,-5],[0,-6],[-2,-6],[0,-3],[-1,-1],[0,-1],[-1,1],[-1,1],[-2,-3],[-2,0],[-1,7],[1,12],[3,3],[-2,3],[-3,4],[0,2],[-3,6],[0,1],[0,6],[3,4],[4,1],[2,-2],[2,-2],[0,-1]],[[1295,8467],[2,-2],[1,2],[2,0],[3,-2],[3,-2],[1,-3],[0,-2],[-1,-4],[1,-4],[0,-2],[-1,-1],[-1,-2],[-1,0],[-2,4],[-3,6],[-3,2],[0,-1],[1,-1],[2,-4],[0,-2],[1,-3],[1,-1],[0,-3],[0,-2],[0,-2],[-1,-1],[0,-1],[-5,1],[-3,-2],[-3,1],[-1,1],[-1,2],[0,5],[-1,6],[1,5],[-3,5],[-1,3],[-3,2],[-2,2],[1,2],[2,2],[5,0],[9,-4]],[[750,8474],[-4,-2],[-3,-3],[-1,-2],[-2,3],[0,5],[2,3],[10,-1],[0,-1],[0,-1],[0,-1],[-2,0]],[[273,8478],[-3,-3],[-2,1],[-1,2],[0,1],[8,2],[-2,-3]],[[1251,8487],[2,-6],[2,-5],[1,-6],[3,-12],[1,-5],[0,-2],[1,-7],[-1,-1],[0,-2],[-1,-2],[1,-5],[0,-7],[-1,-5],[-2,1],[-2,3],[-1,2],[-3,8],[-1,3],[0,3],[1,2],[1,1],[1,3],[-1,0],[-3,-1],[-2,3],[-2,1],[1,5],[-1,1],[-3,-2],[-1,2],[-1,1],[0,3],[1,2],[3,5],[0,1],[-2,1],[-2,2],[-1,6],[-2,3],[-1,0],[-3,-10],[-2,-2],[-4,-2],[1,3],[1,3],[-2,7],[0,3],[1,2],[3,1],[2,1],[1,2],[0,2],[2,6],[1,1],[3,0],[6,-6],[2,-1],[3,-4]],[[743,8516],[-1,-2],[0,1],[-2,2],[-3,2],[-1,2],[-1,1],[2,1],[3,-2],[2,-2],[1,-3]],[[753,8514],[0,-3],[1,1],[4,3],[3,1],[2,0],[3,-2],[0,-1],[0,-1],[-2,-3],[0,-2],[2,-3],[5,-2],[1,-1],[0,-1],[-4,-5],[-1,-2],[-1,0],[-6,1],[-5,2],[-3,0],[-2,-2],[1,-1],[5,0],[2,-2],[0,-2],[1,-2],[-1,-1],[-2,-1],[-3,0],[-3,-2],[-2,-2],[-6,-1],[-4,-3],[-2,-2],[-1,-2],[-1,-2],[-4,-1],[2,-1],[0,-1],[0,-2],[0,-1],[-3,-6],[-6,-5],[-2,0],[0,1],[-1,1],[0,1],[8,9],[0,1],[-3,0],[-3,3],[-2,-2],[-1,0],[1,2],[1,3],[0,1],[-1,1],[-2,0],[-3,0],[-2,0],[-1,-2],[0,-1],[3,1],[1,-1],[0,-1],[1,-2],[0,-2],[-1,-2],[-1,-3],[-2,0],[-5,7],[-2,10],[-3,7],[-1,2],[1,5],[4,6],[4,2],[3,3],[3,0],[2,0],[2,-1],[1,-2],[0,-1],[0,-1],[2,-2],[1,-5],[3,-4],[1,-2],[2,-2],[-2,4],[-1,4],[-1,9],[0,3],[1,0],[3,0],[0,1],[-4,3],[-1,3],[-1,1],[0,2],[2,3],[1,0],[1,1],[2,-1],[1,-1],[2,-5],[1,-2],[1,0],[1,1],[1,2],[1,1],[1,0],[3,-1],[1,1],[0,1],[0,3],[1,1],[0,1],[-1,3],[1,1],[7,-2],[2,-2],[-1,-5]],[[1230,8539],[4,-6],[0,-1],[-1,-4],[-2,-1],[0,-2],[2,-1],[1,1],[4,5],[1,2],[1,0],[5,-2],[5,-3],[1,-2],[1,-3],[-1,-8],[-4,-1],[-2,0],[-2,1],[-3,-3],[3,-2],[7,0],[3,-5],[0,-3],[-1,-6],[-4,1],[-4,4],[-8,5],[-2,0],[-1,-1],[0,-3],[0,-6],[-2,-4],[-6,2],[-3,5],[-2,8],[-8,9],[-3,2],[-3,6],[2,4],[0,3],[1,1],[3,2],[1,4],[2,-3],[3,-4],[0,3],[1,3],[3,0],[2,0],[1,3],[3,1],[2,-1]],[[1269,8538],[0,-2],[-4,0],[-4,3],[-2,2],[1,2],[3,1],[4,-3],[2,-3]],[[1259,8534],[7,-1],[5,0],[5,-9],[3,-7],[1,-5],[1,-4],[2,-5],[-1,-1],[-2,4],[-2,6],[-1,2],[-1,1],[-1,3],[-2,5],[0,2],[-1,2],[-1,0],[-1,0],[-1,-1],[0,-4],[1,-4],[5,-10],[4,-6],[0,-2],[1,-5],[-2,-2],[2,-5],[0,-1],[0,-1],[-5,-2],[-5,-9],[-4,-5],[-3,-1],[-1,1],[-1,2],[0,3],[-1,3],[2,2],[2,11],[0,4],[-3,5],[-2,4],[-1,5],[-1,15],[-1,5],[-1,4],[-2,3],[-1,4],[0,3],[0,2],[2,-2],[3,-6],[2,-3]],[[766,8545],[1,0],[1,3],[1,0],[3,-3],[2,1],[2,-4],[1,0],[1,1],[0,-1],[0,-3],[-2,-4],[-1,-1],[-2,1],[-2,2],[0,2],[-1,0],[-2,-3],[0,-1],[1,-2],[0,-1],[-2,0],[-2,0],[-2,-2],[-1,1],[0,3],[-1,0],[-1,-4],[-1,-2],[-3,-2],[0,-1],[-2,0],[-2,-1],[-2,0],[-9,4],[-2,2],[8,8],[4,4],[2,-1],[2,-1],[1,1],[0,3],[-2,3],[0,1],[5,2],[2,0],[2,-1],[1,-1],[2,-3]],[[764,8552],[-1,0],[-2,2],[-1,2],[1,1],[4,3],[2,0],[1,-1],[0,-2],[-1,-1],[-3,-4]],[[530,8558],[-2,-1],[-2,0],[-2,6],[1,0],[3,4],[6,3],[2,0],[-6,-12]],[[984,8629],[-1,0],[2,4],[3,4],[2,2],[3,2],[0,-2],[-4,-4],[-5,-6]],[[888,8643],[-1,-1],[-6,1],[1,3],[5,2],[4,-3],[-3,-2]],[[896,8629],[-3,-1],[-1,2],[2,4],[1,2],[1,1],[4,5],[4,3],[3,5],[4,8],[1,2],[1,1],[3,-2],[2,-3],[-1,-2],[-9,-10],[-1,-1],[-1,-4],[-1,-1],[-1,-1],[-1,-1],[0,-3],[-1,-1],[-2,0],[-1,-1],[-1,-1],[-2,-1]],[[385,8662],[3,-3],[1,0],[4,1],[2,-1],[1,-1],[1,-2],[0,-3],[0,-3],[0,-5],[0,-1],[2,-3],[1,-3],[0,-3],[-5,-1],[-5,-1],[-4,-2],[-1,-2],[1,-2],[-1,-1],[-1,1],[-2,2],[-3,1],[-8,2],[-10,7],[-4,1],[-4,5],[-4,7],[3,1],[2,0],[12,-1],[1,5],[2,1],[3,1],[4,3],[1,0],[2,-1],[3,1],[2,1],[1,-1]],[[969,8659],[-1,-1],[-2,0],[-2,1],[5,4],[0,-1],[0,-3]],[[933,8666],[1,-2],[5,0],[2,0],[1,-1],[-1,-1],[-2,-1],[-6,-3],[-5,-3],[-1,0],[-1,4],[-1,1],[0,2],[0,1],[1,2],[2,2],[1,0],[4,-1]],[[898,8666],[0,-2],[-1,-1],[1,-3],[-1,-5],[-1,-3],[-1,-1],[0,-1],[-1,0],[0,1],[0,2],[-2,0],[0,4],[1,1],[0,2],[0,1],[2,5],[0,1],[0,-2],[1,0],[1,3],[1,-2]],[[777,8661],[-1,-1],[2,3],[1,6],[1,-1],[1,-1],[-3,-6],[-1,0]],[[202,8666],[6,-4],[3,1],[3,-4],[2,-2],[-5,2],[-6,0],[-9,7],[-4,2],[1,4],[4,3],[1,-6],[4,-3]],[[891,8687],[-4,0],[-1,1],[-1,0],[1,3],[0,1],[2,1],[2,-1],[0,-2],[1,-3]],[[237,8849],[1,-1],[2,0],[5,0],[4,-2],[4,1],[6,4],[3,1],[4,1],[3,-1],[4,-3],[1,-1],[1,-2],[1,-3],[1,-2],[7,-3],[4,-1],[1,-1],[1,-2],[4,-1],[3,0],[2,0],[7,0],[7,-3],[-1,-5],[-2,-3],[-7,1],[-8,-1],[-3,-3],[-2,-3],[0,-4],[-2,-1],[-1,-1],[-1,2],[-2,6],[-1,2],[-1,1],[-4,1],[-3,2],[-3,0],[-1,2],[-1,3],[-1,1],[-3,3],[-3,1],[-9,4],[-3,1],[-3,-1],[-3,-2],[-3,-2],[-3,-2],[-3,0],[-4,1],[-3,2],[-1,2],[-1,3],[0,3],[1,3],[1,7],[3,1],[5,-5]],[[386,8998],[-1,0],[0,1],[3,2],[6,3],[-4,-3],[-4,-3]],[[1388,8403],[-1,-3],[-1,-3],[-1,-4],[0,-4],[0,-4],[0,-3],[2,-7],[1,-3],[0,-3],[-4,-9],[-1,-5],[0,-2]],[[1373,8338],[-1,2],[-7,1],[-2,8],[-1,6],[-2,6],[0,1],[1,4],[7,3],[0,1],[-2,1],[-1,1],[-1,6],[0,5],[0,4],[-1,7],[-1,4],[-5,9],[0,2],[2,3],[1,2],[-7,-4],[-10,-5],[-4,-3],[-1,-1],[0,-1],[1,-3],[0,-1],[-1,-2],[-1,-5],[-2,-5],[-1,-1],[-4,2],[-1,1],[-2,7],[0,2],[2,2],[2,3],[2,5],[5,14],[2,0],[6,2],[-8,2],[-2,0],[-1,2],[-1,3],[-1,3],[-3,1],[-2,2],[-2,3],[-1,2],[-1,2],[0,3],[-1,1],[-2,1],[-1,1],[0,6],[-5,2],[-1,2],[-3,4],[-1,2],[0,2],[1,4],[-1,1],[-2,0],[-16,7],[1,9],[-3,13],[-3,5],[1,2],[1,1],[1,0],[6,-4],[5,-4],[1,1],[-9,9],[-2,3],[0,3],[0,2],[0,1],[9,-1],[-8,3],[-2,0],[-2,-4],[-1,-1],[-2,1],[-2,5],[-2,3],[-4,5],[-1,3],[0,5],[0,4],[3,10],[2,2],[0,1],[-1,0],[-1,-1],[-2,-5],[-3,-7],[-2,-3],[-2,1],[-2,3],[-4,4],[-5,1],[-3,4],[-5,11],[0,5],[-1,2],[-2,1],[-2,3],[-2,14],[-3,9],[-1,5],[0,5],[-1,-4],[-1,-2],[-2,0],[2,-4],[1,-2],[-1,0],[-2,0],[3,-7],[2,-10],[2,-8],[1,-6],[1,-5],[1,-4],[2,-10],[0,-2],[0,-1],[-1,-2],[-1,-1],[-5,1],[-1,3],[-3,4],[-3,2],[-8,-1],[-1,1],[0,3],[1,7],[-1,2],[-4,10],[0,2],[6,4],[-3,1],[-2,-2],[-1,1],[-2,6],[-1,2],[0,1],[0,-6],[1,-3],[0,-2],[0,-2],[-1,-2],[-1,-1],[-1,0],[-2,1],[-2,2],[-2,1],[-1,1],[-1,3],[-2,2],[-7,2],[-4,3],[-1,-1],[2,-3],[0,-2],[-1,0],[-2,-3],[0,-1],[2,1],[3,0],[4,-2],[3,-2],[1,-1],[1,-2],[0,-1],[4,-2],[0,-1],[-2,-4],[4,0],[3,-1],[3,-5],[1,-3],[1,-4],[-1,-2],[-1,0],[-10,-2],[-3,-4],[-1,0],[-2,1],[-5,4],[-6,3],[-13,11],[0,3],[-1,1],[-2,1],[-3,2],[-3,5],[-2,3],[0,3],[-2,3],[-6,6],[-3,2],[-3,1],[-2,1],[-1,1],[1,1],[0,1],[-5,1],[-5,3],[-13,8],[-6,5],[-4,2],[-2,1],[0,2],[1,1],[2,1],[2,1],[3,5],[0,2],[-2,4],[0,3],[0,2],[0,2],[0,1],[2,1],[0,1],[1,-1],[4,-4],[0,-2],[0,-6],[1,-8],[0,1],[0,2],[1,5],[0,2],[1,2],[1,1],[3,0],[2,0],[-7,4],[-4,6],[-1,0],[-3,1],[-2,-3],[-7,-8],[-2,-1],[-8,-5],[-6,-1],[-6,1],[-5,1],[-14,7],[-2,2],[3,5],[0,1],[-1,4],[-1,2],[-1,0],[0,-1],[0,-3],[-1,-1],[-2,-2],[-4,-1],[-12,4],[-13,3],[-11,0],[-15,-2],[-9,-3],[-5,0],[-4,1],[-1,1],[3,1],[-1,2],[-2,3],[-4,3],[-6,1],[-3,1],[-1,1],[-2,1],[-3,2],[-1,2],[1,7],[1,4],[1,3],[3,5],[-1,0],[-4,-4],[-3,-3],[-4,-5],[-1,-2],[-3,-2],[-3,0],[-6,3],[-4,2],[-3,0],[-2,0],[3,3],[1,2],[2,4],[0,1],[-13,1],[0,2],[0,1],[-1,1],[-2,1],[-2,-1],[-5,-2],[-1,2],[0,1],[2,0],[2,3],[-3,2],[-2,2],[-1,1],[0,6],[1,3],[8,4],[-2,1],[-6,0],[-4,-3],[-4,-4],[-3,-2],[-1,1],[-2,0],[-3,0],[-1,-1],[-1,-2],[-1,-1],[-1,-1],[-1,1],[-1,1],[-3,2],[-1,1],[-1,-1],[-1,-3],[-1,-1],[-4,-1],[-2,0],[-3,3],[0,1],[1,3],[6,12],[-1,0],[-2,-2],[-4,-5],[-2,-1],[-3,0],[-1,0],[-2,0],[-2,-1],[-1,-2],[-1,-1],[1,0],[3,1],[2,1],[0,-1],[-2,-5],[-2,-5],[-1,-1],[-2,0],[-3,-1],[0,-1],[5,-4],[1,-1],[2,-1],[1,-1],[-1,-4],[-1,-2],[-1,0],[-3,0],[-1,-1],[-3,-2],[-1,-2],[3,1],[3,1],[4,0],[3,1],[1,2],[2,-1],[2,-2],[1,-2],[-1,-2],[-1,-2],[-3,0],[-1,-2],[-1,-1],[0,-3],[0,-3],[0,-6],[-1,-1],[-1,0],[-1,-1],[-3,-8],[-1,-1],[-1,1],[-1,0],[-1,-1],[-2,-1],[-3,0],[-3,0],[-4,2],[-2,1],[-1,2],[-4,-2],[-1,0],[-3,6],[0,-1],[-1,-5],[-1,-2],[-2,-4],[-2,-8],[0,1],[-2,7],[-1,1],[-2,-4],[0,-1],[0,-5],[-5,2],[-1,0],[1,-4],[0,-1],[-6,-7],[-2,0],[-1,1],[-1,0],[-4,-3],[-1,0],[-2,2],[-1,0],[0,-2],[0,-3],[-2,-3],[-4,-5],[-2,-2],[-1,-4],[-3,2],[-4,1],[1,-2],[0,-1],[-2,-1],[-2,0],[-2,1],[-3,-1],[-4,-2],[-3,0],[-5,4],[-1,0],[0,2],[1,3],[1,2],[1,2],[4,3],[5,1],[3,2],[4,4],[2,3],[4,8],[-1,1],[-9,-8],[-1,0],[-2,0],[-7,2],[-1,2],[-1,3],[2,8],[1,4],[3,6],[5,6],[1,5],[3,11],[0,5],[-1,6],[0,3],[1,1],[10,6],[5,4],[9,7],[3,0],[1,-3],[3,-1],[2,-2],[3,1],[4,1],[6,0],[13,-5],[3,0],[0,1],[-2,3],[-9,1],[-3,2],[-11,7],[-2,3],[1,1],[2,2],[1,1],[1,1],[1,3],[3,3],[3,3],[8,5],[-3,0],[-5,-1],[-2,-1],[-4,-3],[-1,-2],[-2,-5],[-1,-1],[-4,0],[-10,-1],[-2,3],[-2,0],[-9,-6],[-3,-3],[-3,-4],[-3,-2],[-5,-2],[-4,-2],[-4,-4],[-1,-3],[0,-1],[1,-5],[-1,-1],[-3,0],[-3,-3],[-8,-9],[-1,-3],[0,-1],[1,-3],[0,-1],[-3,-3],[-4,-4],[-3,-2],[-2,0],[-2,1],[-4,3],[-3,0],[0,-1],[4,-2],[4,-4],[2,-3],[1,-2],[0,-3],[-1,-2],[-2,-5],[-3,-1],[-7,-1],[-2,-2],[-1,0],[5,-2],[0,-1],[0,-4],[-2,-1],[-4,-2],[-3,-1],[-1,1],[1,2],[0,1],[-2,1],[-1,-1],[-5,-5],[-1,0],[2,-1],[0,-1],[-3,-3],[-1,-3],[-2,-2],[-7,-6],[0,-2],[-2,-5],[-1,-5],[2,-2],[6,-2],[3,-1],[4,-2],[6,-4],[3,-3],[0,-2],[0,-1],[-1,-2],[-2,-4],[-5,-6],[-2,-1],[-4,-2],[-1,-1],[-4,-5],[-2,-3],[1,-3],[-1,-1],[-6,-4],[0,-1],[2,0],[0,-3],[-1,-4],[-1,-1],[-3,0],[-5,-2],[0,-3],[-12,-3],[-2,-5],[-2,-2],[-4,-5],[-3,-1],[-3,-1],[-2,-2],[0,-2],[-1,-1],[-3,-3],[-1,-3],[-1,-1],[-5,-1],[-1,-1],[-1,-4],[-1,0],[-2,1],[-2,-1],[-6,-5],[-1,-2],[0,-1],[1,-1],[2,-3],[-1,-2],[-2,-6],[0,-1],[-3,-1],[-1,-4],[-2,1],[-2,-1],[-1,-2],[-2,-1],[-1,0],[-2,-2],[-2,-3],[-2,-2],[-2,-1],[-2,0],[-1,0],[-2,0],[-1,-1],[-2,-2],[-1,-5],[-1,-2],[-1,-1],[-2,1],[-3,1],[-2,-1],[-5,-3],[-1,-2],[3,0],[1,-1],[0,-1],[-1,0],[-3,0],[-1,-1],[-2,-1],[-5,-2],[-1,-1],[-4,-5],[0,-2],[2,1],[2,-1],[2,-2],[0,-1],[1,-3],[-4,-5],[-1,-2],[-1,-1],[-1,6],[0,1],[-1,0],[-1,-2],[-3,-6],[-2,-3],[-18,-9],[-2,-2],[-1,-3],[0,-3],[-2,-3],[-1,-1],[0,1],[0,8],[-1,2],[-1,1],[-1,0],[-1,0],[-2,-2],[-1,-1],[-1,0],[-3,-1],[-5,-6],[-4,-2],[-1,-1],[-1,-3],[-1,-1],[-2,0],[-2,1],[-1,-1],[-2,-3],[-1,0],[-3,1],[-2,-1],[-2,-3],[-2,-2],[-2,-1],[-6,-1],[-2,1],[-1,1],[0,3],[1,3],[1,2],[1,1],[2,0],[3,-1],[0,1],[-1,1],[-3,2],[-3,1],[-2,-1],[-2,-1],[-1,-2],[-1,-2],[-1,-6],[-1,-2],[-6,-11],[-3,-3],[-3,0],[-1,-1],[-2,-3],[-1,-1],[-2,0],[-1,0],[-1,1],[0,1],[1,1],[0,2],[-2,4],[-1,2],[-3,0],[0,-2],[1,-8],[0,-2],[-2,-2],[-4,-3],[-1,0],[-4,5],[-3,1],[0,-1],[0,-4],[0,-3],[-3,-3],[-2,-2],[-1,0],[0,3],[1,4],[0,3],[0,3],[0,2],[0,2],[5,4],[2,1],[1,-2],[1,0],[2,1],[1,1],[0,2],[2,3],[4,3],[4,6],[4,8],[6,7],[6,6],[6,5],[14,7],[1,-1],[-1,-2],[0,-1],[2,0],[5,1],[2,1],[0,-1],[-1,-2],[-3,-2],[1,-1],[4,-7],[1,-1],[1,0],[1,1],[-1,5],[2,1],[3,0],[2,-1],[1,-1],[1,-1],[3,-1],[1,0],[1,2],[-1,2],[-5,4],[-1,1],[0,3],[0,3],[2,4],[2,6],[2,4],[4,5],[3,2],[7,8],[14,7],[4,5],[5,5],[2,1],[0,-2],[0,-2],[3,-1],[2,0],[1,0],[1,2],[-1,3],[0,4],[0,3],[1,2],[2,4],[3,5],[4,6],[3,3],[2,1],[3,2],[4,6],[1,1],[3,1],[1,0],[1,-2],[1,0],[3,-1],[2,1],[0,1],[-2,0],[-1,1],[-1,4],[-2,2],[-1,2],[1,4],[2,8],[0,9],[1,6],[4,1],[6,2],[-4,2],[-1,0],[-3,1],[-1,6],[0,4],[2,4],[6,8],[8,6],[-1,0],[-1,2],[3,11],[3,10],[-4,-9],[-5,-6],[-15,-7],[-10,-7],[-4,-1],[-3,1],[-3,6],[-1,3],[-2,3],[1,6],[1,3],[3,1],[4,-2],[3,0],[-4,3],[-6,3],[-2,-1],[-2,-5],[-3,-3],[-2,1],[-1,2],[1,-5],[-2,-6],[-1,-4],[3,-12],[-1,-4],[-4,-2],[-4,4],[-8,14],[-2,4],[-6,7],[-2,-1],[-3,-3],[-2,-1],[-7,5],[-3,3],[-3,5],[-4,-2],[-4,-3],[-4,-5],[-3,0],[-8,-4],[-1,0],[-1,-3],[-1,-1],[-1,-4],[-11,-3],[-11,2],[4,2],[4,2],[4,4],[-2,6],[0,3],[0,4],[4,5],[-4,0],[-3,-2],[-3,5],[-1,7],[3,5],[2,4],[1,5],[0,4],[-3,7],[-6,16],[-3,11],[-5,6],[4,10],[4,9],[5,4],[0,1],[-3,0],[-2,-1],[-2,-3],[-1,-2],[-6,-12],[-4,-5],[-2,-2],[4,-2],[0,-2],[1,-4],[-1,-5],[-1,-3],[-4,0],[-4,-4],[-10,-4],[-13,-3],[-6,1],[-7,5],[0,3],[1,2],[-10,9],[-5,9],[-4,0],[-3,3],[-4,3],[0,3],[1,3],[-3,1],[-3,0],[-3,1],[9,11],[3,8],[3,1],[3,-1],[5,-3],[4,-1],[2,-2],[1,-3],[-2,-4],[-1,-3],[2,1],[5,5],[3,4],[2,-1],[1,0],[2,-5],[3,-4],[5,4],[3,5],[-2,3],[-3,1],[-8,2],[2,1],[5,0],[2,2],[-2,2],[-3,2],[-6,-6],[-13,0],[-9,3],[-8,0],[-2,0],[-1,2],[5,5],[3,2],[0,2],[-2,0],[-4,-1],[-1,2],[0,3],[-1,0],[-1,-2],[-2,1],[-2,2],[1,1],[2,3],[-1,0],[-2,0],[-1,-3],[0,-3],[0,-4],[-3,0],[-2,0],[-2,4],[-2,8],[-4,2],[-2,4],[3,5],[-1,2],[-3,1],[-4,-3],[-1,3],[-1,2],[0,4],[1,0],[1,-1],[7,2],[1,1],[-6,3],[-1,4],[2,1],[4,1],[7,1],[-3,4],[-1,2],[0,3],[1,5],[7,11],[7,10],[2,2],[4,2],[3,-1],[3,-2],[0,1],[-1,0],[-1,4],[4,2],[3,4],[0,2],[-3,-2],[-3,-3],[0,3],[-1,7],[1,7],[1,3],[3,3],[7,1],[1,-1],[0,2],[-4,4],[2,3],[1,2],[8,3],[5,-1],[6,-3],[3,-4],[0,-2],[-1,-1],[-2,-2],[-1,-1],[1,-1],[2,3],[4,3],[2,-2],[2,-2],[2,0],[6,2],[4,2],[4,5],[5,4],[7,11],[2,4],[3,1],[2,-1],[1,-3],[3,-1],[13,0],[6,2],[5,4],[5,6],[3,4],[1,5],[-2,6],[-2,6],[-2,13],[-6,8],[-5,2],[-3,0],[2,5],[6,0],[4,1],[4,2],[1,2],[1,4],[0,5],[-1,2],[-2,2],[-3,4],[-2,1],[-1,0],[-8,-7],[-5,0],[-3,1],[-3,-4],[-9,-4],[-4,-4],[-9,-9],[-2,-4],[-2,0],[-2,8],[-9,8],[-3,-3],[1,-2],[2,-2],[4,-1],[-2,-2],[-1,-3],[-3,2],[-6,5],[-7,2],[-16,0],[-11,-5],[-1,1],[-1,1],[-2,-1],[0,-2],[-2,-1],[-2,-1],[-4,1],[-9,3],[-19,4],[-5,2],[-5,6],[1,4],[2,2],[-1,5],[-3,2],[-8,8],[-3,4],[1,0],[1,-1],[3,-1],[6,2],[2,5],[5,1],[4,0],[-1,1],[-1,1],[-11,3],[-2,-1],[-20,5],[-16,8],[-2,2],[-1,4],[2,3],[2,2],[0,-2],[1,-2],[9,4],[5,6],[9,1],[2,2],[3,3],[4,5],[6,3],[4,3],[5,1],[4,-2],[2,-1],[8,0],[2,1],[1,1],[1,1],[-8,4],[1,3],[1,2],[9,5],[7,2],[4,0],[11,6],[6,2],[11,1],[9,1],[2,-3],[-4,1],[-3,-1],[2,0],[2,-2],[-1,-2],[-3,-7],[0,-5],[-2,-2],[-2,-2],[10,-8],[14,0],[8,1],[5,-2],[4,-1],[10,1],[8,-1],[3,0],[7,12],[3,2],[3,-2],[4,-2],[3,1],[2,-3],[-1,6],[-2,3],[-11,4],[-8,-2],[-3,2],[1,5],[-8,11],[-4,3],[-4,0],[-2,4],[-2,5],[4,2],[3,1],[3,-2],[3,-7],[3,-1],[0,-6],[3,-6],[9,-6],[7,2],[5,0],[3,-1],[8,-6],[3,0],[12,3],[0,5],[-1,3],[-3,3],[-7,-1],[-6,4],[-6,-1],[-9,-6],[-5,2],[-3,3],[-5,4],[-1,6],[4,6],[3,4],[-2,2],[-7,2],[-12,-2],[0,2],[0,3],[-5,-5],[-5,1],[-7,-1],[-15,5],[-5,5],[-2,5],[-4,11],[-5,8],[-35,25],[-16,6],[-8,8],[-5,1],[-4,1],[-6,2],[4,3],[3,1],[-3,-3],[2,-1],[3,2],[2,2],[3,9],[3,12],[-1,5],[19,-1],[13,1],[5,1],[16,2],[4,2],[8,4],[9,8],[8,10],[1,3],[1,-1],[1,0],[1,4],[1,9],[4,9],[16,19],[8,8],[3,3],[2,3],[2,-3],[1,0],[1,-1],[-2,-1],[-3,-2],[-3,-2],[-1,-1],[2,0],[6,2],[4,2],[18,4],[10,7],[0,1],[14,9],[2,-1],[3,-1],[-4,-5],[2,-2],[-2,-6],[5,0],[1,-3],[1,2],[-1,4],[1,4],[1,2],[3,-1],[9,3],[-10,0],[-6,6],[-4,0],[11,9],[11,5],[2,0],[1,-1],[0,-1],[-2,-1],[-2,-2],[1,-2],[1,0],[5,1],[2,2],[11,0],[3,1],[1,1],[13,0],[3,1],[8,5],[8,6],[3,3],[7,8],[5,5],[9,5],[2,-1],[-3,-1],[-2,-2],[3,-3],[18,-6],[4,0],[2,-4],[-1,-3],[-5,-4],[-9,-4],[2,-1],[2,-4],[3,0],[5,1],[3,2],[8,7],[2,4],[2,1],[6,-1],[3,-2],[4,-3],[-1,-4],[-2,-2],[6,-2],[5,-1],[6,-2],[7,4],[6,1],[6,0],[7,2],[13,-3],[3,1],[5,-1],[5,-2],[2,-2],[-5,-4],[-1,-5],[2,-2],[3,0],[1,-3],[2,0],[11,0],[-1,-1],[0,-2],[-4,-3],[20,-2],[3,2],[4,0],[9,3],[3,-1],[4,-3],[4,0],[3,0],[8,4],[9,0],[4,-1],[4,1],[11,-5],[5,0],[5,-6],[3,0],[4,2],[3,0],[3,-2],[4,-1],[3,-3],[2,-2],[18,-2],[9,1],[13,-1],[6,-1],[6,0],[11,-6],[6,-1],[1,-2],[16,-1],[5,3],[10,1],[9,3],[5,0],[6,-1],[2,0],[2,1],[14,-4],[8,-6],[3,-4],[17,-6],[5,-3],[3,-3],[2,-1],[1,1],[6,0],[2,0]],[[3296,5915],[-1,0],[1,1],[0,1],[0,-1],[0,-1]],[[3299,5932],[0,-1],[-1,1],[1,0],[0,1],[-1,0],[0,1],[1,0],[0,1],[1,1],[0,-1],[-1,-1],[0,-2]],[[3300,5942],[0,-1],[-2,4],[0,4],[1,3],[1,1],[1,0],[1,-3],[-1,-6],[-1,-2]],[[3305,5695],[-1,-2],[-1,6],[1,2],[3,4],[1,1],[0,-1],[0,-1],[1,-2],[0,-3],[-1,-3],[-3,-1]],[[3310,5710],[-3,-2],[0,2],[1,2],[2,1],[0,1],[1,1],[1,0],[1,-1],[-2,-2],[-1,-2]],[[3188,5812],[-1,-1],[-3,1],[-1,2],[0,2],[3,0],[2,-3],[0,-1]],[[3226,5825],[1,-8],[0,-1],[-3,-5],[-2,0],[-2,0],[-1,1],[-2,3],[-1,-1],[-4,1],[-1,1],[1,4],[3,2],[1,0],[1,-2],[2,-2],[2,-1],[1,4],[3,6],[1,-2]],[[3019,5867],[-1,-3],[-2,-3],[-2,-2],[-11,-5],[-1,-2],[-1,-2],[0,-5],[0,-4],[3,-13],[1,-3],[5,-7],[-1,-1],[-2,0],[1,-9],[3,-6],[0,-4],[-2,-13],[-4,-7],[-2,-9],[-2,-3],[-4,-17],[3,-10],[0,-5],[3,-7],[2,-3],[1,-2],[0,-5],[1,-7],[1,-4],[2,-1],[3,0],[6,4],[2,2],[1,4],[3,7],[0,10],[1,11],[-1,7],[-3,11],[-2,7],[-3,7],[-2,12],[-1,3],[-1,6],[-1,9],[3,3],[-1,7],[6,2],[12,12],[8,3],[9,7],[2,3],[2,5],[1,1],[4,-5],[3,2],[1,4],[-2,7],[-2,0],[-8,-3],[-1,4],[0,2],[-2,9],[1,7],[2,6],[2,2],[3,2],[3,-3],[1,-4],[1,-3],[1,-9],[1,-10],[1,-6],[2,-5],[2,0],[1,1],[9,1],[5,-3],[6,-2],[6,-7],[6,-8],[1,-7],[1,-6],[1,-4],[-1,-4],[1,-7],[1,-6],[3,-5],[7,-1],[8,3],[13,3],[4,2],[20,1],[4,-3],[1,-3],[0,-3],[6,-12],[6,-2],[5,-4],[4,-2],[6,-3],[2,0],[3,1],[2,0],[19,21],[10,0],[1,1],[1,2],[-3,3],[-8,1],[-3,-2],[-1,5],[2,0],[9,2],[11,-1],[8,4],[5,0],[2,0],[7,2],[13,-3],[10,2],[-1,-3],[-4,-2],[-5,-1],[-4,-5],[-9,1],[-6,-2],[2,-1],[0,-5],[1,-1],[1,0],[2,-4],[0,-3],[1,-5],[-1,-5],[-1,-3],[2,1],[2,3],[0,2],[0,3],[1,-1],[1,-1],[3,-15],[3,-8],[0,1],[1,0],[0,1],[1,4],[1,-2],[1,-1],[0,3],[0,4],[0,2],[1,0],[1,-1],[2,-1],[3,-5],[2,-5],[0,-3],[1,-1],[1,-2],[1,-2],[0,4],[-1,3],[0,3],[4,0],[1,5],[2,-3],[6,-12],[2,-2],[6,-3],[4,-6],[2,-5],[-1,-6],[-4,-2],[-1,-4],[-1,-3],[0,-4],[-1,-4],[-1,-1],[0,-6],[-2,-7],[-2,-7],[-10,0],[3,-3],[2,-2],[4,-6],[3,5],[4,0],[5,5],[2,1],[9,-3],[2,4],[2,1],[4,-1],[5,-4]],[[3205,6244],[-2,0],[1,2],[2,0],[1,0],[-2,-2]],[[3211,6247],[-1,0],[0,1],[0,2],[3,0],[-2,-3]],[[3214,6263],[0,-2],[-2,2],[-1,0],[-1,1],[3,0],[1,-1]],[[3201,6209],[2,-3],[3,0],[-3,-2],[-6,-1],[0,4],[4,2]],[[3204,6241],[-2,-2],[-1,1],[-1,0],[1,2],[3,-1]],[[3198,6240],[-2,-1],[-3,3],[3,1],[1,-1],[1,-2]],[[7961,5684],[-1,0],[-1,1],[3,4],[0,-3],[0,-1],[-1,-1]],[[7890,5782],[0,-3],[0,-6],[-1,-7],[0,-3],[0,-2],[-2,13],[-3,5],[0,2],[1,0],[3,3],[1,0],[1,-2]],[[7976,5783],[-2,-4],[0,3],[2,2],[0,1],[1,0],[-1,-2]],[[7972,6379],[-1,0],[-2,4],[1,3],[3,-2],[0,-1],[0,-1],[0,-2],[-1,-1]],[[7968,6383],[-1,-1],[-1,2],[-1,2],[1,3],[1,-4],[1,-2]],[[7986,6389],[-2,-1],[-1,0],[2,3],[1,3],[1,1],[0,-3],[-1,-3]],[[7988,6406],[-4,-7],[-1,0],[1,8],[1,2],[2,-3],[1,0]],[[7998,6423],[-1,-1],[-3,0],[-3,-5],[-2,-2],[-3,-2],[-3,-3],[-1,-5],[0,-4],[-1,-4],[-5,-7],[-1,1],[-1,2],[-2,0],[-1,-1],[-1,0],[-2,-2],[-2,1],[-1,2],[-1,0],[-1,0],[-1,-2],[2,-9],[1,-4],[-6,-12],[1,-8],[-2,-6],[-3,-4],[-7,-13],[-3,0],[-2,-3],[-5,-20],[0,-7],[0,-5],[0,-5],[-2,-9],[-2,-5],[-1,-5],[3,-11],[1,-1],[1,-6],[1,-4],[2,-4],[4,-11],[3,-3],[2,-3],[5,-9],[3,-7],[-2,-4],[1,-9],[-3,3],[0,-1],[4,-5],[6,-17],[5,-8],[6,-10],[1,-9],[5,-6],[6,-9],[-1,-2],[2,-2],[4,-5],[2,-4],[1,-5],[1,-1],[1,1],[2,1],[1,-1],[2,-5],[2,-4],[1,-4],[1,0],[1,0],[0,-4],[0,-2],[3,-7],[2,-6],[3,-11],[3,-5],[2,-4],[2,-2],[2,-12],[1,-10],[3,-12],[1,-5],[0,-9],[2,-10],[1,-6],[1,-7],[0,-3],[1,-3],[1,-11],[0,-5],[-1,5],[0,-15],[1,-8],[0,-10],[1,-4],[1,-11],[2,-4],[0,-14],[0,-6],[-1,4],[-2,4],[-1,-2],[-2,-4],[2,-14],[-2,1],[0,-20],[1,-4],[0,-3],[0,-2],[-1,3],[0,3],[0,-1],[0,-2],[-1,-3],[-1,-4],[1,-4],[0,-3],[0,-3],[-1,-4],[-3,0],[-1,-8],[0,-7],[-5,-1],[-3,-7],[-4,-3],[-4,-6],[-4,-6],[-3,-1],[-2,-2],[-3,-10],[-4,-1],[-8,-8],[-3,-4],[-2,-2],[-3,-3],[-1,1],[-1,3],[-3,1],[-2,4],[0,4],[0,2],[-1,-3],[-1,-10],[0,-2],[-1,-1],[-3,3],[-2,6],[-4,-4],[2,-1],[1,0],[1,-1],[1,-4],[0,-2],[0,-2],[-3,-1],[-5,1],[3,-4],[4,-2],[1,-3],[0,-2],[-2,-3],[-1,-4],[0,-2],[0,-3],[-2,-2],[-1,0],[-3,4],[-9,17],[2,-5],[9,-19],[1,-6],[1,-4],[-1,-2],[-2,-3],[-3,0],[-5,7],[-7,17],[-3,2],[8,-19],[1,-5],[1,-5],[0,-3],[-1,-3],[-18,-17],[-3,-8],[-2,-9],[-4,-5],[-2,-5],[-6,-3],[-3,1],[3,9],[-2,3],[0,22],[1,24],[1,12],[3,3],[2,2],[1,3],[-1,3],[-1,4],[-2,2],[-3,0],[-2,5],[-1,0],[-2,-1],[-2,2],[0,3],[-3,4],[-2,4]],[[7929,6229],[-2,2],[-2,0]],[[9718,4021],[-1,-3],[-1,0],[-2,2],[0,3],[3,0],[1,-2]],[[9707,4058],[-1,-6],[-3,2],[-2,4],[-1,4],[0,8],[2,1],[1,-1],[0,-7],[4,-5]],[[9703,4093],[-2,-3],[-1,0],[-7,7],[0,2],[0,7],[1,4],[2,1],[1,0],[1,-6],[3,-2],[-2,-2],[3,-4],[1,-4]],[[9678,4173],[3,-8],[1,0],[-2,-6],[-3,-1],[-4,2],[1,2],[-1,2],[-1,0],[-1,-1],[-1,1],[1,3],[2,6],[1,0],[1,0],[3,0]],[[9678,4217],[1,0],[-1,-3],[-3,3],[-3,-1],[-1,0],[-1,2],[-1,4],[0,4],[2,2],[1,-3],[1,-1],[1,-1],[2,-4],[2,-2]],[[9674,4243],[-3,-1],[-5,2],[-1,3],[-1,2],[1,2],[2,1],[3,6],[1,-3],[1,-6],[1,-2],[1,-2],[0,-2]],[[9649,4257],[2,-2],[1,-2],[4,-6],[1,0],[1,-3],[1,-1],[1,-4],[1,-3],[-2,-4],[-4,2],[-2,-5],[-3,1],[0,3],[-1,6],[-1,9],[0,5],[-1,3],[-2,-2],[-1,-1],[-2,5],[1,8],[0,3],[2,0],[2,-2],[2,-10]],[[9644,4278],[0,-1],[-3,3],[0,4],[3,-1],[0,-5]],[[9672,4264],[-1,0],[0,3],[-2,14],[1,12],[1,-2],[2,-23],[0,-3],[-1,-1]],[[9663,4295],[-2,-3],[-3,0],[-1,2],[4,8],[5,2],[-3,-9]],[[9671,4301],[-1,-4],[-1,4],[0,18],[0,1],[0,1],[2,-13],[0,-7]],[[9631,4330],[2,-19],[2,0],[1,1],[1,4],[1,7],[1,1],[1,0],[-1,-3],[1,-5],[1,-3],[1,-1],[1,-15],[1,-3],[-1,-2],[-2,-6],[-5,1],[-3,-4],[-2,0],[0,4],[-1,3],[-2,6],[0,12],[-3,20],[0,6],[1,6],[1,1],[2,-6],[2,-5]],[[9654,4362],[-1,-3],[-3,1],[-1,1],[0,5],[1,2],[2,1],[3,-2],[-1,-5]],[[9652,4383],[-1,-1],[-1,1],[-1,7],[0,2],[2,2],[2,-4],[0,-2],[0,-2],[0,-1],[-1,-1],[0,-1]],[[54,4359],[-1,0],[-2,0],[-1,4],[1,1],[1,-1],[1,-2],[1,-1],[0,-1]],[[107,4416],[-1,-1],[0,3],[0,3],[1,1],[1,-2],[-1,-4]],[[237,4375],[-7,0],[-4,2],[-1,0],[-4,6],[0,3],[2,2],[3,1],[7,-5],[1,-3],[2,-1],[1,-1],[0,-3],[0,-1]],[[213,4408],[3,-5],[1,-7],[-1,-7],[-3,1],[-4,-1],[-2,0],[-3,9],[-2,4],[-1,3],[3,0],[4,2],[5,1]],[[6493,5912],[1,-1],[3,2],[8,0],[9,-6],[-2,-2],[-1,-2],[-4,-2],[-4,-5],[-11,-3],[-4,2],[-3,4],[-5,7],[2,4],[1,1],[1,2],[2,3],[3,0],[4,-4]],[[6187,5973],[-2,-2],[1,5],[2,1],[-1,-4]],[[6188,5989],[0,-2],[-1,1],[-2,3],[2,3],[1,-3],[0,-2]],[[6182,6065],[0,-1],[-1,2],[1,5],[1,2],[0,-4],[0,-2],[-1,-2]],[[6474,6143],[-14,-11],[-4,-4],[-3,-6],[-3,-7],[-1,-12],[1,-11],[0,-6],[-4,-4],[-3,-3],[-4,-5],[-2,-1],[-2,-3],[-2,-3],[-8,-6],[-9,-5],[-13,-6],[-5,-6],[-5,-5],[-7,-1],[-10,-6],[-6,-5],[-7,-8],[-1,-3],[-1,-5],[-3,-5],[-4,-9],[-3,-4],[-2,0],[-4,-2],[-5,-1],[-8,3],[-2,-2],[-1,-3],[-6,-6],[-7,-11],[-4,-3],[-8,-4],[-5,-5],[-3,-1],[-5,-1],[-8,0],[-8,-2],[-7,-3],[-4,-6],[-4,-10],[-6,-4],[-2,-3],[-2,-7],[-4,-2],[-3,-1],[-4,3],[-7,-8],[-3,-2],[-4,0],[-3,-2],[-2,0],[-3,4],[-6,4],[-4,-3],[0,8],[-7,25],[2,21],[0,3],[-2,10],[-4,9],[0,11],[-1,8],[-1,8],[0,2],[0,2],[-2,13],[0,2],[-1,3],[1,2],[0,2],[-1,4],[-1,7],[-6,6],[1,6],[2,-2],[1,-2],[0,4],[0,2],[-2,16],[3,22],[-1,20]],[[6051,2480],[-1,-1],[-6,1],[0,2],[1,3],[1,2],[3,-1],[2,-3],[1,-1],[-1,-2]],[[5913,3637],[-1,-13],[-4,-21],[-1,-9],[-4,-34],[-4,-18],[-3,-7],[-7,-12],[-2,-3],[-2,-1],[-3,-2],[-12,-25],[-5,-13],[-4,-17],[-4,-10],[-6,-21],[-5,-16],[-5,-15],[-9,-20],[-4,-6],[-3,-3],[-7,-12],[-9,-19],[-8,-16],[-11,-19],[-7,-9],[-10,-16],[-2,-2],[-11,-16],[-8,-9],[-13,-11],[-5,-3],[-13,3],[-5,-1],[-4,-7],[0,-9],[-2,-2],[-3,1],[-8,4],[-5,-1],[-3,-5],[-2,-6],[-6,-1],[-12,7],[-13,4],[-3,0],[-7,-5],[-2,0],[-10,1],[-5,3],[-5,0],[-4,-3],[-5,-1],[-12,-17],[-7,0],[-6,-2],[-2,0],[-6,2],[-2,0],[-2,-1],[-3,-3],[-7,-1],[-3,-3],[-11,-16],[-3,1],[-2,1],[-6,0],[-7,9],[-2,-1],[0,3],[0,4],[-1,3],[-1,2],[-3,-1],[-1,4],[-4,1],[-2,-1],[-1,-1],[-1,4],[1,3],[-1,4],[0,4],[-2,2],[-1,0],[-3,0],[-2,0],[-1,-2],[-1,-3],[0,-11],[-1,3],[-2,7],[0,6],[0,8],[3,3],[0,5],[-1,5],[-3,11],[-1,6],[-3,3],[-2,9],[-3,3],[-1,6],[-2,5],[-1,8],[2,4],[1,3],[2,-4],[3,2],[3,5],[2,9],[1,13],[-1,9],[-3,21],[-1,6],[-6,15],[-8,21],[-9,33],[-4,20],[-7,40],[-6,23],[-7,21],[-1,1]],[[5815,3905],[0,1],[8,2],[7,-2],[8,-6],[8,-2],[7,1],[5,1],[5,-1],[3,-2],[3,-4]],[[5844,4283],[-4,0],[-7,0],[-8,0],[-6,-3],[-6,-5],[-7,-7],[-2,-3],[-1,-2],[-1,-3],[-1,-6],[0,-9],[-1,-7],[-2,-6],[-10,-8],[-6,-6],[-7,-7],[-5,-10],[-3,-11],[-5,-15],[-6,-12],[-6,-14],[-7,-4],[-5,1],[-7,5],[-5,1],[-4,-3],[-4,1],[-4,5],[-2,2],[-3,-1],[-3,0],[-5,3]]],"transform":{"scale":[0.036003600360036005,0.01736158967459246],"translate":[-180,-89.99892578124998]}} \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/data/map/countries_formatted.topojson b/framework/src/onos/web/gui/src/main/webapp/data/map/countries_formatted.topojson
deleted file mode 100644
index 6afdb129..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/data/map/countries_formatted.topojson
+++ /dev/null
@@ -1,347863 +0,0 @@
-{
- "type": "Topology",
- "objects": {
- "countries": {
- "type": "GeometryCollection",
- "geometries": [
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Netherlands",
- "sov_a3": "NL1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "Aruba",
- "adm0_a3": "ABW",
- "geou_dif": 0,
- "geounit": "Aruba",
- "gu_a3": "ABW",
- "su_dif": 0,
- "subunit": "Aruba",
- "su_a3": "ABW",
- "brk_diff": 0,
- "name": "Aruba",
- "name_long": "Aruba",
- "brk_a3": "ABW",
- "brk_name": "Aruba",
- "brk_group": null,
- "abbrev": "Aruba",
- "postal": "AW",
- "formal_en": "Aruba",
- "formal_fr": null,
- "note_adm0": "Neth.",
- "note_brk": null,
- "name_sort": "Aruba",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 2,
- "mapcolor9": 2,
- "mapcolor13": 9,
- "pop_est": 103065,
- "gdp_md_est": 2258,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AW",
- "iso_a3": "ABW",
- "iso_n3": "533",
- "un_a3": "533",
- "wb_a2": "AW",
- "wb_a3": "ABW",
- "woe_id": -99,
- "adm0_a3_is": "ABW",
- "adm0_a3_us": "ABW",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": 4,
- "homepart": -99
- },
- "arcs": [
- [
- 0
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Afghanistan",
- "sov_a3": "AFG",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Afghanistan",
- "adm0_a3": "AFG",
- "geou_dif": 0,
- "geounit": "Afghanistan",
- "gu_a3": "AFG",
- "su_dif": 0,
- "subunit": "Afghanistan",
- "su_a3": "AFG",
- "brk_diff": 0,
- "name": "Afghanistan",
- "name_long": "Afghanistan",
- "brk_a3": "AFG",
- "brk_name": "Afghanistan",
- "brk_group": null,
- "abbrev": "Afg.",
- "postal": "AF",
- "formal_en": "Islamic State of Afghanistan",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Afghanistan",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 6,
- "mapcolor9": 8,
- "mapcolor13": 7,
- "pop_est": 28400000,
- "gdp_md_est": 22270,
- "pop_year": -99,
- "lastcensus": 1979,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AF",
- "iso_a3": "AFG",
- "iso_n3": "004",
- "un_a3": "004",
- "wb_a2": "AF",
- "wb_a3": "AFG",
- "woe_id": -99,
- "adm0_a3_is": "AFG",
- "adm0_a3_us": "AFG",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Southern Asia",
- "region_wb": "South Asia",
- "name_len": 11,
- "long_len": 11,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Angola",
- "sov_a3": "AGO",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Angola",
- "adm0_a3": "AGO",
- "geou_dif": 0,
- "geounit": "Angola",
- "gu_a3": "AGO",
- "su_dif": 0,
- "subunit": "Angola",
- "su_a3": "AGO",
- "brk_diff": 0,
- "name": "Angola",
- "name_long": "Angola",
- "brk_a3": "AGO",
- "brk_name": "Angola",
- "brk_group": null,
- "abbrev": "Ang.",
- "postal": "AO",
- "formal_en": "People's Republic of Angola",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Angola",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 2,
- "mapcolor9": 6,
- "mapcolor13": 1,
- "pop_est": 12799293,
- "gdp_md_est": 110300,
- "pop_year": -99,
- "lastcensus": 1970,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AO",
- "iso_a3": "AGO",
- "iso_n3": "024",
- "un_a3": "024",
- "wb_a2": "AO",
- "wb_a3": "AGO",
- "woe_id": -99,
- "adm0_a3_is": "AGO",
- "adm0_a3_us": "AGO",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Middle Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 8,
- 9,
- 10,
- 11
- ]
- ],
- [
- [
- 12,
- 13,
- 14
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "United Kingdom",
- "sov_a3": "GB1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Anguilla",
- "adm0_a3": "AIA",
- "geou_dif": 0,
- "geounit": "Anguilla",
- "gu_a3": "AIA",
- "su_dif": 0,
- "subunit": "Anguilla",
- "su_a3": "AIA",
- "brk_diff": 0,
- "name": "Anguilla",
- "name_long": "Anguilla",
- "brk_a3": "AIA",
- "brk_name": "Anguilla",
- "brk_group": null,
- "abbrev": "Ang.",
- "postal": "AI",
- "formal_en": null,
- "formal_fr": null,
- "note_adm0": "U.K.",
- "note_brk": null,
- "name_sort": "Anguilla",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 14436,
- "gdp_md_est": 108.9,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AI",
- "iso_a3": "AIA",
- "iso_n3": "660",
- "un_a3": "660",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "AIA",
- "adm0_a3_us": "AIA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- 15
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Albania",
- "sov_a3": "ALB",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Albania",
- "adm0_a3": "ALB",
- "geou_dif": 0,
- "geounit": "Albania",
- "gu_a3": "ALB",
- "su_dif": 0,
- "subunit": "Albania",
- "su_a3": "ALB",
- "brk_diff": 0,
- "name": "Albania",
- "name_long": "Albania",
- "brk_a3": "ALB",
- "brk_name": "Albania",
- "brk_group": null,
- "abbrev": "Alb.",
- "postal": "AL",
- "formal_en": "Republic of Albania",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Albania",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 1,
- "mapcolor13": 6,
- "pop_est": 3639453,
- "gdp_md_est": 21810,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AL",
- "iso_a3": "ALB",
- "iso_n3": "008",
- "un_a3": "008",
- "wb_a2": "AL",
- "wb_a3": "ALB",
- "woe_id": -99,
- "adm0_a3_is": "ALB",
- "adm0_a3_us": "ALB",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Southern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 16,
- 17,
- 18,
- 19,
- 20
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Finland",
- "sov_a3": "FI1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "Aland",
- "adm0_a3": "ALD",
- "geou_dif": 0,
- "geounit": "Aland",
- "gu_a3": "ALD",
- "su_dif": 0,
- "subunit": "Aland",
- "su_a3": "ALD",
- "brk_diff": 0,
- "name": "Aland",
- "name_long": "Aland Islands",
- "brk_a3": "ALD",
- "brk_name": "Aland",
- "brk_group": null,
- "abbrev": "Aland",
- "postal": "AI",
- "formal_en": "Åland Islands",
- "formal_fr": null,
- "note_adm0": "Fin.",
- "note_brk": null,
- "name_sort": "Aland",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 1,
- "mapcolor9": 4,
- "mapcolor13": 6,
- "pop_est": 27153,
- "gdp_md_est": 1563,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AX",
- "iso_a3": "ALA",
- "iso_n3": "248",
- "un_a3": "248",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "ALA",
- "adm0_a3_us": "ALD",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Northern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 5,
- "long_len": 13,
- "abbrev_len": 5,
- "tiny": 5,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 21
- ]
- ],
- [
- [
- 22
- ]
- ],
- [
- [
- 23
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Andorra",
- "sov_a3": "AND",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Andorra",
- "adm0_a3": "AND",
- "geou_dif": 0,
- "geounit": "Andorra",
- "gu_a3": "AND",
- "su_dif": 0,
- "subunit": "Andorra",
- "su_a3": "AND",
- "brk_diff": 0,
- "name": "Andorra",
- "name_long": "Andorra",
- "brk_a3": "AND",
- "brk_name": "Andorra",
- "brk_group": null,
- "abbrev": "And.",
- "postal": "AND",
- "formal_en": "Principality of Andorra",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Andorra",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 1,
- "mapcolor13": 8,
- "pop_est": 83888,
- "gdp_md_est": 3660,
- "pop_year": -99,
- "lastcensus": 1989,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AD",
- "iso_a3": "AND",
- "iso_n3": "020",
- "un_a3": "020",
- "wb_a2": "AD",
- "wb_a3": "ADO",
- "woe_id": -99,
- "adm0_a3_is": "AND",
- "adm0_a3_us": "AND",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Southern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": 5,
- "homepart": 1
- },
- "arcs": [
- [
- 24,
- 25
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "United Arab Emirates",
- "sov_a3": "ARE",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "United Arab Emirates",
- "adm0_a3": "ARE",
- "geou_dif": 0,
- "geounit": "United Arab Emirates",
- "gu_a3": "ARE",
- "su_dif": 0,
- "subunit": "United Arab Emirates",
- "su_a3": "ARE",
- "brk_diff": 0,
- "name": "United Arab Emirates",
- "name_long": "United Arab Emirates",
- "brk_a3": "ARE",
- "brk_name": "United Arab Emirates",
- "brk_group": null,
- "abbrev": "U.A.E.",
- "postal": "AE",
- "formal_en": "United Arab Emirates",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "United Arab Emirates",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 1,
- "mapcolor9": 3,
- "mapcolor13": 3,
- "pop_est": 4798491,
- "gdp_md_est": 184300,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AE",
- "iso_a3": "ARE",
- "iso_n3": "784",
- "un_a3": "784",
- "wb_a2": "AE",
- "wb_a3": "ARE",
- "woe_id": -99,
- "adm0_a3_is": "ARE",
- "adm0_a3_us": "ARE",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Middle East & North Africa",
- "name_len": 20,
- "long_len": 20,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 26
- ]
- ],
- [
- [
- 27
- ]
- ],
- [
- [
- 28
- ]
- ],
- [
- [
- 29
- ]
- ],
- [
- [
- 30,
- 31,
- 32,
- 33,
- 34
- ],
- [
- 35
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Argentina",
- "sov_a3": "ARG",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Argentina",
- "adm0_a3": "ARG",
- "geou_dif": 0,
- "geounit": "Argentina",
- "gu_a3": "ARG",
- "su_dif": 0,
- "subunit": "Argentina",
- "su_a3": "ARG",
- "brk_diff": 0,
- "name": "Argentina",
- "name_long": "Argentina",
- "brk_a3": "ARG",
- "brk_name": "Argentina",
- "brk_group": null,
- "abbrev": "Arg.",
- "postal": "AR",
- "formal_en": "Argentine Republic",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Argentina",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 1,
- "mapcolor9": 3,
- "mapcolor13": 13,
- "pop_est": 40913584,
- "gdp_md_est": 573900,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AR",
- "iso_a3": "ARG",
- "iso_n3": "032",
- "un_a3": "032",
- "wb_a2": "AR",
- "wb_a3": "ARG",
- "woe_id": -99,
- "adm0_a3_is": "ARG",
- "adm0_a3_us": "ARG",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "South America",
- "region_un": "Americas",
- "subregion": "South America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 9,
- "long_len": 9,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 36
- ]
- ],
- [
- [
- 37,
- 38
- ]
- ],
- [
- [
- 39
- ]
- ],
- [
- [
- 40,
- 41,
- 42,
- 43,
- 44,
- 45
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Armenia",
- "sov_a3": "ARM",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Armenia",
- "adm0_a3": "ARM",
- "geou_dif": 0,
- "geounit": "Armenia",
- "gu_a3": "ARM",
- "su_dif": 0,
- "subunit": "Armenia",
- "su_a3": "ARM",
- "brk_diff": 0,
- "name": "Armenia",
- "name_long": "Armenia",
- "brk_a3": "ARM",
- "brk_name": "Armenia",
- "brk_group": null,
- "abbrev": "Arm.",
- "postal": "ARM",
- "formal_en": "Republic of Armenia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Armenia",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 1,
- "mapcolor9": 2,
- "mapcolor13": 10,
- "pop_est": 2967004,
- "gdp_md_est": 18770,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AM",
- "iso_a3": "ARM",
- "iso_n3": "051",
- "un_a3": "051",
- "wb_a2": "AM",
- "wb_a3": "ARM",
- "woe_id": -99,
- "adm0_a3_is": "ARM",
- "adm0_a3_us": "ARM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 46
- ]
- ],
- [
- [
- 47,
- 48,
- 49,
- 50,
- 51
- ],
- [
- 52
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "United States of America",
- "sov_a3": "US1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "American Samoa",
- "adm0_a3": "ASM",
- "geou_dif": 0,
- "geounit": "American Samoa",
- "gu_a3": "ASM",
- "su_dif": 0,
- "subunit": "American Samoa",
- "su_a3": "ASM",
- "brk_diff": 0,
- "name": "American Samoa",
- "name_long": "American Samoa",
- "brk_a3": "ASM",
- "brk_name": "American Samoa",
- "brk_group": null,
- "abbrev": "Am. Samoa",
- "postal": "AS",
- "formal_en": "American Samoa",
- "formal_fr": null,
- "note_adm0": "U.S.A.",
- "note_brk": null,
- "name_sort": "American Samoa",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 5,
- "mapcolor9": 1,
- "mapcolor13": 1,
- "pop_est": 65628,
- "gdp_md_est": 575.3,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AS",
- "iso_a3": "ASM",
- "iso_n3": "016",
- "un_a3": "016",
- "wb_a2": "AS",
- "wb_a3": "ASM",
- "woe_id": -99,
- "adm0_a3_is": "ASM",
- "adm0_a3_us": "ASM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Polynesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 14,
- "long_len": 14,
- "abbrev_len": 9,
- "tiny": 3,
- "homepart": -99
- },
- "arcs": [
- [
- 53
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Antarctica",
- "sov_a3": "ATA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Indeterminate",
- "admin": "Antarctica",
- "adm0_a3": "ATA",
- "geou_dif": 0,
- "geounit": "Antarctica",
- "gu_a3": "ATA",
- "su_dif": 0,
- "subunit": "Antarctica",
- "su_a3": "ATA",
- "brk_diff": 0,
- "name": "Antarctica",
- "name_long": "Antarctica",
- "brk_a3": "ATA",
- "brk_name": "Antarctica",
- "brk_group": null,
- "abbrev": "Ant.",
- "postal": "AQ",
- "formal_en": null,
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": "Multiple claims held in abeyance",
- "name_sort": "Antarctica",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 5,
- "mapcolor9": 1,
- "mapcolor13": -99,
- "pop_est": 3802,
- "gdp_md_est": 760.4,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AQ",
- "iso_a3": "ATA",
- "iso_n3": "010",
- "un_a3": "-099",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "ATA",
- "adm0_a3_us": "ATA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Antarctica",
- "region_un": "Antarctica",
- "subregion": "Antarctica",
- "region_wb": "Antarctica",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 54
- ]
- ],
- [
- [
- 55
- ]
- ],
- [
- [
- 56
- ]
- ],
- [
- [
- 57
- ]
- ],
- [
- [
- 58
- ]
- ],
- [
- [
- 59
- ]
- ],
- [
- [
- 60
- ]
- ],
- [
- [
- 61
- ]
- ],
- [
- [
- 62
- ]
- ],
- [
- [
- 63
- ]
- ],
- [
- [
- 64
- ]
- ],
- [
- [
- 65
- ]
- ],
- [
- [
- 66
- ]
- ],
- [
- [
- 67
- ]
- ],
- [
- [
- 68
- ]
- ],
- [
- [
- 69
- ]
- ],
- [
- [
- 70
- ]
- ],
- [
- [
- 71
- ]
- ],
- [
- [
- 72
- ]
- ],
- [
- [
- 73
- ]
- ],
- [
- [
- 74
- ]
- ],
- [
- [
- 75
- ]
- ],
- [
- [
- 76
- ]
- ],
- [
- [
- 77
- ]
- ],
- [
- [
- 78
- ]
- ],
- [
- [
- 79
- ]
- ],
- [
- [
- 80
- ]
- ],
- [
- [
- 81
- ]
- ],
- [
- [
- 82
- ]
- ],
- [
- [
- 83
- ]
- ],
- [
- [
- 84
- ]
- ],
- [
- [
- 85
- ]
- ],
- [
- [
- 86
- ]
- ],
- [
- [
- 87
- ]
- ],
- [
- [
- 88
- ]
- ],
- [
- [
- 89
- ]
- ],
- [
- [
- 90
- ]
- ],
- [
- [
- 91
- ]
- ],
- [
- [
- 92
- ]
- ],
- [
- [
- 93
- ]
- ],
- [
- [
- 94
- ]
- ],
- [
- [
- 95
- ]
- ],
- [
- [
- 96
- ]
- ],
- [
- [
- 97
- ]
- ],
- [
- [
- 98
- ]
- ],
- [
- [
- 99
- ]
- ],
- [
- [
- 100
- ]
- ],
- [
- [
- 101
- ]
- ],
- [
- [
- 102
- ]
- ],
- [
- [
- 103
- ]
- ],
- [
- [
- 104
- ]
- ],
- [
- [
- 105
- ]
- ],
- [
- [
- 106
- ]
- ],
- [
- [
- 107
- ]
- ],
- [
- [
- 108
- ]
- ],
- [
- [
- 109
- ]
- ],
- [
- [
- 110
- ]
- ],
- [
- [
- 111
- ]
- ],
- [
- [
- 112
- ]
- ],
- [
- [
- 113
- ]
- ],
- [
- [
- 114
- ]
- ],
- [
- [
- 115
- ]
- ],
- [
- [
- 116
- ]
- ],
- [
- [
- 117
- ]
- ],
- [
- [
- 118
- ]
- ],
- [
- [
- 119
- ]
- ],
- [
- [
- 120
- ]
- ],
- [
- [
- 121
- ]
- ],
- [
- [
- 122
- ]
- ],
- [
- [
- 123
- ]
- ],
- [
- [
- 124
- ]
- ],
- [
- [
- 125
- ]
- ],
- [
- [
- 126
- ]
- ],
- [
- [
- 127
- ]
- ],
- [
- [
- 128
- ]
- ],
- [
- [
- 129
- ]
- ],
- [
- [
- 130
- ]
- ],
- [
- [
- 131
- ]
- ],
- [
- [
- 132
- ]
- ],
- [
- [
- 133
- ]
- ],
- [
- [
- 134
- ]
- ],
- [
- [
- 135
- ]
- ],
- [
- [
- 136
- ]
- ],
- [
- [
- 137
- ]
- ],
- [
- [
- 138
- ]
- ],
- [
- [
- 139
- ]
- ],
- [
- [
- 140
- ]
- ],
- [
- [
- 141
- ]
- ],
- [
- [
- 142
- ]
- ],
- [
- [
- 143
- ]
- ],
- [
- [
- 144
- ]
- ],
- [
- [
- 145
- ]
- ],
- [
- [
- 146
- ]
- ],
- [
- [
- 147
- ]
- ],
- [
- [
- 148
- ]
- ],
- [
- [
- 149
- ]
- ],
- [
- [
- 150
- ]
- ],
- [
- [
- 151
- ]
- ],
- [
- [
- 152
- ]
- ],
- [
- [
- 153
- ]
- ],
- [
- [
- 154
- ]
- ],
- [
- [
- 155
- ]
- ],
- [
- [
- 156
- ]
- ],
- [
- [
- 157
- ]
- ],
- [
- [
- 158
- ]
- ],
- [
- [
- 159
- ]
- ],
- [
- [
- 160
- ]
- ],
- [
- [
- 161
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "France",
- "sov_a3": "FR1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "French Southern and Antarctic Lands",
- "adm0_a3": "ATF",
- "geou_dif": 0,
- "geounit": "French Southern and Antarctic Lands",
- "gu_a3": "ATF",
- "su_dif": 0,
- "subunit": "French Southern and Antarctic Lands",
- "su_a3": "ATF",
- "brk_diff": 0,
- "name": "Fr. S. Antarctic Lands",
- "name_long": "French Southern and Antarctic Lands",
- "brk_a3": "ATF",
- "brk_name": "Fr. S. and Antarctic Lands",
- "brk_group": null,
- "abbrev": "Fr. S.A.L.",
- "postal": "TF",
- "formal_en": "Territory of the French Southern and Antarctic Lands",
- "formal_fr": null,
- "note_adm0": "Fr.",
- "note_brk": null,
- "name_sort": "French Southern and Antarctic Lands",
- "name_alt": null,
- "mapcolor7": 7,
- "mapcolor8": 5,
- "mapcolor9": 9,
- "mapcolor13": 11,
- "pop_est": 140,
- "gdp_md_est": 16,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "TF",
- "iso_a3": "ATF",
- "iso_n3": "260",
- "un_a3": "-099",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "ATF",
- "adm0_a3_us": "ATF",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Seven seas (open ocean)",
- "region_un": "Seven seas (open ocean)",
- "subregion": "Seven seas (open ocean)",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 22,
- "long_len": 35,
- "abbrev_len": 10,
- "tiny": 2,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 162
- ]
- ],
- [
- [
- 163
- ]
- ],
- [
- [
- 164
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Antigua and Barbuda",
- "sov_a3": "ATG",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Antigua and Barbuda",
- "adm0_a3": "ATG",
- "geou_dif": 0,
- "geounit": "Antigua and Barbuda",
- "gu_a3": "ATG",
- "su_dif": 0,
- "subunit": "Antigua and Barbuda",
- "su_a3": "ATG",
- "brk_diff": 0,
- "name": "Antigua and Barb.",
- "name_long": "Antigua and Barbuda",
- "brk_a3": "ATG",
- "brk_name": "Antigua and Barb.",
- "brk_group": null,
- "abbrev": "Ant.B.",
- "postal": "AG",
- "formal_en": "Antigua and Barbuda",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Antigua and Barbuda",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 2,
- "mapcolor9": 5,
- "mapcolor13": 5,
- "pop_est": 85632,
- "gdp_md_est": 1657,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AG",
- "iso_a3": "ATG",
- "iso_n3": "028",
- "un_a3": "028",
- "wb_a2": "AG",
- "wb_a3": "ATG",
- "woe_id": -99,
- "adm0_a3_is": "ATG",
- "adm0_a3_us": "ATG",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 17,
- "long_len": 19,
- "abbrev_len": 6,
- "tiny": 4,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 165
- ]
- ],
- [
- [
- 166
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Australia",
- "sov_a3": "AU1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "Australia",
- "adm0_a3": "AUS",
- "geou_dif": 0,
- "geounit": "Australia",
- "gu_a3": "AUS",
- "su_dif": 0,
- "subunit": "Australia",
- "su_a3": "AUS",
- "brk_diff": 0,
- "name": "Australia",
- "name_long": "Australia",
- "brk_a3": "AUS",
- "brk_name": "Australia",
- "brk_group": null,
- "abbrev": "Auz.",
- "postal": "AU",
- "formal_en": "Commonwealth of Australia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Australia",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 2,
- "mapcolor9": 2,
- "mapcolor13": 7,
- "pop_est": 21262641,
- "gdp_md_est": 800200,
- "pop_year": -99,
- "lastcensus": 2006,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AU",
- "iso_a3": "AUS",
- "iso_n3": "036",
- "un_a3": "036",
- "wb_a2": "AU",
- "wb_a3": "AUS",
- "woe_id": -99,
- "adm0_a3_is": "AUS",
- "adm0_a3_us": "AUS",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Australia and New Zealand",
- "region_wb": "East Asia & Pacific",
- "name_len": 9,
- "long_len": 9,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 167
- ]
- ],
- [
- [
- 168
- ]
- ],
- [
- [
- 169
- ]
- ],
- [
- [
- 170
- ]
- ],
- [
- [
- 171
- ]
- ],
- [
- [
- 172
- ]
- ],
- [
- [
- 173
- ]
- ],
- [
- [
- 174
- ]
- ],
- [
- [
- 175
- ]
- ],
- [
- [
- 176
- ]
- ],
- [
- [
- 177
- ]
- ],
- [
- [
- 178
- ]
- ],
- [
- [
- 179
- ]
- ],
- [
- [
- 180
- ]
- ],
- [
- [
- 181
- ]
- ],
- [
- [
- 182
- ]
- ],
- [
- [
- 183
- ]
- ],
- [
- [
- 184
- ]
- ],
- [
- [
- 185
- ]
- ],
- [
- [
- 186
- ]
- ],
- [
- [
- 187
- ]
- ],
- [
- [
- 188
- ]
- ],
- [
- [
- 189
- ]
- ],
- [
- [
- 190
- ]
- ],
- [
- [
- 191
- ]
- ],
- [
- [
- 192
- ]
- ],
- [
- [
- 193
- ]
- ],
- [
- [
- 194
- ]
- ],
- [
- [
- 195
- ]
- ],
- [
- [
- 196
- ]
- ],
- [
- [
- 197
- ]
- ],
- [
- [
- 198
- ]
- ],
- [
- [
- 199
- ]
- ],
- [
- [
- 200
- ]
- ],
- [
- [
- 201
- ]
- ],
- [
- [
- 202
- ]
- ],
- [
- [
- 203
- ]
- ],
- [
- [
- 204
- ]
- ],
- [
- [
- 205
- ]
- ],
- [
- [
- 206
- ]
- ],
- [
- [
- 207
- ]
- ],
- [
- [
- 208
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Austria",
- "sov_a3": "AUT",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Austria",
- "adm0_a3": "AUT",
- "geou_dif": 0,
- "geounit": "Austria",
- "gu_a3": "AUT",
- "su_dif": 0,
- "subunit": "Austria",
- "su_a3": "AUT",
- "brk_diff": 0,
- "name": "Austria",
- "name_long": "Austria",
- "brk_a3": "AUT",
- "brk_name": "Austria",
- "brk_group": null,
- "abbrev": "Aust.",
- "postal": "A",
- "formal_en": "Republic of Austria",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Austria",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 1,
- "mapcolor9": 3,
- "mapcolor13": 4,
- "pop_est": 8210281,
- "gdp_md_est": 329500,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AT",
- "iso_a3": "AUT",
- "iso_n3": "040",
- "un_a3": "040",
- "wb_a2": "AT",
- "wb_a3": "AUT",
- "woe_id": -99,
- "adm0_a3_is": "AUT",
- "adm0_a3_us": "AUT",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Western Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 209,
- 210,
- 211,
- 212,
- 213,
- 214,
- 215,
- 216,
- 217
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Azerbaijan",
- "sov_a3": "AZE",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Azerbaijan",
- "adm0_a3": "AZE",
- "geou_dif": 0,
- "geounit": "Azerbaijan",
- "gu_a3": "AZE",
- "su_dif": 0,
- "subunit": "Azerbaijan",
- "su_a3": "AZE",
- "brk_diff": 0,
- "name": "Azerbaijan",
- "name_long": "Azerbaijan",
- "brk_a3": "AZE",
- "brk_name": "Azerbaijan",
- "brk_group": null,
- "abbrev": "Aze.",
- "postal": "AZ",
- "formal_en": "Republic of Azerbaijan",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Azerbaijan",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 6,
- "mapcolor9": 5,
- "mapcolor13": 8,
- "pop_est": 8238672,
- "gdp_md_est": 77610,
- "pop_year": -99,
- "lastcensus": 2009,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "AZ",
- "iso_a3": "AZE",
- "iso_n3": "031",
- "un_a3": "031",
- "wb_a2": "AZ",
- "wb_a3": "AZE",
- "woe_id": -99,
- "adm0_a3_is": "AZE",
- "adm0_a3_us": "AZE",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Europe & Central Asia",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 218,
- 219,
- -49
- ]
- ],
- [
- [
- -53
- ]
- ],
- [
- [
- 220,
- 221,
- -52,
- 222,
- 223
- ],
- [
- -47
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Burundi",
- "sov_a3": "BDI",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Burundi",
- "adm0_a3": "BDI",
- "geou_dif": 0,
- "geounit": "Burundi",
- "gu_a3": "BDI",
- "su_dif": 0,
- "subunit": "Burundi",
- "su_a3": "BDI",
- "brk_diff": 0,
- "name": "Burundi",
- "name_long": "Burundi",
- "brk_a3": "BDI",
- "brk_name": "Burundi",
- "brk_group": null,
- "abbrev": "Bur.",
- "postal": "BI",
- "formal_en": "Republic of Burundi",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Burundi",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 2,
- "mapcolor9": 5,
- "mapcolor13": 8,
- "pop_est": 8988091,
- "gdp_md_est": 3102,
- "pop_year": -99,
- "lastcensus": 2008,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BI",
- "iso_a3": "BDI",
- "iso_n3": "108",
- "un_a3": "108",
- "wb_a2": "BI",
- "wb_a3": "BDI",
- "woe_id": -99,
- "adm0_a3_is": "BDI",
- "adm0_a3_us": "BDI",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 224,
- 225,
- 226
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Belgium",
- "sov_a3": "BEL",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Belgium",
- "adm0_a3": "BEL",
- "geou_dif": 0,
- "geounit": "Belgium",
- "gu_a3": "BEL",
- "su_dif": 0,
- "subunit": "Belgium",
- "su_a3": "BEL",
- "brk_diff": 0,
- "name": "Belgium",
- "name_long": "Belgium",
- "brk_a3": "BEL",
- "brk_name": "Belgium",
- "brk_group": null,
- "abbrev": "Belg.",
- "postal": "B",
- "formal_en": "Kingdom of Belgium",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Belgium",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 2,
- "mapcolor9": 1,
- "mapcolor13": 8,
- "pop_est": 10414336,
- "gdp_md_est": 389300,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BE",
- "iso_a3": "BEL",
- "iso_n3": "056",
- "un_a3": "056",
- "wb_a2": "BE",
- "wb_a3": "BEL",
- "woe_id": -99,
- "adm0_a3_is": "BEL",
- "adm0_a3_us": "BEL",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Western Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 227,
- 228,
- 229,
- 230,
- 231,
- 232,
- 233
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Benin",
- "sov_a3": "BEN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Benin",
- "adm0_a3": "BEN",
- "geou_dif": 0,
- "geounit": "Benin",
- "gu_a3": "BEN",
- "su_dif": 0,
- "subunit": "Benin",
- "su_a3": "BEN",
- "brk_diff": 0,
- "name": "Benin",
- "name_long": "Benin",
- "brk_a3": "BEN",
- "brk_name": "Benin",
- "brk_group": null,
- "abbrev": "Benin",
- "postal": "BJ",
- "formal_en": "Republic of Benin",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Benin",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 2,
- "mapcolor9": 2,
- "mapcolor13": 12,
- "pop_est": 8791832,
- "gdp_md_est": 12830,
- "pop_year": -99,
- "lastcensus": 2002,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BJ",
- "iso_a3": "BEN",
- "iso_n3": "204",
- "un_a3": "204",
- "wb_a2": "BJ",
- "wb_a3": "BEN",
- "woe_id": -99,
- "adm0_a3_is": "BEN",
- "adm0_a3_us": "BEN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 234,
- 235,
- 236,
- 237,
- 238
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Burkina Faso",
- "sov_a3": "BFA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Burkina Faso",
- "adm0_a3": "BFA",
- "geou_dif": 0,
- "geounit": "Burkina Faso",
- "gu_a3": "BFA",
- "su_dif": 0,
- "subunit": "Burkina Faso",
- "su_a3": "BFA",
- "brk_diff": 0,
- "name": "Burkina Faso",
- "name_long": "Burkina Faso",
- "brk_a3": "BFA",
- "brk_name": "Burkina Faso",
- "brk_group": null,
- "abbrev": "B.F.",
- "postal": "BF",
- "formal_en": "Burkina Faso",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Burkina Faso",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 1,
- "mapcolor9": 5,
- "mapcolor13": 11,
- "pop_est": 15746232,
- "gdp_md_est": 17820,
- "pop_year": -99,
- "lastcensus": 2006,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BF",
- "iso_a3": "BFA",
- "iso_n3": "854",
- "un_a3": "854",
- "wb_a2": "BF",
- "wb_a3": "BFA",
- "woe_id": -99,
- "adm0_a3_is": "BFA",
- "adm0_a3_us": "BFA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 12,
- "long_len": 12,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 239,
- -238,
- 240,
- 241,
- 242,
- 243
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Bangladesh",
- "sov_a3": "BGD",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Bangladesh",
- "adm0_a3": "BGD",
- "geou_dif": 0,
- "geounit": "Bangladesh",
- "gu_a3": "BGD",
- "su_dif": 0,
- "subunit": "Bangladesh",
- "su_a3": "BGD",
- "brk_diff": 0,
- "name": "Bangladesh",
- "name_long": "Bangladesh",
- "brk_a3": "BGD",
- "brk_name": "Bangladesh",
- "brk_group": null,
- "abbrev": "Bang.",
- "postal": "BD",
- "formal_en": "People's Republic of Bangladesh",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Bangladesh",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 4,
- "mapcolor9": 7,
- "mapcolor13": 7,
- "pop_est": 156050883,
- "gdp_md_est": 224000,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BD",
- "iso_a3": "BGD",
- "iso_n3": "050",
- "un_a3": "050",
- "wb_a2": "BD",
- "wb_a3": "BGD",
- "woe_id": -99,
- "adm0_a3_is": "BGD",
- "adm0_a3_us": "BGD",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Southern Asia",
- "region_wb": "South Asia",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 244
- ]
- ],
- [
- [
- 245
- ]
- ],
- [
- [
- 246
- ]
- ],
- [
- [
- 247
- ]
- ],
- [
- [
- 248
- ]
- ],
- [
- [
- 249
- ]
- ],
- [
- [
- 250,
- 251,
- 252
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Bulgaria",
- "sov_a3": "BGR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Bulgaria",
- "adm0_a3": "BGR",
- "geou_dif": 0,
- "geounit": "Bulgaria",
- "gu_a3": "BGR",
- "su_dif": 0,
- "subunit": "Bulgaria",
- "su_a3": "BGR",
- "brk_diff": 0,
- "name": "Bulgaria",
- "name_long": "Bulgaria",
- "brk_a3": "BGR",
- "brk_name": "Bulgaria",
- "brk_group": null,
- "abbrev": "Bulg.",
- "postal": "BG",
- "formal_en": "Republic of Bulgaria",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Bulgaria",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 5,
- "mapcolor9": 1,
- "mapcolor13": 8,
- "pop_est": 7204687,
- "gdp_md_est": 93750,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BG",
- "iso_a3": "BGR",
- "iso_n3": "100",
- "un_a3": "100",
- "wb_a2": "BG",
- "wb_a3": "BGR",
- "woe_id": -99,
- "adm0_a3_is": "BGR",
- "adm0_a3_us": "BGR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Eastern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 253,
- 254,
- 255,
- 256,
- 257,
- 258
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Bahrain",
- "sov_a3": "BHR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Bahrain",
- "adm0_a3": "BHR",
- "geou_dif": 0,
- "geounit": "Bahrain",
- "gu_a3": "BHR",
- "su_dif": 0,
- "subunit": "Bahrain",
- "su_a3": "BHR",
- "brk_diff": 0,
- "name": "Bahrain",
- "name_long": "Bahrain",
- "brk_a3": "BHR",
- "brk_name": "Bahrain",
- "brk_group": null,
- "abbrev": "Bahr.",
- "postal": "BH",
- "formal_en": "Kingdom of Bahrain",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Bahrain",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 1,
- "mapcolor9": 1,
- "mapcolor13": 9,
- "pop_est": 727785,
- "gdp_md_est": 26820,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BH",
- "iso_a3": "BHR",
- "iso_n3": "048",
- "un_a3": "048",
- "wb_a2": "BH",
- "wb_a3": "BHR",
- "woe_id": -99,
- "adm0_a3_is": "BHR",
- "adm0_a3_us": "BHR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Middle East & North Africa",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 5,
- "tiny": 2,
- "homepart": 1
- },
- "arcs": [
- [
- 259
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "The Bahamas",
- "sov_a3": "BHS",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "The Bahamas",
- "adm0_a3": "BHS",
- "geou_dif": 0,
- "geounit": "The Bahamas",
- "gu_a3": "BHS",
- "su_dif": 0,
- "subunit": "The Bahamas",
- "su_a3": "BHS",
- "brk_diff": 0,
- "name": "Bahamas",
- "name_long": "Bahamas",
- "brk_a3": "BHS",
- "brk_name": "Bahamas",
- "brk_group": null,
- "abbrev": "Bhs.",
- "postal": "BS",
- "formal_en": "Commonwealth of the Bahamas",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Bahamas, The",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 1,
- "mapcolor9": 2,
- "mapcolor13": 5,
- "pop_est": 309156,
- "gdp_md_est": 9093,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BS",
- "iso_a3": "BHS",
- "iso_n3": "044",
- "un_a3": "044",
- "wb_a2": "BS",
- "wb_a3": "BHS",
- "woe_id": -99,
- "adm0_a3_is": "BHS",
- "adm0_a3_us": "BHS",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 260
- ]
- ],
- [
- [
- 261
- ]
- ],
- [
- [
- 262
- ]
- ],
- [
- [
- 263
- ]
- ],
- [
- [
- 264
- ]
- ],
- [
- [
- 265
- ]
- ],
- [
- [
- 266
- ]
- ],
- [
- [
- 267
- ]
- ],
- [
- [
- 268
- ]
- ],
- [
- [
- 269
- ]
- ],
- [
- [
- 270
- ]
- ],
- [
- [
- 271
- ]
- ],
- [
- [
- 272
- ]
- ],
- [
- [
- 273
- ]
- ],
- [
- [
- 274
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Bosnia and Herzegovina",
- "sov_a3": "BIH",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Bosnia and Herzegovina",
- "adm0_a3": "BIH",
- "geou_dif": 0,
- "geounit": "Bosnia and Herzegovina",
- "gu_a3": "BIH",
- "su_dif": 0,
- "subunit": "Bosnia and Herzegovina",
- "su_a3": "BIH",
- "brk_diff": 0,
- "name": "Bosnia and Herz.",
- "name_long": "Bosnia and Herzegovina",
- "brk_a3": "BIH",
- "brk_name": "Bosnia and Herz.",
- "brk_group": null,
- "abbrev": "B.H.",
- "postal": "BiH",
- "formal_en": "Bosnia and Herzegovina",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Bosnia and Herzegovina",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 1,
- "mapcolor9": 1,
- "mapcolor13": 2,
- "pop_est": 4613414,
- "gdp_md_est": 29700,
- "pop_year": -99,
- "lastcensus": 1991,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BA",
- "iso_a3": "BIH",
- "iso_n3": "070",
- "un_a3": "070",
- "wb_a2": "BA",
- "wb_a3": "BIH",
- "woe_id": -99,
- "adm0_a3_is": "BIH",
- "adm0_a3_us": "BIH",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Southern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 16,
- "long_len": 22,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 275,
- 276,
- 277,
- 278,
- 279
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "France",
- "sov_a3": "FR1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Saint Barthelemy",
- "adm0_a3": "BLM",
- "geou_dif": 0,
- "geounit": "Saint Barthelemy",
- "gu_a3": "BLM",
- "su_dif": 0,
- "subunit": "Saint Barthelemy",
- "su_a3": "BLM",
- "brk_diff": 0,
- "name": "St-Barthélemy",
- "name_long": "Saint-Barthélemy",
- "brk_a3": "BLM",
- "brk_name": "St-Barthélemy",
- "brk_group": null,
- "abbrev": "St. B.",
- "postal": "BL",
- "formal_en": "Saint-Barthélemy",
- "formal_fr": null,
- "note_adm0": "Fr.",
- "note_brk": null,
- "name_sort": "St-Barthélemy",
- "name_alt": null,
- "mapcolor7": 7,
- "mapcolor8": 5,
- "mapcolor9": 9,
- "mapcolor13": 11,
- "pop_est": 7448,
- "gdp_md_est": 255,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BL",
- "iso_a3": "BLM",
- "iso_n3": "652",
- "un_a3": "652",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "BLM",
- "adm0_a3_us": "BLM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 13,
- "long_len": 16,
- "abbrev_len": 6,
- "tiny": 4,
- "homepart": -99
- },
- "arcs": [
- [
- 280
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Belarus",
- "sov_a3": "BLR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Belarus",
- "adm0_a3": "BLR",
- "geou_dif": 0,
- "geounit": "Belarus",
- "gu_a3": "BLR",
- "su_dif": 0,
- "subunit": "Belarus",
- "su_a3": "BLR",
- "brk_diff": 0,
- "name": "Belarus",
- "name_long": "Belarus",
- "brk_a3": "BLR",
- "brk_name": "Belarus",
- "brk_group": null,
- "abbrev": "Bela.",
- "postal": "BY",
- "formal_en": "Republic of Belarus",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Belarus",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 1,
- "mapcolor9": 5,
- "mapcolor13": 11,
- "pop_est": 9648533,
- "gdp_md_est": 114100,
- "pop_year": -99,
- "lastcensus": 2009,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BY",
- "iso_a3": "BLR",
- "iso_n3": "112",
- "un_a3": "112",
- "wb_a2": "BY",
- "wb_a3": "BLR",
- "woe_id": -99,
- "adm0_a3_is": "BLR",
- "adm0_a3_us": "BLR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Eastern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 281,
- 282,
- 283,
- 284,
- 285
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Belize",
- "sov_a3": "BLZ",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Belize",
- "adm0_a3": "BLZ",
- "geou_dif": 0,
- "geounit": "Belize",
- "gu_a3": "BLZ",
- "su_dif": 0,
- "subunit": "Belize",
- "su_a3": "BLZ",
- "brk_diff": 0,
- "name": "Belize",
- "name_long": "Belize",
- "brk_a3": "BLZ",
- "brk_name": "Belize",
- "brk_group": null,
- "abbrev": "Belize",
- "postal": "BZ",
- "formal_en": "Belize",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Belize",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 5,
- "mapcolor13": 7,
- "pop_est": 307899,
- "gdp_md_est": 2536,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BZ",
- "iso_a3": "BLZ",
- "iso_n3": "084",
- "un_a3": "084",
- "wb_a2": "BZ",
- "wb_a3": "BLZ",
- "woe_id": -99,
- "adm0_a3_is": "BLZ",
- "adm0_a3_us": "BLZ",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Central America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 286
- ]
- ],
- [
- [
- 287
- ]
- ],
- [
- [
- 288,
- 289,
- 290
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "United Kingdom",
- "sov_a3": "GB1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Bermuda",
- "adm0_a3": "BMU",
- "geou_dif": 0,
- "geounit": "Bermuda",
- "gu_a3": "BMU",
- "su_dif": 0,
- "subunit": "Bermuda",
- "su_a3": "BMU",
- "brk_diff": 0,
- "name": "Bermuda",
- "name_long": "Bermuda",
- "brk_a3": "BMU",
- "brk_name": "Bermuda",
- "brk_group": null,
- "abbrev": "Berm.",
- "postal": "BM",
- "formal_en": "The Bermudas or Somers Isles",
- "formal_fr": null,
- "note_adm0": "U.K.",
- "note_brk": null,
- "name_sort": "Bermuda",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 67837,
- "gdp_md_est": 4500,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BM",
- "iso_a3": "BMU",
- "iso_n3": "060",
- "un_a3": "060",
- "wb_a2": "BM",
- "wb_a3": "BMU",
- "woe_id": -99,
- "adm0_a3_is": "BMU",
- "adm0_a3_us": "BMU",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Northern America",
- "region_wb": "North America",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 5,
- "tiny": 4,
- "homepart": -99
- },
- "arcs": [
- [
- 291
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Bolivia",
- "sov_a3": "BOL",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Bolivia",
- "adm0_a3": "BOL",
- "geou_dif": 0,
- "geounit": "Bolivia",
- "gu_a3": "BOL",
- "su_dif": 0,
- "subunit": "Bolivia",
- "su_a3": "BOL",
- "brk_diff": 0,
- "name": "Bolivia",
- "name_long": "Bolivia",
- "brk_a3": "BOL",
- "brk_name": "Bolivia",
- "brk_group": null,
- "abbrev": "Bolivia",
- "postal": "BO",
- "formal_en": "Plurinational State of Bolivia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Bolivia",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 5,
- "mapcolor9": 2,
- "mapcolor13": 3,
- "pop_est": 9775246,
- "gdp_md_est": 43270,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BO",
- "iso_a3": "BOL",
- "iso_n3": "068",
- "un_a3": "068",
- "wb_a2": "BO",
- "wb_a3": "BOL",
- "woe_id": -99,
- "adm0_a3_is": "BOL",
- "adm0_a3_us": "BOL",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "South America",
- "region_un": "Americas",
- "subregion": "South America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 7,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 292,
- -46,
- 293,
- 294,
- 295
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Brazil",
- "sov_a3": "BRA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Brazil",
- "adm0_a3": "BRA",
- "geou_dif": 0,
- "geounit": "Brazil",
- "gu_a3": "BRA",
- "su_dif": 0,
- "subunit": "Brazil",
- "su_a3": "BRA",
- "brk_diff": 0,
- "name": "Brazil",
- "name_long": "Brazil",
- "brk_a3": "BRA",
- "brk_name": "Brazil",
- "brk_group": null,
- "abbrev": "Brazil",
- "postal": "BR",
- "formal_en": "Federative Republic of Brazil",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Brazil",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 6,
- "mapcolor9": 5,
- "mapcolor13": 7,
- "pop_est": 198739269,
- "gdp_md_est": 1993000,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "3. Emerging region: BRIC",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BR",
- "iso_a3": "BRA",
- "iso_n3": "076",
- "un_a3": "076",
- "wb_a2": "BR",
- "wb_a3": "BRA",
- "woe_id": -99,
- "adm0_a3_is": "BRA",
- "adm0_a3_us": "BRA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "South America",
- "region_un": "Americas",
- "subregion": "South America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 296
- ]
- ],
- [
- [
- 297
- ]
- ],
- [
- [
- 298
- ]
- ],
- [
- [
- 299
- ]
- ],
- [
- [
- 300
- ]
- ],
- [
- [
- 301
- ]
- ],
- [
- [
- 302
- ]
- ],
- [
- [
- 303
- ]
- ],
- [
- [
- 304
- ]
- ],
- [
- [
- 305
- ]
- ],
- [
- [
- 306
- ]
- ],
- [
- [
- 307
- ]
- ],
- [
- [
- 308
- ]
- ],
- [
- [
- 309
- ]
- ],
- [
- [
- 310
- ]
- ],
- [
- [
- 311
- ]
- ],
- [
- [
- 312,
- 313,
- 314,
- 315,
- -42,
- 316,
- -296,
- 317,
- 318,
- 319,
- 320
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Barbados",
- "sov_a3": "BRB",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Barbados",
- "adm0_a3": "BRB",
- "geou_dif": 0,
- "geounit": "Barbados",
- "gu_a3": "BRB",
- "su_dif": 0,
- "subunit": "Barbados",
- "su_a3": "BRB",
- "brk_diff": 0,
- "name": "Barbados",
- "name_long": "Barbados",
- "brk_a3": "BRB",
- "brk_name": "Barbados",
- "brk_group": null,
- "abbrev": "Barb.",
- "postal": "BB",
- "formal_en": "Barbados",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Barbados",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 1,
- "mapcolor9": 5,
- "mapcolor13": 3,
- "pop_est": 284589,
- "gdp_md_est": 5425,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BB",
- "iso_a3": "BRB",
- "iso_n3": "052",
- "un_a3": "052",
- "wb_a2": "BB",
- "wb_a3": "BRB",
- "woe_id": -99,
- "adm0_a3_is": "BRB",
- "adm0_a3_us": "BRB",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 5,
- "tiny": 3,
- "homepart": 1
- },
- "arcs": [
- [
- 321
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Brunei",
- "sov_a3": "BRN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Brunei",
- "adm0_a3": "BRN",
- "geou_dif": 0,
- "geounit": "Brunei",
- "gu_a3": "BRN",
- "su_dif": 0,
- "subunit": "Brunei",
- "su_a3": "BRN",
- "brk_diff": 0,
- "name": "Brunei",
- "name_long": "Brunei Darussalam",
- "brk_a3": "BRN",
- "brk_name": "Brunei",
- "brk_group": null,
- "abbrev": "Brunei",
- "postal": "BN",
- "formal_en": "Negara Brunei Darussalam",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Brunei",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 12,
- "pop_est": 388190,
- "gdp_md_est": 20250,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BN",
- "iso_a3": "BRN",
- "iso_n3": "096",
- "un_a3": "096",
- "wb_a2": "BN",
- "wb_a3": "BRN",
- "woe_id": -99,
- "adm0_a3_is": "BRN",
- "adm0_a3_us": "BRN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "South-Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 6,
- "long_len": 17,
- "abbrev_len": 6,
- "tiny": 2,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 322,
- 323
- ]
- ],
- [
- [
- 324,
- 325
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Bhutan",
- "sov_a3": "BTN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Bhutan",
- "adm0_a3": "BTN",
- "geou_dif": 0,
- "geounit": "Bhutan",
- "gu_a3": "BTN",
- "su_dif": 0,
- "subunit": "Bhutan",
- "su_a3": "BTN",
- "brk_diff": 0,
- "name": "Bhutan",
- "name_long": "Bhutan",
- "brk_a3": "BTN",
- "brk_name": "Bhutan",
- "brk_group": null,
- "abbrev": "Bhutan",
- "postal": "BT",
- "formal_en": "Kingdom of Bhutan",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Bhutan",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 6,
- "mapcolor9": 1,
- "mapcolor13": 8,
- "pop_est": 691141,
- "gdp_md_est": 3524,
- "pop_year": -99,
- "lastcensus": 2005,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BT",
- "iso_a3": "BTN",
- "iso_n3": "064",
- "un_a3": "064",
- "wb_a2": "BT",
- "wb_a3": "BTN",
- "woe_id": -99,
- "adm0_a3_is": "BTN",
- "adm0_a3_us": "BTN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Southern Asia",
- "region_wb": "South Asia",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 326,
- 327
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Botswana",
- "sov_a3": "BWA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Botswana",
- "adm0_a3": "BWA",
- "geou_dif": 0,
- "geounit": "Botswana",
- "gu_a3": "BWA",
- "su_dif": 0,
- "subunit": "Botswana",
- "su_a3": "BWA",
- "brk_diff": 0,
- "name": "Botswana",
- "name_long": "Botswana",
- "brk_a3": "BWA",
- "brk_name": "Botswana",
- "brk_group": null,
- "abbrev": "Bwa.",
- "postal": "BW",
- "formal_en": "Republic of Botswana",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Botswana",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 5,
- "mapcolor9": 7,
- "mapcolor13": 3,
- "pop_est": 1990876,
- "gdp_md_est": 27060,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "BW",
- "iso_a3": "BWA",
- "iso_n3": "072",
- "un_a3": "072",
- "wb_a2": "BW",
- "wb_a3": "BWA",
- "woe_id": -99,
- "adm0_a3_is": "BWA",
- "adm0_a3_us": "BWA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Southern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 328,
- 329,
- 330
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Central African Republic",
- "sov_a3": "CAF",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Central African Republic",
- "adm0_a3": "CAF",
- "geou_dif": 0,
- "geounit": "Central African Republic",
- "gu_a3": "CAF",
- "su_dif": 0,
- "subunit": "Central African Republic",
- "su_a3": "CAF",
- "brk_diff": 0,
- "name": "Central African Rep.",
- "name_long": "Central African Republic",
- "brk_a3": "CAF",
- "brk_name": "Central African Rep.",
- "brk_group": null,
- "abbrev": "C.A.R.",
- "postal": "CF",
- "formal_en": "Central African Republic",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Central African Republic",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 9,
- "pop_est": 4511488,
- "gdp_md_est": 3198,
- "pop_year": -99,
- "lastcensus": 2003,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CF",
- "iso_a3": "CAF",
- "iso_n3": "140",
- "un_a3": "140",
- "wb_a2": "CF",
- "wb_a3": "CAF",
- "woe_id": -99,
- "adm0_a3_is": "CAF",
- "adm0_a3_us": "CAF",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Middle Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 20,
- "long_len": 24,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 331,
- 332,
- 333,
- 334,
- 335,
- 336
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Canada",
- "sov_a3": "CAN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Canada",
- "adm0_a3": "CAN",
- "geou_dif": 0,
- "geounit": "Canada",
- "gu_a3": "CAN",
- "su_dif": 0,
- "subunit": "Canada",
- "su_a3": "CAN",
- "brk_diff": 0,
- "name": "Canada",
- "name_long": "Canada",
- "brk_a3": "CAN",
- "brk_name": "Canada",
- "brk_group": null,
- "abbrev": "Can.",
- "postal": "CA",
- "formal_en": "Canada",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Canada",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 2,
- "mapcolor13": 2,
- "pop_est": 33487208,
- "gdp_md_est": 1300000,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "1. Developed region: G7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CA",
- "iso_a3": "CAN",
- "iso_n3": "124",
- "un_a3": "124",
- "wb_a2": "CA",
- "wb_a3": "CAN",
- "woe_id": -99,
- "adm0_a3_is": "CAN",
- "adm0_a3_us": "CAN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Northern America",
- "region_wb": "North America",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 337
- ]
- ],
- [
- [
- 338
- ]
- ],
- [
- [
- 339
- ]
- ],
- [
- [
- 340
- ]
- ],
- [
- [
- 341
- ]
- ],
- [
- [
- 342
- ]
- ],
- [
- [
- 343
- ]
- ],
- [
- [
- 344
- ]
- ],
- [
- [
- 345
- ]
- ],
- [
- [
- 346
- ]
- ],
- [
- [
- 347
- ]
- ],
- [
- [
- 348
- ]
- ],
- [
- [
- 349
- ]
- ],
- [
- [
- 350
- ]
- ],
- [
- [
- 351
- ]
- ],
- [
- [
- 352,
- 353
- ]
- ],
- [
- [
- 354
- ]
- ],
- [
- [
- 355
- ]
- ],
- [
- [
- 356
- ]
- ],
- [
- [
- 357
- ]
- ],
- [
- [
- 358
- ]
- ],
- [
- [
- 359
- ]
- ],
- [
- [
- 360
- ]
- ],
- [
- [
- 361
- ]
- ],
- [
- [
- 362
- ]
- ],
- [
- [
- 363
- ]
- ],
- [
- [
- 364
- ]
- ],
- [
- [
- 365
- ]
- ],
- [
- [
- 366
- ]
- ],
- [
- [
- 367
- ]
- ],
- [
- [
- 368
- ]
- ],
- [
- [
- 369
- ]
- ],
- [
- [
- 370
- ]
- ],
- [
- [
- 371
- ]
- ],
- [
- [
- 372
- ]
- ],
- [
- [
- 373
- ]
- ],
- [
- [
- 374
- ]
- ],
- [
- [
- 375
- ]
- ],
- [
- [
- 376
- ]
- ],
- [
- [
- 377
- ]
- ],
- [
- [
- 378
- ]
- ],
- [
- [
- 379
- ]
- ],
- [
- [
- 380
- ]
- ],
- [
- [
- 381,
- 382
- ]
- ],
- [
- [
- 383
- ]
- ],
- [
- [
- 384
- ]
- ],
- [
- [
- 385
- ]
- ],
- [
- [
- 386
- ]
- ],
- [
- [
- 387
- ]
- ],
- [
- [
- 388
- ]
- ],
- [
- [
- 389
- ]
- ],
- [
- [
- 390
- ]
- ],
- [
- [
- 391
- ]
- ],
- [
- [
- 392
- ]
- ],
- [
- [
- 393
- ]
- ],
- [
- [
- 394
- ]
- ],
- [
- [
- 395
- ]
- ],
- [
- [
- 396
- ]
- ],
- [
- [
- 397
- ]
- ],
- [
- [
- 398
- ]
- ],
- [
- [
- 399
- ]
- ],
- [
- [
- 400
- ]
- ],
- [
- [
- 401
- ]
- ],
- [
- [
- 402
- ]
- ],
- [
- [
- 403
- ]
- ],
- [
- [
- 404
- ]
- ],
- [
- [
- 405
- ]
- ],
- [
- [
- 406
- ]
- ],
- [
- [
- 407
- ]
- ],
- [
- [
- 408
- ]
- ],
- [
- [
- 409
- ]
- ],
- [
- [
- 410
- ]
- ],
- [
- [
- 411
- ]
- ],
- [
- [
- 412
- ]
- ],
- [
- [
- 413
- ]
- ],
- [
- [
- 414
- ]
- ],
- [
- [
- 415
- ]
- ],
- [
- [
- 416
- ]
- ],
- [
- [
- 417
- ]
- ],
- [
- [
- 418
- ]
- ],
- [
- [
- 419
- ]
- ],
- [
- [
- 420
- ]
- ],
- [
- [
- 421
- ]
- ],
- [
- [
- 422
- ]
- ],
- [
- [
- 423
- ]
- ],
- [
- [
- 424
- ]
- ],
- [
- [
- 425
- ]
- ],
- [
- [
- 426
- ]
- ],
- [
- [
- 427
- ]
- ],
- [
- [
- 428
- ]
- ],
- [
- [
- 429
- ]
- ],
- [
- [
- 430
- ]
- ],
- [
- [
- 431
- ]
- ],
- [
- [
- 432
- ]
- ],
- [
- [
- 433
- ]
- ],
- [
- [
- 434
- ]
- ],
- [
- [
- 435
- ]
- ],
- [
- [
- 436
- ]
- ],
- [
- [
- 437
- ]
- ],
- [
- [
- 438
- ]
- ],
- [
- [
- 439,
- 440,
- 441,
- 442
- ]
- ],
- [
- [
- 443
- ]
- ],
- [
- [
- 444
- ]
- ],
- [
- [
- 445
- ]
- ],
- [
- [
- 446
- ]
- ],
- [
- [
- 447
- ]
- ],
- [
- [
- 448
- ]
- ],
- [
- [
- 449
- ]
- ],
- [
- [
- 450
- ]
- ],
- [
- [
- 451
- ]
- ],
- [
- [
- 452
- ]
- ],
- [
- [
- 453
- ]
- ],
- [
- [
- 454
- ]
- ],
- [
- [
- 455
- ]
- ],
- [
- [
- 456
- ]
- ],
- [
- [
- 457
- ]
- ],
- [
- [
- 458
- ]
- ],
- [
- [
- 459
- ]
- ],
- [
- [
- 460
- ]
- ],
- [
- [
- 461
- ]
- ],
- [
- [
- 462
- ]
- ],
- [
- [
- 463
- ]
- ],
- [
- [
- 464
- ]
- ],
- [
- [
- 465
- ]
- ],
- [
- [
- 466
- ]
- ],
- [
- [
- 467
- ]
- ],
- [
- [
- 468
- ]
- ],
- [
- [
- 469
- ]
- ],
- [
- [
- 470
- ]
- ],
- [
- [
- 471
- ]
- ],
- [
- [
- 472
- ]
- ],
- [
- [
- 473
- ]
- ],
- [
- [
- 474
- ]
- ],
- [
- [
- 475
- ]
- ],
- [
- [
- 476
- ]
- ],
- [
- [
- 477
- ]
- ],
- [
- [
- 478
- ]
- ],
- [
- [
- 479
- ]
- ],
- [
- [
- 480
- ]
- ],
- [
- [
- 481
- ]
- ],
- [
- [
- 482
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Switzerland",
- "sov_a3": "CHE",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Switzerland",
- "adm0_a3": "CHE",
- "geou_dif": 0,
- "geounit": "Switzerland",
- "gu_a3": "CHE",
- "su_dif": 0,
- "subunit": "Switzerland",
- "su_a3": "CHE",
- "brk_diff": 0,
- "name": "Switzerland",
- "name_long": "Switzerland",
- "brk_a3": "CHE",
- "brk_name": "Switzerland",
- "brk_group": null,
- "abbrev": "Switz.",
- "postal": "CH",
- "formal_en": "Swiss Confederation",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Switzerland",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 2,
- "mapcolor9": 7,
- "mapcolor13": 3,
- "pop_est": 7604467,
- "gdp_md_est": 316700,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CH",
- "iso_a3": "CHE",
- "iso_n3": "756",
- "un_a3": "756",
- "wb_a2": "CH",
- "wb_a3": "CHE",
- "woe_id": -99,
- "adm0_a3_is": "CHE",
- "adm0_a3_us": "CHE",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Western Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 11,
- "long_len": 11,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -216,
- 483,
- -214,
- 484,
- 485,
- 486
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Chile",
- "sov_a3": "CHL",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Chile",
- "adm0_a3": "CHL",
- "geou_dif": 0,
- "geounit": "Chile",
- "gu_a3": "CHL",
- "su_dif": 0,
- "subunit": "Chile",
- "su_a3": "CHL",
- "brk_diff": 0,
- "name": "Chile",
- "name_long": "Chile",
- "brk_a3": "CHL",
- "brk_name": "Chile",
- "brk_group": null,
- "abbrev": "Chile",
- "postal": "CL",
- "formal_en": "Republic of Chile",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Chile",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 1,
- "mapcolor9": 5,
- "mapcolor13": 9,
- "pop_est": 16601707,
- "gdp_md_est": 244500,
- "pop_year": -99,
- "lastcensus": 2002,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CL",
- "iso_a3": "CHL",
- "iso_n3": "152",
- "un_a3": "152",
- "wb_a2": "CL",
- "wb_a3": "CHL",
- "woe_id": -99,
- "adm0_a3_is": "CHL",
- "adm0_a3_us": "CHL",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "South America",
- "region_un": "Americas",
- "subregion": "South America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 487
- ]
- ],
- [
- [
- 488
- ]
- ],
- [
- [
- 489
- ]
- ],
- [
- [
- 490
- ]
- ],
- [
- [
- 491
- ]
- ],
- [
- [
- 492
- ]
- ],
- [
- [
- 493
- ]
- ],
- [
- [
- 494
- ]
- ],
- [
- [
- 495
- ]
- ],
- [
- [
- -38,
- 496
- ]
- ],
- [
- [
- 497
- ]
- ],
- [
- [
- 498
- ]
- ],
- [
- [
- 499
- ]
- ],
- [
- [
- 500
- ]
- ],
- [
- [
- 501
- ]
- ],
- [
- [
- 502
- ]
- ],
- [
- [
- 503
- ]
- ],
- [
- [
- 504
- ]
- ],
- [
- [
- 505
- ]
- ],
- [
- [
- 506
- ]
- ],
- [
- [
- 507
- ]
- ],
- [
- [
- 508
- ]
- ],
- [
- [
- 509
- ]
- ],
- [
- [
- 510
- ]
- ],
- [
- [
- 511
- ]
- ],
- [
- [
- 512
- ]
- ],
- [
- [
- 513
- ]
- ],
- [
- [
- 514
- ]
- ],
- [
- [
- 515
- ]
- ],
- [
- [
- 516
- ]
- ],
- [
- [
- -45,
- 517,
- 518,
- -294
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "China",
- "sov_a3": "CH1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "China",
- "adm0_a3": "CHN",
- "geou_dif": 0,
- "geounit": "China",
- "gu_a3": "CHN",
- "su_dif": 0,
- "subunit": "China",
- "su_a3": "CHN",
- "brk_diff": 0,
- "name": "China",
- "name_long": "China",
- "brk_a3": "CHN",
- "brk_name": "China",
- "brk_group": null,
- "abbrev": "China",
- "postal": "CN",
- "formal_en": "People's Republic of China",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "China",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 4,
- "mapcolor9": 4,
- "mapcolor13": 3,
- "pop_est": 1338612970,
- "gdp_md_est": 7973000,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "3. Emerging region: BRIC",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CN",
- "iso_a3": "CHN",
- "iso_n3": "156",
- "un_a3": "156",
- "wb_a2": "CN",
- "wb_a3": "CHN",
- "woe_id": -99,
- "adm0_a3_is": "CHN",
- "adm0_a3_us": "CHN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 519
- ]
- ],
- [
- [
- 520
- ]
- ],
- [
- [
- 521
- ]
- ],
- [
- [
- 522
- ]
- ],
- [
- [
- 523
- ]
- ],
- [
- [
- 524
- ]
- ],
- [
- [
- 525
- ]
- ],
- [
- [
- 526
- ]
- ],
- [
- [
- 527
- ]
- ],
- [
- [
- 528
- ]
- ],
- [
- [
- 529
- ]
- ],
- [
- [
- 530
- ]
- ],
- [
- [
- 531,
- 532,
- 533,
- 534,
- 535,
- 536,
- 537,
- 538,
- 539,
- 540,
- -328,
- 541,
- 542,
- 543,
- 544,
- 545,
- 546,
- 547,
- 548,
- 549,
- 550,
- 551,
- 552,
- 553,
- 554,
- 555,
- 556,
- -2,
- 557,
- 558,
- 559,
- 560,
- 561,
- 562
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Ivory Coast",
- "sov_a3": "CIV",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Ivory Coast",
- "adm0_a3": "CIV",
- "geou_dif": 0,
- "geounit": "Ivory Coast",
- "gu_a3": "CIV",
- "su_dif": 0,
- "subunit": "Ivory Coast",
- "su_a3": "CIV",
- "brk_diff": 0,
- "name": "Côte d'Ivoire",
- "name_long": "Côte d'Ivoire",
- "brk_a3": "CIV",
- "brk_name": "Côte d'Ivoire",
- "brk_group": null,
- "abbrev": "I.C.",
- "postal": "CI",
- "formal_en": "Republic of Ivory Coast",
- "formal_fr": "Republic of Cote D'Ivoire",
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Côte d'Ivoire",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 6,
- "mapcolor9": 3,
- "mapcolor13": 3,
- "pop_est": 20617068,
- "gdp_md_est": 33850,
- "pop_year": -99,
- "lastcensus": 1998,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CI",
- "iso_a3": "CIV",
- "iso_n3": "384",
- "un_a3": "384",
- "wb_a2": "CI",
- "wb_a3": "CIV",
- "woe_id": -99,
- "adm0_a3_is": "CIV",
- "adm0_a3_us": "CIV",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 13,
- "long_len": 13,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 563,
- 564
- ]
- ],
- [
- [
- -243,
- 565,
- 566,
- 567,
- 568,
- 569
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Cameroon",
- "sov_a3": "CMR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Cameroon",
- "adm0_a3": "CMR",
- "geou_dif": 0,
- "geounit": "Cameroon",
- "gu_a3": "CMR",
- "su_dif": 0,
- "subunit": "Cameroon",
- "su_a3": "CMR",
- "brk_diff": 0,
- "name": "Cameroon",
- "name_long": "Cameroon",
- "brk_a3": "CMR",
- "brk_name": "Cameroon",
- "brk_group": null,
- "abbrev": "Cam.",
- "postal": "CM",
- "formal_en": "Republic of Cameroon",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Cameroon",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 1,
- "mapcolor13": 3,
- "pop_est": 18879301,
- "gdp_md_est": 42750,
- "pop_year": -99,
- "lastcensus": 2005,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CM",
- "iso_a3": "CMR",
- "iso_n3": "120",
- "un_a3": "120",
- "wb_a2": "CM",
- "wb_a3": "CMR",
- "woe_id": -99,
- "adm0_a3_is": "CMR",
- "adm0_a3_us": "CMR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Middle Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -336,
- 570,
- 571,
- 572,
- 573,
- 574,
- 575
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Democratic Republic of the Congo",
- "sov_a3": "COD",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Democratic Republic of the Congo",
- "adm0_a3": "COD",
- "geou_dif": 0,
- "geounit": "Democratic Republic of the Congo",
- "gu_a3": "COD",
- "su_dif": 0,
- "subunit": "Democratic Republic of the Congo",
- "su_a3": "COD",
- "brk_diff": 0,
- "name": "Dem. Rep. Congo",
- "name_long": "Democratic Republic of the Congo",
- "brk_a3": "COD",
- "brk_name": "Democratic Republic of the Congo",
- "brk_group": null,
- "abbrev": "D.R.C.",
- "postal": "DRC",
- "formal_en": "Democratic Republic of the Congo",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Congo, Dem. Rep.",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 4,
- "mapcolor9": 4,
- "mapcolor13": 7,
- "pop_est": 68692542,
- "gdp_md_est": 20640,
- "pop_year": -99,
- "lastcensus": 1984,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CD",
- "iso_a3": "COD",
- "iso_n3": "180",
- "un_a3": "180",
- "wb_a2": "ZR",
- "wb_a3": "ZAR",
- "woe_id": -99,
- "adm0_a3_is": "COD",
- "adm0_a3_us": "COD",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Middle Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 15,
- "long_len": 32,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 576,
- 577,
- 578,
- -226,
- 579,
- 580,
- -12,
- 581,
- -15,
- 582,
- -334
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Republic of Congo",
- "sov_a3": "COG",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Republic of Congo",
- "adm0_a3": "COG",
- "geou_dif": 0,
- "geounit": "Republic of Congo",
- "gu_a3": "COG",
- "su_dif": 0,
- "subunit": "Republic of Congo",
- "su_a3": "COG",
- "brk_diff": 0,
- "name": "Congo",
- "name_long": "Republic of Congo",
- "brk_a3": "COG",
- "brk_name": "Republic of Congo",
- "brk_group": null,
- "abbrev": "Rep. Congo",
- "postal": "CG",
- "formal_en": "Republic of Congo",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Congo, Rep.",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 1,
- "mapcolor9": 3,
- "mapcolor13": 10,
- "pop_est": 4012809,
- "gdp_md_est": 15350,
- "pop_year": -99,
- "lastcensus": 2007,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CG",
- "iso_a3": "COG",
- "iso_n3": "178",
- "un_a3": "178",
- "wb_a2": "CG",
- "wb_a3": "COG",
- "woe_id": -99,
- "adm0_a3_is": "COG",
- "adm0_a3_us": "COG",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Middle Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 5,
- "long_len": 17,
- "abbrev_len": 10,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -583,
- -14,
- 583,
- 584,
- -571,
- -335
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "New Zealand",
- "sov_a3": "NZ1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Cook Islands",
- "adm0_a3": "COK",
- "geou_dif": 0,
- "geounit": "Cook Islands",
- "gu_a3": "COK",
- "su_dif": 0,
- "subunit": "Cook Islands",
- "su_a3": "COK",
- "brk_diff": 0,
- "name": "Cook Is.",
- "name_long": "Cook Islands",
- "brk_a3": "COK",
- "brk_name": "Cook Is.",
- "brk_group": null,
- "abbrev": "Cook Is.",
- "postal": "CK",
- "formal_en": null,
- "formal_fr": null,
- "note_adm0": "Assoc. with N.Z.",
- "note_brk": null,
- "name_sort": "Cook Islands",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 3,
- "mapcolor9": 4,
- "mapcolor13": 4,
- "pop_est": 11870,
- "gdp_md_est": 183.2,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CK",
- "iso_a3": "COK",
- "iso_n3": "184",
- "un_a3": "184",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "COK",
- "adm0_a3_us": "COK",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Polynesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 8,
- "long_len": 12,
- "abbrev_len": 8,
- "tiny": 3,
- "homepart": -99
- },
- "arcs": [
- [
- 585
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Colombia",
- "sov_a3": "COL",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Colombia",
- "adm0_a3": "COL",
- "geou_dif": 0,
- "geounit": "Colombia",
- "gu_a3": "COL",
- "su_dif": 0,
- "subunit": "Colombia",
- "su_a3": "COL",
- "brk_diff": 0,
- "name": "Colombia",
- "name_long": "Colombia",
- "brk_a3": "COL",
- "brk_name": "Colombia",
- "brk_group": null,
- "abbrev": "Col.",
- "postal": "CO",
- "formal_en": "Republic of Colombia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Colombia",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 1,
- "mapcolor9": 3,
- "mapcolor13": 1,
- "pop_est": 45644023,
- "gdp_md_est": 395400,
- "pop_year": -99,
- "lastcensus": 2006,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CO",
- "iso_a3": "COL",
- "iso_n3": "170",
- "un_a3": "170",
- "wb_a2": "CO",
- "wb_a3": "COL",
- "woe_id": -99,
- "adm0_a3_is": "COL",
- "adm0_a3_us": "COL",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "South America",
- "region_un": "Americas",
- "subregion": "South America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 586
- ]
- ],
- [
- [
- 587,
- -319,
- 588,
- 589,
- 590,
- 591,
- 592
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Comoros",
- "sov_a3": "COM",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Comoros",
- "adm0_a3": "COM",
- "geou_dif": 0,
- "geounit": "Comoros",
- "gu_a3": "COM",
- "su_dif": 0,
- "subunit": "Comoros",
- "su_a3": "COM",
- "brk_diff": 0,
- "name": "Comoros",
- "name_long": "Comoros",
- "brk_a3": "COM",
- "brk_name": "Comoros",
- "brk_group": null,
- "abbrev": "Com.",
- "postal": "KM",
- "formal_en": "Union of the Comoros",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Comoros",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 1,
- "mapcolor9": 4,
- "mapcolor13": 10,
- "pop_est": 752438,
- "gdp_md_est": 751.2,
- "pop_year": -99,
- "lastcensus": 2003,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "KM",
- "iso_a3": "COM",
- "iso_n3": "174",
- "un_a3": "174",
- "wb_a2": "KM",
- "wb_a3": "COM",
- "woe_id": -99,
- "adm0_a3_is": "COM",
- "adm0_a3_us": "COM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": 2,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 593
- ]
- ],
- [
- [
- 594
- ]
- ],
- [
- [
- 595
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Cape Verde",
- "sov_a3": "CPV",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Cape Verde",
- "adm0_a3": "CPV",
- "geou_dif": 0,
- "geounit": "Cape Verde",
- "gu_a3": "CPV",
- "su_dif": 0,
- "subunit": "Cape Verde",
- "su_a3": "CPV",
- "brk_diff": 0,
- "name": "Cape Verde",
- "name_long": "Cape Verde",
- "brk_a3": "CPV",
- "brk_name": "Cape Verde",
- "brk_group": null,
- "abbrev": "C.Vd.",
- "postal": "CV",
- "formal_en": "Republic of Cape Verde",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Cape Verde",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 1,
- "mapcolor9": 4,
- "mapcolor13": 11,
- "pop_est": 429474,
- "gdp_md_est": 1626,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CV",
- "iso_a3": "CPV",
- "iso_n3": "132",
- "un_a3": "132",
- "wb_a2": "CV",
- "wb_a3": "CPV",
- "woe_id": -99,
- "adm0_a3_is": "CPV",
- "adm0_a3_us": "CPV",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 596
- ]
- ],
- [
- [
- 597
- ]
- ],
- [
- [
- 598
- ]
- ],
- [
- [
- 599
- ]
- ],
- [
- [
- 600
- ]
- ],
- [
- [
- 601
- ]
- ],
- [
- [
- 602
- ]
- ],
- [
- [
- 603
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Costa Rica",
- "sov_a3": "CRI",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Costa Rica",
- "adm0_a3": "CRI",
- "geou_dif": 0,
- "geounit": "Costa Rica",
- "gu_a3": "CRI",
- "su_dif": 0,
- "subunit": "Costa Rica",
- "su_a3": "CRI",
- "brk_diff": 0,
- "name": "Costa Rica",
- "name_long": "Costa Rica",
- "brk_a3": "CRI",
- "brk_name": "Costa Rica",
- "brk_group": null,
- "abbrev": "C.R.",
- "postal": "CR",
- "formal_en": "Republic of Costa Rica",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Costa Rica",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 2,
- "mapcolor9": 4,
- "mapcolor13": 2,
- "pop_est": 4253877,
- "gdp_md_est": 48320,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CR",
- "iso_a3": "CRI",
- "iso_n3": "188",
- "un_a3": "188",
- "wb_a2": "CR",
- "wb_a3": "CRI",
- "woe_id": -99,
- "adm0_a3_is": "CRI",
- "adm0_a3_us": "CRI",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Central America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 604,
- 605,
- 606,
- 607
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Cuba",
- "sov_a3": "CUB",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Cuba",
- "adm0_a3": "CUB",
- "geou_dif": 0,
- "geounit": "Cuba",
- "gu_a3": "CUB",
- "su_dif": 0,
- "subunit": "Cuba",
- "su_a3": "CUB",
- "brk_diff": 0,
- "name": "Cuba",
- "name_long": "Cuba",
- "brk_a3": "CUB",
- "brk_name": "Cuba",
- "brk_group": null,
- "abbrev": "Cuba",
- "postal": "CU",
- "formal_en": "Republic of Cuba",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Cuba",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 5,
- "mapcolor9": 3,
- "mapcolor13": 4,
- "pop_est": 11451652,
- "gdp_md_est": 108200,
- "pop_year": -99,
- "lastcensus": 2002,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CU",
- "iso_a3": "CUB",
- "iso_n3": "192",
- "un_a3": "192",
- "wb_a2": "CU",
- "wb_a3": "CUB",
- "woe_id": -99,
- "adm0_a3_is": "CUB",
- "adm0_a3_us": "CUB",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 4,
- "long_len": 4,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 608
- ]
- ],
- [
- [
- 609
- ]
- ],
- [
- [
- 610
- ]
- ],
- [
- [
- 611
- ]
- ],
- [
- [
- 612
- ]
- ],
- [
- [
- 613
- ]
- ],
- [
- [
- 614
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Netherlands",
- "sov_a3": "NL1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "Curaçao",
- "adm0_a3": "CUW",
- "geou_dif": 0,
- "geounit": "Curaçao",
- "gu_a3": "CUW",
- "su_dif": 0,
- "subunit": "Curaçao",
- "su_a3": "CUW",
- "brk_diff": 0,
- "name": "Curaçao",
- "name_long": "Curaçao",
- "brk_a3": "CUW",
- "brk_name": "Curaçao",
- "brk_group": null,
- "abbrev": "Cur.",
- "postal": "CW",
- "formal_en": "Curaçao",
- "formal_fr": null,
- "note_adm0": "Neth.",
- "note_brk": null,
- "name_sort": "Curaçao",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 2,
- "mapcolor9": 2,
- "mapcolor13": 9,
- "pop_est": 141766,
- "gdp_md_est": 2838,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CW",
- "iso_a3": "CUW",
- "iso_n3": "531",
- "un_a3": "531",
- "wb_a2": "CW",
- "wb_a3": "CUW",
- "woe_id": -99,
- "adm0_a3_is": "CUW",
- "adm0_a3_us": "CUW",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": 4,
- "homepart": -99
- },
- "arcs": [
- [
- 615
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "United Kingdom",
- "sov_a3": "GB1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Cayman Islands",
- "adm0_a3": "CYM",
- "geou_dif": 0,
- "geounit": "Cayman Islands",
- "gu_a3": "CYM",
- "su_dif": 0,
- "subunit": "Cayman Islands",
- "su_a3": "CYM",
- "brk_diff": 0,
- "name": "Cayman Is.",
- "name_long": "Cayman Islands",
- "brk_a3": "CYM",
- "brk_name": "Cayman Is.",
- "brk_group": null,
- "abbrev": "Cym. Is.",
- "postal": "KY",
- "formal_en": "Cayman Islands",
- "formal_fr": null,
- "note_adm0": "U.K.",
- "note_brk": null,
- "name_sort": "Cayman Islands",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 49035,
- "gdp_md_est": 1939,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "KY",
- "iso_a3": "CYM",
- "iso_n3": "136",
- "un_a3": "136",
- "wb_a2": "KY",
- "wb_a3": "CYM",
- "woe_id": -99,
- "adm0_a3_is": "CYM",
- "adm0_a3_us": "CYM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 10,
- "long_len": 14,
- "abbrev_len": 8,
- "tiny": 2,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 616
- ]
- ],
- [
- [
- 617
- ]
- ],
- [
- [
- 618
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Northern Cyprus",
- "sov_a3": "CYN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Northern Cyprus",
- "adm0_a3": "CYN",
- "geou_dif": 0,
- "geounit": "Northern Cyprus",
- "gu_a3": "CYN",
- "su_dif": 0,
- "subunit": "Northern Cyprus",
- "su_a3": "CYN",
- "brk_diff": 1,
- "name": "N. Cyprus",
- "name_long": "Northern Cyprus",
- "brk_a3": "B20",
- "brk_name": "N. Cyprus",
- "brk_group": null,
- "abbrev": "N. Cy.",
- "postal": "CN",
- "formal_en": "Turkish Republic of Northern Cyprus",
- "formal_fr": null,
- "note_adm0": "Self admin.",
- "note_brk": "Self admin.; Claimed by Cyprus",
- "name_sort": "Cyprus, Northern",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 1,
- "mapcolor9": 4,
- "mapcolor13": 8,
- "pop_est": 265100,
- "gdp_md_est": 3600,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "-99",
- "iso_a3": "-99",
- "iso_n3": "-99",
- "un_a3": "-099",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "CYP",
- "adm0_a3_us": "CYP",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Europe & Central Asia",
- "name_len": 9,
- "long_len": 15,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 619,
- 620
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Cyprus",
- "sov_a3": "CYP",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Cyprus",
- "adm0_a3": "CYP",
- "geou_dif": 0,
- "geounit": "Cyprus",
- "gu_a3": "CYP",
- "su_dif": 0,
- "subunit": "Cyprus",
- "su_a3": "CYP",
- "brk_diff": 0,
- "name": "Cyprus",
- "name_long": "Cyprus",
- "brk_a3": "CYP",
- "brk_name": "Cyprus",
- "brk_group": null,
- "abbrev": "Cyp.",
- "postal": "CY",
- "formal_en": "Republic of Cyprus",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Cyprus",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 2,
- "mapcolor9": 3,
- "mapcolor13": 7,
- "pop_est": 531640,
- "gdp_md_est": 22700,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CY",
- "iso_a3": "CYP",
- "iso_n3": "196",
- "un_a3": "196",
- "wb_a2": "CY",
- "wb_a3": "CYP",
- "woe_id": -99,
- "adm0_a3_is": "CYP",
- "adm0_a3_us": "CYP",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Europe & Central Asia",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -620,
- 621
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Czech Republic",
- "sov_a3": "CZE",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Czech Republic",
- "adm0_a3": "CZE",
- "geou_dif": 0,
- "geounit": "Czech Republic",
- "gu_a3": "CZE",
- "su_dif": 0,
- "subunit": "Czech Republic",
- "su_a3": "CZE",
- "brk_diff": 0,
- "name": "Czech Rep.",
- "name_long": "Czech Republic",
- "brk_a3": "CZE",
- "brk_name": "Czech Rep.",
- "brk_group": null,
- "abbrev": "Cz. Rep.",
- "postal": "CZ",
- "formal_en": "Czech Republic",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Czech Republic",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 1,
- "mapcolor9": 2,
- "mapcolor13": 6,
- "pop_est": 10211904,
- "gdp_md_est": 265200,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "CZ",
- "iso_a3": "CZE",
- "iso_n3": "203",
- "un_a3": "203",
- "wb_a2": "CZ",
- "wb_a3": "CZE",
- "woe_id": -99,
- "adm0_a3_is": "CZE",
- "adm0_a3_us": "CZE",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Eastern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 10,
- "long_len": 14,
- "abbrev_len": 8,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 622,
- 623,
- -218,
- 624
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Germany",
- "sov_a3": "DEU",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Germany",
- "adm0_a3": "DEU",
- "geou_dif": 0,
- "geounit": "Germany",
- "gu_a3": "DEU",
- "su_dif": 0,
- "subunit": "Germany",
- "su_a3": "DEU",
- "brk_diff": 0,
- "name": "Germany",
- "name_long": "Germany",
- "brk_a3": "DEU",
- "brk_name": "Germany",
- "brk_group": null,
- "abbrev": "Ger.",
- "postal": "D",
- "formal_en": "Federal Republic of Germany",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Germany",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 5,
- "mapcolor9": 5,
- "mapcolor13": 1,
- "pop_est": 82329758,
- "gdp_md_est": 2918000,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "1. Developed region: G7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "DE",
- "iso_a3": "DEU",
- "iso_n3": "276",
- "un_a3": "276",
- "wb_a2": "DE",
- "wb_a3": "DEU",
- "woe_id": -99,
- "adm0_a3_is": "DEU",
- "adm0_a3_us": "DEU",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Western Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 625,
- 626
- ]
- ],
- [
- [
- 627
- ]
- ],
- [
- [
- 628
- ]
- ],
- [
- [
- 629
- ]
- ],
- [
- [
- 630,
- 631,
- -625,
- -217,
- -487,
- 632,
- 633,
- -229,
- 634,
- 635,
- 636
- ]
- ],
- [
- [
- 637
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Djibouti",
- "sov_a3": "DJI",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Djibouti",
- "adm0_a3": "DJI",
- "geou_dif": 0,
- "geounit": "Djibouti",
- "gu_a3": "DJI",
- "su_dif": 0,
- "subunit": "Djibouti",
- "su_a3": "DJI",
- "brk_diff": 0,
- "name": "Djibouti",
- "name_long": "Djibouti",
- "brk_a3": "DJI",
- "brk_name": "Djibouti",
- "brk_group": null,
- "abbrev": "Dji.",
- "postal": "DJ",
- "formal_en": "Republic of Djibouti",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Djibouti",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 2,
- "mapcolor9": 4,
- "mapcolor13": 8,
- "pop_est": 516055,
- "gdp_md_est": 1885,
- "pop_year": -99,
- "lastcensus": 2009,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "DJ",
- "iso_a3": "DJI",
- "iso_n3": "262",
- "un_a3": "262",
- "wb_a2": "DJ",
- "wb_a3": "DJI",
- "woe_id": -99,
- "adm0_a3_is": "DJI",
- "adm0_a3_us": "DJI",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Middle East & North Africa",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 638,
- 639,
- 640,
- 641
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Dominica",
- "sov_a3": "DMA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Dominica",
- "adm0_a3": "DMA",
- "geou_dif": 0,
- "geounit": "Dominica",
- "gu_a3": "DMA",
- "su_dif": 0,
- "subunit": "Dominica",
- "su_a3": "DMA",
- "brk_diff": 0,
- "name": "Dominica",
- "name_long": "Dominica",
- "brk_a3": "DMA",
- "brk_name": "Dominica",
- "brk_group": null,
- "abbrev": "D'inca",
- "postal": "DM",
- "formal_en": "Commonwealth of Dominica",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Dominica",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 5,
- "mapcolor9": 2,
- "mapcolor13": 12,
- "pop_est": 72660,
- "gdp_md_est": 719.6,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "DM",
- "iso_a3": "DMA",
- "iso_n3": "212",
- "un_a3": "212",
- "wb_a2": "DM",
- "wb_a3": "DMA",
- "woe_id": -99,
- "adm0_a3_is": "DMA",
- "adm0_a3_us": "DMA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 6,
- "tiny": 4,
- "homepart": 1
- },
- "arcs": [
- [
- 642
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Denmark",
- "sov_a3": "DN1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "Denmark",
- "adm0_a3": "DNK",
- "geou_dif": 0,
- "geounit": "Denmark",
- "gu_a3": "DNK",
- "su_dif": 0,
- "subunit": "Denmark",
- "su_a3": "DNK",
- "brk_diff": 0,
- "name": "Denmark",
- "name_long": "Denmark",
- "brk_a3": "DNK",
- "brk_name": "Denmark",
- "brk_group": null,
- "abbrev": "Den.",
- "postal": "DK",
- "formal_en": "Kingdom of Denmark",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Denmark",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 1,
- "mapcolor9": 3,
- "mapcolor13": 12,
- "pop_est": 5500510,
- "gdp_md_est": 203600,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "DK",
- "iso_a3": "DNK",
- "iso_n3": "208",
- "un_a3": "208",
- "wb_a2": "DK",
- "wb_a3": "DNK",
- "woe_id": -99,
- "adm0_a3_is": "DNK",
- "adm0_a3_us": "DNK",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Northern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 643
- ]
- ],
- [
- [
- 644
- ]
- ],
- [
- [
- 645
- ]
- ],
- [
- [
- 646
- ]
- ],
- [
- [
- 647
- ]
- ],
- [
- [
- 648
- ]
- ],
- [
- [
- 649
- ]
- ],
- [
- [
- 650
- ]
- ],
- [
- [
- 651
- ]
- ],
- [
- [
- 652
- ]
- ],
- [
- [
- 653
- ]
- ],
- [
- [
- -637,
- 654
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Dominican Republic",
- "sov_a3": "DOM",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Dominican Republic",
- "adm0_a3": "DOM",
- "geou_dif": 0,
- "geounit": "Dominican Republic",
- "gu_a3": "DOM",
- "su_dif": 0,
- "subunit": "Dominican Republic",
- "su_a3": "DOM",
- "brk_diff": 0,
- "name": "Dominican Rep.",
- "name_long": "Dominican Republic",
- "brk_a3": "DOM",
- "brk_name": "Dominican Rep.",
- "brk_group": null,
- "abbrev": "Dom. Rep.",
- "postal": "DO",
- "formal_en": "Dominican Republic",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Dominican Republic",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 2,
- "mapcolor9": 5,
- "mapcolor13": 7,
- "pop_est": 9650054,
- "gdp_md_est": 78000,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "DO",
- "iso_a3": "DOM",
- "iso_n3": "214",
- "un_a3": "214",
- "wb_a2": "DO",
- "wb_a3": "DOM",
- "woe_id": -99,
- "adm0_a3_is": "DOM",
- "adm0_a3_us": "DOM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 14,
- "long_len": 18,
- "abbrev_len": 9,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 655,
- 656
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Algeria",
- "sov_a3": "DZA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Algeria",
- "adm0_a3": "DZA",
- "geou_dif": 0,
- "geounit": "Algeria",
- "gu_a3": "DZA",
- "su_dif": 0,
- "subunit": "Algeria",
- "su_a3": "DZA",
- "brk_diff": 0,
- "name": "Algeria",
- "name_long": "Algeria",
- "brk_a3": "DZA",
- "brk_name": "Algeria",
- "brk_group": null,
- "abbrev": "Alg.",
- "postal": "DZ",
- "formal_en": "People's Democratic Republic of Algeria",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Algeria",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 1,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 34178188,
- "gdp_md_est": 232900,
- "pop_year": -99,
- "lastcensus": 2008,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "DZ",
- "iso_a3": "DZA",
- "iso_n3": "012",
- "un_a3": "012",
- "wb_a2": "DZ",
- "wb_a3": "DZA",
- "woe_id": -99,
- "adm0_a3_is": "DZA",
- "adm0_a3_us": "DZA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Northern Africa",
- "region_wb": "Middle East & North Africa",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 657,
- 658,
- 659,
- 660,
- 661,
- 662,
- 663,
- 664
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Ecuador",
- "sov_a3": "ECU",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Ecuador",
- "adm0_a3": "ECU",
- "geou_dif": 0,
- "geounit": "Ecuador",
- "gu_a3": "ECU",
- "su_dif": 0,
- "subunit": "Ecuador",
- "su_a3": "ECU",
- "brk_diff": 0,
- "name": "Ecuador",
- "name_long": "Ecuador",
- "brk_a3": "ECU",
- "brk_name": "Ecuador",
- "brk_group": null,
- "abbrev": "Ecu.",
- "postal": "EC",
- "formal_en": "Republic of Ecuador",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Ecuador",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 5,
- "mapcolor9": 2,
- "mapcolor13": 12,
- "pop_est": 14573101,
- "gdp_md_est": 107700,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "EC",
- "iso_a3": "ECU",
- "iso_n3": "218",
- "un_a3": "218",
- "wb_a2": "EC",
- "wb_a3": "ECU",
- "woe_id": -99,
- "adm0_a3_is": "ECU",
- "adm0_a3_us": "ECU",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "South America",
- "region_un": "Americas",
- "subregion": "South America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 665
- ]
- ],
- [
- [
- 666
- ]
- ],
- [
- [
- 667
- ]
- ],
- [
- [
- 668
- ]
- ],
- [
- [
- 669
- ]
- ],
- [
- [
- 670
- ]
- ],
- [
- [
- 671
- ]
- ],
- [
- [
- 672
- ]
- ],
- [
- [
- 673,
- 674,
- -590
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Egypt",
- "sov_a3": "EGY",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Egypt",
- "adm0_a3": "EGY",
- "geou_dif": 0,
- "geounit": "Egypt",
- "gu_a3": "EGY",
- "su_dif": 0,
- "subunit": "Egypt",
- "su_a3": "EGY",
- "brk_diff": 0,
- "name": "Egypt",
- "name_long": "Egypt",
- "brk_a3": "EGY",
- "brk_name": "Egypt",
- "brk_group": null,
- "abbrev": "Egypt",
- "postal": "EG",
- "formal_en": "Arab Republic of Egypt",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Egypt, Arab Rep.",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 6,
- "mapcolor9": 7,
- "mapcolor13": 2,
- "pop_est": 83082869,
- "gdp_md_est": 443700,
- "pop_year": -99,
- "lastcensus": 2006,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "EG",
- "iso_a3": "EGY",
- "iso_n3": "818",
- "un_a3": "818",
- "wb_a2": "EG",
- "wb_a3": "EGY",
- "woe_id": -99,
- "adm0_a3_is": "EGY",
- "adm0_a3_us": "EGY",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Northern Africa",
- "region_wb": "Middle East & North Africa",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 675,
- 676,
- 677,
- 678,
- 679,
- 680
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Eritrea",
- "sov_a3": "ERI",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Eritrea",
- "adm0_a3": "ERI",
- "geou_dif": 0,
- "geounit": "Eritrea",
- "gu_a3": "ERI",
- "su_dif": 0,
- "subunit": "Eritrea",
- "su_a3": "ERI",
- "brk_diff": 0,
- "name": "Eritrea",
- "name_long": "Eritrea",
- "brk_a3": "ERI",
- "brk_name": "Eritrea",
- "brk_group": null,
- "abbrev": "Erit.",
- "postal": "ER",
- "formal_en": "State of Eritrea",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Eritrea",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 1,
- "mapcolor9": 2,
- "mapcolor13": 12,
- "pop_est": 5647168,
- "gdp_md_est": 3945,
- "pop_year": -99,
- "lastcensus": 1984,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "ER",
- "iso_a3": "ERI",
- "iso_n3": "232",
- "un_a3": "232",
- "wb_a2": "ER",
- "wb_a3": "ERI",
- "woe_id": -99,
- "adm0_a3_is": "ERI",
- "adm0_a3_us": "ERI",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 681
- ]
- ],
- [
- [
- 682
- ]
- ],
- [
- [
- 683,
- -641,
- 684,
- 685
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Spain",
- "sov_a3": "ESP",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Spain",
- "adm0_a3": "ESP",
- "geou_dif": 0,
- "geounit": "Spain",
- "gu_a3": "ESP",
- "su_dif": 0,
- "subunit": "Spain",
- "su_a3": "ESP",
- "brk_diff": 0,
- "name": "Spain",
- "name_long": "Spain",
- "brk_a3": "ESP",
- "brk_name": "Spain",
- "brk_group": null,
- "abbrev": "Sp.",
- "postal": "E",
- "formal_en": "Kingdom of Spain",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Spain",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 5,
- "mapcolor9": 5,
- "mapcolor13": 5,
- "pop_est": 40525002,
- "gdp_md_est": 1403000,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "ES",
- "iso_a3": "ESP",
- "iso_n3": "724",
- "un_a3": "724",
- "wb_a2": "ES",
- "wb_a3": "ESP",
- "woe_id": -99,
- "adm0_a3_is": "ESP",
- "adm0_a3_us": "ESP",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Southern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 3,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 686
- ]
- ],
- [
- [
- 687
- ]
- ],
- [
- [
- 688
- ]
- ],
- [
- [
- 689
- ]
- ],
- [
- [
- 690
- ]
- ],
- [
- [
- 691
- ]
- ],
- [
- [
- 692
- ]
- ],
- [
- [
- 693
- ]
- ],
- [
- [
- 694
- ]
- ],
- [
- [
- 695
- ]
- ],
- [
- [
- 696
- ]
- ],
- [
- [
- 697,
- -25,
- 698,
- 699,
- 700,
- 701
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Estonia",
- "sov_a3": "EST",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Estonia",
- "adm0_a3": "EST",
- "geou_dif": 0,
- "geounit": "Estonia",
- "gu_a3": "EST",
- "su_dif": 0,
- "subunit": "Estonia",
- "su_a3": "EST",
- "brk_diff": 0,
- "name": "Estonia",
- "name_long": "Estonia",
- "brk_a3": "EST",
- "brk_name": "Estonia",
- "brk_group": null,
- "abbrev": "Est.",
- "postal": "EST",
- "formal_en": "Republic of Estonia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Estonia",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 2,
- "mapcolor9": 1,
- "mapcolor13": 10,
- "pop_est": 1299371,
- "gdp_md_est": 27410,
- "pop_year": -99,
- "lastcensus": 2000,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "EE",
- "iso_a3": "EST",
- "iso_n3": "233",
- "un_a3": "233",
- "wb_a2": "EE",
- "wb_a3": "EST",
- "woe_id": -99,
- "adm0_a3_is": "EST",
- "adm0_a3_us": "EST",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Northern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 702
- ]
- ],
- [
- [
- 703
- ]
- ],
- [
- [
- 704
- ]
- ],
- [
- [
- 705,
- 706,
- 707
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Ethiopia",
- "sov_a3": "ETH",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Ethiopia",
- "adm0_a3": "ETH",
- "geou_dif": 0,
- "geounit": "Ethiopia",
- "gu_a3": "ETH",
- "su_dif": 0,
- "subunit": "Ethiopia",
- "su_a3": "ETH",
- "brk_diff": 0,
- "name": "Ethiopia",
- "name_long": "Ethiopia",
- "brk_a3": "ETH",
- "brk_name": "Ethiopia",
- "brk_group": null,
- "abbrev": "Eth.",
- "postal": "ET",
- "formal_en": "Federal Democratic Republic of Ethiopia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Ethiopia",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 4,
- "mapcolor9": 1,
- "mapcolor13": 13,
- "pop_est": 85237338,
- "gdp_md_est": 68770,
- "pop_year": -99,
- "lastcensus": 2007,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "ET",
- "iso_a3": "ETH",
- "iso_n3": "231",
- "un_a3": "231",
- "wb_a2": "ET",
- "wb_a3": "ETH",
- "woe_id": -99,
- "adm0_a3_is": "ETH",
- "adm0_a3_us": "ETH",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -640,
- 708,
- 709,
- 710,
- 711,
- 712,
- -685
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Finland",
- "sov_a3": "FI1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "Finland",
- "adm0_a3": "FIN",
- "geou_dif": 0,
- "geounit": "Finland",
- "gu_a3": "FIN",
- "su_dif": 0,
- "subunit": "Finland",
- "su_a3": "FIN",
- "brk_diff": 0,
- "name": "Finland",
- "name_long": "Finland",
- "brk_a3": "FIN",
- "brk_name": "Finland",
- "brk_group": null,
- "abbrev": "Fin.",
- "postal": "FIN",
- "formal_en": "Republic of Finland",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Finland",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 1,
- "mapcolor9": 4,
- "mapcolor13": 6,
- "pop_est": 5250275,
- "gdp_md_est": 193500,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "FI",
- "iso_a3": "FIN",
- "iso_n3": "246",
- "un_a3": "246",
- "wb_a2": "FI",
- "wb_a3": "FIN",
- "woe_id": -99,
- "adm0_a3_is": "FIN",
- "adm0_a3_us": "FIN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Northern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 713
- ]
- ],
- [
- [
- 714
- ]
- ],
- [
- [
- 715
- ]
- ],
- [
- [
- 716
- ]
- ],
- [
- [
- 717
- ]
- ],
- [
- [
- 718
- ]
- ],
- [
- [
- 719
- ]
- ],
- [
- [
- 720,
- 721,
- 722,
- 723
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Fiji",
- "sov_a3": "FJI",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Fiji",
- "adm0_a3": "FJI",
- "geou_dif": 0,
- "geounit": "Fiji",
- "gu_a3": "FJI",
- "su_dif": 0,
- "subunit": "Fiji",
- "su_a3": "FJI",
- "brk_diff": 0,
- "name": "Fiji",
- "name_long": "Fiji",
- "brk_a3": "FJI",
- "brk_name": "Fiji",
- "brk_group": null,
- "abbrev": "Fiji",
- "postal": "FJ",
- "formal_en": "Republic of Fiji",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Fiji",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 1,
- "mapcolor9": 2,
- "mapcolor13": 2,
- "pop_est": 944720,
- "gdp_md_est": 3579,
- "pop_year": -99,
- "lastcensus": 2007,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "FJ",
- "iso_a3": "FJI",
- "iso_n3": "242",
- "un_a3": "242",
- "wb_a2": "FJ",
- "wb_a3": "FJI",
- "woe_id": -99,
- "adm0_a3_is": "FJI",
- "adm0_a3_us": "FJI",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Melanesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 4,
- "long_len": 4,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 724
- ]
- ],
- [
- [
- 725
- ]
- ],
- [
- [
- 726
- ]
- ],
- [
- [
- 727
- ]
- ],
- [
- [
- 728
- ]
- ],
- [
- [
- 729
- ]
- ],
- [
- [
- 730
- ]
- ],
- [
- [
- 731
- ]
- ],
- [
- [
- 732
- ]
- ],
- [
- [
- 733
- ]
- ],
- [
- [
- 734
- ]
- ],
- [
- [
- 735
- ]
- ],
- [
- [
- 736
- ]
- ],
- [
- [
- 737
- ]
- ],
- [
- [
- 738
- ]
- ],
- [
- [
- 739
- ]
- ],
- [
- [
- 740
- ]
- ],
- [
- [
- 741
- ]
- ],
- [
- [
- 742
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "United Kingdom",
- "sov_a3": "GB1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Falkland Islands",
- "adm0_a3": "FLK",
- "geou_dif": 0,
- "geounit": "Falkland Islands",
- "gu_a3": "FLK",
- "su_dif": 0,
- "subunit": "Falkland Islands",
- "su_a3": "FLK",
- "brk_diff": 1,
- "name": "Falkland Is.",
- "name_long": "Falkland Islands",
- "brk_a3": "B12",
- "brk_name": "Falkland Is.",
- "brk_group": null,
- "abbrev": "Flk. Is.",
- "postal": "FK",
- "formal_en": "Falkland Islands",
- "formal_fr": null,
- "note_adm0": "U.K.",
- "note_brk": "Admin. by U.K.; Claimed by Argentina",
- "name_sort": "Falkland Islands",
- "name_alt": "Islas Malvinas",
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 3140,
- "gdp_md_est": 105.1,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "FK",
- "iso_a3": "FLK",
- "iso_n3": "238",
- "un_a3": "238",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "FLK",
- "adm0_a3_us": "FLK",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "South America",
- "region_un": "Americas",
- "subregion": "South America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 12,
- "long_len": 16,
- "abbrev_len": 8,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 743
- ]
- ],
- [
- [
- 744
- ]
- ],
- [
- [
- 745
- ]
- ],
- [
- [
- 746
- ]
- ],
- [
- [
- 747
- ]
- ],
- [
- [
- 748
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "France",
- "sov_a3": "FR1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "France",
- "adm0_a3": "FRA",
- "geou_dif": 0,
- "geounit": "France",
- "gu_a3": "FRA",
- "su_dif": 0,
- "subunit": "France",
- "su_a3": "FRA",
- "brk_diff": 0,
- "name": "France",
- "name_long": "France",
- "brk_a3": "FRA",
- "brk_name": "France",
- "brk_group": null,
- "abbrev": "Fr.",
- "postal": "F",
- "formal_en": "French Republic",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "France",
- "name_alt": null,
- "mapcolor7": 7,
- "mapcolor8": 5,
- "mapcolor9": 9,
- "mapcolor13": 11,
- "pop_est": 64057792,
- "gdp_md_est": 2128000,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "1. Developed region: G7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "FR",
- "iso_a3": "FRA",
- "iso_n3": "250",
- "un_a3": "250",
- "wb_a2": "FR",
- "wb_a3": "FRA",
- "woe_id": -99,
- "adm0_a3_is": "FRA",
- "adm0_a3_us": "FRA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Western Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 3,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 749
- ]
- ],
- [
- [
- 750
- ]
- ],
- [
- [
- -314,
- 751,
- 752
- ]
- ],
- [
- [
- 753
- ]
- ],
- [
- [
- 754
- ]
- ],
- [
- [
- 755
- ]
- ],
- [
- [
- 756
- ]
- ],
- [
- [
- 757
- ]
- ],
- [
- [
- 758
- ]
- ],
- [
- [
- 759,
- -633,
- -486,
- 760,
- 761,
- 762,
- 763,
- -699,
- -26,
- -698,
- 764,
- -231
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Denmark",
- "sov_a3": "DN1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Faroe Islands",
- "adm0_a3": "FRO",
- "geou_dif": 0,
- "geounit": "Faroe Islands",
- "gu_a3": "FRO",
- "su_dif": 0,
- "subunit": "Faroe Islands",
- "su_a3": "FRO",
- "brk_diff": 0,
- "name": "Faeroe Is.",
- "name_long": "Faeroe Islands",
- "brk_a3": "FRO",
- "brk_name": "Faeroe Islands",
- "brk_group": null,
- "abbrev": "Faeroe Is.",
- "postal": "FO",
- "formal_en": "Føroyar Is. (Faeroe Is.)",
- "formal_fr": null,
- "note_adm0": "Den.",
- "note_brk": null,
- "name_sort": "Faeroe Islands",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 1,
- "mapcolor9": 3,
- "mapcolor13": 12,
- "pop_est": 48856,
- "gdp_md_est": 1000,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "FO",
- "iso_a3": "FRO",
- "iso_n3": "234",
- "un_a3": "234",
- "wb_a2": "FO",
- "wb_a3": "FRO",
- "woe_id": -99,
- "adm0_a3_is": "FRO",
- "adm0_a3_us": "FRO",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Northern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 10,
- "long_len": 14,
- "abbrev_len": 10,
- "tiny": 3,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 765
- ]
- ],
- [
- [
- 766
- ]
- ],
- [
- [
- 767
- ]
- ],
- [
- [
- 768
- ]
- ],
- [
- [
- 769
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Federated States of Micronesia",
- "sov_a3": "FSM",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Federated States of Micronesia",
- "adm0_a3": "FSM",
- "geou_dif": 0,
- "geounit": "Federated States of Micronesia",
- "gu_a3": "FSM",
- "su_dif": 0,
- "subunit": "Federated States of Micronesia",
- "su_a3": "FSM",
- "brk_diff": 0,
- "name": "Micronesia",
- "name_long": "Federated States of Micronesia",
- "brk_a3": "FSM",
- "brk_name": "Micronesia",
- "brk_group": null,
- "abbrev": "F.S.M.",
- "postal": "FSM",
- "formal_en": "Federated States of Micronesia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Micronesia, Federated States of",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 2,
- "mapcolor9": 4,
- "mapcolor13": 13,
- "pop_est": 107434,
- "gdp_md_est": 238.1,
- "pop_year": -99,
- "lastcensus": 2000,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "FM",
- "iso_a3": "FSM",
- "iso_n3": "583",
- "un_a3": "583",
- "wb_a2": "FM",
- "wb_a3": "FSM",
- "woe_id": -99,
- "adm0_a3_is": "FSM",
- "adm0_a3_us": "FSM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Micronesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 10,
- "long_len": 30,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 770
- ]
- ],
- [
- [
- 771
- ]
- ],
- [
- [
- 772
- ]
- ],
- [
- [
- 773
- ]
- ],
- [
- [
- 774
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Gabon",
- "sov_a3": "GAB",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Gabon",
- "adm0_a3": "GAB",
- "geou_dif": 0,
- "geounit": "Gabon",
- "gu_a3": "GAB",
- "su_dif": 0,
- "subunit": "Gabon",
- "su_a3": "GAB",
- "brk_diff": 0,
- "name": "Gabon",
- "name_long": "Gabon",
- "brk_a3": "GAB",
- "brk_name": "Gabon",
- "brk_group": null,
- "abbrev": "Gabon",
- "postal": "GA",
- "formal_en": "Gabonese Republic",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Gabon",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 2,
- "mapcolor9": 5,
- "mapcolor13": 5,
- "pop_est": 1514993,
- "gdp_md_est": 21110,
- "pop_year": -99,
- "lastcensus": 2003,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GA",
- "iso_a3": "GAB",
- "iso_n3": "266",
- "un_a3": "266",
- "wb_a2": "GA",
- "wb_a3": "GAB",
- "woe_id": -99,
- "adm0_a3_is": "GAB",
- "adm0_a3_us": "GAB",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Middle Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": 3,
- "homepart": 1
- },
- "arcs": [
- [
- -585,
- 775,
- 776,
- -572
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "United Kingdom",
- "sov_a3": "GB1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "United Kingdom",
- "adm0_a3": "GBR",
- "geou_dif": 0,
- "geounit": "United Kingdom",
- "gu_a3": "GBR",
- "su_dif": 0,
- "subunit": "United Kingdom",
- "su_a3": "GBR",
- "brk_diff": 0,
- "name": "United Kingdom",
- "name_long": "United Kingdom",
- "brk_a3": "GBR",
- "brk_name": "United Kingdom",
- "brk_group": null,
- "abbrev": "U.K.",
- "postal": "GB",
- "formal_en": "United Kingdom of Great Britain and Northern Ireland",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "United Kingdom",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 62262000,
- "gdp_md_est": 1977704,
- "pop_year": 0,
- "lastcensus": 2011,
- "gdp_year": 2009,
- "economy": "1. Developed region: G7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GB",
- "iso_a3": "GBR",
- "iso_n3": "826",
- "un_a3": "826",
- "wb_a2": "GB",
- "wb_a3": "GBR",
- "woe_id": -99,
- "adm0_a3_is": "GBR",
- "adm0_a3_us": "GBR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Northern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 14,
- "long_len": 14,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 777
- ]
- ],
- [
- [
- 778
- ]
- ],
- [
- [
- 779,
- 780
- ]
- ],
- [
- [
- 781
- ]
- ],
- [
- [
- 782
- ]
- ],
- [
- [
- 783
- ]
- ],
- [
- [
- 784
- ]
- ],
- [
- [
- 785
- ]
- ],
- [
- [
- 786
- ]
- ],
- [
- [
- 787
- ]
- ],
- [
- [
- 788
- ]
- ],
- [
- [
- 789
- ]
- ],
- [
- [
- 790
- ]
- ],
- [
- [
- 791
- ]
- ],
- [
- [
- 792
- ]
- ],
- [
- [
- 793
- ]
- ],
- [
- [
- 794
- ]
- ],
- [
- [
- 795
- ]
- ],
- [
- [
- 796
- ]
- ],
- [
- [
- 797
- ]
- ],
- [
- [
- 798
- ]
- ],
- [
- [
- 799
- ]
- ],
- [
- [
- 800
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Georgia",
- "sov_a3": "GEO",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Georgia",
- "adm0_a3": "GEO",
- "geou_dif": 0,
- "geounit": "Georgia",
- "gu_a3": "GEO",
- "su_dif": 0,
- "subunit": "Georgia",
- "su_a3": "GEO",
- "brk_diff": 0,
- "name": "Georgia",
- "name_long": "Georgia",
- "brk_a3": "GEO",
- "brk_name": "Georgia",
- "brk_group": null,
- "abbrev": "Geo.",
- "postal": "GE",
- "formal_en": "Georgia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Georgia",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 1,
- "mapcolor9": 3,
- "mapcolor13": 2,
- "pop_est": 4615807,
- "gdp_md_est": 21510,
- "pop_year": -99,
- "lastcensus": 2002,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GE",
- "iso_a3": "GEO",
- "iso_n3": "268",
- "un_a3": "268",
- "wb_a2": "GE",
- "wb_a3": "GEO",
- "woe_id": -99,
- "adm0_a3_is": "GEO",
- "adm0_a3_us": "GEO",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -223,
- -51,
- 801,
- 802,
- 803
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 4,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "United Kingdom",
- "sov_a3": "GB1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "Guernsey",
- "adm0_a3": "GGY",
- "geou_dif": 0,
- "geounit": "Guernsey",
- "gu_a3": "GGY",
- "su_dif": 0,
- "subunit": "Guernsey",
- "su_a3": "GGY",
- "brk_diff": 0,
- "name": "Guernsey",
- "name_long": "Guernsey",
- "brk_a3": "GGY",
- "brk_name": "Guernsey",
- "brk_group": "Channel Islands",
- "abbrev": "Guern.",
- "postal": "GG",
- "formal_en": "Bailiwick of Guernsey",
- "formal_fr": null,
- "note_adm0": "U.K. crown dependency",
- "note_brk": null,
- "name_sort": "Guernsey",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 68633,
- "gdp_md_est": 2742,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GG",
- "iso_a3": "GGY",
- "iso_n3": "831",
- "un_a3": "831",
- "wb_a2": "JG",
- "wb_a3": "CHI",
- "woe_id": -99,
- "adm0_a3_is": "GGY",
- "adm0_a3_us": "GGY",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Northern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- 804
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Ghana",
- "sov_a3": "GHA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Ghana",
- "adm0_a3": "GHA",
- "geou_dif": 0,
- "geounit": "Ghana",
- "gu_a3": "GHA",
- "su_dif": 0,
- "subunit": "Ghana",
- "su_a3": "GHA",
- "brk_diff": 0,
- "name": "Ghana",
- "name_long": "Ghana",
- "brk_a3": "GHA",
- "brk_name": "Ghana",
- "brk_group": null,
- "abbrev": "Ghana",
- "postal": "GH",
- "formal_en": "Republic of Ghana",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Ghana",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 3,
- "mapcolor9": 1,
- "mapcolor13": 4,
- "pop_est": 23832495,
- "gdp_md_est": 34200,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GH",
- "iso_a3": "GHA",
- "iso_n3": "288",
- "un_a3": "288",
- "wb_a2": "GH",
- "wb_a3": "GHA",
- "woe_id": -99,
- "adm0_a3_is": "GHA",
- "adm0_a3_us": "GHA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 805,
- 806,
- -564,
- 807,
- -566,
- -242
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Guinea",
- "sov_a3": "GIN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Guinea",
- "adm0_a3": "GIN",
- "geou_dif": 0,
- "geounit": "Guinea",
- "gu_a3": "GIN",
- "su_dif": 0,
- "subunit": "Guinea",
- "su_a3": "GIN",
- "brk_diff": 0,
- "name": "Guinea",
- "name_long": "Guinea",
- "brk_a3": "GIN",
- "brk_name": "Guinea",
- "brk_group": null,
- "abbrev": "Gin.",
- "postal": "GN",
- "formal_en": "Republic of Guinea",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Guinea",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 3,
- "mapcolor9": 7,
- "mapcolor13": 2,
- "pop_est": 10057975,
- "gdp_md_est": 10600,
- "pop_year": -99,
- "lastcensus": 1996,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GN",
- "iso_a3": "GIN",
- "iso_n3": "324",
- "un_a3": "324",
- "wb_a2": "GN",
- "wb_a3": "GIN",
- "woe_id": -99,
- "adm0_a3_is": "GIN",
- "adm0_a3_us": "GIN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 808,
- -569,
- 809,
- 810,
- 811,
- 812,
- 813
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Gambia",
- "sov_a3": "GMB",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Gambia",
- "adm0_a3": "GMB",
- "geou_dif": 0,
- "geounit": "Gambia",
- "gu_a3": "GMB",
- "su_dif": 0,
- "subunit": "Gambia",
- "su_a3": "GMB",
- "brk_diff": 0,
- "name": "Gambia",
- "name_long": "The Gambia",
- "brk_a3": "GMB",
- "brk_name": "Gambia",
- "brk_group": null,
- "abbrev": "Gambia",
- "postal": "GM",
- "formal_en": "Republic of the Gambia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Gambia, The",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 1,
- "mapcolor13": 8,
- "pop_est": 1782893,
- "gdp_md_est": 2272,
- "pop_year": -99,
- "lastcensus": 2003,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GM",
- "iso_a3": "GMB",
- "iso_n3": "270",
- "un_a3": "270",
- "wb_a2": "GM",
- "wb_a3": "GMB",
- "woe_id": -99,
- "adm0_a3_is": "GMB",
- "adm0_a3_us": "GMB",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 6,
- "long_len": 10,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 814,
- 815
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Guinea Bissau",
- "sov_a3": "GNB",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Guinea Bissau",
- "adm0_a3": "GNB",
- "geou_dif": 0,
- "geounit": "Guinea Bissau",
- "gu_a3": "GNB",
- "su_dif": 0,
- "subunit": "Guinea Bissau",
- "su_a3": "GNB",
- "brk_diff": 0,
- "name": "Guinea-Bissau",
- "name_long": "Guinea-Bissau",
- "brk_a3": "GNB",
- "brk_name": "Guinea-Bissau",
- "brk_group": null,
- "abbrev": "GnB.",
- "postal": "GW",
- "formal_en": "Republic of Guinea-Bissau",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Guinea-Bissau",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 5,
- "mapcolor9": 3,
- "mapcolor13": 4,
- "pop_est": 1533964,
- "gdp_md_est": 904.2,
- "pop_year": -99,
- "lastcensus": 2009,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GW",
- "iso_a3": "GNB",
- "iso_n3": "624",
- "un_a3": "624",
- "wb_a2": "GW",
- "wb_a3": "GNB",
- "woe_id": -99,
- "adm0_a3_is": "GNB",
- "adm0_a3_us": "GNB",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 13,
- "long_len": 13,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 816
- ]
- ],
- [
- [
- 817
- ]
- ],
- [
- [
- 818
- ]
- ],
- [
- [
- 819
- ]
- ],
- [
- [
- 820
- ]
- ],
- [
- [
- 821
- ]
- ],
- [
- [
- 822,
- 823,
- -813
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Equatorial Guinea",
- "sov_a3": "GNQ",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Equatorial Guinea",
- "adm0_a3": "GNQ",
- "geou_dif": 0,
- "geounit": "Equatorial Guinea",
- "gu_a3": "GNQ",
- "su_dif": 0,
- "subunit": "Equatorial Guinea",
- "su_a3": "GNQ",
- "brk_diff": 0,
- "name": "Eq. Guinea",
- "name_long": "Equatorial Guinea",
- "brk_a3": "GNQ",
- "brk_name": "Eq. Guinea",
- "brk_group": null,
- "abbrev": "Eq. G.",
- "postal": "GQ",
- "formal_en": "Republic of Equatorial Guinea",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Equatorial Guinea",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 1,
- "mapcolor9": 4,
- "mapcolor13": 8,
- "pop_est": 650702,
- "gdp_md_est": 14060,
- "pop_year": 0,
- "lastcensus": 2002,
- "gdp_year": 0,
- "economy": "7. Least developed region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GQ",
- "iso_a3": "GNQ",
- "iso_n3": "226",
- "un_a3": "226",
- "wb_a2": "GQ",
- "wb_a3": "GNQ",
- "woe_id": -99,
- "adm0_a3_is": "GNQ",
- "adm0_a3_us": "GNQ",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Middle Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 10,
- "long_len": 17,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 824,
- -573,
- -777
- ]
- ],
- [
- [
- 825
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Greece",
- "sov_a3": "GRC",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Greece",
- "adm0_a3": "GRC",
- "geou_dif": 0,
- "geounit": "Greece",
- "gu_a3": "GRC",
- "su_dif": 0,
- "subunit": "Greece",
- "su_a3": "GRC",
- "brk_diff": 0,
- "name": "Greece",
- "name_long": "Greece",
- "brk_a3": "GRC",
- "brk_name": "Greece",
- "brk_group": null,
- "abbrev": "Greece",
- "postal": "GR",
- "formal_en": "Hellenic Republic",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Greece",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 2,
- "mapcolor9": 2,
- "mapcolor13": 9,
- "pop_est": 10737428,
- "gdp_md_est": 343000,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GR",
- "iso_a3": "GRC",
- "iso_n3": "300",
- "un_a3": "300",
- "wb_a2": "GR",
- "wb_a3": "GRC",
- "woe_id": -99,
- "adm0_a3_is": "GRC",
- "adm0_a3_us": "GRC",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Southern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 826
- ]
- ],
- [
- [
- 827
- ]
- ],
- [
- [
- 828
- ]
- ],
- [
- [
- 829
- ]
- ],
- [
- [
- 830
- ]
- ],
- [
- [
- 831
- ]
- ],
- [
- [
- 832
- ]
- ],
- [
- [
- 833
- ]
- ],
- [
- [
- 834
- ]
- ],
- [
- [
- 835
- ]
- ],
- [
- [
- 836
- ]
- ],
- [
- [
- 837
- ]
- ],
- [
- [
- 838
- ]
- ],
- [
- [
- 839
- ]
- ],
- [
- [
- 840
- ]
- ],
- [
- [
- 841
- ]
- ],
- [
- [
- 842
- ]
- ],
- [
- [
- 843
- ]
- ],
- [
- [
- 844
- ]
- ],
- [
- [
- 845
- ]
- ],
- [
- [
- 846
- ]
- ],
- [
- [
- 847
- ]
- ],
- [
- [
- 848
- ]
- ],
- [
- [
- 849
- ]
- ],
- [
- [
- 850
- ]
- ],
- [
- [
- 851
- ]
- ],
- [
- [
- 852
- ]
- ],
- [
- [
- 853
- ]
- ],
- [
- [
- 854
- ]
- ],
- [
- [
- 855
- ]
- ],
- [
- [
- 856
- ]
- ],
- [
- [
- 857
- ]
- ],
- [
- [
- 858
- ]
- ],
- [
- [
- 859
- ]
- ],
- [
- [
- 860
- ]
- ],
- [
- [
- 861
- ]
- ],
- [
- [
- 862
- ]
- ],
- [
- [
- 863
- ]
- ],
- [
- [
- 864
- ]
- ],
- [
- [
- 865,
- -19,
- 866,
- -256,
- 867
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Grenada",
- "sov_a3": "GRD",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Grenada",
- "adm0_a3": "GRD",
- "geou_dif": 0,
- "geounit": "Grenada",
- "gu_a3": "GRD",
- "su_dif": 0,
- "subunit": "Grenada",
- "su_a3": "GRD",
- "brk_diff": 0,
- "name": "Grenada",
- "name_long": "Grenada",
- "brk_a3": "GRD",
- "brk_name": "Grenada",
- "brk_group": null,
- "abbrev": "Gren.",
- "postal": "GD",
- "formal_en": "Grenada",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Grenada",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 4,
- "mapcolor9": 3,
- "mapcolor13": 6,
- "pop_est": 90739,
- "gdp_md_est": 1161,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GD",
- "iso_a3": "GRD",
- "iso_n3": "308",
- "un_a3": "308",
- "wb_a2": "GD",
- "wb_a3": "GRD",
- "woe_id": -99,
- "adm0_a3_is": "GRD",
- "adm0_a3_us": "GRD",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 868
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Denmark",
- "sov_a3": "DN1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "Greenland",
- "adm0_a3": "GRL",
- "geou_dif": 0,
- "geounit": "Greenland",
- "gu_a3": "GRL",
- "su_dif": 0,
- "subunit": "Greenland",
- "su_a3": "GRL",
- "brk_diff": 0,
- "name": "Greenland",
- "name_long": "Greenland",
- "brk_a3": "GRL",
- "brk_name": "Greenland",
- "brk_group": null,
- "abbrev": "Grlnd.",
- "postal": "GL",
- "formal_en": "Greenland",
- "formal_fr": null,
- "note_adm0": "Den.",
- "note_brk": null,
- "name_sort": "Greenland",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 1,
- "mapcolor9": 3,
- "mapcolor13": 12,
- "pop_est": 57600,
- "gdp_md_est": 1100,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GL",
- "iso_a3": "GRL",
- "iso_n3": "304",
- "un_a3": "304",
- "wb_a2": "GL",
- "wb_a3": "GRL",
- "woe_id": -99,
- "adm0_a3_is": "GRL",
- "adm0_a3_us": "GRL",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Northern America",
- "region_wb": "Europe & Central Asia",
- "name_len": 9,
- "long_len": 9,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 869
- ]
- ],
- [
- [
- 870
- ]
- ],
- [
- [
- 871
- ]
- ],
- [
- [
- 872
- ]
- ],
- [
- [
- 873
- ]
- ],
- [
- [
- 874
- ]
- ],
- [
- [
- 875
- ]
- ],
- [
- [
- 876
- ]
- ],
- [
- [
- 877
- ]
- ],
- [
- [
- 878
- ]
- ],
- [
- [
- 879
- ]
- ],
- [
- [
- 880
- ]
- ],
- [
- [
- 881
- ]
- ],
- [
- [
- 882
- ]
- ],
- [
- [
- 883
- ]
- ],
- [
- [
- 884
- ]
- ],
- [
- [
- 885
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Guatemala",
- "sov_a3": "GTM",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Guatemala",
- "adm0_a3": "GTM",
- "geou_dif": 0,
- "geounit": "Guatemala",
- "gu_a3": "GTM",
- "su_dif": 0,
- "subunit": "Guatemala",
- "su_a3": "GTM",
- "brk_diff": 0,
- "name": "Guatemala",
- "name_long": "Guatemala",
- "brk_a3": "GTM",
- "brk_name": "Guatemala",
- "brk_group": null,
- "abbrev": "Guat.",
- "postal": "GT",
- "formal_en": "Republic of Guatemala",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Guatemala",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 3,
- "mapcolor9": 3,
- "mapcolor13": 6,
- "pop_est": 13276517,
- "gdp_md_est": 68580,
- "pop_year": -99,
- "lastcensus": 2002,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GT",
- "iso_a3": "GTM",
- "iso_n3": "320",
- "un_a3": "320",
- "wb_a2": "GT",
- "wb_a3": "GTM",
- "woe_id": -99,
- "adm0_a3_is": "GTM",
- "adm0_a3_us": "GTM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Central America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 9,
- "long_len": 9,
- "abbrev_len": 5,
- "tiny": 4,
- "homepart": 1
- },
- "arcs": [
- [
- -289,
- 886,
- 887,
- 888,
- 889,
- 890
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "United States of America",
- "sov_a3": "US1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Guam",
- "adm0_a3": "GUM",
- "geou_dif": 0,
- "geounit": "Guam",
- "gu_a3": "GUM",
- "su_dif": 0,
- "subunit": "Guam",
- "su_a3": "GUM",
- "brk_diff": 0,
- "name": "Guam",
- "name_long": "Guam",
- "brk_a3": "GUM",
- "brk_name": "Guam",
- "brk_group": null,
- "abbrev": "Guam",
- "postal": "GU",
- "formal_en": "Territory of Guam",
- "formal_fr": null,
- "note_adm0": "U.S.A.",
- "note_brk": null,
- "name_sort": "Guam",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 5,
- "mapcolor9": 1,
- "mapcolor13": 1,
- "pop_est": 178430,
- "gdp_md_est": 2500,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GU",
- "iso_a3": "GUM",
- "iso_n3": "316",
- "un_a3": "316",
- "wb_a2": "GU",
- "wb_a3": "GUM",
- "woe_id": -99,
- "adm0_a3_is": "GUM",
- "adm0_a3_us": "GUM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Micronesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 4,
- "long_len": 4,
- "abbrev_len": 4,
- "tiny": 2,
- "homepart": -99
- },
- "arcs": [
- [
- 891
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Guyana",
- "sov_a3": "GUY",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Guyana",
- "adm0_a3": "GUY",
- "geou_dif": 0,
- "geounit": "Guyana",
- "gu_a3": "GUY",
- "su_dif": 0,
- "subunit": "Guyana",
- "su_a3": "GUY",
- "brk_diff": 0,
- "name": "Guyana",
- "name_long": "Guyana",
- "brk_a3": "GUY",
- "brk_name": "Guyana",
- "brk_group": null,
- "abbrev": "Guy.",
- "postal": "GY",
- "formal_en": "Co-operative Republic of Guyana",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Guyana",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 1,
- "mapcolor9": 4,
- "mapcolor13": 8,
- "pop_est": 772298,
- "gdp_md_est": 2966,
- "pop_year": -99,
- "lastcensus": 2002,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GY",
- "iso_a3": "GUY",
- "iso_n3": "328",
- "un_a3": "328",
- "wb_a2": "GY",
- "wb_a3": "GUY",
- "woe_id": -99,
- "adm0_a3_is": "GUY",
- "adm0_a3_us": "GUY",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "South America",
- "region_un": "Americas",
- "subregion": "South America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 892,
- -321,
- 893,
- 894
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "China",
- "sov_a3": "CH1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "Hong Kong S.A.R.",
- "adm0_a3": "HKG",
- "geou_dif": 0,
- "geounit": "Hong Kong S.A.R.",
- "gu_a3": "HKG",
- "su_dif": 0,
- "subunit": "Hong Kong S.A.R.",
- "su_a3": "HKG",
- "brk_diff": 0,
- "name": "Hong Kong",
- "name_long": "Hong Kong",
- "brk_a3": "HKG",
- "brk_name": "Hong Kong",
- "brk_group": null,
- "abbrev": "H.K.",
- "postal": "HK",
- "formal_en": "Hong Kong Special Administrative Region, PRC",
- "formal_fr": null,
- "note_adm0": "China",
- "note_brk": null,
- "name_sort": "Hong Kong SAR, China",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 4,
- "mapcolor9": 4,
- "mapcolor13": 3,
- "pop_est": 7061200,
- "gdp_md_est": 351119,
- "pop_year": 2010,
- "lastcensus": 2006,
- "gdp_year": 2011,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": 0,
- "fips_10": null,
- "iso_a2": "HK",
- "iso_a3": "HKG",
- "iso_n3": "344",
- "un_a3": "344",
- "wb_a2": "HK",
- "wb_a3": "HKG",
- "woe_id": -99,
- "adm0_a3_is": "HKG",
- "adm0_a3_us": "HKG",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 9,
- "long_len": 9,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 895
- ]
- ],
- [
- [
- 896
- ]
- ],
- [
- [
- -534,
- 897
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 5,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Australia",
- "sov_a3": "AU1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Heard Island and McDonald Islands",
- "adm0_a3": "HMD",
- "geou_dif": 0,
- "geounit": "Heard Island and McDonald Islands",
- "gu_a3": "HMD",
- "su_dif": 0,
- "subunit": "Heard Island and McDonald Islands",
- "su_a3": "HMD",
- "brk_diff": 0,
- "name": "Heard I. and McDonald Is.",
- "name_long": "Heard I. and McDonald Islands",
- "brk_a3": "HMD",
- "brk_name": "Heard I. and McDonald Is.",
- "brk_group": null,
- "abbrev": "H.M.Is.",
- "postal": "HM",
- "formal_en": "Territory of Heard Island and McDonald Islands",
- "formal_fr": null,
- "note_adm0": "Auz.",
- "note_brk": null,
- "name_sort": "Heard Island and McDonald Islands",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 2,
- "mapcolor9": 2,
- "mapcolor13": 7,
- "pop_est": -99,
- "gdp_md_est": -99,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "HM",
- "iso_a3": "HMD",
- "iso_n3": "334",
- "un_a3": "-099",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "HMD",
- "adm0_a3_us": "HMD",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Seven seas (open ocean)",
- "region_un": "Seven seas (open ocean)",
- "subregion": "Seven seas (open ocean)",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 25,
- "long_len": 29,
- "abbrev_len": 7,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- 898
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Honduras",
- "sov_a3": "HND",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Honduras",
- "adm0_a3": "HND",
- "geou_dif": 0,
- "geounit": "Honduras",
- "gu_a3": "HND",
- "su_dif": 0,
- "subunit": "Honduras",
- "su_a3": "HND",
- "brk_diff": 0,
- "name": "Honduras",
- "name_long": "Honduras",
- "brk_a3": "HND",
- "brk_name": "Honduras",
- "brk_group": null,
- "abbrev": "Hond.",
- "postal": "HN",
- "formal_en": "Republic of Honduras",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Honduras",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 5,
- "mapcolor9": 2,
- "mapcolor13": 5,
- "pop_est": 7792854,
- "gdp_md_est": 33720,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "HN",
- "iso_a3": "HND",
- "iso_n3": "340",
- "un_a3": "340",
- "wb_a2": "HN",
- "wb_a3": "HND",
- "woe_id": -99,
- "adm0_a3_is": "HND",
- "adm0_a3_us": "HND",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Central America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 899,
- 900,
- 901,
- -888,
- 902
- ]
- ],
- [
- [
- 903
- ]
- ],
- [
- [
- 904
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Croatia",
- "sov_a3": "HRV",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Croatia",
- "adm0_a3": "HRV",
- "geou_dif": 0,
- "geounit": "Croatia",
- "gu_a3": "HRV",
- "su_dif": 0,
- "subunit": "Croatia",
- "su_a3": "HRV",
- "brk_diff": 0,
- "name": "Croatia",
- "name_long": "Croatia",
- "brk_a3": "HRV",
- "brk_name": "Croatia",
- "brk_group": null,
- "abbrev": "Cro.",
- "postal": "HR",
- "formal_en": "Republic of Croatia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Croatia",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 4,
- "mapcolor9": 5,
- "mapcolor13": 1,
- "pop_est": 4489409,
- "gdp_md_est": 82390,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "HR",
- "iso_a3": "HRV",
- "iso_n3": "191",
- "un_a3": "191",
- "wb_a2": "HR",
- "wb_a3": "HRV",
- "woe_id": -99,
- "adm0_a3_is": "HRV",
- "adm0_a3_us": "HRV",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Southern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 905
- ]
- ],
- [
- [
- 906
- ]
- ],
- [
- [
- -278,
- 907,
- 908
- ]
- ],
- [
- [
- 909
- ]
- ],
- [
- [
- 910
- ]
- ],
- [
- [
- 911
- ]
- ],
- [
- [
- 912
- ]
- ],
- [
- [
- 913
- ]
- ],
- [
- [
- 914
- ]
- ],
- [
- [
- 915
- ]
- ],
- [
- [
- 916
- ]
- ],
- [
- [
- 917
- ]
- ],
- [
- [
- 918,
- -280,
- 919,
- 920,
- 921
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Haiti",
- "sov_a3": "HTI",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Haiti",
- "adm0_a3": "HTI",
- "geou_dif": 0,
- "geounit": "Haiti",
- "gu_a3": "HTI",
- "su_dif": 0,
- "subunit": "Haiti",
- "su_a3": "HTI",
- "brk_diff": 0,
- "name": "Haiti",
- "name_long": "Haiti",
- "brk_a3": "HTI",
- "brk_name": "Haiti",
- "brk_group": null,
- "abbrev": "Haiti",
- "postal": "HT",
- "formal_en": "Republic of Haiti",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Haiti",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 1,
- "mapcolor9": 7,
- "mapcolor13": 2,
- "pop_est": 9035536,
- "gdp_md_est": 11500,
- "pop_year": -99,
- "lastcensus": 2003,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "HT",
- "iso_a3": "HTI",
- "iso_n3": "332",
- "un_a3": "332",
- "wb_a2": "HT",
- "wb_a3": "HTI",
- "woe_id": -99,
- "adm0_a3_is": "HTI",
- "adm0_a3_us": "HTI",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 922
- ]
- ],
- [
- [
- -656,
- 923
- ]
- ],
- [
- [
- 924
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Hungary",
- "sov_a3": "HUN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Hungary",
- "adm0_a3": "HUN",
- "geou_dif": 0,
- "geounit": "Hungary",
- "gu_a3": "HUN",
- "su_dif": 0,
- "subunit": "Hungary",
- "su_a3": "HUN",
- "brk_diff": 0,
- "name": "Hungary",
- "name_long": "Hungary",
- "brk_a3": "HUN",
- "brk_name": "Hungary",
- "brk_group": null,
- "abbrev": "Hun.",
- "postal": "HU",
- "formal_en": "Republic of Hungary",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Hungary",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 6,
- "mapcolor9": 1,
- "mapcolor13": 5,
- "pop_est": 9905596,
- "gdp_md_est": 196600,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "HU",
- "iso_a3": "HUN",
- "iso_n3": "348",
- "un_a3": "348",
- "wb_a2": "HU",
- "wb_a3": "HUN",
- "woe_id": -99,
- "adm0_a3_is": "HUN",
- "adm0_a3_us": "HUN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Eastern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 925,
- 926,
- 927,
- -922,
- 928,
- -211,
- 929
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Indonesia",
- "sov_a3": "IDN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Indonesia",
- "adm0_a3": "IDN",
- "geou_dif": 0,
- "geounit": "Indonesia",
- "gu_a3": "IDN",
- "su_dif": 0,
- "subunit": "Indonesia",
- "su_a3": "IDN",
- "brk_diff": 0,
- "name": "Indonesia",
- "name_long": "Indonesia",
- "brk_a3": "IDN",
- "brk_name": "Indonesia",
- "brk_group": null,
- "abbrev": "Indo.",
- "postal": "INDO",
- "formal_en": "Republic of Indonesia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Indonesia",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 11,
- "pop_est": 240271522,
- "gdp_md_est": 914600,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "4. Emerging region: MIKT",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "ID",
- "iso_a3": "IDN",
- "iso_n3": "360",
- "un_a3": "360",
- "wb_a2": "ID",
- "wb_a3": "IDN",
- "woe_id": -99,
- "adm0_a3_is": "IDN",
- "adm0_a3_us": "IDN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "South-Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 9,
- "long_len": 9,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 930
- ]
- ],
- [
- [
- 931
- ]
- ],
- [
- [
- 932
- ]
- ],
- [
- [
- 933
- ]
- ],
- [
- [
- 934,
- 935,
- 936,
- 937
- ]
- ],
- [
- [
- 938
- ]
- ],
- [
- [
- 939
- ]
- ],
- [
- [
- 940
- ]
- ],
- [
- [
- 941
- ]
- ],
- [
- [
- 942
- ]
- ],
- [
- [
- 943
- ]
- ],
- [
- [
- 944
- ]
- ],
- [
- [
- 945
- ]
- ],
- [
- [
- 946
- ]
- ],
- [
- [
- 947
- ]
- ],
- [
- [
- 948
- ]
- ],
- [
- [
- 949
- ]
- ],
- [
- [
- 950
- ]
- ],
- [
- [
- 951
- ]
- ],
- [
- [
- 952
- ]
- ],
- [
- [
- 953
- ]
- ],
- [
- [
- 954
- ]
- ],
- [
- [
- 955
- ]
- ],
- [
- [
- 956
- ]
- ],
- [
- [
- 957
- ]
- ],
- [
- [
- 958
- ]
- ],
- [
- [
- 959
- ]
- ],
- [
- [
- 960
- ]
- ],
- [
- [
- 961
- ]
- ],
- [
- [
- 962
- ]
- ],
- [
- [
- 963
- ]
- ],
- [
- [
- 964
- ]
- ],
- [
- [
- 965
- ]
- ],
- [
- [
- 966
- ]
- ],
- [
- [
- 967
- ]
- ],
- [
- [
- 968
- ]
- ],
- [
- [
- 969
- ]
- ],
- [
- [
- 970
- ]
- ],
- [
- [
- 971
- ]
- ],
- [
- [
- 972
- ]
- ],
- [
- [
- 973
- ]
- ],
- [
- [
- 974
- ]
- ],
- [
- [
- 975
- ]
- ],
- [
- [
- 976
- ]
- ],
- [
- [
- 977
- ]
- ],
- [
- [
- 978
- ]
- ],
- [
- [
- 979
- ]
- ],
- [
- [
- 980
- ]
- ],
- [
- [
- 981
- ]
- ],
- [
- [
- 982
- ]
- ],
- [
- [
- 983
- ]
- ],
- [
- [
- 984
- ]
- ],
- [
- [
- 985
- ]
- ],
- [
- [
- 986
- ]
- ],
- [
- [
- 987
- ]
- ],
- [
- [
- 988
- ]
- ],
- [
- [
- 989
- ]
- ],
- [
- [
- 990
- ]
- ],
- [
- [
- 991
- ]
- ],
- [
- [
- 992
- ]
- ],
- [
- [
- 993
- ]
- ],
- [
- [
- 994
- ]
- ],
- [
- [
- 995
- ]
- ],
- [
- [
- 996
- ]
- ],
- [
- [
- 997
- ]
- ],
- [
- [
- 998
- ]
- ],
- [
- [
- 999
- ]
- ],
- [
- [
- 1000
- ]
- ],
- [
- [
- 1001
- ]
- ],
- [
- [
- 1002
- ]
- ],
- [
- [
- 1003
- ]
- ],
- [
- [
- 1004
- ]
- ],
- [
- [
- 1005
- ]
- ],
- [
- [
- 1006
- ]
- ],
- [
- [
- 1007
- ]
- ],
- [
- [
- 1008
- ]
- ],
- [
- [
- 1009
- ]
- ],
- [
- [
- 1010
- ]
- ],
- [
- [
- 1011
- ]
- ],
- [
- [
- 1012
- ]
- ],
- [
- [
- 1013
- ]
- ],
- [
- [
- 1014
- ]
- ],
- [
- [
- 1015
- ]
- ],
- [
- [
- 1016
- ]
- ],
- [
- [
- 1017
- ]
- ],
- [
- [
- 1018
- ]
- ],
- [
- [
- 1019
- ]
- ],
- [
- [
- 1020
- ]
- ],
- [
- [
- 1021,
- 1022,
- 1023
- ]
- ],
- [
- [
- 1024
- ]
- ],
- [
- [
- 1025
- ]
- ],
- [
- [
- 1026
- ]
- ],
- [
- [
- 1027
- ]
- ],
- [
- [
- 1028
- ]
- ],
- [
- [
- 1029
- ]
- ],
- [
- [
- 1030
- ]
- ],
- [
- [
- 1031
- ]
- ],
- [
- [
- 1032
- ]
- ],
- [
- [
- 1033
- ]
- ],
- [
- [
- 1034
- ]
- ],
- [
- [
- 1035
- ]
- ],
- [
- [
- 1036
- ]
- ],
- [
- [
- 1037
- ]
- ],
- [
- [
- 1038
- ]
- ],
- [
- [
- 1039
- ]
- ],
- [
- [
- 1040
- ]
- ],
- [
- [
- 1041
- ]
- ],
- [
- [
- 1042
- ]
- ],
- [
- [
- 1043
- ]
- ],
- [
- [
- 1044
- ]
- ],
- [
- [
- 1045
- ]
- ],
- [
- [
- 1046
- ]
- ],
- [
- [
- 1047
- ]
- ],
- [
- [
- 1048
- ]
- ],
- [
- [
- 1049
- ]
- ],
- [
- [
- 1050
- ]
- ],
- [
- [
- 1051
- ]
- ],
- [
- [
- 1052
- ]
- ],
- [
- [
- 1053
- ]
- ],
- [
- [
- 1054
- ]
- ],
- [
- [
- 1055
- ]
- ],
- [
- [
- 1056
- ]
- ],
- [
- [
- 1057
- ]
- ],
- [
- [
- 1058
- ]
- ],
- [
- [
- 1059
- ]
- ],
- [
- [
- 1060
- ]
- ],
- [
- [
- 1061
- ]
- ],
- [
- [
- 1062,
- 1063
- ]
- ],
- [
- [
- 1064
- ]
- ],
- [
- [
- 1065,
- 1066
- ]
- ],
- [
- [
- 1067
- ]
- ],
- [
- [
- 1068
- ]
- ],
- [
- [
- 1069
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "United Kingdom",
- "sov_a3": "GB1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "Isle of Man",
- "adm0_a3": "IMN",
- "geou_dif": 0,
- "geounit": "Isle of Man",
- "gu_a3": "IMN",
- "su_dif": 0,
- "subunit": "Isle of Man",
- "su_a3": "IMN",
- "brk_diff": 0,
- "name": "Isle of Man",
- "name_long": "Isle of Man",
- "brk_a3": "IMN",
- "brk_name": "Isle of Man",
- "brk_group": null,
- "abbrev": "IoMan",
- "postal": "IM",
- "formal_en": null,
- "formal_fr": null,
- "note_adm0": "U.K. crown dependency",
- "note_brk": null,
- "name_sort": "Isle of Man",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 76512,
- "gdp_md_est": 2719,
- "pop_year": -99,
- "lastcensus": 2006,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "IM",
- "iso_a3": "IMN",
- "iso_n3": "833",
- "un_a3": "833",
- "wb_a2": "IM",
- "wb_a3": "IMY",
- "woe_id": -99,
- "adm0_a3_is": "IMN",
- "adm0_a3_us": "IMN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Northern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 11,
- "long_len": 11,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- 1070
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "India",
- "sov_a3": "IND",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "India",
- "adm0_a3": "IND",
- "geou_dif": 0,
- "geounit": "India",
- "gu_a3": "IND",
- "su_dif": 0,
- "subunit": "India",
- "su_a3": "IND",
- "brk_diff": 0,
- "name": "India",
- "name_long": "India",
- "brk_a3": "IND",
- "brk_name": "India",
- "brk_group": null,
- "abbrev": "India",
- "postal": "IND",
- "formal_en": "Republic of India",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "India",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 3,
- "mapcolor9": 2,
- "mapcolor13": 2,
- "pop_est": 1166079220,
- "gdp_md_est": 3297000,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "3. Emerging region: BRIC",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "IN",
- "iso_a3": "IND",
- "iso_n3": "356",
- "un_a3": "356",
- "wb_a2": "IN",
- "wb_a3": "IND",
- "woe_id": -99,
- "adm0_a3_is": "IND",
- "adm0_a3_us": "IND",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Southern Asia",
- "region_wb": "South Asia",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1071
- ]
- ],
- [
- [
- 1072
- ]
- ],
- [
- [
- 1073
- ]
- ],
- [
- [
- 1074
- ]
- ],
- [
- [
- 1075
- ]
- ],
- [
- [
- 1076
- ]
- ],
- [
- [
- 1077
- ]
- ],
- [
- [
- 1078
- ]
- ],
- [
- [
- 1079
- ]
- ],
- [
- [
- 1080
- ]
- ],
- [
- [
- 1081
- ]
- ],
- [
- [
- 1082
- ]
- ],
- [
- [
- 1083,
- -549,
- 1084,
- -547,
- 1085,
- 1086,
- -544,
- 1087,
- -542,
- -327,
- -541,
- 1088,
- -253,
- 1089,
- 1090,
- 1091,
- 1092,
- -554,
- 1093,
- -552,
- 1094,
- -550
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 5,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Australia",
- "sov_a3": "AU1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Indian Ocean Territories",
- "adm0_a3": "IOA",
- "geou_dif": 0,
- "geounit": "Indian Ocean Territories",
- "gu_a3": "IOA",
- "su_dif": 0,
- "subunit": "Indian Ocean Territories",
- "su_a3": "IOA",
- "brk_diff": 0,
- "name": "Indian Ocean Ter.",
- "name_long": "Indian Ocean Territories",
- "brk_a3": "IOA",
- "brk_name": "Indian Ocean Ter.",
- "brk_group": null,
- "abbrev": "Ind. Oc. Ter.",
- "postal": "IOT",
- "formal_en": null,
- "formal_fr": null,
- "note_adm0": "Auz.",
- "note_brk": null,
- "name_sort": "Indian Ocean Territories",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 2,
- "mapcolor9": 2,
- "mapcolor13": 7,
- "pop_est": 2069,
- "gdp_md_est": 31.035,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "-99",
- "iso_a3": "-99",
- "iso_n3": "-99",
- "un_a3": "-099",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "AUS",
- "adm0_a3_us": "AUS",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Seven seas (open ocean)",
- "subregion": "Seven seas (open ocean)",
- "region_wb": "East Asia & Pacific",
- "name_len": 17,
- "long_len": 24,
- "abbrev_len": 13,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 1095
- ]
- ],
- [
- [
- 1096
- ]
- ],
- [
- [
- 1097
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "United Kingdom",
- "sov_a3": "GB1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "British Indian Ocean Territory",
- "adm0_a3": "IOT",
- "geou_dif": 0,
- "geounit": "British Indian Ocean Territory",
- "gu_a3": "IOT",
- "su_dif": 0,
- "subunit": "British Indian Ocean Territory",
- "su_a3": "IOT",
- "brk_diff": 1,
- "name": "Br. Indian Ocean Ter.",
- "name_long": "British Indian Ocean Territory",
- "brk_a3": "B69",
- "brk_name": "Br. Indian Ocean Ter.",
- "brk_group": null,
- "abbrev": "I.O.T.",
- "postal": "IO",
- "formal_en": null,
- "formal_fr": null,
- "note_adm0": "U.K.",
- "note_brk": "Admin. by U.K.; Claimed by Mauritius and Seychelles",
- "name_sort": "British Indian Ocean Territory",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 4000,
- "gdp_md_est": 160,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "IO",
- "iso_a3": "IOT",
- "iso_n3": "086",
- "un_a3": "-099",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "IOT",
- "adm0_a3_us": "IOT",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Seven seas (open ocean)",
- "region_un": "Seven seas (open ocean)",
- "subregion": "Seven seas (open ocean)",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 21,
- "long_len": 30,
- "abbrev_len": 6,
- "tiny": 5,
- "homepart": -99
- },
- "arcs": [
- [
- 1098
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Ireland",
- "sov_a3": "IRL",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Ireland",
- "adm0_a3": "IRL",
- "geou_dif": 0,
- "geounit": "Ireland",
- "gu_a3": "IRL",
- "su_dif": 0,
- "subunit": "Ireland",
- "su_a3": "IRL",
- "brk_diff": 0,
- "name": "Ireland",
- "name_long": "Ireland",
- "brk_a3": "IRL",
- "brk_name": "Ireland",
- "brk_group": null,
- "abbrev": "Ire.",
- "postal": "IRL",
- "formal_en": "Ireland",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Ireland",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 3,
- "mapcolor9": 2,
- "mapcolor13": 2,
- "pop_est": 4203200,
- "gdp_md_est": 188400,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "IE",
- "iso_a3": "IRL",
- "iso_n3": "372",
- "un_a3": "372",
- "wb_a2": "IE",
- "wb_a3": "IRL",
- "woe_id": -99,
- "adm0_a3_is": "IRL",
- "adm0_a3_us": "IRL",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Northern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1099
- ]
- ],
- [
- [
- 1100,
- -780
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Iran",
- "sov_a3": "IRN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Iran",
- "adm0_a3": "IRN",
- "geou_dif": 0,
- "geounit": "Iran",
- "gu_a3": "IRN",
- "su_dif": 0,
- "subunit": "Iran",
- "su_a3": "IRN",
- "brk_diff": 0,
- "name": "Iran",
- "name_long": "Iran",
- "brk_a3": "IRN",
- "brk_name": "Iran",
- "brk_group": null,
- "abbrev": "Iran",
- "postal": "IRN",
- "formal_en": "Islamic Republic of Iran",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Iran, Islamic Rep.",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 3,
- "mapcolor9": 4,
- "mapcolor13": 13,
- "pop_est": 66429284,
- "gdp_md_est": 841700,
- "pop_year": -99,
- "lastcensus": 2006,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "IR",
- "iso_a3": "IRN",
- "iso_n3": "364",
- "un_a3": "364",
- "wb_a2": "IR",
- "wb_a3": "IRN",
- "woe_id": -99,
- "adm0_a3_is": "IRN",
- "adm0_a3_us": "IRN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Southern Asia",
- "region_wb": "Middle East & North Africa",
- "name_len": 4,
- "long_len": 4,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1101
- ]
- ],
- [
- [
- -48,
- -222,
- 1102,
- 1103,
- -5,
- 1104,
- 1105,
- 1106,
- 1107,
- 1108,
- -219
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Iraq",
- "sov_a3": "IRQ",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Iraq",
- "adm0_a3": "IRQ",
- "geou_dif": 0,
- "geounit": "Iraq",
- "gu_a3": "IRQ",
- "su_dif": 0,
- "subunit": "Iraq",
- "su_a3": "IRQ",
- "brk_diff": 0,
- "name": "Iraq",
- "name_long": "Iraq",
- "brk_a3": "IRQ",
- "brk_name": "Iraq",
- "brk_group": null,
- "abbrev": "Iraq",
- "postal": "IRQ",
- "formal_en": "Republic of Iraq",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Iraq",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 3,
- "mapcolor13": 1,
- "pop_est": 31129225,
- "gdp_md_est": 103900,
- "pop_year": -99,
- "lastcensus": 1997,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "IQ",
- "iso_a3": "IRQ",
- "iso_n3": "368",
- "un_a3": "368",
- "wb_a2": "IQ",
- "wb_a3": "IRQ",
- "woe_id": -99,
- "adm0_a3_is": "IRQ",
- "adm0_a3_us": "IRQ",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Middle East & North Africa",
- "name_len": 4,
- "long_len": 4,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -1108,
- 1109,
- 1110,
- 1111,
- 1112,
- 1113,
- 1114
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Iceland",
- "sov_a3": "ISL",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Iceland",
- "adm0_a3": "ISL",
- "geou_dif": 0,
- "geounit": "Iceland",
- "gu_a3": "ISL",
- "su_dif": 0,
- "subunit": "Iceland",
- "su_a3": "ISL",
- "brk_diff": 0,
- "name": "Iceland",
- "name_long": "Iceland",
- "brk_a3": "ISL",
- "brk_name": "Iceland",
- "brk_group": null,
- "abbrev": "Iceland",
- "postal": "IS",
- "formal_en": "Republic of Iceland",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Iceland",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 4,
- "mapcolor13": 9,
- "pop_est": 306694,
- "gdp_md_est": 12710,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "IS",
- "iso_a3": "ISL",
- "iso_n3": "352",
- "un_a3": "352",
- "wb_a2": "IS",
- "wb_a3": "ISL",
- "woe_id": -99,
- "adm0_a3_is": "ISL",
- "adm0_a3_us": "ISL",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Northern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 7,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1115
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Israel",
- "sov_a3": "ISR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Israel",
- "adm0_a3": "ISR",
- "geou_dif": 0,
- "geounit": "Israel",
- "gu_a3": "ISR",
- "su_dif": 0,
- "subunit": "Israel",
- "su_a3": "ISR",
- "brk_diff": 0,
- "name": "Israel",
- "name_long": "Israel",
- "brk_a3": "ISR",
- "brk_name": "Israel",
- "brk_group": null,
- "abbrev": "Isr.",
- "postal": "IS",
- "formal_en": "State of Israel",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Israel",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 2,
- "mapcolor9": 5,
- "mapcolor13": 9,
- "pop_est": 7233701,
- "gdp_md_est": 201400,
- "pop_year": -99,
- "lastcensus": 2009,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "IL",
- "iso_a3": "ISR",
- "iso_n3": "376",
- "un_a3": "376",
- "wb_a2": "IL",
- "wb_a3": "ISR",
- "woe_id": -99,
- "adm0_a3_is": "ISR",
- "adm0_a3_us": "ISR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Middle East & North Africa",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1116,
- 1117,
- 1118,
- 1119,
- -677,
- 1120,
- 1121,
- 1122,
- 1123
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Italy",
- "sov_a3": "ITA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Italy",
- "adm0_a3": "ITA",
- "geou_dif": 0,
- "geounit": "Italy",
- "gu_a3": "ITA",
- "su_dif": 0,
- "subunit": "Italy",
- "su_a3": "ITA",
- "brk_diff": 0,
- "name": "Italy",
- "name_long": "Italy",
- "brk_a3": "ITA",
- "brk_name": "Italy",
- "brk_group": null,
- "abbrev": "Italy",
- "postal": "I",
- "formal_en": "Italian Republic",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Italy",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 7,
- "mapcolor9": 8,
- "mapcolor13": 7,
- "pop_est": 58126212,
- "gdp_md_est": 1823000,
- "pop_year": -99,
- "lastcensus": 2012,
- "gdp_year": -99,
- "economy": "1. Developed region: G7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "IT",
- "iso_a3": "ITA",
- "iso_n3": "380",
- "un_a3": "380",
- "wb_a2": "IT",
- "wb_a3": "ITA",
- "woe_id": -99,
- "adm0_a3_is": "ITA",
- "adm0_a3_us": "ITA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Southern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1124
- ]
- ],
- [
- [
- 1125
- ]
- ],
- [
- [
- 1126
- ]
- ],
- [
- [
- 1127
- ]
- ],
- [
- [
- 1128
- ]
- ],
- [
- [
- 1129
- ]
- ],
- [
- [
- 1130
- ]
- ],
- [
- [
- 1131,
- 1132,
- -761,
- -485,
- -213
- ],
- [
- 1133
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Jamaica",
- "sov_a3": "JAM",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Jamaica",
- "adm0_a3": "JAM",
- "geou_dif": 0,
- "geounit": "Jamaica",
- "gu_a3": "JAM",
- "su_dif": 0,
- "subunit": "Jamaica",
- "su_a3": "JAM",
- "brk_diff": 0,
- "name": "Jamaica",
- "name_long": "Jamaica",
- "brk_a3": "JAM",
- "brk_name": "Jamaica",
- "brk_group": null,
- "abbrev": "Jam.",
- "postal": "J",
- "formal_en": "Jamaica",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Jamaica",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 2,
- "mapcolor9": 4,
- "mapcolor13": 10,
- "pop_est": 2825928,
- "gdp_md_est": 20910,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "JM",
- "iso_a3": "JAM",
- "iso_n3": "388",
- "un_a3": "388",
- "wb_a2": "JM",
- "wb_a3": "JAM",
- "woe_id": -99,
- "adm0_a3_is": "JAM",
- "adm0_a3_us": "JAM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1134
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 4,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "United Kingdom",
- "sov_a3": "GB1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "Jersey",
- "adm0_a3": "JEY",
- "geou_dif": 0,
- "geounit": "Jersey",
- "gu_a3": "JEY",
- "su_dif": 0,
- "subunit": "Jersey",
- "su_a3": "JEY",
- "brk_diff": 0,
- "name": "Jersey",
- "name_long": "Jersey",
- "brk_a3": "JEY",
- "brk_name": "Jersey",
- "brk_group": "Channel Islands",
- "abbrev": "Jey.",
- "postal": "JE",
- "formal_en": "Bailiwick of Jersey",
- "formal_fr": null,
- "note_adm0": "U.K. crown dependency",
- "note_brk": null,
- "name_sort": "Jersey",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 91626,
- "gdp_md_est": 5100,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "JE",
- "iso_a3": "JEY",
- "iso_n3": "832",
- "un_a3": "832",
- "wb_a2": "JG",
- "wb_a3": "CHI",
- "woe_id": -99,
- "adm0_a3_is": "JEY",
- "adm0_a3_us": "JEY",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Northern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- 1135
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Jordan",
- "sov_a3": "JOR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Jordan",
- "adm0_a3": "JOR",
- "geou_dif": 0,
- "geounit": "Jordan",
- "gu_a3": "JOR",
- "su_dif": 0,
- "subunit": "Jordan",
- "su_a3": "JOR",
- "brk_diff": 0,
- "name": "Jordan",
- "name_long": "Jordan",
- "brk_a3": "JOR",
- "brk_name": "Jordan",
- "brk_group": null,
- "abbrev": "Jord.",
- "postal": "J",
- "formal_en": "Hashemite Kingdom of Jordan",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Jordan",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 3,
- "mapcolor9": 4,
- "mapcolor13": 4,
- "pop_est": 6342948,
- "gdp_md_est": 31610,
- "pop_year": -99,
- "lastcensus": 2004,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "JO",
- "iso_a3": "JOR",
- "iso_n3": "400",
- "un_a3": "400",
- "wb_a2": "JO",
- "wb_a3": "JOR",
- "woe_id": -99,
- "adm0_a3_is": "JOR",
- "adm0_a3_us": "JOR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Middle East & North Africa",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1136,
- 1137,
- -1119,
- 1138,
- -1117,
- 1139,
- -1113
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Japan",
- "sov_a3": "JPN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Japan",
- "adm0_a3": "JPN",
- "geou_dif": 0,
- "geounit": "Japan",
- "gu_a3": "JPN",
- "su_dif": 0,
- "subunit": "Japan",
- "su_a3": "JPN",
- "brk_diff": 0,
- "name": "Japan",
- "name_long": "Japan",
- "brk_a3": "JPN",
- "brk_name": "Japan",
- "brk_group": null,
- "abbrev": "Japan",
- "postal": "J",
- "formal_en": "Japan",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Japan",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 3,
- "mapcolor9": 5,
- "mapcolor13": 4,
- "pop_est": 127078679,
- "gdp_md_est": 4329000,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "1. Developed region: G7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "JP",
- "iso_a3": "JPN",
- "iso_n3": "392",
- "un_a3": "392",
- "wb_a2": "JP",
- "wb_a3": "JPN",
- "woe_id": -99,
- "adm0_a3_is": "JPN",
- "adm0_a3_us": "JPN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1140
- ]
- ],
- [
- [
- 1141
- ]
- ],
- [
- [
- 1142
- ]
- ],
- [
- [
- 1143
- ]
- ],
- [
- [
- 1144
- ]
- ],
- [
- [
- 1145
- ]
- ],
- [
- [
- 1146
- ]
- ],
- [
- [
- 1147
- ]
- ],
- [
- [
- 1148
- ]
- ],
- [
- [
- 1149
- ]
- ],
- [
- [
- 1150
- ]
- ],
- [
- [
- 1151
- ]
- ],
- [
- [
- 1152
- ]
- ],
- [
- [
- 1153
- ]
- ],
- [
- [
- 1154
- ]
- ],
- [
- [
- 1155
- ]
- ],
- [
- [
- 1156
- ]
- ],
- [
- [
- 1157
- ]
- ],
- [
- [
- 1158
- ]
- ],
- [
- [
- 1159
- ]
- ],
- [
- [
- 1160
- ]
- ],
- [
- [
- 1161
- ]
- ],
- [
- [
- 1162
- ]
- ],
- [
- [
- 1163
- ]
- ],
- [
- [
- 1164
- ]
- ],
- [
- [
- 1165
- ]
- ],
- [
- [
- 1166
- ]
- ],
- [
- [
- 1167
- ]
- ],
- [
- [
- 1168
- ]
- ],
- [
- [
- 1169
- ]
- ],
- [
- [
- 1170
- ]
- ],
- [
- [
- 1171
- ]
- ],
- [
- [
- 1172
- ]
- ],
- [
- [
- 1173
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Kashmir",
- "sov_a3": "KAS",
- "adm0_dif": 0,
- "level": 2,
- "type": "Indeterminate",
- "admin": "Siachen Glacier",
- "adm0_a3": "KAS",
- "geou_dif": 0,
- "geounit": "Siachen Glacier",
- "gu_a3": "KAS",
- "su_dif": 0,
- "subunit": "Siachen Glacier",
- "su_a3": "KAS",
- "brk_diff": 1,
- "name": "Siachen Glacier",
- "name_long": "Siachen Glacier",
- "brk_a3": "B45",
- "brk_name": "Siachen Glacier",
- "brk_group": "Jammu and Kashmir",
- "abbrev": "Siachen",
- "postal": "SG",
- "formal_en": null,
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": "Claimed by Pakistan and India",
- "name_sort": "Kashmir",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 7,
- "mapcolor9": 6,
- "mapcolor13": -99,
- "pop_est": 6000,
- "gdp_md_est": 15,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "-99",
- "iso_a3": "-99",
- "iso_n3": "-99",
- "un_a3": "-099",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "-99",
- "adm0_a3_us": "KAS",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Southern Asia",
- "region_wb": "South Asia",
- "name_len": 15,
- "long_len": 15,
- "abbrev_len": 7,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -1092,
- 1174,
- -556
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Kazakhstan",
- "sov_a3": "KAZ",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Kazakhstan",
- "adm0_a3": "KAZ",
- "geou_dif": 0,
- "geounit": "Kazakhstan",
- "gu_a3": "KAZ",
- "su_dif": 0,
- "subunit": "Kazakhstan",
- "su_a3": "KAZ",
- "brk_diff": 0,
- "name": "Kazakhstan",
- "name_long": "Kazakhstan",
- "brk_a3": "KAZ",
- "brk_name": "Kazakhstan",
- "brk_group": null,
- "abbrev": "Kaz.",
- "postal": "KZ",
- "formal_en": "Republic of Kazakhstan",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Kazakhstan",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 1,
- "mapcolor9": 6,
- "mapcolor13": 1,
- "pop_est": 15399437,
- "gdp_md_est": 175800,
- "pop_year": -99,
- "lastcensus": 2009,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "KZ",
- "iso_a3": "KAZ",
- "iso_n3": "398",
- "un_a3": "398",
- "wb_a2": "KZ",
- "wb_a3": "KAZ",
- "woe_id": -99,
- "adm0_a3_is": "KAZ",
- "adm0_a3_us": "KAZ",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Central Asia",
- "region_wb": "Europe & Central Asia",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1175
- ]
- ],
- [
- [
- 1176
- ]
- ],
- [
- [
- 1177
- ]
- ],
- [
- [
- -560,
- 1178,
- 1179,
- 1180,
- 1181,
- 1182
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Kenya",
- "sov_a3": "KEN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Kenya",
- "adm0_a3": "KEN",
- "geou_dif": 0,
- "geounit": "Kenya",
- "gu_a3": "KEN",
- "su_dif": 0,
- "subunit": "Kenya",
- "su_a3": "KEN",
- "brk_diff": 0,
- "name": "Kenya",
- "name_long": "Kenya",
- "brk_a3": "KEN",
- "brk_name": "Kenya",
- "brk_group": null,
- "abbrev": "Ken.",
- "postal": "KE",
- "formal_en": "Republic of Kenya",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Kenya",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 2,
- "mapcolor9": 7,
- "mapcolor13": 3,
- "pop_est": 39002772,
- "gdp_md_est": 61510,
- "pop_year": -99,
- "lastcensus": 2009,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "KE",
- "iso_a3": "KEN",
- "iso_n3": "404",
- "un_a3": "404",
- "wb_a2": "KE",
- "wb_a3": "KEN",
- "woe_id": -99,
- "adm0_a3_is": "KEN",
- "adm0_a3_us": "KEN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1183
- ]
- ],
- [
- [
- 1184,
- 1185,
- 1186,
- 1187,
- 1188,
- -711
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Kyrgyzstan",
- "sov_a3": "KGZ",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Kyrgyzstan",
- "adm0_a3": "KGZ",
- "geou_dif": 0,
- "geounit": "Kyrgyzstan",
- "gu_a3": "KGZ",
- "su_dif": 0,
- "subunit": "Kyrgyzstan",
- "su_a3": "KGZ",
- "brk_diff": 0,
- "name": "Kyrgyzstan",
- "name_long": "Kyrgyzstan",
- "brk_a3": "KGZ",
- "brk_name": "Kyrgyzstan",
- "brk_group": null,
- "abbrev": "Kgz.",
- "postal": "KG",
- "formal_en": "Kyrgyz Republic",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Kyrgyz Republic",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 7,
- "mapcolor9": 7,
- "mapcolor13": 6,
- "pop_est": 5431747,
- "gdp_md_est": 11610,
- "pop_year": -99,
- "lastcensus": 2009,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "KG",
- "iso_a3": "KGZ",
- "iso_n3": "417",
- "un_a3": "417",
- "wb_a2": "KG",
- "wb_a3": "KGZ",
- "woe_id": -99,
- "adm0_a3_is": "KGZ",
- "adm0_a3_us": "KGZ",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Central Asia",
- "region_wb": "Europe & Central Asia",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -559,
- 1189,
- 1190,
- -1179
- ],
- [
- 1191
- ],
- [
- 1192
- ],
- [
- 1193
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Cambodia",
- "sov_a3": "KHM",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Cambodia",
- "adm0_a3": "KHM",
- "geou_dif": 0,
- "geounit": "Cambodia",
- "gu_a3": "KHM",
- "su_dif": 0,
- "subunit": "Cambodia",
- "su_a3": "KHM",
- "brk_diff": 0,
- "name": "Cambodia",
- "name_long": "Cambodia",
- "brk_a3": "KHM",
- "brk_name": "Cambodia",
- "brk_group": null,
- "abbrev": "Camb.",
- "postal": "KH",
- "formal_en": "Kingdom of Cambodia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Cambodia",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 3,
- "mapcolor9": 6,
- "mapcolor13": 5,
- "pop_est": 14494293,
- "gdp_md_est": 27940,
- "pop_year": -99,
- "lastcensus": 2008,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "KH",
- "iso_a3": "KHM",
- "iso_n3": "116",
- "un_a3": "116",
- "wb_a2": "KH",
- "wb_a3": "KHM",
- "woe_id": -99,
- "adm0_a3_is": "KHM",
- "adm0_a3_us": "KHM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "South-Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1194
- ]
- ],
- [
- [
- 1195
- ]
- ],
- [
- [
- 1196,
- 1197,
- 1198,
- 1199
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Kiribati",
- "sov_a3": "KIR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Kiribati",
- "adm0_a3": "KIR",
- "geou_dif": 0,
- "geounit": "Kiribati",
- "gu_a3": "KIR",
- "su_dif": 0,
- "subunit": "Kiribati",
- "su_a3": "KIR",
- "brk_diff": 0,
- "name": "Kiribati",
- "name_long": "Kiribati",
- "brk_a3": "KIR",
- "brk_name": "Kiribati",
- "brk_group": null,
- "abbrev": "Kir.",
- "postal": "KI",
- "formal_en": "Republic of Kiribati",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Kiribati",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 7,
- "mapcolor9": 6,
- "mapcolor13": 12,
- "pop_est": 112850,
- "gdp_md_est": 579.5,
- "pop_year": -99,
- "lastcensus": 2005,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "KI",
- "iso_a3": "KIR",
- "iso_n3": "296",
- "un_a3": "296",
- "wb_a2": "KI",
- "wb_a3": "KIR",
- "woe_id": -99,
- "adm0_a3_is": "KIR",
- "adm0_a3_us": "KIR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Micronesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 4,
- "tiny": 2,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1200
- ]
- ],
- [
- [
- 1201
- ]
- ],
- [
- [
- 1202
- ]
- ],
- [
- [
- 1203
- ]
- ],
- [
- [
- 1204
- ]
- ],
- [
- [
- 1205
- ]
- ],
- [
- [
- 1206
- ]
- ],
- [
- [
- 1207
- ]
- ],
- [
- [
- 1208
- ]
- ],
- [
- [
- 1209
- ]
- ],
- [
- [
- 1210
- ]
- ],
- [
- [
- 1211
- ]
- ],
- [
- [
- 1212
- ]
- ],
- [
- [
- 1213
- ]
- ],
- [
- [
- 1214
- ]
- ],
- [
- [
- 1215
- ]
- ],
- [
- [
- 1216
- ]
- ],
- [
- [
- 1217
- ]
- ],
- [
- [
- 1218
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Saint Kitts and Nevis",
- "sov_a3": "KNA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Saint Kitts and Nevis",
- "adm0_a3": "KNA",
- "geou_dif": 0,
- "geounit": "Saint Kitts and Nevis",
- "gu_a3": "KNA",
- "su_dif": 0,
- "subunit": "Saint Kitts and Nevis",
- "su_a3": "KNA",
- "brk_diff": 0,
- "name": "St. Kitts and Nevis",
- "name_long": "Saint Kitts and Nevis",
- "brk_a3": "KNA",
- "brk_name": "Saint Kitts and Nevis",
- "brk_group": null,
- "abbrev": "St.K.N.",
- "postal": "KN",
- "formal_en": "Federation of Saint Kitts and Nevis",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "St. Kitts and Nevis",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 1,
- "mapcolor13": 8,
- "pop_est": 40131,
- "gdp_md_est": 777.7,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "KN",
- "iso_a3": "KNA",
- "iso_n3": "659",
- "un_a3": "659",
- "wb_a2": "KN",
- "wb_a3": "KNA",
- "woe_id": -99,
- "adm0_a3_is": "KNA",
- "adm0_a3_us": "KNA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 19,
- "long_len": 21,
- "abbrev_len": 7,
- "tiny": 4,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1219
- ]
- ],
- [
- [
- 1220
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "South Korea",
- "sov_a3": "KOR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "South Korea",
- "adm0_a3": "KOR",
- "geou_dif": 0,
- "geounit": "South Korea",
- "gu_a3": "KOR",
- "su_dif": 0,
- "subunit": "South Korea",
- "su_a3": "KOR",
- "brk_diff": 0,
- "name": "Korea",
- "name_long": "Republic of Korea",
- "brk_a3": "KOR",
- "brk_name": "Republic of Korea",
- "brk_group": null,
- "abbrev": "S.K.",
- "postal": "KR",
- "formal_en": "Republic of Korea",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Korea, Rep.",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 1,
- "mapcolor9": 1,
- "mapcolor13": 5,
- "pop_est": 48508972,
- "gdp_md_est": 1335000,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "4. Emerging region: MIKT",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "KR",
- "iso_a3": "KOR",
- "iso_n3": "410",
- "un_a3": "410",
- "wb_a2": "KR",
- "wb_a3": "KOR",
- "woe_id": -99,
- "adm0_a3_is": "KOR",
- "adm0_a3_us": "KOR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 5,
- "long_len": 17,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1221
- ]
- ],
- [
- [
- 1222
- ]
- ],
- [
- [
- 1223
- ]
- ],
- [
- [
- 1224
- ]
- ],
- [
- [
- 1225
- ]
- ],
- [
- [
- 1226
- ]
- ],
- [
- [
- 1227
- ]
- ],
- [
- [
- 1228
- ]
- ],
- [
- [
- 1229
- ]
- ],
- [
- [
- 1230
- ]
- ],
- [
- [
- 1231,
- 1232
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Kosovo",
- "sov_a3": "KOS",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Kosovo",
- "adm0_a3": "KOS",
- "geou_dif": 0,
- "geounit": "Kosovo",
- "gu_a3": "KOS",
- "su_dif": 0,
- "subunit": "Kosovo",
- "su_a3": "KOS",
- "brk_diff": 1,
- "name": "Kosovo",
- "name_long": "Kosovo",
- "brk_a3": "B57",
- "brk_name": "Kosovo",
- "brk_group": null,
- "abbrev": "Kos.",
- "postal": "KO",
- "formal_en": "Republic of Kosovo",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": "Self admin.; Claimed by Serbia",
- "name_sort": "Kosovo",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 2,
- "mapcolor9": 3,
- "mapcolor13": 11,
- "pop_est": 1804838,
- "gdp_md_est": 5352,
- "pop_year": -99,
- "lastcensus": 1981,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "-99",
- "iso_a3": "-99",
- "iso_n3": "-99",
- "un_a3": "-099",
- "wb_a2": "KV",
- "wb_a3": "KSV",
- "woe_id": -99,
- "adm0_a3_is": "SRB",
- "adm0_a3_us": "KOS",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Southern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1233,
- -17,
- 1234,
- 1235
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Kuwait",
- "sov_a3": "KWT",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Kuwait",
- "adm0_a3": "KWT",
- "geou_dif": 0,
- "geounit": "Kuwait",
- "gu_a3": "KWT",
- "su_dif": 0,
- "subunit": "Kuwait",
- "su_a3": "KWT",
- "brk_diff": 0,
- "name": "Kuwait",
- "name_long": "Kuwait",
- "brk_a3": "KWT",
- "brk_name": "Kuwait",
- "brk_group": null,
- "abbrev": "Kwt.",
- "postal": "KW",
- "formal_en": "State of Kuwait",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Kuwait",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 2,
- "mapcolor9": 2,
- "mapcolor13": 2,
- "pop_est": 2691158,
- "gdp_md_est": 149100,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "KW",
- "iso_a3": "KWT",
- "iso_n3": "414",
- "un_a3": "414",
- "wb_a2": "KW",
- "wb_a3": "KWT",
- "woe_id": -99,
- "adm0_a3_is": "KWT",
- "adm0_a3_us": "KWT",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Middle East & North Africa",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1236
- ]
- ],
- [
- [
- 1237,
- -1111,
- 1238
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Laos",
- "sov_a3": "LAO",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Laos",
- "adm0_a3": "LAO",
- "geou_dif": 0,
- "geounit": "Laos",
- "gu_a3": "LAO",
- "su_dif": 0,
- "subunit": "Laos",
- "su_a3": "LAO",
- "brk_diff": 0,
- "name": "Lao PDR",
- "name_long": "Lao PDR",
- "brk_a3": "LAO",
- "brk_name": "Laos",
- "brk_group": null,
- "abbrev": "Laos",
- "postal": "LA",
- "formal_en": "Lao People's Democratic Republic",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Lao PDR",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 1,
- "mapcolor9": 1,
- "mapcolor13": 9,
- "pop_est": 6834942,
- "gdp_md_est": 13980,
- "pop_year": -99,
- "lastcensus": 2005,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "LA",
- "iso_a3": "LAO",
- "iso_n3": "418",
- "un_a3": "418",
- "wb_a2": "LA",
- "wb_a3": "LAO",
- "woe_id": -99,
- "adm0_a3_is": "LAO",
- "adm0_a3_us": "LAO",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "South-Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1239,
- 1240,
- 1241,
- -1199,
- 1242,
- 1243,
- -539
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Lebanon",
- "sov_a3": "LBN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Lebanon",
- "adm0_a3": "LBN",
- "geou_dif": 0,
- "geounit": "Lebanon",
- "gu_a3": "LBN",
- "su_dif": 0,
- "subunit": "Lebanon",
- "su_a3": "LBN",
- "brk_diff": 0,
- "name": "Lebanon",
- "name_long": "Lebanon",
- "brk_a3": "LBN",
- "brk_name": "Lebanon",
- "brk_group": null,
- "abbrev": "Leb.",
- "postal": "LB",
- "formal_en": "Lebanese Republic",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Lebanon",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 4,
- "mapcolor9": 4,
- "mapcolor13": 12,
- "pop_est": 4017095,
- "gdp_md_est": 44060,
- "pop_year": -99,
- "lastcensus": 1970,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "LB",
- "iso_a3": "LBN",
- "iso_n3": "422",
- "un_a3": "422",
- "wb_a2": "LB",
- "wb_a3": "LBN",
- "woe_id": -99,
- "adm0_a3_is": "LBN",
- "adm0_a3_us": "LBN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Middle East & North Africa",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": 4,
- "homepart": 1
- },
- "arcs": [
- [
- -1123,
- 1244,
- 1245
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Liberia",
- "sov_a3": "LBR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Liberia",
- "adm0_a3": "LBR",
- "geou_dif": 0,
- "geounit": "Liberia",
- "gu_a3": "LBR",
- "su_dif": 0,
- "subunit": "Liberia",
- "su_a3": "LBR",
- "brk_diff": 0,
- "name": "Liberia",
- "name_long": "Liberia",
- "brk_a3": "LBR",
- "brk_name": "Liberia",
- "brk_group": null,
- "abbrev": "Liberia",
- "postal": "LR",
- "formal_en": "Republic of Liberia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Liberia",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 3,
- "mapcolor9": 4,
- "mapcolor13": 9,
- "pop_est": 3441790,
- "gdp_md_est": 1526,
- "pop_year": -99,
- "lastcensus": 2008,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "LR",
- "iso_a3": "LBR",
- "iso_n3": "430",
- "un_a3": "430",
- "wb_a2": "LR",
- "wb_a3": "LBR",
- "woe_id": -99,
- "adm0_a3_is": "LBR",
- "adm0_a3_us": "LBR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 7,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -568,
- 1246,
- 1247,
- -810
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Libya",
- "sov_a3": "LBY",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Libya",
- "adm0_a3": "LBY",
- "geou_dif": 0,
- "geounit": "Libya",
- "gu_a3": "LBY",
- "su_dif": 0,
- "subunit": "Libya",
- "su_a3": "LBY",
- "brk_diff": 0,
- "name": "Libya",
- "name_long": "Libya",
- "brk_a3": "LBY",
- "brk_name": "Libya",
- "brk_group": null,
- "abbrev": "Libya",
- "postal": "LY",
- "formal_en": "Libya",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Libya",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 2,
- "mapcolor9": 2,
- "mapcolor13": 11,
- "pop_est": 6310434,
- "gdp_md_est": 88830,
- "pop_year": -99,
- "lastcensus": 2006,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "LY",
- "iso_a3": "LBY",
- "iso_n3": "434",
- "un_a3": "434",
- "wb_a2": "LY",
- "wb_a3": "LBY",
- "woe_id": -99,
- "adm0_a3_is": "LBY",
- "adm0_a3_us": "LBY",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Northern Africa",
- "region_wb": "Middle East & North Africa",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -680,
- 1248,
- 1249,
- 1250,
- -659,
- 1251,
- 1252
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Saint Lucia",
- "sov_a3": "LCA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Saint Lucia",
- "adm0_a3": "LCA",
- "geou_dif": 0,
- "geounit": "Saint Lucia",
- "gu_a3": "LCA",
- "su_dif": 0,
- "subunit": "Saint Lucia",
- "su_a3": "LCA",
- "brk_diff": 0,
- "name": "Saint Lucia",
- "name_long": "Saint Lucia",
- "brk_a3": "LCA",
- "brk_name": "Saint Lucia",
- "brk_group": null,
- "abbrev": "S.L.",
- "postal": "LC",
- "formal_en": "Saint Lucia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "St. Lucia",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 4,
- "mapcolor9": 3,
- "mapcolor13": 4,
- "pop_est": 160267,
- "gdp_md_est": 1778,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "LC",
- "iso_a3": "LCA",
- "iso_n3": "662",
- "un_a3": "662",
- "wb_a2": "LC",
- "wb_a3": "LCA",
- "woe_id": -99,
- "adm0_a3_is": "LCA",
- "adm0_a3_us": "LCA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 11,
- "long_len": 11,
- "abbrev_len": 4,
- "tiny": 4,
- "homepart": 1
- },
- "arcs": [
- [
- 1253
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Liechtenstein",
- "sov_a3": "LIE",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Liechtenstein",
- "adm0_a3": "LIE",
- "geou_dif": 0,
- "geounit": "Liechtenstein",
- "gu_a3": "LIE",
- "su_dif": 0,
- "subunit": "Liechtenstein",
- "su_a3": "LIE",
- "brk_diff": 0,
- "name": "Liechtenstein",
- "name_long": "Liechtenstein",
- "brk_a3": "LIE",
- "brk_name": "Liechtenstein",
- "brk_group": null,
- "abbrev": "Liech.",
- "postal": "FL",
- "formal_en": "Principality of Liechtenstein",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Liechtenstein",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 4,
- "mapcolor9": 2,
- "mapcolor13": 9,
- "pop_est": 34761,
- "gdp_md_est": 4160,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "LI",
- "iso_a3": "LIE",
- "iso_n3": "438",
- "un_a3": "438",
- "wb_a2": "LI",
- "wb_a3": "LIE",
- "woe_id": -99,
- "adm0_a3_is": "LIE",
- "adm0_a3_us": "LIE",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Western Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 13,
- "long_len": 13,
- "abbrev_len": 6,
- "tiny": 6,
- "homepart": 1
- },
- "arcs": [
- [
- -484,
- -215
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Sri Lanka",
- "sov_a3": "LKA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Sri Lanka",
- "adm0_a3": "LKA",
- "geou_dif": 0,
- "geounit": "Sri Lanka",
- "gu_a3": "LKA",
- "su_dif": 0,
- "subunit": "Sri Lanka",
- "su_a3": "LKA",
- "brk_diff": 0,
- "name": "Sri Lanka",
- "name_long": "Sri Lanka",
- "brk_a3": "LKA",
- "brk_name": "Sri Lanka",
- "brk_group": null,
- "abbrev": "Sri L.",
- "postal": "LK",
- "formal_en": "Democratic Socialist Republic of Sri Lanka",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Sri Lanka",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 5,
- "mapcolor9": 4,
- "mapcolor13": 9,
- "pop_est": 21324791,
- "gdp_md_est": 91870,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "LK",
- "iso_a3": "LKA",
- "iso_n3": "144",
- "un_a3": "144",
- "wb_a2": "LK",
- "wb_a3": "LKA",
- "woe_id": -99,
- "adm0_a3_is": "LKA",
- "adm0_a3_us": "LKA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Southern Asia",
- "region_wb": "South Asia",
- "name_len": 9,
- "long_len": 9,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1254
- ]
- ],
- [
- [
- 1255
- ]
- ],
- [
- [
- 1256
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Lesotho",
- "sov_a3": "LSO",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Lesotho",
- "adm0_a3": "LSO",
- "geou_dif": 0,
- "geounit": "Lesotho",
- "gu_a3": "LSO",
- "su_dif": 0,
- "subunit": "Lesotho",
- "su_a3": "LSO",
- "brk_diff": 0,
- "name": "Lesotho",
- "name_long": "Lesotho",
- "brk_a3": "LSO",
- "brk_name": "Lesotho",
- "brk_group": null,
- "abbrev": "Les.",
- "postal": "LS",
- "formal_en": "Kingdom of Lesotho",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Lesotho",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 5,
- "mapcolor9": 2,
- "mapcolor13": 8,
- "pop_est": 2130819,
- "gdp_md_est": 3293,
- "pop_year": -99,
- "lastcensus": 2006,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "LS",
- "iso_a3": "LSO",
- "iso_n3": "426",
- "un_a3": "426",
- "wb_a2": "LS",
- "wb_a3": "LSO",
- "woe_id": -99,
- "adm0_a3_is": "LSO",
- "adm0_a3_us": "LSO",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Southern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1257
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Lithuania",
- "sov_a3": "LTU",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Lithuania",
- "adm0_a3": "LTU",
- "geou_dif": 0,
- "geounit": "Lithuania",
- "gu_a3": "LTU",
- "su_dif": 0,
- "subunit": "Lithuania",
- "su_a3": "LTU",
- "brk_diff": 0,
- "name": "Lithuania",
- "name_long": "Lithuania",
- "brk_a3": "LTU",
- "brk_name": "Lithuania",
- "brk_group": null,
- "abbrev": "Lith.",
- "postal": "LT",
- "formal_en": "Republic of Lithuania",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Lithuania",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 3,
- "mapcolor9": 3,
- "mapcolor13": 9,
- "pop_est": 3555179,
- "gdp_md_est": 63330,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "LT",
- "iso_a3": "LTU",
- "iso_n3": "440",
- "un_a3": "440",
- "wb_a2": "LT",
- "wb_a3": "LTU",
- "woe_id": -99,
- "adm0_a3_is": "LTU",
- "adm0_a3_us": "LTU",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Northern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 9,
- "long_len": 9,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1258,
- 1259
- ]
- ],
- [
- [
- -285,
- 1260,
- 1261,
- 1262,
- 1263
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Luxembourg",
- "sov_a3": "LUX",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Luxembourg",
- "adm0_a3": "LUX",
- "geou_dif": 0,
- "geounit": "Luxembourg",
- "gu_a3": "LUX",
- "su_dif": 0,
- "subunit": "Luxembourg",
- "su_a3": "LUX",
- "brk_diff": 0,
- "name": "Luxembourg",
- "name_long": "Luxembourg",
- "brk_a3": "LUX",
- "brk_name": "Luxembourg",
- "brk_group": null,
- "abbrev": "Lux.",
- "postal": "L",
- "formal_en": "Grand Duchy of Luxembourg",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Luxembourg",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 7,
- "mapcolor9": 3,
- "mapcolor13": 7,
- "pop_est": 491775,
- "gdp_md_est": 39370,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "LU",
- "iso_a3": "LUX",
- "iso_n3": "442",
- "un_a3": "442",
- "wb_a2": "LU",
- "wb_a3": "LUX",
- "woe_id": -99,
- "adm0_a3_is": "LUX",
- "adm0_a3_us": "LUX",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Western Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 4,
- "tiny": 5,
- "homepart": 1
- },
- "arcs": [
- [
- -634,
- -760,
- -230
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Latvia",
- "sov_a3": "LVA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Latvia",
- "adm0_a3": "LVA",
- "geou_dif": 0,
- "geounit": "Latvia",
- "gu_a3": "LVA",
- "su_dif": 0,
- "subunit": "Latvia",
- "su_a3": "LVA",
- "brk_diff": 0,
- "name": "Latvia",
- "name_long": "Latvia",
- "brk_a3": "LVA",
- "brk_name": "Latvia",
- "brk_group": null,
- "abbrev": "Lat.",
- "postal": "LV",
- "formal_en": "Republic of Latvia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Latvia",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 7,
- "mapcolor9": 6,
- "mapcolor13": 13,
- "pop_est": 2231503,
- "gdp_md_est": 38860,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "LV",
- "iso_a3": "LVA",
- "iso_n3": "428",
- "un_a3": "428",
- "wb_a2": "LV",
- "wb_a3": "LVA",
- "woe_id": -99,
- "adm0_a3_is": "LVA",
- "adm0_a3_us": "LVA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Northern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1264,
- -286,
- -1264,
- 1265,
- -707
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "China",
- "sov_a3": "CH1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "Macao S.A.R",
- "adm0_a3": "MAC",
- "geou_dif": 0,
- "geounit": "Macao S.A.R",
- "gu_a3": "MAC",
- "su_dif": 0,
- "subunit": "Macao S.A.R",
- "su_a3": "MAC",
- "brk_diff": 0,
- "name": "Macao",
- "name_long": "Macao",
- "brk_a3": "MAC",
- "brk_name": "Macao",
- "brk_group": null,
- "abbrev": "Mac.",
- "postal": "MO",
- "formal_en": "Macao Special Administrative Region, PRC",
- "formal_fr": null,
- "note_adm0": "China",
- "note_brk": null,
- "name_sort": "Macao SAR, China",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 4,
- "mapcolor9": 4,
- "mapcolor13": 3,
- "pop_est": 559846,
- "gdp_md_est": 18140,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MO",
- "iso_a3": "MAC",
- "iso_n3": "446",
- "un_a3": "446",
- "wb_a2": "MO",
- "wb_a3": "MAC",
- "woe_id": -99,
- "adm0_a3_is": "MAC",
- "adm0_a3_us": "MAC",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- -536,
- 1266
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "France",
- "sov_a3": "FR1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Saint Martin",
- "adm0_a3": "MAF",
- "geou_dif": 0,
- "geounit": "Saint Martin",
- "gu_a3": "MAF",
- "su_dif": 0,
- "subunit": "Saint Martin",
- "su_a3": "MAF",
- "brk_diff": 0,
- "name": "St-Martin",
- "name_long": "Saint-Martin",
- "brk_a3": "MAF",
- "brk_name": "Saint-Martin",
- "brk_group": null,
- "abbrev": "St. M.",
- "postal": "MF",
- "formal_en": "Saint-Martin (French part)",
- "formal_fr": null,
- "note_adm0": "Fr.",
- "note_brk": null,
- "name_sort": "St. Martin (French part)",
- "name_alt": null,
- "mapcolor7": 7,
- "mapcolor8": 5,
- "mapcolor9": 9,
- "mapcolor13": 11,
- "pop_est": 36661,
- "gdp_md_est": 449,
- "pop_year": 2008,
- "lastcensus": -99,
- "gdp_year": 1999,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": 0,
- "fips_10": null,
- "iso_a2": "MF",
- "iso_a3": "MAF",
- "iso_n3": "663",
- "un_a3": "663",
- "wb_a2": "MF",
- "wb_a3": "MAF",
- "woe_id": -99,
- "adm0_a3_is": "MAF",
- "adm0_a3_us": "MAF",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 9,
- "long_len": 12,
- "abbrev_len": 6,
- "tiny": 4,
- "homepart": -99
- },
- "arcs": [
- [
- 1267,
- 1268
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Morocco",
- "sov_a3": "MAR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Morocco",
- "adm0_a3": "MAR",
- "geou_dif": 0,
- "geounit": "Morocco",
- "gu_a3": "MAR",
- "su_dif": 0,
- "subunit": "Morocco",
- "su_a3": "MAR",
- "brk_diff": 0,
- "name": "Morocco",
- "name_long": "Morocco",
- "brk_a3": "MAR",
- "brk_name": "Morocco",
- "brk_group": null,
- "abbrev": "Mor.",
- "postal": "MA",
- "formal_en": "Kingdom of Morocco",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Morocco",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 2,
- "mapcolor9": 3,
- "mapcolor13": 9,
- "pop_est": 34859364,
- "gdp_md_est": 136600,
- "pop_year": -99,
- "lastcensus": 2004,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MA",
- "iso_a3": "MAR",
- "iso_n3": "504",
- "un_a3": "504",
- "wb_a2": "MA",
- "wb_a3": "MAR",
- "woe_id": -99,
- "adm0_a3_is": "MAR",
- "adm0_a3_us": "MAR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Northern Africa",
- "region_wb": "Middle East & North Africa",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -664,
- 1269,
- 1270
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 6,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Monaco",
- "sov_a3": "MCO",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Monaco",
- "adm0_a3": "MCO",
- "geou_dif": 0,
- "geounit": "Monaco",
- "gu_a3": "MCO",
- "su_dif": 0,
- "subunit": "Monaco",
- "su_a3": "MCO",
- "brk_diff": 0,
- "name": "Monaco",
- "name_long": "Monaco",
- "brk_a3": "MCO",
- "brk_name": "Monaco",
- "brk_group": null,
- "abbrev": "Mco.",
- "postal": "MC",
- "formal_en": "Principality of Monaco",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Monaco",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 1,
- "mapcolor9": 2,
- "mapcolor13": 12,
- "pop_est": 32965,
- "gdp_md_est": 976.3,
- "pop_year": -99,
- "lastcensus": 2008,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MC",
- "iso_a3": "MCO",
- "iso_n3": "492",
- "un_a3": "492",
- "wb_a2": "MC",
- "wb_a3": "MCO",
- "woe_id": -99,
- "adm0_a3_is": "MCO",
- "adm0_a3_us": "MCO",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Western Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": 5,
- "homepart": 1
- },
- "arcs": [
- [
- 1271,
- -763
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Moldova",
- "sov_a3": "MDA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Moldova",
- "adm0_a3": "MDA",
- "geou_dif": 0,
- "geounit": "Moldova",
- "gu_a3": "MDA",
- "su_dif": 0,
- "subunit": "Moldova",
- "su_a3": "MDA",
- "brk_diff": 0,
- "name": "Moldova",
- "name_long": "Moldova",
- "brk_a3": "MDA",
- "brk_name": "Moldova",
- "brk_group": null,
- "abbrev": "Mda.",
- "postal": "MD",
- "formal_en": "Republic of Moldova",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Moldova",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 5,
- "mapcolor9": 4,
- "mapcolor13": 12,
- "pop_est": 4320748,
- "gdp_md_est": 10670,
- "pop_year": -99,
- "lastcensus": 2004,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MD",
- "iso_a3": "MDA",
- "iso_n3": "498",
- "un_a3": "498",
- "wb_a2": "MD",
- "wb_a3": "MDA",
- "woe_id": -99,
- "adm0_a3_is": "MDA",
- "adm0_a3_us": "MDA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Eastern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1272,
- 1273
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Madagascar",
- "sov_a3": "MDG",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Madagascar",
- "adm0_a3": "MDG",
- "geou_dif": 0,
- "geounit": "Madagascar",
- "gu_a3": "MDG",
- "su_dif": 0,
- "subunit": "Madagascar",
- "su_a3": "MDG",
- "brk_diff": 0,
- "name": "Madagascar",
- "name_long": "Madagascar",
- "brk_a3": "MDG",
- "brk_name": "Madagascar",
- "brk_group": null,
- "abbrev": "Mad.",
- "postal": "MG",
- "formal_en": "Republic of Madagascar",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Madagascar",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 5,
- "mapcolor9": 2,
- "mapcolor13": 3,
- "pop_est": 20653556,
- "gdp_md_est": 20130,
- "pop_year": -99,
- "lastcensus": 1993,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MG",
- "iso_a3": "MDG",
- "iso_n3": "450",
- "un_a3": "450",
- "wb_a2": "MG",
- "wb_a3": "MDG",
- "woe_id": -99,
- "adm0_a3_is": "MDG",
- "adm0_a3_us": "MDG",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1274
- ]
- ],
- [
- [
- 1275
- ]
- ],
- [
- [
- 1276
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Maldives",
- "sov_a3": "MDV",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Maldives",
- "adm0_a3": "MDV",
- "geou_dif": 0,
- "geounit": "Maldives",
- "gu_a3": "MDV",
- "su_dif": 0,
- "subunit": "Maldives",
- "su_a3": "MDV",
- "brk_diff": 0,
- "name": "Maldives",
- "name_long": "Maldives",
- "brk_a3": "MDV",
- "brk_name": "Maldives",
- "brk_group": null,
- "abbrev": "Mald.",
- "postal": "MV",
- "formal_en": "Republic of Maldives",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Maldives",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 3,
- "mapcolor9": 1,
- "mapcolor13": 7,
- "pop_est": 396334,
- "gdp_md_est": 1716,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MV",
- "iso_a3": "MDV",
- "iso_n3": "462",
- "un_a3": "462",
- "wb_a2": "MV",
- "wb_a3": "MDV",
- "woe_id": -99,
- "adm0_a3_is": "MDV",
- "adm0_a3_us": "B13",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Seven seas (open ocean)",
- "region_un": "Asia",
- "subregion": "Southern Asia",
- "region_wb": "South Asia",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 5,
- "tiny": 2,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1277
- ]
- ],
- [
- [
- 1278
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Mexico",
- "sov_a3": "MEX",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Mexico",
- "adm0_a3": "MEX",
- "geou_dif": 0,
- "geounit": "Mexico",
- "gu_a3": "MEX",
- "su_dif": 0,
- "subunit": "Mexico",
- "su_a3": "MEX",
- "brk_diff": 0,
- "name": "Mexico",
- "name_long": "Mexico",
- "brk_a3": "MEX",
- "brk_name": "Mexico",
- "brk_group": null,
- "abbrev": "Mex.",
- "postal": "MX",
- "formal_en": "United Mexican States",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Mexico",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 1,
- "mapcolor9": 7,
- "mapcolor13": 3,
- "pop_est": 111211789,
- "gdp_md_est": 1563000,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "4. Emerging region: MIKT",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MX",
- "iso_a3": "MEX",
- "iso_n3": "484",
- "un_a3": "484",
- "wb_a2": "MX",
- "wb_a3": "MEX",
- "woe_id": -99,
- "adm0_a3_is": "MEX",
- "adm0_a3_us": "MEX",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Central America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1279
- ]
- ],
- [
- [
- 1280
- ]
- ],
- [
- [
- 1281
- ]
- ],
- [
- [
- 1282
- ]
- ],
- [
- [
- 1283
- ]
- ],
- [
- [
- 1284
- ]
- ],
- [
- [
- 1285
- ]
- ],
- [
- [
- 1286
- ]
- ],
- [
- [
- 1287
- ]
- ],
- [
- [
- 1288
- ]
- ],
- [
- [
- 1289
- ]
- ],
- [
- [
- 1290
- ]
- ],
- [
- [
- 1291
- ]
- ],
- [
- [
- 1292
- ]
- ],
- [
- [
- 1293
- ]
- ],
- [
- [
- 1294,
- -290,
- -891,
- 1295,
- 1296
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 5,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Marshall Islands",
- "sov_a3": "MHL",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Marshall Islands",
- "adm0_a3": "MHL",
- "geou_dif": 0,
- "geounit": "Marshall Islands",
- "gu_a3": "MHL",
- "su_dif": 0,
- "subunit": "Marshall Islands",
- "su_a3": "MHL",
- "brk_diff": 0,
- "name": "Marshall Is.",
- "name_long": "Marshall Islands",
- "brk_a3": "MHL",
- "brk_name": "Marshall Is.",
- "brk_group": null,
- "abbrev": "M. Is.",
- "postal": "MH",
- "formal_en": "Republic of the Marshall Islands",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Marshall Islands",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 5,
- "mapcolor9": 5,
- "mapcolor13": 3,
- "pop_est": 64522,
- "gdp_md_est": 133.5,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MH",
- "iso_a3": "MHL",
- "iso_n3": "584",
- "un_a3": "584",
- "wb_a2": "MH",
- "wb_a3": "MHL",
- "woe_id": -99,
- "adm0_a3_is": "MHL",
- "adm0_a3_us": "MHL",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Micronesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 12,
- "long_len": 16,
- "abbrev_len": 6,
- "tiny": 2,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1297
- ]
- ],
- [
- [
- 1298
- ]
- ],
- [
- [
- 1299
- ]
- ],
- [
- [
- 1300
- ]
- ],
- [
- [
- 1301
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Macedonia",
- "sov_a3": "MKD",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Macedonia",
- "adm0_a3": "MKD",
- "geou_dif": 0,
- "geounit": "Macedonia",
- "gu_a3": "MKD",
- "su_dif": 0,
- "subunit": "Macedonia",
- "su_a3": "MKD",
- "brk_diff": 0,
- "name": "Macedonia",
- "name_long": "Macedonia",
- "brk_a3": "MKD",
- "brk_name": "Macedonia",
- "brk_group": null,
- "abbrev": "Mkd.",
- "postal": "MK",
- "formal_en": "Former Yugoslav Republic of Macedonia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Macedonia, FYR",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 3,
- "mapcolor9": 7,
- "mapcolor13": 3,
- "pop_est": 2066718,
- "gdp_md_est": 18780,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MK",
- "iso_a3": "MKD",
- "iso_n3": "807",
- "un_a3": "807",
- "wb_a2": "MK",
- "wb_a3": "MKD",
- "woe_id": -99,
- "adm0_a3_is": "MKD",
- "adm0_a3_us": "MKD",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Southern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 9,
- "long_len": 9,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -257,
- -867,
- -18,
- -1234,
- 1302
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Mali",
- "sov_a3": "MLI",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Mali",
- "adm0_a3": "MLI",
- "geou_dif": 0,
- "geounit": "Mali",
- "gu_a3": "MLI",
- "su_dif": 0,
- "subunit": "Mali",
- "su_a3": "MLI",
- "brk_diff": 0,
- "name": "Mali",
- "name_long": "Mali",
- "brk_a3": "MLI",
- "brk_name": "Mali",
- "brk_group": null,
- "abbrev": "Mali",
- "postal": "ML",
- "formal_en": "Republic of Mali",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Mali",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 1,
- "mapcolor13": 7,
- "pop_est": 12666987,
- "gdp_md_est": 14590,
- "pop_year": -99,
- "lastcensus": 2009,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "ML",
- "iso_a3": "MLI",
- "iso_n3": "466",
- "un_a3": "466",
- "wb_a2": "ML",
- "wb_a3": "MLI",
- "woe_id": -99,
- "adm0_a3_is": "MLI",
- "adm0_a3_us": "MLI",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 4,
- "long_len": 4,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1303,
- -244,
- -570,
- -809,
- 1304,
- 1305,
- -661
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Malta",
- "sov_a3": "MLT",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Malta",
- "adm0_a3": "MLT",
- "geou_dif": 0,
- "geounit": "Malta",
- "gu_a3": "MLT",
- "su_dif": 0,
- "subunit": "Malta",
- "su_a3": "MLT",
- "brk_diff": 0,
- "name": "Malta",
- "name_long": "Malta",
- "brk_a3": "MLT",
- "brk_name": "Malta",
- "brk_group": null,
- "abbrev": "Malta",
- "postal": "M",
- "formal_en": "Republic of Malta",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Malta",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 1,
- "mapcolor13": 8,
- "pop_est": 405165,
- "gdp_md_est": 9962,
- "pop_year": -99,
- "lastcensus": 2005,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MT",
- "iso_a3": "MLT",
- "iso_n3": "470",
- "un_a3": "470",
- "wb_a2": "MT",
- "wb_a3": "MLT",
- "woe_id": -99,
- "adm0_a3_is": "MLT",
- "adm0_a3_us": "MLT",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Southern Europe",
- "region_wb": "Middle East & North Africa",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": 3,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1306
- ]
- ],
- [
- [
- 1307
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Myanmar",
- "sov_a3": "MMR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Myanmar",
- "adm0_a3": "MMR",
- "geou_dif": 0,
- "geounit": "Myanmar",
- "gu_a3": "MMR",
- "su_dif": 0,
- "subunit": "Myanmar",
- "su_a3": "MMR",
- "brk_diff": 0,
- "name": "Myanmar",
- "name_long": "Myanmar",
- "brk_a3": "MMR",
- "brk_name": "Myanmar",
- "brk_group": null,
- "abbrev": "Myan.",
- "postal": "MM",
- "formal_en": "Republic of the Union of Myanmar",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Myanmar",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 2,
- "mapcolor9": 5,
- "mapcolor13": 13,
- "pop_est": 48137741,
- "gdp_md_est": 55130,
- "pop_year": -99,
- "lastcensus": 1983,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MM",
- "iso_a3": "MMR",
- "iso_n3": "104",
- "un_a3": "104",
- "wb_a2": "MM",
- "wb_a3": "MMR",
- "woe_id": -99,
- "adm0_a3_is": "MMR",
- "adm0_a3_us": "MMR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "South-Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1308
- ]
- ],
- [
- [
- 1309
- ]
- ],
- [
- [
- 1310
- ]
- ],
- [
- [
- 1311
- ]
- ],
- [
- [
- 1312
- ]
- ],
- [
- [
- 1313
- ]
- ],
- [
- [
- 1314
- ]
- ],
- [
- [
- 1315
- ]
- ],
- [
- [
- 1316
- ]
- ],
- [
- [
- 1317
- ]
- ],
- [
- [
- 1318
- ]
- ],
- [
- [
- 1319
- ]
- ],
- [
- [
- 1320
- ]
- ],
- [
- [
- 1321
- ]
- ],
- [
- [
- 1322
- ]
- ],
- [
- [
- 1323
- ]
- ],
- [
- [
- 1324
- ]
- ],
- [
- [
- 1325
- ]
- ],
- [
- [
- -1244,
- 1326,
- 1327,
- -251,
- -1089,
- -540
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Montenegro",
- "sov_a3": "MNE",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Montenegro",
- "adm0_a3": "MNE",
- "geou_dif": 0,
- "geounit": "Montenegro",
- "gu_a3": "MNE",
- "su_dif": 0,
- "subunit": "Montenegro",
- "su_a3": "MNE",
- "brk_diff": 0,
- "name": "Montenegro",
- "name_long": "Montenegro",
- "brk_a3": "MNE",
- "brk_name": "Montenegro",
- "brk_group": null,
- "abbrev": "Mont.",
- "postal": "ME",
- "formal_en": "Montenegro",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Montenegro",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 1,
- "mapcolor9": 4,
- "mapcolor13": 5,
- "pop_est": 672180,
- "gdp_md_est": 6816,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "ME",
- "iso_a3": "MNE",
- "iso_n3": "499",
- "un_a3": "499",
- "wb_a2": "ME",
- "wb_a3": "MNE",
- "woe_id": -99,
- "adm0_a3_is": "MNE",
- "adm0_a3_us": "MNE",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Southern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1328,
- -1235,
- -21,
- 1329,
- -908,
- -277
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Mongolia",
- "sov_a3": "MNG",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Mongolia",
- "adm0_a3": "MNG",
- "geou_dif": 0,
- "geounit": "Mongolia",
- "gu_a3": "MNG",
- "su_dif": 0,
- "subunit": "Mongolia",
- "su_a3": "MNG",
- "brk_diff": 0,
- "name": "Mongolia",
- "name_long": "Mongolia",
- "brk_a3": "MNG",
- "brk_name": "Mongolia",
- "brk_group": null,
- "abbrev": "Mong.",
- "postal": "MN",
- "formal_en": "Mongolia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Mongolia",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 5,
- "mapcolor9": 5,
- "mapcolor13": 6,
- "pop_est": 3041142,
- "gdp_md_est": 9476,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MN",
- "iso_a3": "MNG",
- "iso_n3": "496",
- "un_a3": "496",
- "wb_a2": "MN",
- "wb_a3": "MNG",
- "woe_id": -99,
- "adm0_a3_is": "MNG",
- "adm0_a3_us": "MNG",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -562,
- 1330
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "United States of America",
- "sov_a3": "US1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Northern Mariana Islands",
- "adm0_a3": "MNP",
- "geou_dif": 0,
- "geounit": "Northern Mariana Islands",
- "gu_a3": "MNP",
- "su_dif": 0,
- "subunit": "Northern Mariana Islands",
- "su_a3": "MNP",
- "brk_diff": 0,
- "name": "N. Mariana Is.",
- "name_long": "Northern Mariana Islands",
- "brk_a3": "MNP",
- "brk_name": "N. Mariana Is.",
- "brk_group": null,
- "abbrev": "N.M.I.",
- "postal": "MP",
- "formal_en": "Commonwealth of the Northern Mariana Islands",
- "formal_fr": null,
- "note_adm0": "Commonwealth of U.S.A.",
- "note_brk": null,
- "name_sort": "Northern Mariana Islands",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 5,
- "mapcolor9": 1,
- "mapcolor13": 1,
- "pop_est": 88662,
- "gdp_md_est": 900,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MP",
- "iso_a3": "MNP",
- "iso_n3": "580",
- "un_a3": "580",
- "wb_a2": "MP",
- "wb_a3": "MNP",
- "woe_id": -99,
- "adm0_a3_is": "MNP",
- "adm0_a3_us": "MNP",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Micronesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 14,
- "long_len": 24,
- "abbrev_len": 6,
- "tiny": 3,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 1331
- ]
- ],
- [
- [
- 1332
- ]
- ],
- [
- [
- 1333
- ]
- ],
- [
- [
- 1334
- ]
- ],
- [
- [
- 1335
- ]
- ],
- [
- [
- 1336
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Mozambique",
- "sov_a3": "MOZ",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Mozambique",
- "adm0_a3": "MOZ",
- "geou_dif": 0,
- "geounit": "Mozambique",
- "gu_a3": "MOZ",
- "su_dif": 0,
- "subunit": "Mozambique",
- "su_a3": "MOZ",
- "brk_diff": 0,
- "name": "Mozambique",
- "name_long": "Mozambique",
- "brk_a3": "MOZ",
- "brk_name": "Mozambique",
- "brk_group": null,
- "abbrev": "Moz.",
- "postal": "MZ",
- "formal_en": "Republic of Mozambique",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Mozambique",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 2,
- "mapcolor9": 1,
- "mapcolor13": 4,
- "pop_est": 21669278,
- "gdp_md_est": 18940,
- "pop_year": -99,
- "lastcensus": 2007,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MZ",
- "iso_a3": "MOZ",
- "iso_n3": "508",
- "un_a3": "508",
- "wb_a2": "MZ",
- "wb_a3": "MOZ",
- "woe_id": -99,
- "adm0_a3_is": "MOZ",
- "adm0_a3_us": "MOZ",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1337,
- 1338,
- 1339,
- 1340,
- 1341,
- 1342,
- 1343,
- 1344
- ],
- [
- 1345
- ],
- [
- 1346
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Mauritania",
- "sov_a3": "MRT",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Mauritania",
- "adm0_a3": "MRT",
- "geou_dif": 0,
- "geounit": "Mauritania",
- "gu_a3": "MRT",
- "su_dif": 0,
- "subunit": "Mauritania",
- "su_a3": "MRT",
- "brk_diff": 0,
- "name": "Mauritania",
- "name_long": "Mauritania",
- "brk_a3": "MRT",
- "brk_name": "Mauritania",
- "brk_group": null,
- "abbrev": "Mrt.",
- "postal": "MR",
- "formal_en": "Islamic Republic of Mauritania",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Mauritania",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 3,
- "mapcolor9": 2,
- "mapcolor13": 1,
- "pop_est": 3129486,
- "gdp_md_est": 6308,
- "pop_year": -99,
- "lastcensus": 2000,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MR",
- "iso_a3": "MRT",
- "iso_n3": "478",
- "un_a3": "478",
- "wb_a2": "MR",
- "wb_a3": "MRT",
- "woe_id": -99,
- "adm0_a3_is": "MRT",
- "adm0_a3_us": "MRT",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1347
- ]
- ],
- [
- [
- 1348,
- 1349,
- 1350,
- -662,
- -1306
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "United Kingdom",
- "sov_a3": "GB1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Montserrat",
- "adm0_a3": "MSR",
- "geou_dif": 0,
- "geounit": "Montserrat",
- "gu_a3": "MSR",
- "su_dif": 0,
- "subunit": "Montserrat",
- "su_a3": "MSR",
- "brk_diff": 0,
- "name": "Montserrat",
- "name_long": "Montserrat",
- "brk_a3": "MSR",
- "brk_name": "Montserrat",
- "brk_group": null,
- "abbrev": "Monts.",
- "postal": "MS",
- "formal_en": null,
- "formal_fr": null,
- "note_adm0": "U.K.",
- "note_brk": null,
- "name_sort": "Montserrat",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 5097,
- "gdp_md_est": 29,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MS",
- "iso_a3": "MSR",
- "iso_n3": "500",
- "un_a3": "500",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "MSR",
- "adm0_a3_us": "MSR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 6,
- "tiny": 6,
- "homepart": -99
- },
- "arcs": [
- [
- 1351
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Mauritius",
- "sov_a3": "MUS",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Mauritius",
- "adm0_a3": "MUS",
- "geou_dif": 0,
- "geounit": "Mauritius",
- "gu_a3": "MUS",
- "su_dif": 0,
- "subunit": "Mauritius",
- "su_a3": "MUS",
- "brk_diff": 0,
- "name": "Mauritius",
- "name_long": "Mauritius",
- "brk_a3": "MUS",
- "brk_name": "Mauritius",
- "brk_group": null,
- "abbrev": "Mus.",
- "postal": "MU",
- "formal_en": "Republic of Mauritius",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Mauritius",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 3,
- "mapcolor9": 5,
- "mapcolor13": 7,
- "pop_est": 1284264,
- "gdp_md_est": 15270,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MU",
- "iso_a3": "MUS",
- "iso_n3": "480",
- "un_a3": "480",
- "wb_a2": "MU",
- "wb_a3": "MUS",
- "woe_id": -99,
- "adm0_a3_is": "MUS",
- "adm0_a3_us": "MUS",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Seven seas (open ocean)",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 9,
- "long_len": 9,
- "abbrev_len": 4,
- "tiny": 2,
- "homepart": 1
- },
- "arcs": [
- [
- 1352
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Malawi",
- "sov_a3": "MWI",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Malawi",
- "adm0_a3": "MWI",
- "geou_dif": 0,
- "geounit": "Malawi",
- "gu_a3": "MWI",
- "su_dif": 0,
- "subunit": "Malawi",
- "su_a3": "MWI",
- "brk_diff": 0,
- "name": "Malawi",
- "name_long": "Malawi",
- "brk_a3": "MWI",
- "brk_name": "Malawi",
- "brk_group": null,
- "abbrev": "Mal.",
- "postal": "MW",
- "formal_en": "Republic of Malawi",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Malawi",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 3,
- "mapcolor9": 4,
- "mapcolor13": 5,
- "pop_est": 14268711,
- "gdp_md_est": 11810,
- "pop_year": -99,
- "lastcensus": 2008,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MW",
- "iso_a3": "MWI",
- "iso_n3": "454",
- "un_a3": "454",
- "wb_a2": "MW",
- "wb_a3": "MWI",
- "woe_id": -99,
- "adm0_a3_is": "MWI",
- "adm0_a3_us": "MWI",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- -1347
- ]
- ],
- [
- [
- -1346
- ]
- ],
- [
- [
- -1343,
- 1353,
- 1354
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Malaysia",
- "sov_a3": "MYS",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Malaysia",
- "adm0_a3": "MYS",
- "geou_dif": 0,
- "geounit": "Malaysia",
- "gu_a3": "MYS",
- "su_dif": 0,
- "subunit": "Malaysia",
- "su_a3": "MYS",
- "brk_diff": 0,
- "name": "Malaysia",
- "name_long": "Malaysia",
- "brk_a3": "MYS",
- "brk_name": "Malaysia",
- "brk_group": null,
- "abbrev": "Malay.",
- "postal": "MY",
- "formal_en": "Malaysia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Malaysia",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 4,
- "mapcolor9": 3,
- "mapcolor13": 6,
- "pop_est": 25715819,
- "gdp_md_est": 384300,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "MY",
- "iso_a3": "MYS",
- "iso_n3": "458",
- "un_a3": "458",
- "wb_a2": "MY",
- "wb_a3": "MYS",
- "woe_id": -99,
- "adm0_a3_is": "MYS",
- "adm0_a3_us": "MYS",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "South-Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1355
- ]
- ],
- [
- [
- 1356
- ]
- ],
- [
- [
- 1357
- ]
- ],
- [
- [
- -1064,
- 1358
- ]
- ],
- [
- [
- 1359
- ]
- ],
- [
- [
- 1360
- ]
- ],
- [
- [
- 1361,
- 1362
- ]
- ],
- [
- [
- -1067,
- 1363,
- -325,
- -324,
- 1364
- ]
- ],
- [
- [
- 1365
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Namibia",
- "sov_a3": "NAM",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Namibia",
- "adm0_a3": "NAM",
- "geou_dif": 0,
- "geounit": "Namibia",
- "gu_a3": "NAM",
- "su_dif": 0,
- "subunit": "Namibia",
- "su_a3": "NAM",
- "brk_diff": 0,
- "name": "Namibia",
- "name_long": "Namibia",
- "brk_a3": "NAM",
- "brk_name": "Namibia",
- "brk_group": null,
- "abbrev": "Nam.",
- "postal": "NA",
- "formal_en": "Republic of Namibia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Namibia",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 1,
- "mapcolor9": 1,
- "mapcolor13": 7,
- "pop_est": 2108665,
- "gdp_md_est": 13250,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "NA",
- "iso_a3": "NAM",
- "iso_n3": "516",
- "un_a3": "516",
- "wb_a2": "NA",
- "wb_a3": "NAM",
- "woe_id": -99,
- "adm0_a3_is": "NAM",
- "adm0_a3_us": "NAM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Southern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1366,
- -331,
- 1367,
- 1368,
- -10
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "France",
- "sov_a3": "FR1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "New Caledonia",
- "adm0_a3": "NCL",
- "geou_dif": 0,
- "geounit": "New Caledonia",
- "gu_a3": "NCL",
- "su_dif": 0,
- "subunit": "New Caledonia",
- "su_a3": "NCL",
- "brk_diff": 0,
- "name": "New Caledonia",
- "name_long": "New Caledonia",
- "brk_a3": "NCL",
- "brk_name": "New Caledonia",
- "brk_group": null,
- "abbrev": "New C.",
- "postal": "NC",
- "formal_en": "New Caledonia",
- "formal_fr": "Nouvelle-Calédonie",
- "note_adm0": "Fr.",
- "note_brk": null,
- "name_sort": "New Caledonia",
- "name_alt": null,
- "mapcolor7": 7,
- "mapcolor8": 5,
- "mapcolor9": 9,
- "mapcolor13": 11,
- "pop_est": 227436,
- "gdp_md_est": 3158,
- "pop_year": -99,
- "lastcensus": 2009,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "NC",
- "iso_a3": "NCL",
- "iso_n3": "540",
- "un_a3": "540",
- "wb_a2": "NC",
- "wb_a3": "NCL",
- "woe_id": -99,
- "adm0_a3_is": "NCL",
- "adm0_a3_us": "NCL",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Melanesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 13,
- "long_len": 13,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 1369
- ]
- ],
- [
- [
- 1370
- ]
- ],
- [
- [
- 1371
- ]
- ],
- [
- [
- 1372
- ]
- ],
- [
- [
- 1373
- ]
- ],
- [
- [
- 1374
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Niger",
- "sov_a3": "NER",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Niger",
- "adm0_a3": "NER",
- "geou_dif": 0,
- "geounit": "Niger",
- "gu_a3": "NER",
- "su_dif": 0,
- "subunit": "Niger",
- "su_a3": "NER",
- "brk_diff": 0,
- "name": "Niger",
- "name_long": "Niger",
- "brk_a3": "NER",
- "brk_name": "Niger",
- "brk_group": null,
- "abbrev": "Niger",
- "postal": "NE",
- "formal_en": "Republic of Niger",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Niger",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 5,
- "mapcolor9": 3,
- "mapcolor13": 13,
- "pop_est": 15306252,
- "gdp_md_est": 10040,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "NE",
- "iso_a3": "NER",
- "iso_n3": "562",
- "un_a3": "562",
- "wb_a2": "NE",
- "wb_a3": "NER",
- "woe_id": -99,
- "adm0_a3_is": "NER",
- "adm0_a3_us": "NER",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1375,
- 1376,
- -239,
- -240,
- -1304,
- -660,
- -1251
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 5,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Australia",
- "sov_a3": "AU1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Norfolk Island",
- "adm0_a3": "NFK",
- "geou_dif": 0,
- "geounit": "Norfolk Island",
- "gu_a3": "NFK",
- "su_dif": 0,
- "subunit": "Norfolk Island",
- "su_a3": "NFK",
- "brk_diff": 0,
- "name": "Norfolk Island",
- "name_long": "Norfolk Island",
- "brk_a3": "NFK",
- "brk_name": "Norfolk Island",
- "brk_group": null,
- "abbrev": "Nfk. I.",
- "postal": "NF",
- "formal_en": "Territory of Norfolk Island",
- "formal_fr": null,
- "note_adm0": "Auz.",
- "note_brk": null,
- "name_sort": "Norfolk Island",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 2,
- "mapcolor9": 2,
- "mapcolor13": 7,
- "pop_est": 2141,
- "gdp_md_est": 32.115,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "NF",
- "iso_a3": "NFK",
- "iso_n3": "574",
- "un_a3": "574",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "NFK",
- "adm0_a3_us": "NFK",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Australia and New Zealand",
- "region_wb": "East Asia & Pacific",
- "name_len": 14,
- "long_len": 14,
- "abbrev_len": 7,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- 1377
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Nigeria",
- "sov_a3": "NGA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Nigeria",
- "adm0_a3": "NGA",
- "geou_dif": 0,
- "geounit": "Nigeria",
- "gu_a3": "NGA",
- "su_dif": 0,
- "subunit": "Nigeria",
- "su_a3": "NGA",
- "brk_diff": 0,
- "name": "Nigeria",
- "name_long": "Nigeria",
- "brk_a3": "NGA",
- "brk_name": "Nigeria",
- "brk_group": null,
- "abbrev": "Nigeria",
- "postal": "NG",
- "formal_en": "Federal Republic of Nigeria",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Nigeria",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 2,
- "mapcolor9": 5,
- "mapcolor13": 2,
- "pop_est": 149229090,
- "gdp_md_est": 335400,
- "pop_year": -99,
- "lastcensus": 2006,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "NG",
- "iso_a3": "NGA",
- "iso_n3": "566",
- "un_a3": "566",
- "wb_a2": "NG",
- "wb_a3": "NGA",
- "woe_id": -99,
- "adm0_a3_is": "NGA",
- "adm0_a3_us": "NGA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 7,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1378
- ]
- ],
- [
- [
- 1379,
- -575,
- 1380,
- -235,
- -1377
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Nicaragua",
- "sov_a3": "NIC",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Nicaragua",
- "adm0_a3": "NIC",
- "geou_dif": 0,
- "geounit": "Nicaragua",
- "gu_a3": "NIC",
- "su_dif": 0,
- "subunit": "Nicaragua",
- "su_a3": "NIC",
- "brk_diff": 0,
- "name": "Nicaragua",
- "name_long": "Nicaragua",
- "brk_a3": "NIC",
- "brk_name": "Nicaragua",
- "brk_group": null,
- "abbrev": "Nic.",
- "postal": "NI",
- "formal_en": "Republic of Nicaragua",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Nicaragua",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 1,
- "mapcolor13": 9,
- "pop_est": 5891199,
- "gdp_md_est": 16790,
- "pop_year": -99,
- "lastcensus": 2005,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "NI",
- "iso_a3": "NIC",
- "iso_n3": "558",
- "un_a3": "558",
- "wb_a2": "NI",
- "wb_a3": "NIC",
- "woe_id": -99,
- "adm0_a3_is": "NIC",
- "adm0_a3_us": "NIC",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Central America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 9,
- "long_len": 9,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1381,
- -608,
- 1382,
- -900
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "New Zealand",
- "sov_a3": "NZ1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Niue",
- "adm0_a3": "NIU",
- "geou_dif": 0,
- "geounit": "Niue",
- "gu_a3": "NIU",
- "su_dif": 0,
- "subunit": "Niue",
- "su_a3": "NIU",
- "brk_diff": 0,
- "name": "Niue",
- "name_long": "Niue",
- "brk_a3": "NIU",
- "brk_name": "Niue",
- "brk_group": null,
- "abbrev": "Niue",
- "postal": "NU",
- "formal_en": null,
- "formal_fr": null,
- "note_adm0": "Assoc. with N.Z.",
- "note_brk": null,
- "name_sort": "Niue",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 3,
- "mapcolor9": 4,
- "mapcolor13": 4,
- "pop_est": 1398,
- "gdp_md_est": 10.01,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "NU",
- "iso_a3": "NIU",
- "iso_n3": "570",
- "un_a3": "570",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "NIU",
- "adm0_a3_us": "NIU",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Polynesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 4,
- "long_len": 4,
- "abbrev_len": 4,
- "tiny": 3,
- "homepart": -99
- },
- "arcs": [
- [
- 1383
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Netherlands",
- "sov_a3": "NL1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "Netherlands",
- "adm0_a3": "NLD",
- "geou_dif": 0,
- "geounit": "Netherlands",
- "gu_a3": "NLD",
- "su_dif": 0,
- "subunit": "Netherlands",
- "su_a3": "NLD",
- "brk_diff": 0,
- "name": "Netherlands",
- "name_long": "Netherlands",
- "brk_a3": "NLD",
- "brk_name": "Netherlands",
- "brk_group": null,
- "abbrev": "Neth.",
- "postal": "NL",
- "formal_en": "Kingdom of the Netherlands",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Netherlands",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 2,
- "mapcolor9": 2,
- "mapcolor13": 9,
- "pop_est": 16715999,
- "gdp_md_est": 672000,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "NL",
- "iso_a3": "NLD",
- "iso_n3": "528",
- "un_a3": "528",
- "wb_a2": "NL",
- "wb_a3": "NLD",
- "woe_id": -99,
- "adm0_a3_is": "NLD",
- "adm0_a3_us": "NLD",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Western Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 11,
- "long_len": 11,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1384
- ]
- ],
- [
- [
- 1385
- ]
- ],
- [
- [
- -233,
- 1386
- ]
- ],
- [
- [
- 1387
- ]
- ],
- [
- [
- 1388
- ]
- ],
- [
- [
- 1389
- ]
- ],
- [
- [
- 1390,
- -635,
- 1391,
- -234
- ]
- ],
- [
- [
- 1392
- ]
- ],
- [
- [
- 1393
- ]
- ],
- [
- [
- 1394
- ]
- ],
- [
- [
- 1395
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Norway",
- "sov_a3": "NOR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Norway",
- "adm0_a3": "NOR",
- "geou_dif": 0,
- "geounit": "Norway",
- "gu_a3": "NOR",
- "su_dif": 0,
- "subunit": "Norway",
- "su_a3": "NOR",
- "brk_diff": 0,
- "name": "Norway",
- "name_long": "Norway",
- "brk_a3": "NOR",
- "brk_name": "Norway",
- "brk_group": null,
- "abbrev": "Nor.",
- "postal": "N",
- "formal_en": "Kingdom of Norway",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Norway",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 3,
- "mapcolor9": 8,
- "mapcolor13": 12,
- "pop_est": 4676305,
- "gdp_md_est": 276400,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "NO",
- "iso_a3": "NOR",
- "iso_n3": "578",
- "un_a3": "578",
- "wb_a2": "NO",
- "wb_a3": "NOR",
- "woe_id": -99,
- "adm0_a3_is": "NOR",
- "adm0_a3_us": "NOR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Northern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1396
- ]
- ],
- [
- [
- 1397
- ]
- ],
- [
- [
- 1398
- ]
- ],
- [
- [
- 1399
- ]
- ],
- [
- [
- 1400
- ]
- ],
- [
- [
- 1401
- ]
- ],
- [
- [
- 1402
- ]
- ],
- [
- [
- 1403
- ]
- ],
- [
- [
- 1404
- ]
- ],
- [
- [
- 1405
- ]
- ],
- [
- [
- 1406
- ]
- ],
- [
- [
- 1407
- ]
- ],
- [
- [
- 1408
- ]
- ],
- [
- [
- 1409
- ]
- ],
- [
- [
- 1410
- ]
- ],
- [
- [
- 1411
- ]
- ],
- [
- [
- 1412
- ]
- ],
- [
- [
- 1413
- ]
- ],
- [
- [
- 1414
- ]
- ],
- [
- [
- 1415
- ]
- ],
- [
- [
- 1416,
- -724,
- 1417,
- 1418
- ]
- ],
- [
- [
- 1419
- ]
- ],
- [
- [
- 1420
- ]
- ],
- [
- [
- 1421
- ]
- ],
- [
- [
- 1422
- ]
- ],
- [
- [
- 1423
- ]
- ],
- [
- [
- 1424
- ]
- ],
- [
- [
- 1425
- ]
- ],
- [
- [
- 1426
- ]
- ],
- [
- [
- 1427
- ]
- ],
- [
- [
- 1428
- ]
- ],
- [
- [
- 1429
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Nepal",
- "sov_a3": "NPL",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Nepal",
- "adm0_a3": "NPL",
- "geou_dif": 0,
- "geounit": "Nepal",
- "gu_a3": "NPL",
- "su_dif": 0,
- "subunit": "Nepal",
- "su_a3": "NPL",
- "brk_diff": 0,
- "name": "Nepal",
- "name_long": "Nepal",
- "brk_a3": "NPL",
- "brk_name": "Nepal",
- "brk_group": null,
- "abbrev": "Nepal",
- "postal": "NP",
- "formal_en": "Nepal",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Nepal",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 2,
- "mapcolor9": 3,
- "mapcolor13": 12,
- "pop_est": 28563377,
- "gdp_md_est": 31080,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "NP",
- "iso_a3": "NPL",
- "iso_n3": "524",
- "un_a3": "524",
- "wb_a2": "NP",
- "wb_a3": "NPL",
- "woe_id": -99,
- "adm0_a3_is": "NPL",
- "adm0_a3_us": "NPL",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Southern Asia",
- "region_wb": "South Asia",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -1088,
- -543
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Nauru",
- "sov_a3": "NRU",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Nauru",
- "adm0_a3": "NRU",
- "geou_dif": 0,
- "geounit": "Nauru",
- "gu_a3": "NRU",
- "su_dif": 0,
- "subunit": "Nauru",
- "su_a3": "NRU",
- "brk_diff": 0,
- "name": "Nauru",
- "name_long": "Nauru",
- "brk_a3": "NRU",
- "brk_name": "Nauru",
- "brk_group": null,
- "abbrev": "Nauru",
- "postal": "NR",
- "formal_en": "Republic of Nauru",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Nauru",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 7,
- "mapcolor9": 6,
- "mapcolor13": 9,
- "pop_est": 14019,
- "gdp_md_est": 60,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "NR",
- "iso_a3": "NRU",
- "iso_n3": "520",
- "un_a3": "520",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "NRU",
- "adm0_a3_us": "NRU",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Micronesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": 3,
- "homepart": 1
- },
- "arcs": [
- [
- 1430
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "New Zealand",
- "sov_a3": "NZ1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "New Zealand",
- "adm0_a3": "NZL",
- "geou_dif": 0,
- "geounit": "New Zealand",
- "gu_a3": "NZL",
- "su_dif": 0,
- "subunit": "New Zealand",
- "su_a3": "NZL",
- "brk_diff": 0,
- "name": "New Zealand",
- "name_long": "New Zealand",
- "brk_a3": "NZL",
- "brk_name": "New Zealand",
- "brk_group": null,
- "abbrev": "N.Z.",
- "postal": "NZ",
- "formal_en": "New Zealand",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "New Zealand",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 3,
- "mapcolor9": 4,
- "mapcolor13": 4,
- "pop_est": 4213418,
- "gdp_md_est": 116700,
- "pop_year": -99,
- "lastcensus": 2006,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "NZ",
- "iso_a3": "NZL",
- "iso_n3": "554",
- "un_a3": "554",
- "wb_a2": "NZ",
- "wb_a3": "NZL",
- "woe_id": -99,
- "adm0_a3_is": "NZL",
- "adm0_a3_us": "NZL",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Australia and New Zealand",
- "region_wb": "East Asia & Pacific",
- "name_len": 11,
- "long_len": 11,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1431
- ]
- ],
- [
- [
- 1432
- ]
- ],
- [
- [
- 1433
- ]
- ],
- [
- [
- 1434
- ]
- ],
- [
- [
- 1435
- ]
- ],
- [
- [
- 1436
- ]
- ],
- [
- [
- 1437
- ]
- ],
- [
- [
- 1438
- ]
- ],
- [
- [
- 1439
- ]
- ],
- [
- [
- 1440
- ]
- ],
- [
- [
- 1441
- ]
- ],
- [
- [
- 1442
- ]
- ],
- [
- [
- 1443
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Oman",
- "sov_a3": "OMN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Oman",
- "adm0_a3": "OMN",
- "geou_dif": 0,
- "geounit": "Oman",
- "gu_a3": "OMN",
- "su_dif": 0,
- "subunit": "Oman",
- "su_a3": "OMN",
- "brk_diff": 0,
- "name": "Oman",
- "name_long": "Oman",
- "brk_a3": "OMN",
- "brk_name": "Oman",
- "brk_group": null,
- "abbrev": "Oman",
- "postal": "OM",
- "formal_en": "Sultanate of Oman",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Oman",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 1,
- "mapcolor13": 6,
- "pop_est": 3418085,
- "gdp_md_est": 66980,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "OM",
- "iso_a3": "OMN",
- "iso_n3": "512",
- "un_a3": "512",
- "wb_a2": "OM",
- "wb_a3": "OMN",
- "woe_id": -99,
- "adm0_a3_is": "OMN",
- "adm0_a3_us": "OMN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Middle East & North Africa",
- "name_len": 4,
- "long_len": 4,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1444
- ]
- ],
- [
- [
- 1445,
- 1446,
- 1447,
- -32
- ]
- ],
- [
- [
- -36
- ]
- ],
- [
- [
- -35,
- 1448
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Pakistan",
- "sov_a3": "PAK",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Pakistan",
- "adm0_a3": "PAK",
- "geou_dif": 0,
- "geounit": "Pakistan",
- "gu_a3": "PAK",
- "su_dif": 0,
- "subunit": "Pakistan",
- "su_a3": "PAK",
- "brk_diff": 0,
- "name": "Pakistan",
- "name_long": "Pakistan",
- "brk_a3": "PAK",
- "brk_name": "Pakistan",
- "brk_group": null,
- "abbrev": "Pak.",
- "postal": "PK",
- "formal_en": "Islamic Republic of Pakistan",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Pakistan",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 2,
- "mapcolor9": 3,
- "mapcolor13": 11,
- "pop_est": 176242949,
- "gdp_md_est": 427300,
- "pop_year": -99,
- "lastcensus": 1998,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "PK",
- "iso_a3": "PAK",
- "iso_n3": "586",
- "un_a3": "586",
- "wb_a2": "PK",
- "wb_a3": "PAK",
- "woe_id": -99,
- "adm0_a3_is": "PAK",
- "adm0_a3_us": "PAK",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Southern Asia",
- "region_wb": "South Asia",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -1175,
- -1091,
- 1449,
- -1106,
- -3,
- -557
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Panama",
- "sov_a3": "PAN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Panama",
- "adm0_a3": "PAN",
- "geou_dif": 0,
- "geounit": "Panama",
- "gu_a3": "PAN",
- "su_dif": 0,
- "subunit": "Panama",
- "su_a3": "PAN",
- "brk_diff": 0,
- "name": "Panama",
- "name_long": "Panama",
- "brk_a3": "PAN",
- "brk_name": "Panama",
- "brk_group": null,
- "abbrev": "Pan.",
- "postal": "PA",
- "formal_en": "Republic of Panama",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Panama",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 4,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 3360474,
- "gdp_md_est": 38830,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "PA",
- "iso_a3": "PAN",
- "iso_n3": "591",
- "un_a3": "591",
- "wb_a2": "PA",
- "wb_a3": "PAN",
- "woe_id": -99,
- "adm0_a3_is": "PAN",
- "adm0_a3_us": "PAN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Central America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1450
- ]
- ],
- [
- [
- 1451
- ]
- ],
- [
- [
- 1452
- ]
- ],
- [
- [
- 1453
- ]
- ],
- [
- [
- -592,
- 1454,
- -606,
- 1455
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "United Kingdom",
- "sov_a3": "GB1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Pitcairn Islands",
- "adm0_a3": "PCN",
- "geou_dif": 0,
- "geounit": "Pitcairn Islands",
- "gu_a3": "PCN",
- "su_dif": 0,
- "subunit": "Pitcairn Islands",
- "su_a3": "PCN",
- "brk_diff": 0,
- "name": "Pitcairn Is.",
- "name_long": "Pitcairn Islands",
- "brk_a3": "PCN",
- "brk_name": "Pitcairn Is.",
- "brk_group": null,
- "abbrev": "Pit. Is.",
- "postal": "PN",
- "formal_en": "Pitcairn, Henderson, Ducie and Oeno Islands",
- "formal_fr": null,
- "note_adm0": "U.K.",
- "note_brk": null,
- "name_sort": "Pitcairn Islands",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 48,
- "gdp_md_est": 0.72,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "PN",
- "iso_a3": "PCN",
- "iso_n3": "612",
- "un_a3": "612",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "PCN",
- "adm0_a3_us": "PCN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Polynesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 12,
- "long_len": 16,
- "abbrev_len": 8,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- 1456
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Peru",
- "sov_a3": "PER",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Peru",
- "adm0_a3": "PER",
- "geou_dif": 0,
- "geounit": "Peru",
- "gu_a3": "PER",
- "su_dif": 0,
- "subunit": "Peru",
- "su_a3": "PER",
- "brk_diff": 0,
- "name": "Peru",
- "name_long": "Peru",
- "brk_a3": "PER",
- "brk_name": "Peru",
- "brk_group": null,
- "abbrev": "Peru",
- "postal": "PE",
- "formal_en": "Republic of Peru",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Peru",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 4,
- "mapcolor9": 4,
- "mapcolor13": 11,
- "pop_est": 29546963,
- "gdp_md_est": 247300,
- "pop_year": -99,
- "lastcensus": 2007,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "PE",
- "iso_a3": "PER",
- "iso_n3": "604",
- "un_a3": "604",
- "wb_a2": "PE",
- "wb_a3": "PER",
- "woe_id": -99,
- "adm0_a3_is": "PER",
- "adm0_a3_us": "PER",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "South America",
- "region_un": "Americas",
- "subregion": "South America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 4,
- "long_len": 4,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -318,
- -295,
- -519,
- 1457,
- -674,
- -589
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Philippines",
- "sov_a3": "PHL",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Philippines",
- "adm0_a3": "PHL",
- "geou_dif": 0,
- "geounit": "Philippines",
- "gu_a3": "PHL",
- "su_dif": 0,
- "subunit": "Philippines",
- "su_a3": "PHL",
- "brk_diff": 0,
- "name": "Philippines",
- "name_long": "Philippines",
- "brk_a3": "PHL",
- "brk_name": "Philippines",
- "brk_group": null,
- "abbrev": "Phil.",
- "postal": "PH",
- "formal_en": "Republic of the Philippines",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Philippines",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 2,
- "mapcolor9": 2,
- "mapcolor13": 8,
- "pop_est": 97976603,
- "gdp_md_est": 317500,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "PH",
- "iso_a3": "PHL",
- "iso_n3": "608",
- "un_a3": "608",
- "wb_a2": "PH",
- "wb_a3": "PHL",
- "woe_id": -99,
- "adm0_a3_is": "PHL",
- "adm0_a3_us": "PHL",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "South-Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 11,
- "long_len": 11,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1458
- ]
- ],
- [
- [
- 1459
- ]
- ],
- [
- [
- 1460
- ]
- ],
- [
- [
- 1461
- ]
- ],
- [
- [
- 1462
- ]
- ],
- [
- [
- 1463
- ]
- ],
- [
- [
- 1464
- ]
- ],
- [
- [
- 1465
- ]
- ],
- [
- [
- 1466
- ]
- ],
- [
- [
- 1467
- ]
- ],
- [
- [
- 1468
- ]
- ],
- [
- [
- 1469
- ]
- ],
- [
- [
- 1470
- ]
- ],
- [
- [
- 1471
- ]
- ],
- [
- [
- 1472
- ]
- ],
- [
- [
- 1473
- ]
- ],
- [
- [
- 1474
- ]
- ],
- [
- [
- 1475
- ]
- ],
- [
- [
- 1476
- ]
- ],
- [
- [
- 1477
- ]
- ],
- [
- [
- 1478
- ]
- ],
- [
- [
- 1479
- ]
- ],
- [
- [
- 1480
- ]
- ],
- [
- [
- 1481
- ]
- ],
- [
- [
- 1482
- ]
- ],
- [
- [
- 1483
- ]
- ],
- [
- [
- 1484
- ]
- ],
- [
- [
- 1485
- ]
- ],
- [
- [
- 1486
- ]
- ],
- [
- [
- 1487
- ]
- ],
- [
- [
- 1488
- ]
- ],
- [
- [
- 1489
- ]
- ],
- [
- [
- 1490
- ]
- ],
- [
- [
- 1491
- ]
- ],
- [
- [
- 1492
- ]
- ],
- [
- [
- 1493
- ]
- ],
- [
- [
- 1494
- ]
- ],
- [
- [
- 1495
- ]
- ],
- [
- [
- 1496
- ]
- ],
- [
- [
- 1497
- ]
- ],
- [
- [
- 1498
- ]
- ],
- [
- [
- 1499
- ]
- ],
- [
- [
- 1500
- ]
- ],
- [
- [
- 1501
- ]
- ],
- [
- [
- 1502
- ]
- ],
- [
- [
- 1503
- ]
- ],
- [
- [
- 1504
- ]
- ],
- [
- [
- 1505
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Palau",
- "sov_a3": "PLW",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Palau",
- "adm0_a3": "PLW",
- "geou_dif": 0,
- "geounit": "Palau",
- "gu_a3": "PLW",
- "su_dif": 0,
- "subunit": "Palau",
- "su_a3": "PLW",
- "brk_diff": 0,
- "name": "Palau",
- "name_long": "Palau",
- "brk_a3": "PLW",
- "brk_name": "Palau",
- "brk_group": null,
- "abbrev": "Palau",
- "postal": "PW",
- "formal_en": "Republic of Palau",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Palau",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 5,
- "mapcolor9": 1,
- "mapcolor13": 12,
- "pop_est": 20796,
- "gdp_md_est": 164,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "PW",
- "iso_a3": "PLW",
- "iso_n3": "585",
- "un_a3": "585",
- "wb_a2": "PW",
- "wb_a3": "PLW",
- "woe_id": -99,
- "adm0_a3_is": "PLW",
- "adm0_a3_us": "PLW",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Micronesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": 2,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1506
- ]
- ],
- [
- [
- 1507
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Papua New Guinea",
- "sov_a3": "PNG",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Papua New Guinea",
- "adm0_a3": "PNG",
- "geou_dif": 0,
- "geounit": "Papua New Guinea",
- "gu_a3": "PNG",
- "su_dif": 1,
- "subunit": "Papua New Guinea",
- "su_a3": "PN1",
- "brk_diff": 0,
- "name": "Papua New Guinea",
- "name_long": "Papua New Guinea",
- "brk_a3": "PN1",
- "brk_name": "Papua New Guinea",
- "brk_group": null,
- "abbrev": "P.N.G.",
- "postal": "PG",
- "formal_en": "Independent State of Papua New Guinea",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Papua New Guinea",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 2,
- "mapcolor9": 3,
- "mapcolor13": 1,
- "pop_est": 6057263,
- "gdp_md_est": 13210,
- "pop_year": -99,
- "lastcensus": 2000,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "PG",
- "iso_a3": "PNG",
- "iso_n3": "598",
- "un_a3": "598",
- "wb_a2": "PG",
- "wb_a3": "PNG",
- "woe_id": -99,
- "adm0_a3_is": "PNG",
- "adm0_a3_us": "PNG",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Melanesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 16,
- "long_len": 16,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1508
- ]
- ],
- [
- [
- 1509
- ]
- ],
- [
- [
- 1510
- ]
- ],
- [
- [
- 1511
- ]
- ],
- [
- [
- 1512
- ]
- ],
- [
- [
- 1513
- ]
- ],
- [
- [
- 1514
- ]
- ],
- [
- [
- 1515
- ]
- ],
- [
- [
- 1516
- ]
- ],
- [
- [
- 1517
- ]
- ],
- [
- [
- 1518
- ]
- ],
- [
- [
- 1519
- ]
- ],
- [
- [
- 1520
- ]
- ],
- [
- [
- 1521
- ]
- ],
- [
- [
- 1522
- ]
- ],
- [
- [
- 1523
- ]
- ],
- [
- [
- 1524
- ]
- ],
- [
- [
- 1525
- ]
- ],
- [
- [
- 1526
- ]
- ],
- [
- [
- 1527
- ]
- ],
- [
- [
- -1023,
- 1528,
- 1529
- ]
- ],
- [
- [
- 1530
- ]
- ],
- [
- [
- 1531
- ]
- ],
- [
- [
- 1532
- ]
- ],
- [
- [
- 1533
- ]
- ],
- [
- [
- 1534
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Poland",
- "sov_a3": "POL",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Poland",
- "adm0_a3": "POL",
- "geou_dif": 0,
- "geounit": "Poland",
- "gu_a3": "POL",
- "su_dif": 0,
- "subunit": "Poland",
- "su_a3": "POL",
- "brk_diff": 0,
- "name": "Poland",
- "name_long": "Poland",
- "brk_a3": "POL",
- "brk_name": "Poland",
- "brk_group": null,
- "abbrev": "Pol.",
- "postal": "PL",
- "formal_en": "Republic of Poland",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Poland",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 7,
- "mapcolor9": 1,
- "mapcolor13": 2,
- "pop_est": 38482919,
- "gdp_md_est": 667900,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "PL",
- "iso_a3": "POL",
- "iso_n3": "616",
- "un_a3": "616",
- "wb_a2": "PL",
- "wb_a3": "POL",
- "woe_id": -99,
- "adm0_a3_is": "POL",
- "adm0_a3_us": "POL",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Eastern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1535,
- -1261,
- -284,
- 1536,
- 1537,
- -623,
- -632,
- 1538,
- -627,
- 1539
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "United States of America",
- "sov_a3": "US1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Puerto Rico",
- "adm0_a3": "PRI",
- "geou_dif": 0,
- "geounit": "Puerto Rico",
- "gu_a3": "PRI",
- "su_dif": 0,
- "subunit": "Puerto Rico",
- "su_a3": "PRI",
- "brk_diff": 0,
- "name": "Puerto Rico",
- "name_long": "Puerto Rico",
- "brk_a3": "PRI",
- "brk_name": "Puerto Rico",
- "brk_group": null,
- "abbrev": "P.R.",
- "postal": "PR",
- "formal_en": "Commonwealth of Puerto Rico",
- "formal_fr": null,
- "note_adm0": "Commonwealth of U.S.A.",
- "note_brk": null,
- "name_sort": "Puerto Rico",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 5,
- "mapcolor9": 1,
- "mapcolor13": 1,
- "pop_est": 3971020,
- "gdp_md_est": 70230,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "PR",
- "iso_a3": "PRI",
- "iso_n3": "630",
- "un_a3": "630",
- "wb_a2": "PR",
- "wb_a3": "PRI",
- "woe_id": -99,
- "adm0_a3_is": "PRI",
- "adm0_a3_us": "PRI",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 11,
- "long_len": 11,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 1540
- ]
- ],
- [
- [
- 1541
- ]
- ],
- [
- [
- 1542
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "North Korea",
- "sov_a3": "PRK",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "North Korea",
- "adm0_a3": "PRK",
- "geou_dif": 0,
- "geounit": "North Korea",
- "gu_a3": "PRK",
- "su_dif": 0,
- "subunit": "North Korea",
- "su_a3": "PRK",
- "brk_diff": 0,
- "name": "Dem. Rep. Korea",
- "name_long": "Dem. Rep. Korea",
- "brk_a3": "PRK",
- "brk_name": "Dem. Rep. Korea",
- "brk_group": null,
- "abbrev": "N.K.",
- "postal": "KP",
- "formal_en": "Democratic People's Republic of Korea",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Korea, Dem. Rep.",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 5,
- "mapcolor9": 3,
- "mapcolor13": 9,
- "pop_est": 22665345,
- "gdp_md_est": 40000,
- "pop_year": -99,
- "lastcensus": 2009,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "KP",
- "iso_a3": "PRK",
- "iso_n3": "408",
- "un_a3": "408",
- "wb_a2": "KP",
- "wb_a3": "PRK",
- "woe_id": -99,
- "adm0_a3_is": "PRK",
- "adm0_a3_us": "PRK",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 15,
- "long_len": 15,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1543
- ]
- ],
- [
- [
- 1544,
- 1545,
- -1233,
- 1546,
- -532
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Portugal",
- "sov_a3": "PRT",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Portugal",
- "adm0_a3": "PRT",
- "geou_dif": 0,
- "geounit": "Portugal",
- "gu_a3": "PRT",
- "su_dif": 1,
- "subunit": "Portugal",
- "su_a3": "PR1",
- "brk_diff": 0,
- "name": "Portugal",
- "name_long": "Portugal",
- "brk_a3": "PR1",
- "brk_name": "Portugal",
- "brk_group": null,
- "abbrev": "Port.",
- "postal": "P",
- "formal_en": "Portuguese Republic",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Portugal",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 7,
- "mapcolor9": 1,
- "mapcolor13": 4,
- "pop_est": 10707924,
- "gdp_md_est": 208627,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": 0,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "PT",
- "iso_a3": "PRT",
- "iso_n3": "620",
- "un_a3": "620",
- "wb_a2": "PT",
- "wb_a3": "PRT",
- "woe_id": -99,
- "adm0_a3_is": "PRT",
- "adm0_a3_us": "PRT",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Southern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1547
- ]
- ],
- [
- [
- 1548
- ]
- ],
- [
- [
- 1549
- ]
- ],
- [
- [
- 1550
- ]
- ],
- [
- [
- 1551
- ]
- ],
- [
- [
- 1552
- ]
- ],
- [
- [
- 1553
- ]
- ],
- [
- [
- 1554
- ]
- ],
- [
- [
- 1555,
- -701
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Paraguay",
- "sov_a3": "PRY",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Paraguay",
- "adm0_a3": "PRY",
- "geou_dif": 0,
- "geounit": "Paraguay",
- "gu_a3": "PRY",
- "su_dif": 0,
- "subunit": "Paraguay",
- "su_a3": "PRY",
- "brk_diff": 0,
- "name": "Paraguay",
- "name_long": "Paraguay",
- "brk_a3": "PRY",
- "brk_name": "Paraguay",
- "brk_group": null,
- "abbrev": "Para.",
- "postal": "PY",
- "formal_en": "Republic of Paraguay",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Paraguay",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 3,
- "mapcolor9": 6,
- "mapcolor13": 2,
- "pop_est": 6995655,
- "gdp_md_est": 28890,
- "pop_year": -99,
- "lastcensus": 2002,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "PY",
- "iso_a3": "PRY",
- "iso_n3": "600",
- "un_a3": "600",
- "wb_a2": "PY",
- "wb_a3": "PRY",
- "woe_id": -99,
- "adm0_a3_is": "PRY",
- "adm0_a3_us": "PRY",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "South America",
- "region_un": "Americas",
- "subregion": "South America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -317,
- -41,
- -293
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Israel",
- "sov_a3": "ISR",
- "adm0_dif": 1,
- "level": 2,
- "type": "Disputed",
- "admin": "Palestine",
- "adm0_a3": "PSX",
- "geou_dif": 0,
- "geounit": "Palestine",
- "gu_a3": "PSX",
- "su_dif": 0,
- "subunit": "Palestine",
- "su_a3": "PSX",
- "brk_diff": 0,
- "name": "Palestine",
- "name_long": "Palestine",
- "brk_a3": "PSX",
- "brk_name": "Palestine",
- "brk_group": null,
- "abbrev": "Pal.",
- "postal": "PAL",
- "formal_en": "West Bank and Gaza",
- "formal_fr": null,
- "note_adm0": "Partial self-admin.",
- "note_brk": "Partial self-admin.",
- "name_sort": "Palestine (West Bank and Gaza)",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 2,
- "mapcolor9": 5,
- "mapcolor13": 8,
- "pop_est": 4119083,
- "gdp_md_est": 11950.77,
- "pop_year": -99,
- "lastcensus": 2007,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "PS",
- "iso_a3": "PSE",
- "iso_n3": "275",
- "un_a3": "275",
- "wb_a2": "GZ",
- "wb_a3": "WBG",
- "woe_id": -99,
- "adm0_a3_is": "PSE",
- "adm0_a3_us": "PSX",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Middle East & North Africa",
- "name_len": 9,
- "long_len": 9,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- [
- -676,
- 1556,
- -1121
- ]
- ],
- [
- [
- -1118,
- -1139
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "France",
- "sov_a3": "FR1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "French Polynesia",
- "adm0_a3": "PYF",
- "geou_dif": 0,
- "geounit": "French Polynesia",
- "gu_a3": "PYF",
- "su_dif": 0,
- "subunit": "French Polynesia",
- "su_a3": "PYF",
- "brk_diff": 0,
- "name": "Fr. Polynesia",
- "name_long": "French Polynesia",
- "brk_a3": "PYF",
- "brk_name": "Fr. Polynesia",
- "brk_group": null,
- "abbrev": "Fr. Poly.",
- "postal": "PF",
- "formal_en": "French Polynesia",
- "formal_fr": null,
- "note_adm0": "Fr.",
- "note_brk": null,
- "name_sort": "French Polynesia",
- "name_alt": null,
- "mapcolor7": 7,
- "mapcolor8": 5,
- "mapcolor9": 9,
- "mapcolor13": 11,
- "pop_est": 287032,
- "gdp_md_est": 4718,
- "pop_year": -99,
- "lastcensus": 2007,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "PF",
- "iso_a3": "PYF",
- "iso_n3": "258",
- "un_a3": "258",
- "wb_a2": "PF",
- "wb_a3": "PYF",
- "woe_id": -99,
- "adm0_a3_is": "PYF",
- "adm0_a3_us": "PYF",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Polynesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 13,
- "long_len": 16,
- "abbrev_len": 9,
- "tiny": 2,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 1557
- ]
- ],
- [
- [
- 1558
- ]
- ],
- [
- [
- 1559
- ]
- ],
- [
- [
- 1560
- ]
- ],
- [
- [
- 1561
- ]
- ],
- [
- [
- 1562
- ]
- ],
- [
- [
- 1563
- ]
- ],
- [
- [
- 1564
- ]
- ],
- [
- [
- 1565
- ]
- ],
- [
- [
- 1566
- ]
- ],
- [
- [
- 1567
- ]
- ],
- [
- [
- 1568
- ]
- ],
- [
- [
- 1569
- ]
- ],
- [
- [
- 1570
- ]
- ],
- [
- [
- 1571
- ]
- ],
- [
- [
- 1572
- ]
- ],
- [
- [
- 1573
- ]
- ],
- [
- [
- 1574
- ]
- ],
- [
- [
- 1575
- ]
- ],
- [
- [
- 1576
- ]
- ],
- [
- [
- 1577
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Qatar",
- "sov_a3": "QAT",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Qatar",
- "adm0_a3": "QAT",
- "geou_dif": 0,
- "geounit": "Qatar",
- "gu_a3": "QAT",
- "su_dif": 0,
- "subunit": "Qatar",
- "su_a3": "QAT",
- "brk_diff": 0,
- "name": "Qatar",
- "name_long": "Qatar",
- "brk_a3": "QAT",
- "brk_name": "Qatar",
- "brk_group": null,
- "abbrev": "Qatar",
- "postal": "QA",
- "formal_en": "State of Qatar",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Qatar",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 6,
- "mapcolor9": 2,
- "mapcolor13": 4,
- "pop_est": 833285,
- "gdp_md_est": 91330,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "QA",
- "iso_a3": "QAT",
- "iso_n3": "634",
- "un_a3": "634",
- "wb_a2": "QA",
- "wb_a3": "QAT",
- "woe_id": -99,
- "adm0_a3_is": "QAT",
- "adm0_a3_us": "QAT",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Middle East & North Africa",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1578,
- 1579
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Romania",
- "sov_a3": "ROU",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Romania",
- "adm0_a3": "ROU",
- "geou_dif": 0,
- "geounit": "Romania",
- "gu_a3": "ROU",
- "su_dif": 0,
- "subunit": "Romania",
- "su_a3": "ROU",
- "brk_diff": 0,
- "name": "Romania",
- "name_long": "Romania",
- "brk_a3": "ROU",
- "brk_name": "Romania",
- "brk_group": null,
- "abbrev": "Rom.",
- "postal": "RO",
- "formal_en": "Romania",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Romania",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 3,
- "mapcolor13": 13,
- "pop_est": 22215421,
- "gdp_md_est": 271400,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "RO",
- "iso_a3": "ROU",
- "iso_n3": "642",
- "un_a3": "642",
- "wb_a2": "RO",
- "wb_a3": "ROM",
- "woe_id": -99,
- "adm0_a3_is": "ROU",
- "adm0_a3_us": "ROU",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Eastern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1580,
- 1581,
- -259,
- 1582,
- -927,
- 1583,
- -1273
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Russia",
- "sov_a3": "RUS",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Russia",
- "adm0_a3": "RUS",
- "geou_dif": 0,
- "geounit": "Russia",
- "gu_a3": "RUS",
- "su_dif": 0,
- "subunit": "Russia",
- "su_a3": "RUS",
- "brk_diff": 0,
- "name": "Russia",
- "name_long": "Russian Federation",
- "brk_a3": "RUS",
- "brk_name": "Russia",
- "brk_group": null,
- "abbrev": "Rus.",
- "postal": "RUS",
- "formal_en": "Russian Federation",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Russian Federation",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 5,
- "mapcolor9": 7,
- "mapcolor13": 7,
- "pop_est": 140041247,
- "gdp_md_est": 2266000,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "3. Emerging region: BRIC",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "RU",
- "iso_a3": "RUS",
- "iso_n3": "643",
- "un_a3": "643",
- "wb_a2": "RU",
- "wb_a3": "RUS",
- "woe_id": -99,
- "adm0_a3_is": "RUS",
- "adm0_a3_us": "RUS",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Eastern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 6,
- "long_len": 18,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1584
- ]
- ],
- [
- [
- 1585
- ]
- ],
- [
- [
- 1586
- ]
- ],
- [
- [
- 1587
- ]
- ],
- [
- [
- 1588
- ]
- ],
- [
- [
- 1589
- ]
- ],
- [
- [
- 1590
- ]
- ],
- [
- [
- 1591
- ]
- ],
- [
- [
- 1592
- ]
- ],
- [
- [
- 1593
- ]
- ],
- [
- [
- 1594
- ]
- ],
- [
- [
- 1595
- ]
- ],
- [
- [
- 1596
- ]
- ],
- [
- [
- 1597
- ]
- ],
- [
- [
- 1598
- ]
- ],
- [
- [
- 1599
- ]
- ],
- [
- [
- 1600
- ]
- ],
- [
- [
- 1601
- ]
- ],
- [
- [
- 1602
- ]
- ],
- [
- [
- -1262,
- -1536,
- 1603,
- -1259,
- 1604
- ]
- ],
- [
- [
- 1605
- ]
- ],
- [
- [
- 1606
- ]
- ],
- [
- [
- 1607
- ]
- ],
- [
- [
- 1608
- ]
- ],
- [
- [
- 1609
- ]
- ],
- [
- [
- 1610
- ]
- ],
- [
- [
- 1611
- ]
- ],
- [
- [
- 1612
- ]
- ],
- [
- [
- 1613
- ]
- ],
- [
- [
- 1614
- ]
- ],
- [
- [
- 1615
- ]
- ],
- [
- [
- 1616
- ]
- ],
- [
- [
- 1617
- ]
- ],
- [
- [
- 1618
- ]
- ],
- [
- [
- 1619
- ]
- ],
- [
- [
- 1620
- ]
- ],
- [
- [
- 1621
- ]
- ],
- [
- [
- 1622
- ]
- ],
- [
- [
- 1623
- ]
- ],
- [
- [
- 1624
- ]
- ],
- [
- [
- 1625
- ]
- ],
- [
- [
- 1626
- ]
- ],
- [
- [
- 1627
- ]
- ],
- [
- [
- 1628
- ]
- ],
- [
- [
- 1629
- ]
- ],
- [
- [
- 1630
- ]
- ],
- [
- [
- 1631
- ]
- ],
- [
- [
- 1632
- ]
- ],
- [
- [
- 1633
- ]
- ],
- [
- [
- 1634
- ]
- ],
- [
- [
- 1635
- ]
- ],
- [
- [
- 1636
- ]
- ],
- [
- [
- 1637
- ]
- ],
- [
- [
- 1638
- ]
- ],
- [
- [
- 1639
- ]
- ],
- [
- [
- 1640
- ]
- ],
- [
- [
- 1641
- ]
- ],
- [
- [
- 1642
- ]
- ],
- [
- [
- 1643
- ]
- ],
- [
- [
- 1644
- ]
- ],
- [
- [
- 1645
- ]
- ],
- [
- [
- 1646
- ]
- ],
- [
- [
- 1647
- ]
- ],
- [
- [
- 1648
- ]
- ],
- [
- [
- 1649
- ]
- ],
- [
- [
- 1650
- ]
- ],
- [
- [
- 1651
- ]
- ],
- [
- [
- -1545,
- -563,
- -1331,
- -561,
- -1183,
- 1652,
- -224,
- -804,
- 1653,
- 1654,
- -282,
- -1265,
- -706,
- 1655,
- -721,
- -1417,
- 1656
- ]
- ],
- [
- [
- 1657
- ]
- ],
- [
- [
- 1658
- ]
- ],
- [
- [
- 1659
- ]
- ],
- [
- [
- 1660
- ]
- ],
- [
- [
- 1661
- ]
- ],
- [
- [
- 1662
- ]
- ],
- [
- [
- 1663
- ]
- ],
- [
- [
- 1664
- ]
- ],
- [
- [
- 1665
- ]
- ],
- [
- [
- 1666
- ]
- ],
- [
- [
- 1667
- ]
- ],
- [
- [
- 1668
- ]
- ],
- [
- [
- 1669
- ]
- ],
- [
- [
- 1670
- ]
- ],
- [
- [
- 1671
- ]
- ],
- [
- [
- 1672
- ]
- ],
- [
- [
- 1673
- ]
- ],
- [
- [
- 1674
- ]
- ],
- [
- [
- 1675
- ]
- ],
- [
- [
- 1676
- ]
- ],
- [
- [
- 1677
- ]
- ],
- [
- [
- 1678
- ]
- ],
- [
- [
- 1679
- ]
- ],
- [
- [
- 1680
- ]
- ],
- [
- [
- 1681
- ]
- ],
- [
- [
- 1682
- ]
- ],
- [
- [
- 1683
- ]
- ],
- [
- [
- 1684
- ]
- ],
- [
- [
- 1685
- ]
- ],
- [
- [
- 1686
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Rwanda",
- "sov_a3": "RWA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Rwanda",
- "adm0_a3": "RWA",
- "geou_dif": 0,
- "geounit": "Rwanda",
- "gu_a3": "RWA",
- "su_dif": 0,
- "subunit": "Rwanda",
- "su_a3": "RWA",
- "brk_diff": 0,
- "name": "Rwanda",
- "name_long": "Rwanda",
- "brk_a3": "RWA",
- "brk_name": "Rwanda",
- "brk_group": null,
- "abbrev": "Rwa.",
- "postal": "RW",
- "formal_en": "Republic of Rwanda",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Rwanda",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 2,
- "mapcolor9": 3,
- "mapcolor13": 10,
- "pop_est": 10473282,
- "gdp_md_est": 9706,
- "pop_year": -99,
- "lastcensus": 2002,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "RW",
- "iso_a3": "RWA",
- "iso_n3": "646",
- "un_a3": "646",
- "wb_a2": "RW",
- "wb_a3": "RWA",
- "woe_id": -99,
- "adm0_a3_is": "RWA",
- "adm0_a3_us": "RWA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1687,
- -227,
- -579,
- 1688
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 7,
- "sovereignt": "Western Sahara",
- "sov_a3": "SAH",
- "adm0_dif": 0,
- "level": 2,
- "type": "Indeterminate",
- "admin": "Western Sahara",
- "adm0_a3": "SAH",
- "geou_dif": 0,
- "geounit": "Western Sahara",
- "gu_a3": "SAH",
- "su_dif": 0,
- "subunit": "Western Sahara",
- "su_a3": "SAH",
- "brk_diff": 1,
- "name": "W. Sahara",
- "name_long": "Western Sahara",
- "brk_a3": "B28",
- "brk_name": "W. Sahara",
- "brk_group": null,
- "abbrev": "W. Sah.",
- "postal": "WS",
- "formal_en": "Sahrawi Arab Democratic Republic",
- "formal_fr": null,
- "note_adm0": "Self admin.",
- "note_brk": "Self admin.; Claimed by Morocco",
- "name_sort": "Western Sahara",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 7,
- "mapcolor9": 4,
- "mapcolor13": 4,
- "pop_est": -99,
- "gdp_md_est": -99,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "EH",
- "iso_a3": "ESH",
- "iso_n3": "732",
- "un_a3": "732",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "MAR",
- "adm0_a3_us": "SAH",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Northern Africa",
- "region_wb": "Middle East & North Africa",
- "name_len": 9,
- "long_len": 14,
- "abbrev_len": 7,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -1351,
- 1689,
- -1270,
- -663
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Saudi Arabia",
- "sov_a3": "SAU",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Saudi Arabia",
- "adm0_a3": "SAU",
- "geou_dif": 0,
- "geounit": "Saudi Arabia",
- "gu_a3": "SAU",
- "su_dif": 0,
- "subunit": "Saudi Arabia",
- "su_a3": "SAU",
- "brk_diff": 0,
- "name": "Saudi Arabia",
- "name_long": "Saudi Arabia",
- "brk_a3": "SAU",
- "brk_name": "Saudi Arabia",
- "brk_group": null,
- "abbrev": "Saud.",
- "postal": "SA",
- "formal_en": "Kingdom of Saudi Arabia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Saudi Arabia",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 1,
- "mapcolor9": 6,
- "mapcolor13": 7,
- "pop_est": 28686633,
- "gdp_md_est": 576500,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SA",
- "iso_a3": "SAU",
- "iso_n3": "682",
- "un_a3": "682",
- "wb_a2": "SA",
- "wb_a3": "SAU",
- "woe_id": -99,
- "adm0_a3_is": "SAU",
- "adm0_a3_us": "SAU",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Middle East & North Africa",
- "name_len": 12,
- "long_len": 12,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1690
- ]
- ],
- [
- [
- 1691
- ]
- ],
- [
- [
- 1692
- ]
- ],
- [
- [
- -1238,
- 1693,
- -1579,
- 1694,
- -33,
- -1448,
- 1695,
- 1696,
- -1137,
- -1112
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Sudan",
- "sov_a3": "SDN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Sudan",
- "adm0_a3": "SDN",
- "geou_dif": 0,
- "geounit": "Sudan",
- "gu_a3": "SDN",
- "su_dif": 0,
- "subunit": "Sudan",
- "su_a3": "SDN",
- "brk_diff": 0,
- "name": "Sudan",
- "name_long": "Sudan",
- "brk_a3": "SDN",
- "brk_name": "Sudan",
- "brk_group": null,
- "abbrev": "Sudan",
- "postal": "SD",
- "formal_en": "Republic of the Sudan",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Sudan",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 6,
- "mapcolor9": 4,
- "mapcolor13": 1,
- "pop_est": 25946220,
- "gdp_md_est": 88080,
- "pop_year": -99,
- "lastcensus": 2008,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SD",
- "iso_a3": "SDN",
- "iso_n3": "729",
- "un_a3": "729",
- "wb_a2": "SD",
- "wb_a3": "SDN",
- "woe_id": -99,
- "adm0_a3_is": "SDN",
- "adm0_a3_us": "SDN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Northern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1697,
- -686,
- -713,
- 1698,
- -332,
- 1699,
- -1249,
- -679
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "South Sudan",
- "sov_a3": "SDS",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "South Sudan",
- "adm0_a3": "SDS",
- "geou_dif": 0,
- "geounit": "South Sudan",
- "gu_a3": "SDS",
- "su_dif": 0,
- "subunit": "South Sudan",
- "su_a3": "SDS",
- "brk_diff": 0,
- "name": "S. Sudan",
- "name_long": "South Sudan",
- "brk_a3": "SDS",
- "brk_name": "S. Sudan",
- "brk_group": null,
- "abbrev": "S. Sud.",
- "postal": "SS",
- "formal_en": "Republic of South Sudan",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "South Sudan",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 3,
- "mapcolor9": 3,
- "mapcolor13": 5,
- "pop_est": 10625176,
- "gdp_md_est": 13227,
- "pop_year": -99,
- "lastcensus": 2008,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SS",
- "iso_a3": "SSD",
- "iso_n3": "728",
- "un_a3": "728",
- "wb_a2": "SS",
- "wb_a3": "SSD",
- "woe_id": -99,
- "adm0_a3_is": "SSD",
- "adm0_a3_us": "SDS",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 8,
- "long_len": 11,
- "abbrev_len": 7,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -712,
- -1189,
- 1700,
- -577,
- -333,
- -1699
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Senegal",
- "sov_a3": "SEN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Senegal",
- "adm0_a3": "SEN",
- "geou_dif": 0,
- "geounit": "Senegal",
- "gu_a3": "SEN",
- "su_dif": 0,
- "subunit": "Senegal",
- "su_a3": "SEN",
- "brk_diff": 0,
- "name": "Senegal",
- "name_long": "Senegal",
- "brk_a3": "SEN",
- "brk_name": "Senegal",
- "brk_group": null,
- "abbrev": "Sen.",
- "postal": "SN",
- "formal_en": "Republic of Senegal",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Senegal",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 6,
- "mapcolor9": 5,
- "mapcolor13": 5,
- "pop_est": 13711597,
- "gdp_md_est": 21980,
- "pop_year": -99,
- "lastcensus": 2002,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SN",
- "iso_a3": "SEN",
- "iso_n3": "686",
- "un_a3": "686",
- "wb_a2": "SN",
- "wb_a3": "SEN",
- "woe_id": -99,
- "adm0_a3_is": "SEN",
- "adm0_a3_us": "SEN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -1305,
- -814,
- -824,
- 1701,
- -816,
- 1702,
- -1349
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Singapore",
- "sov_a3": "SGP",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Singapore",
- "adm0_a3": "SGP",
- "geou_dif": 0,
- "geounit": "Singapore",
- "gu_a3": "SGP",
- "su_dif": 0,
- "subunit": "Singapore",
- "su_a3": "SGP",
- "brk_diff": 0,
- "name": "Singapore",
- "name_long": "Singapore",
- "brk_a3": "SGP",
- "brk_name": "Singapore",
- "brk_group": null,
- "abbrev": "Sing.",
- "postal": "SG",
- "formal_en": "Republic of Singapore",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Singapore",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 3,
- "mapcolor9": 7,
- "mapcolor13": 3,
- "pop_est": 4657542,
- "gdp_md_est": 237300,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SG",
- "iso_a3": "SGP",
- "iso_n3": "702",
- "un_a3": "702",
- "wb_a2": "SG",
- "wb_a3": "SGP",
- "woe_id": -99,
- "adm0_a3_is": "SGP",
- "adm0_a3_us": "SGP",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "South-Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 9,
- "long_len": 9,
- "abbrev_len": 5,
- "tiny": 3,
- "homepart": 1
- },
- "arcs": [
- [
- 1703
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "United Kingdom",
- "sov_a3": "GB1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "South Georgia and South Sandwich Islands",
- "adm0_a3": "SGS",
- "geou_dif": 0,
- "geounit": "South Georgia and South Sandwich Islands",
- "gu_a3": "SGS",
- "su_dif": 0,
- "subunit": "South Georgia and South Sandwich Islands",
- "su_a3": "SGS",
- "brk_diff": 0,
- "name": "S. Geo. and S. Sandw. Is.",
- "name_long": "South Georgia and South Sandwich Islands",
- "brk_a3": "SGS",
- "brk_name": "S. Geo. and S. Sandw. Is.",
- "brk_group": null,
- "abbrev": "S.G. S.S. Is.",
- "postal": "GS",
- "formal_en": "South Georgia and South Sandwich Islands",
- "formal_fr": null,
- "note_adm0": "U.K.",
- "note_brk": null,
- "name_sort": "South Georgia and the Islands",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 30,
- "gdp_md_est": 0.3,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "GS",
- "iso_a3": "SGS",
- "iso_n3": "239",
- "un_a3": "-099",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "SGS",
- "adm0_a3_us": "SGS",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Seven seas (open ocean)",
- "region_un": "Seven seas (open ocean)",
- "subregion": "Seven seas (open ocean)",
- "region_wb": "Antarctica",
- "name_len": 25,
- "long_len": 40,
- "abbrev_len": 13,
- "tiny": 3,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 1704
- ]
- ],
- [
- [
- 1705
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "United Kingdom",
- "sov_a3": "GB1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Saint Helena",
- "adm0_a3": "SHN",
- "geou_dif": 0,
- "geounit": "Saint Helena",
- "gu_a3": "SHN",
- "su_dif": 0,
- "subunit": "Saint Helena",
- "su_a3": "SHN",
- "brk_diff": 0,
- "name": "Saint Helena",
- "name_long": "Saint Helena",
- "brk_a3": "SHN",
- "brk_name": "Saint Helena",
- "brk_group": null,
- "abbrev": "St.H.",
- "postal": "SH",
- "formal_en": null,
- "formal_fr": null,
- "note_adm0": "U.K.",
- "note_brk": null,
- "name_sort": "St. Helena",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 7637,
- "gdp_md_est": 18,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SH",
- "iso_a3": "SHN",
- "iso_n3": "654",
- "un_a3": "654",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "SHN",
- "adm0_a3_us": "SHN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Seven seas (open ocean)",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 12,
- "long_len": 12,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 1706
- ]
- ],
- [
- [
- 1707
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Solomon Islands",
- "sov_a3": "SLB",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Solomon Islands",
- "adm0_a3": "SLB",
- "geou_dif": 0,
- "geounit": "Solomon Islands",
- "gu_a3": "SLB",
- "su_dif": 0,
- "subunit": "Solomon Islands",
- "su_a3": "SLB",
- "brk_diff": 0,
- "name": "Solomon Is.",
- "name_long": "Solomon Islands",
- "brk_a3": "SLB",
- "brk_name": "Solomon Is.",
- "brk_group": null,
- "abbrev": "S. Is.",
- "postal": "SB",
- "formal_en": null,
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Solomon Islands",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 1,
- "mapcolor13": 6,
- "pop_est": 595613,
- "gdp_md_est": 1078,
- "pop_year": -99,
- "lastcensus": 2009,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SB",
- "iso_a3": "SLB",
- "iso_n3": "090",
- "un_a3": "090",
- "wb_a2": "SB",
- "wb_a3": "SLB",
- "woe_id": -99,
- "adm0_a3_is": "SLB",
- "adm0_a3_us": "SLB",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Melanesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 11,
- "long_len": 15,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1708
- ]
- ],
- [
- [
- 1709
- ]
- ],
- [
- [
- 1710
- ]
- ],
- [
- [
- 1711
- ]
- ],
- [
- [
- 1712
- ]
- ],
- [
- [
- 1713
- ]
- ],
- [
- [
- 1714
- ]
- ],
- [
- [
- 1715
- ]
- ],
- [
- [
- 1716
- ]
- ],
- [
- [
- 1717
- ]
- ],
- [
- [
- 1718
- ]
- ],
- [
- [
- 1719
- ]
- ],
- [
- [
- 1720
- ]
- ],
- [
- [
- 1721
- ]
- ],
- [
- [
- 1722
- ]
- ],
- [
- [
- 1723
- ]
- ],
- [
- [
- 1724
- ]
- ],
- [
- [
- 1725
- ]
- ],
- [
- [
- 1726
- ]
- ],
- [
- [
- 1727
- ]
- ],
- [
- [
- 1728
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Sierra Leone",
- "sov_a3": "SLE",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Sierra Leone",
- "adm0_a3": "SLE",
- "geou_dif": 0,
- "geounit": "Sierra Leone",
- "gu_a3": "SLE",
- "su_dif": 0,
- "subunit": "Sierra Leone",
- "su_a3": "SLE",
- "brk_diff": 0,
- "name": "Sierra Leone",
- "name_long": "Sierra Leone",
- "brk_a3": "SLE",
- "brk_name": "Sierra Leone",
- "brk_group": null,
- "abbrev": "S.L.",
- "postal": "SL",
- "formal_en": "Republic of Sierra Leone",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Sierra Leone",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 1,
- "mapcolor13": 7,
- "pop_est": 6440053,
- "gdp_md_est": 4285,
- "pop_year": -99,
- "lastcensus": 2004,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SL",
- "iso_a3": "SLE",
- "iso_n3": "694",
- "un_a3": "694",
- "wb_a2": "SL",
- "wb_a3": "SLE",
- "woe_id": -99,
- "adm0_a3_is": "SLE",
- "adm0_a3_us": "SLE",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 12,
- "long_len": 12,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1729
- ]
- ],
- [
- [
- -1248,
- 1730,
- -811
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "El Salvador",
- "sov_a3": "SLV",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "El Salvador",
- "adm0_a3": "SLV",
- "geou_dif": 0,
- "geounit": "El Salvador",
- "gu_a3": "SLV",
- "su_dif": 0,
- "subunit": "El Salvador",
- "su_a3": "SLV",
- "brk_diff": 0,
- "name": "El Salvador",
- "name_long": "El Salvador",
- "brk_a3": "SLV",
- "brk_name": "El Salvador",
- "brk_group": null,
- "abbrev": "El. S.",
- "postal": "SV",
- "formal_en": "Republic of El Salvador",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "El Salvador",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 6,
- "mapcolor13": 8,
- "pop_est": 7185218,
- "gdp_md_est": 43630,
- "pop_year": -99,
- "lastcensus": 2007,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SV",
- "iso_a3": "SLV",
- "iso_n3": "222",
- "un_a3": "222",
- "wb_a2": "SV",
- "wb_a3": "SLV",
- "woe_id": -99,
- "adm0_a3_is": "SLV",
- "adm0_a3_us": "SLV",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Central America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 11,
- "long_len": 11,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -902,
- 1731,
- -889
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "San Marino",
- "sov_a3": "SMR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "San Marino",
- "adm0_a3": "SMR",
- "geou_dif": 0,
- "geounit": "San Marino",
- "gu_a3": "SMR",
- "su_dif": 0,
- "subunit": "San Marino",
- "su_a3": "SMR",
- "brk_diff": 0,
- "name": "San Marino",
- "name_long": "San Marino",
- "brk_a3": "SMR",
- "brk_name": "San Marino",
- "brk_group": null,
- "abbrev": "S.M.",
- "postal": "RSM",
- "formal_en": "Republic of San Marino",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "San Marino",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 3,
- "mapcolor9": 1,
- "mapcolor13": 6,
- "pop_est": 30324,
- "gdp_md_est": 1662,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SM",
- "iso_a3": "SMR",
- "iso_n3": "674",
- "un_a3": "674",
- "wb_a2": "SM",
- "wb_a3": "SMR",
- "woe_id": -99,
- "adm0_a3_is": "SMR",
- "adm0_a3_us": "SMR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Southern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 4,
- "tiny": 5,
- "homepart": 1
- },
- "arcs": [
- [
- -1134
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Somaliland",
- "sov_a3": "SOL",
- "adm0_dif": 0,
- "level": 2,
- "type": "Indeterminate",
- "admin": "Somaliland",
- "adm0_a3": "SOL",
- "geou_dif": 0,
- "geounit": "Somaliland",
- "gu_a3": "SOL",
- "su_dif": 0,
- "subunit": "Somaliland",
- "su_a3": "SOL",
- "brk_diff": 1,
- "name": "Somaliland",
- "name_long": "Somaliland",
- "brk_a3": "B30",
- "brk_name": "Somaliland",
- "brk_group": null,
- "abbrev": "Solnd.",
- "postal": "SL",
- "formal_en": "Republic of Somaliland",
- "formal_fr": null,
- "note_adm0": "Self admin.",
- "note_brk": "Self admin.; Claimed by Somalia",
- "name_sort": "Somaliland",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 6,
- "mapcolor9": 5,
- "mapcolor13": 2,
- "pop_est": 3500000,
- "gdp_md_est": 12250,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "-99",
- "iso_a3": "-99",
- "iso_n3": "-99",
- "un_a3": "-099",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "SOM",
- "adm0_a3_us": "SOM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1732,
- -709,
- -639,
- 1733
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Somalia",
- "sov_a3": "SOM",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Somalia",
- "adm0_a3": "SOM",
- "geou_dif": 0,
- "geounit": "Somalia",
- "gu_a3": "SOM",
- "su_dif": 0,
- "subunit": "Somalia",
- "su_a3": "SOM",
- "brk_diff": 0,
- "name": "Somalia",
- "name_long": "Somalia",
- "brk_a3": "SOM",
- "brk_name": "Somalia",
- "brk_group": null,
- "abbrev": "Som.",
- "postal": "SO",
- "formal_en": "Federal Republic of Somalia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Somalia",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 8,
- "mapcolor9": 6,
- "mapcolor13": 7,
- "pop_est": 9832017,
- "gdp_md_est": 5524,
- "pop_year": -99,
- "lastcensus": 1987,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SO",
- "iso_a3": "SOM",
- "iso_n3": "706",
- "un_a3": "706",
- "wb_a2": "SO",
- "wb_a3": "SOM",
- "woe_id": -99,
- "adm0_a3_is": "SOM",
- "adm0_a3_us": "SOM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -1185,
- -710,
- -1733,
- 1734
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "France",
- "sov_a3": "FR1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Saint Pierre and Miquelon",
- "adm0_a3": "SPM",
- "geou_dif": 0,
- "geounit": "Saint Pierre and Miquelon",
- "gu_a3": "SPM",
- "su_dif": 0,
- "subunit": "Saint Pierre and Miquelon",
- "su_a3": "SPM",
- "brk_diff": 0,
- "name": "St. Pierre and Miquelon",
- "name_long": "Saint Pierre and Miquelon",
- "brk_a3": "SPM",
- "brk_name": "St. Pierre and Miquelon",
- "brk_group": null,
- "abbrev": "St. P.M.",
- "postal": "PM",
- "formal_en": "Saint Pierre and Miquelon",
- "formal_fr": null,
- "note_adm0": "Fr.",
- "note_brk": null,
- "name_sort": "St. Pierre and Miquelon",
- "name_alt": null,
- "mapcolor7": 7,
- "mapcolor8": 5,
- "mapcolor9": 9,
- "mapcolor13": 11,
- "pop_est": 7051,
- "gdp_md_est": 48.3,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "PM",
- "iso_a3": "SPM",
- "iso_n3": "666",
- "un_a3": "666",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "SPM",
- "adm0_a3_us": "SPM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Northern America",
- "region_wb": "North America",
- "name_len": 23,
- "long_len": 25,
- "abbrev_len": 8,
- "tiny": 3,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 1735
- ]
- ],
- [
- [
- 1736
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Republic of Serbia",
- "sov_a3": "SRB",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Republic of Serbia",
- "adm0_a3": "SRB",
- "geou_dif": 0,
- "geounit": "Republic of Serbia",
- "gu_a3": "SRB",
- "su_dif": 0,
- "subunit": "Republic of Serbia",
- "su_a3": "SRB",
- "brk_diff": 0,
- "name": "Serbia",
- "name_long": "Serbia",
- "brk_a3": "SRB",
- "brk_name": "Serbia",
- "brk_group": null,
- "abbrev": "Serb.",
- "postal": "RS",
- "formal_en": "Republic of Serbia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Serbia",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 3,
- "mapcolor9": 2,
- "mapcolor13": 10,
- "pop_est": 7379339,
- "gdp_md_est": 80340,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "RS",
- "iso_a3": "SRB",
- "iso_n3": "688",
- "un_a3": "688",
- "wb_a2": "YF",
- "wb_a3": "SRB",
- "woe_id": -99,
- "adm0_a3_is": "SRB",
- "adm0_a3_us": "SRB",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Southern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -1583,
- -258,
- -1303,
- -1236,
- -1329,
- -276,
- -919,
- -928
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Sao Tome and Principe",
- "sov_a3": "STP",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Sao Tome and Principe",
- "adm0_a3": "STP",
- "geou_dif": 0,
- "geounit": "Sao Tome and Principe",
- "gu_a3": "STP",
- "su_dif": 0,
- "subunit": "Sao Tome and Principe",
- "su_a3": "STP",
- "brk_diff": 0,
- "name": "São Tomé and Principe",
- "name_long": "São Tomé and Principe",
- "brk_a3": "STP",
- "brk_name": "Sao Tome and Principe",
- "brk_group": null,
- "abbrev": "S.T.P.",
- "postal": "ST",
- "formal_en": "Democratic Republic of São Tomé and Principe",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "São Tomé and Principe",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 6,
- "mapcolor9": 1,
- "mapcolor13": 7,
- "pop_est": 212679,
- "gdp_md_est": 276.5,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "ST",
- "iso_a3": "STP",
- "iso_n3": "678",
- "un_a3": "678",
- "wb_a2": "ST",
- "wb_a3": "STP",
- "woe_id": -99,
- "adm0_a3_is": "STP",
- "adm0_a3_us": "STP",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Middle Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 21,
- "long_len": 21,
- "abbrev_len": 6,
- "tiny": 3,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1737
- ]
- ],
- [
- [
- 1738
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Suriname",
- "sov_a3": "SUR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Suriname",
- "adm0_a3": "SUR",
- "geou_dif": 0,
- "geounit": "Suriname",
- "gu_a3": "SUR",
- "su_dif": 0,
- "subunit": "Suriname",
- "su_a3": "SUR",
- "brk_diff": 0,
- "name": "Suriname",
- "name_long": "Suriname",
- "brk_a3": "SUR",
- "brk_name": "Suriname",
- "brk_group": null,
- "abbrev": "Sur.",
- "postal": "SR",
- "formal_en": "Republic of Suriname",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Suriname",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 7,
- "mapcolor13": 6,
- "pop_est": 481267,
- "gdp_md_est": 4254,
- "pop_year": -99,
- "lastcensus": 2004,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SR",
- "iso_a3": "SUR",
- "iso_n3": "740",
- "un_a3": "740",
- "wb_a2": "SR",
- "wb_a3": "SUR",
- "woe_id": -99,
- "adm0_a3_is": "SUR",
- "adm0_a3_us": "SUR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "South America",
- "region_un": "Americas",
- "subregion": "South America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -752,
- -313,
- -893,
- 1739
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Slovakia",
- "sov_a3": "SVK",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Slovakia",
- "adm0_a3": "SVK",
- "geou_dif": 0,
- "geounit": "Slovakia",
- "gu_a3": "SVK",
- "su_dif": 0,
- "subunit": "Slovakia",
- "su_a3": "SVK",
- "brk_diff": 0,
- "name": "Slovakia",
- "name_long": "Slovakia",
- "brk_a3": "SVK",
- "brk_name": "Slovakia",
- "brk_group": null,
- "abbrev": "Svk.",
- "postal": "SK",
- "formal_en": "Slovak Republic",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Slovak Republic",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 4,
- "mapcolor9": 4,
- "mapcolor13": 9,
- "pop_est": 5463046,
- "gdp_md_est": 119500,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SK",
- "iso_a3": "SVK",
- "iso_n3": "703",
- "un_a3": "703",
- "wb_a2": "SK",
- "wb_a3": "SVK",
- "woe_id": -99,
- "adm0_a3_is": "SVK",
- "adm0_a3_us": "SVK",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Eastern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1740,
- -930,
- -210,
- -624,
- -1538
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Slovenia",
- "sov_a3": "SVN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Slovenia",
- "adm0_a3": "SVN",
- "geou_dif": 0,
- "geounit": "Slovenia",
- "gu_a3": "SVN",
- "su_dif": 0,
- "subunit": "Slovenia",
- "su_a3": "SVN",
- "brk_diff": 0,
- "name": "Slovenia",
- "name_long": "Slovenia",
- "brk_a3": "SVN",
- "brk_name": "Slovenia",
- "brk_group": null,
- "abbrev": "Slo.",
- "postal": "SLO",
- "formal_en": "Republic of Slovenia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Slovenia",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 3,
- "mapcolor9": 2,
- "mapcolor13": 12,
- "pop_est": 2005692,
- "gdp_md_est": 59340,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SI",
- "iso_a3": "SVN",
- "iso_n3": "705",
- "un_a3": "705",
- "wb_a2": "SI",
- "wb_a3": "SVN",
- "woe_id": -99,
- "adm0_a3_is": "SVN",
- "adm0_a3_us": "SVN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Southern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -921,
- 1741,
- -1132,
- -212,
- -929
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Sweden",
- "sov_a3": "SWE",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Sweden",
- "adm0_a3": "SWE",
- "geou_dif": 0,
- "geounit": "Sweden",
- "gu_a3": "SWE",
- "su_dif": 0,
- "subunit": "Sweden",
- "su_a3": "SWE",
- "brk_diff": 0,
- "name": "Sweden",
- "name_long": "Sweden",
- "brk_a3": "SWE",
- "brk_name": "Sweden",
- "brk_group": null,
- "abbrev": "Swe.",
- "postal": "S",
- "formal_en": "Kingdom of Sweden",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Sweden",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 4,
- "mapcolor9": 2,
- "mapcolor13": 4,
- "pop_est": 9059651,
- "gdp_md_est": 344300,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SE",
- "iso_a3": "SWE",
- "iso_n3": "752",
- "un_a3": "752",
- "wb_a2": "SE",
- "wb_a3": "SWE",
- "woe_id": -99,
- "adm0_a3_is": "SWE",
- "adm0_a3_us": "SWE",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Northern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1742
- ]
- ],
- [
- [
- 1743
- ]
- ],
- [
- [
- 1744
- ]
- ],
- [
- [
- 1745
- ]
- ],
- [
- [
- 1746
- ]
- ],
- [
- [
- 1747,
- -1418,
- -723
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Swaziland",
- "sov_a3": "SWZ",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Swaziland",
- "adm0_a3": "SWZ",
- "geou_dif": 0,
- "geounit": "Swaziland",
- "gu_a3": "SWZ",
- "su_dif": 0,
- "subunit": "Swaziland",
- "su_a3": "SWZ",
- "brk_diff": 0,
- "name": "Swaziland",
- "name_long": "Swaziland",
- "brk_a3": "SWZ",
- "brk_name": "Swaziland",
- "brk_group": null,
- "abbrev": "Swz.",
- "postal": "SW",
- "formal_en": "Kingdom of Swaziland",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Swaziland",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 6,
- "mapcolor9": 2,
- "mapcolor13": 5,
- "pop_est": 1123913,
- "gdp_md_est": 5702,
- "pop_year": -99,
- "lastcensus": 2007,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SZ",
- "iso_a3": "SWZ",
- "iso_n3": "748",
- "un_a3": "748",
- "wb_a2": "SZ",
- "wb_a3": "SWZ",
- "woe_id": -99,
- "adm0_a3_is": "SWZ",
- "adm0_a3_us": "SWZ",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Southern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 9,
- "long_len": 9,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -1339,
- 1748
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Netherlands",
- "sov_a3": "NL1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "Sint Maarten",
- "adm0_a3": "SXM",
- "geou_dif": 0,
- "geounit": "Sint Maarten",
- "gu_a3": "SXM",
- "su_dif": 0,
- "subunit": "Sint Maarten",
- "su_a3": "SXM",
- "brk_diff": 0,
- "name": "Sint Maarten",
- "name_long": "Sint Maarten",
- "brk_a3": "SXM",
- "brk_name": "Sint Maarten",
- "brk_group": null,
- "abbrev": "St. M.",
- "postal": "SX",
- "formal_en": "Sint Maarten (Dutch part)",
- "formal_fr": null,
- "note_adm0": "Neth.",
- "note_brk": null,
- "name_sort": "St. Maarten (Dutch part)",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 2,
- "mapcolor9": 2,
- "mapcolor13": 9,
- "pop_est": 37429,
- "gdp_md_est": 400,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SX",
- "iso_a3": "SXM",
- "iso_n3": "534",
- "un_a3": "534",
- "wb_a2": "SX",
- "wb_a3": "SXM",
- "woe_id": -99,
- "adm0_a3_is": "SXM",
- "adm0_a3_us": "SXM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 12,
- "long_len": 12,
- "abbrev_len": 6,
- "tiny": 4,
- "homepart": -99
- },
- "arcs": [
- [
- -1268,
- 1749
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Seychelles",
- "sov_a3": "SYC",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Seychelles",
- "adm0_a3": "SYC",
- "geou_dif": 0,
- "geounit": "Seychelles",
- "gu_a3": "SYC",
- "su_dif": 0,
- "subunit": "Seychelles",
- "su_a3": "SYC",
- "brk_diff": 0,
- "name": "Seychelles",
- "name_long": "Seychelles",
- "brk_a3": "SYC",
- "brk_name": "Seychelles",
- "brk_group": null,
- "abbrev": "Syc.",
- "postal": "SC",
- "formal_en": "Republic of Seychelles",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Seychelles",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 8,
- "mapcolor9": 3,
- "mapcolor13": 1,
- "pop_est": 87476,
- "gdp_md_est": 1715,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SC",
- "iso_a3": "SYC",
- "iso_n3": "690",
- "un_a3": "690",
- "wb_a2": "SC",
- "wb_a3": "SYC",
- "woe_id": -99,
- "adm0_a3_is": "SYC",
- "adm0_a3_us": "SYC",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Seven seas (open ocean)",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 4,
- "tiny": 2,
- "homepart": 1
- },
- "arcs": [
- [
- 1750
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Syria",
- "sov_a3": "SYR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Syria",
- "adm0_a3": "SYR",
- "geou_dif": 0,
- "geounit": "Syria",
- "gu_a3": "SYR",
- "su_dif": 0,
- "subunit": "Syria",
- "su_a3": "SYR",
- "brk_diff": 0,
- "name": "Syria",
- "name_long": "Syria",
- "brk_a3": "SYR",
- "brk_name": "Syria",
- "brk_group": null,
- "abbrev": "Syria",
- "postal": "SYR",
- "formal_en": "Syrian Arab Republic",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Syrian Arab Republic",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 6,
- "mapcolor9": 2,
- "mapcolor13": 6,
- "pop_est": 20178485,
- "gdp_md_est": 98830,
- "pop_year": -99,
- "lastcensus": 2004,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "SY",
- "iso_a3": "SYR",
- "iso_n3": "760",
- "un_a3": "760",
- "wb_a2": "SY",
- "wb_a3": "SYR",
- "woe_id": -99,
- "adm0_a3_is": "SYR",
- "adm0_a3_us": "SYR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Middle East & North Africa",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -1114,
- -1140,
- -1124,
- -1246,
- 1751,
- 1752
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "United Kingdom",
- "sov_a3": "GB1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Turks and Caicos Islands",
- "adm0_a3": "TCA",
- "geou_dif": 0,
- "geounit": "Turks and Caicos Islands",
- "gu_a3": "TCA",
- "su_dif": 0,
- "subunit": "Turks and Caicos Islands",
- "su_a3": "TCA",
- "brk_diff": 0,
- "name": "Turks and Caicos Is.",
- "name_long": "Turks and Caicos Islands",
- "brk_a3": "TCA",
- "brk_name": "Turks and Caicos Is.",
- "brk_group": null,
- "abbrev": "T.C. Is.",
- "postal": "TC",
- "formal_en": "Turks and Caicos Islands",
- "formal_fr": null,
- "note_adm0": "U.K.",
- "note_brk": null,
- "name_sort": "Turks and Caicos Islands",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 22942,
- "gdp_md_est": 216,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "TC",
- "iso_a3": "TCA",
- "iso_n3": "796",
- "un_a3": "796",
- "wb_a2": "TC",
- "wb_a3": "TCA",
- "woe_id": -99,
- "adm0_a3_is": "TCA",
- "adm0_a3_us": "TCA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 20,
- "long_len": 24,
- "abbrev_len": 8,
- "tiny": -99,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 1753
- ]
- ],
- [
- [
- 1754
- ]
- ],
- [
- [
- 1755
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Chad",
- "sov_a3": "TCD",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Chad",
- "adm0_a3": "TCD",
- "geou_dif": 0,
- "geounit": "Chad",
- "gu_a3": "TCD",
- "su_dif": 0,
- "subunit": "Chad",
- "su_a3": "TCD",
- "brk_diff": 0,
- "name": "Chad",
- "name_long": "Chad",
- "brk_a3": "TCD",
- "brk_name": "Chad",
- "brk_group": null,
- "abbrev": "Chad",
- "postal": "TD",
- "formal_en": "Republic of Chad",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Chad",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 1,
- "mapcolor9": 8,
- "mapcolor13": 6,
- "pop_est": 10329208,
- "gdp_md_est": 15860,
- "pop_year": -99,
- "lastcensus": 2009,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "TD",
- "iso_a3": "TCD",
- "iso_n3": "148",
- "un_a3": "148",
- "wb_a2": "TD",
- "wb_a3": "TCD",
- "woe_id": -99,
- "adm0_a3_is": "TCD",
- "adm0_a3_us": "TCD",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Middle Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 4,
- "long_len": 4,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -1700,
- -337,
- -576,
- -1380,
- -1376,
- -1250
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Togo",
- "sov_a3": "TGO",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Togo",
- "adm0_a3": "TGO",
- "geou_dif": 0,
- "geounit": "Togo",
- "gu_a3": "TGO",
- "su_dif": 0,
- "subunit": "Togo",
- "su_a3": "TGO",
- "brk_diff": 0,
- "name": "Togo",
- "name_long": "Togo",
- "brk_a3": "TGO",
- "brk_name": "Togo",
- "brk_group": null,
- "abbrev": "Togo",
- "postal": "TG",
- "formal_en": "Togolese Republic",
- "formal_fr": "République Togolaise",
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Togo",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 1,
- "mapcolor9": 3,
- "mapcolor13": 5,
- "pop_est": 6019877,
- "gdp_md_est": 5118,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "TG",
- "iso_a3": "TGO",
- "iso_n3": "768",
- "un_a3": "768",
- "wb_a2": "TG",
- "wb_a3": "TGO",
- "woe_id": -99,
- "adm0_a3_is": "TGO",
- "adm0_a3_us": "TGO",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Western Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 4,
- "long_len": 4,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -237,
- 1756,
- -806,
- -241
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Thailand",
- "sov_a3": "THA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Thailand",
- "adm0_a3": "THA",
- "geou_dif": 0,
- "geounit": "Thailand",
- "gu_a3": "THA",
- "su_dif": 0,
- "subunit": "Thailand",
- "su_a3": "THA",
- "brk_diff": 0,
- "name": "Thailand",
- "name_long": "Thailand",
- "brk_a3": "THA",
- "brk_name": "Thailand",
- "brk_group": null,
- "abbrev": "Thai.",
- "postal": "TH",
- "formal_en": "Kingdom of Thailand",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Thailand",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 6,
- "mapcolor9": 8,
- "mapcolor13": 1,
- "pop_est": 65905410,
- "gdp_md_est": 547400,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "TH",
- "iso_a3": "THA",
- "iso_n3": "764",
- "un_a3": "764",
- "wb_a2": "TH",
- "wb_a3": "THA",
- "woe_id": -99,
- "adm0_a3_is": "THA",
- "adm0_a3_us": "THA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "South-Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1757
- ]
- ],
- [
- [
- 1758
- ]
- ],
- [
- [
- 1759
- ]
- ],
- [
- [
- 1760
- ]
- ],
- [
- [
- 1761
- ]
- ],
- [
- [
- 1762
- ]
- ],
- [
- [
- 1763
- ]
- ],
- [
- [
- 1764
- ]
- ],
- [
- [
- 1765
- ]
- ],
- [
- [
- -1243,
- -1198,
- 1766,
- -1363,
- 1767,
- -1327
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Tajikistan",
- "sov_a3": "TJK",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Tajikistan",
- "adm0_a3": "TJK",
- "geou_dif": 0,
- "geounit": "Tajikistan",
- "gu_a3": "TJK",
- "su_dif": 0,
- "subunit": "Tajikistan",
- "su_a3": "TJK",
- "brk_diff": 0,
- "name": "Tajikistan",
- "name_long": "Tajikistan",
- "brk_a3": "TJK",
- "brk_name": "Tajikistan",
- "brk_group": null,
- "abbrev": "Tjk.",
- "postal": "TJ",
- "formal_en": "Republic of Tajikistan",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Tajikistan",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 6,
- "mapcolor9": 2,
- "mapcolor13": 5,
- "pop_est": 7349145,
- "gdp_md_est": 13160,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "TJ",
- "iso_a3": "TJK",
- "iso_n3": "762",
- "un_a3": "762",
- "wb_a2": "TJ",
- "wb_a3": "TJK",
- "woe_id": -99,
- "adm0_a3_is": "TJK",
- "adm0_a3_us": "TJK",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Central Asia",
- "region_wb": "Europe & Central Asia",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- -1192
- ]
- ],
- [
- [
- 1768
- ]
- ],
- [
- [
- -1190,
- -558,
- -8,
- 1769
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Turkmenistan",
- "sov_a3": "TKM",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Turkmenistan",
- "adm0_a3": "TKM",
- "geou_dif": 0,
- "geounit": "Turkmenistan",
- "gu_a3": "TKM",
- "su_dif": 0,
- "subunit": "Turkmenistan",
- "su_a3": "TKM",
- "brk_diff": 0,
- "name": "Turkmenistan",
- "name_long": "Turkmenistan",
- "brk_a3": "TKM",
- "brk_name": "Turkmenistan",
- "brk_group": null,
- "abbrev": "Turkm.",
- "postal": "TM",
- "formal_en": "Turkmenistan",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Turkmenistan",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 2,
- "mapcolor9": 1,
- "mapcolor13": 9,
- "pop_est": 4884887,
- "gdp_md_est": 29780,
- "pop_year": -99,
- "lastcensus": 1995,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "TM",
- "iso_a3": "TKM",
- "iso_n3": "795",
- "un_a3": "795",
- "wb_a2": "TM",
- "wb_a3": "TKM",
- "woe_id": -99,
- "adm0_a3_is": "TKM",
- "adm0_a3_us": "TKM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Central Asia",
- "region_wb": "Europe & Central Asia",
- "name_len": 12,
- "long_len": 12,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1770
- ]
- ],
- [
- [
- -6,
- -1104,
- 1771,
- -1181,
- 1772
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "East Timor",
- "sov_a3": "TLS",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "East Timor",
- "adm0_a3": "TLS",
- "geou_dif": 0,
- "geounit": "East Timor",
- "gu_a3": "TLS",
- "su_dif": 0,
- "subunit": "East Timor",
- "su_a3": "TLS",
- "brk_diff": 0,
- "name": "Timor-Leste",
- "name_long": "Timor-Leste",
- "brk_a3": "TLS",
- "brk_name": "Timor-Leste",
- "brk_group": null,
- "abbrev": "T.L.",
- "postal": "TL",
- "formal_en": "Democratic Republic of Timor-Leste",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Timor-Leste",
- "name_alt": "East Timor",
- "mapcolor7": 2,
- "mapcolor8": 2,
- "mapcolor9": 4,
- "mapcolor13": 3,
- "pop_est": 1131612,
- "gdp_md_est": 2520,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "TL",
- "iso_a3": "TLS",
- "iso_n3": "626",
- "un_a3": "626",
- "wb_a2": "TP",
- "wb_a3": "TMP",
- "woe_id": -99,
- "adm0_a3_is": "TLS",
- "adm0_a3_us": "TLS",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "South-Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 11,
- "long_len": 11,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1773,
- -936
- ]
- ],
- [
- [
- -938,
- 1774
- ]
- ],
- [
- [
- 1775
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Tonga",
- "sov_a3": "TON",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Tonga",
- "adm0_a3": "TON",
- "geou_dif": 0,
- "geounit": "Tonga",
- "gu_a3": "TON",
- "su_dif": 0,
- "subunit": "Tonga",
- "su_a3": "TON",
- "brk_diff": 0,
- "name": "Tonga",
- "name_long": "Tonga",
- "brk_a3": "TON",
- "brk_name": "Tonga",
- "brk_group": null,
- "abbrev": "Tongo",
- "postal": "TO",
- "formal_en": "Kingdom of Tonga",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Tonga",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 1,
- "mapcolor9": 1,
- "mapcolor13": 8,
- "pop_est": 120898,
- "gdp_md_est": 549,
- "pop_year": -99,
- "lastcensus": 2006,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "TO",
- "iso_a3": "TON",
- "iso_n3": "776",
- "un_a3": "776",
- "wb_a2": "TO",
- "wb_a3": "TON",
- "woe_id": -99,
- "adm0_a3_is": "TON",
- "adm0_a3_us": "TON",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Polynesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": 3,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1776
- ]
- ],
- [
- [
- 1777
- ]
- ],
- [
- [
- 1778
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 5,
- "sovereignt": "Trinidad and Tobago",
- "sov_a3": "TTO",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Trinidad and Tobago",
- "adm0_a3": "TTO",
- "geou_dif": 0,
- "geounit": "Trinidad and Tobago",
- "gu_a3": "TTO",
- "su_dif": 0,
- "subunit": "Trinidad and Tobago",
- "su_a3": "TTO",
- "brk_diff": 0,
- "name": "Trinidad and Tobago",
- "name_long": "Trinidad and Tobago",
- "brk_a3": "TTO",
- "brk_name": "Trinidad and Tobago",
- "brk_group": null,
- "abbrev": "Tr.T.",
- "postal": "TT",
- "formal_en": "Republic of Trinidad and Tobago",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Trinidad and Tobago",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 6,
- "mapcolor9": 2,
- "mapcolor13": 5,
- "pop_est": 1310000,
- "gdp_md_est": 29010,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "TT",
- "iso_a3": "TTO",
- "iso_n3": "780",
- "un_a3": "780",
- "wb_a2": "TT",
- "wb_a3": "TTO",
- "woe_id": -99,
- "adm0_a3_is": "TTO",
- "adm0_a3_us": "TTO",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 19,
- "long_len": 19,
- "abbrev_len": 5,
- "tiny": 2,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1779
- ]
- ],
- [
- [
- 1780
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Tunisia",
- "sov_a3": "TUN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Tunisia",
- "adm0_a3": "TUN",
- "geou_dif": 0,
- "geounit": "Tunisia",
- "gu_a3": "TUN",
- "su_dif": 0,
- "subunit": "Tunisia",
- "su_a3": "TUN",
- "brk_diff": 0,
- "name": "Tunisia",
- "name_long": "Tunisia",
- "brk_a3": "TUN",
- "brk_name": "Tunisia",
- "brk_group": null,
- "abbrev": "Tun.",
- "postal": "TN",
- "formal_en": "Republic of Tunisia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Tunisia",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 3,
- "mapcolor9": 3,
- "mapcolor13": 2,
- "pop_est": 10486339,
- "gdp_md_est": 81710,
- "pop_year": -99,
- "lastcensus": 2004,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "TN",
- "iso_a3": "TUN",
- "iso_n3": "788",
- "un_a3": "788",
- "wb_a2": "TN",
- "wb_a3": "TUN",
- "woe_id": -99,
- "adm0_a3_is": "TUN",
- "adm0_a3_us": "TUN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Northern Africa",
- "region_wb": "Middle East & North Africa",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1781
- ]
- ],
- [
- [
- 1782
- ]
- ],
- [
- [
- -1252,
- -658,
- 1783
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Turkey",
- "sov_a3": "TUR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Turkey",
- "adm0_a3": "TUR",
- "geou_dif": 0,
- "geounit": "Turkey",
- "gu_a3": "TUR",
- "su_dif": 0,
- "subunit": "Turkey",
- "su_a3": "TUR",
- "brk_diff": 0,
- "name": "Turkey",
- "name_long": "Turkey",
- "brk_a3": "TUR",
- "brk_name": "Turkey",
- "brk_group": null,
- "abbrev": "Tur.",
- "postal": "TR",
- "formal_en": "Republic of Turkey",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Turkey",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 3,
- "mapcolor9": 8,
- "mapcolor13": 4,
- "pop_est": 76805524,
- "gdp_md_est": 902700,
- "pop_year": -99,
- "lastcensus": 2000,
- "gdp_year": -99,
- "economy": "4. Emerging region: MIKT",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "TR",
- "iso_a3": "TUR",
- "iso_n3": "792",
- "un_a3": "792",
- "wb_a2": "TR",
- "wb_a3": "TUR",
- "woe_id": -99,
- "adm0_a3_is": "TUR",
- "adm0_a3_us": "TUR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Europe & Central Asia",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1784
- ]
- ],
- [
- [
- -802,
- -50,
- -220,
- -1109,
- -1115,
- -1753,
- 1785
- ]
- ],
- [
- [
- 1786,
- -868,
- -255
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Taiwan",
- "sov_a3": "TWN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Taiwan",
- "adm0_a3": "TWN",
- "geou_dif": 0,
- "geounit": "Taiwan",
- "gu_a3": "TWN",
- "su_dif": 0,
- "subunit": "Taiwan",
- "su_a3": "TWN",
- "brk_diff": 1,
- "name": "Taiwan",
- "name_long": "Taiwan",
- "brk_a3": "B77",
- "brk_name": "Taiwan",
- "brk_group": null,
- "abbrev": "Taiwan",
- "postal": "TW",
- "formal_en": null,
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": "Self admin.; Claimed by China",
- "name_sort": "Taiwan",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 5,
- "mapcolor9": 7,
- "mapcolor13": 2,
- "pop_est": 22974347,
- "gdp_md_est": 712000,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "TW",
- "iso_a3": "TWN",
- "iso_n3": "158",
- "un_a3": "-099",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "TWN",
- "adm0_a3_us": "TWN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1787
- ]
- ],
- [
- [
- 1788
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "United Republic of Tanzania",
- "sov_a3": "TZA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "United Republic of Tanzania",
- "adm0_a3": "TZA",
- "geou_dif": 0,
- "geounit": "Tanzania",
- "gu_a3": "TZA",
- "su_dif": 0,
- "subunit": "Tanzania",
- "su_a3": "TZA",
- "brk_diff": 0,
- "name": "Tanzania",
- "name_long": "Tanzania",
- "brk_a3": "TZA",
- "brk_name": "Tanzania",
- "brk_group": null,
- "abbrev": "Tanz.",
- "postal": "TZ",
- "formal_en": "United Republic of Tanzania",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Tanzania",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 6,
- "mapcolor9": 2,
- "mapcolor13": 2,
- "pop_est": 41048532,
- "gdp_md_est": 54250,
- "pop_year": -99,
- "lastcensus": 2002,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "TZ",
- "iso_a3": "TZA",
- "iso_n3": "834",
- "un_a3": "834",
- "wb_a2": "TZ",
- "wb_a3": "TZA",
- "woe_id": -99,
- "adm0_a3_is": "TZA",
- "adm0_a3_us": "TZA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1789
- ]
- ],
- [
- [
- 1790
- ]
- ],
- [
- [
- 1791
- ]
- ],
- [
- [
- -1187,
- 1792,
- -1344,
- -1355,
- 1793,
- -580,
- -225,
- -1688,
- 1794
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Uganda",
- "sov_a3": "UGA",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Uganda",
- "adm0_a3": "UGA",
- "geou_dif": 0,
- "geounit": "Uganda",
- "gu_a3": "UGA",
- "su_dif": 0,
- "subunit": "Uganda",
- "su_a3": "UGA",
- "brk_diff": 0,
- "name": "Uganda",
- "name_long": "Uganda",
- "brk_a3": "UGA",
- "brk_name": "Uganda",
- "brk_group": null,
- "abbrev": "Uga.",
- "postal": "UG",
- "formal_en": "Republic of Uganda",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Uganda",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 3,
- "mapcolor9": 6,
- "mapcolor13": 4,
- "pop_est": 32369558,
- "gdp_md_est": 39380,
- "pop_year": -99,
- "lastcensus": 2002,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "UG",
- "iso_a3": "UGA",
- "iso_n3": "800",
- "un_a3": "800",
- "wb_a2": "UG",
- "wb_a3": "UGA",
- "woe_id": -99,
- "adm0_a3_is": "UGA",
- "adm0_a3_us": "UGA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -1795,
- -1689,
- -578,
- -1701,
- -1188
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Ukraine",
- "sov_a3": "UKR",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Ukraine",
- "adm0_a3": "UKR",
- "geou_dif": 0,
- "geounit": "Ukraine",
- "gu_a3": "UKR",
- "su_dif": 0,
- "subunit": "Ukraine",
- "su_a3": "UKR",
- "brk_diff": 0,
- "name": "Ukraine",
- "name_long": "Ukraine",
- "brk_a3": "UKR",
- "brk_name": "Ukraine",
- "brk_group": null,
- "abbrev": "Ukr.",
- "postal": "UA",
- "formal_en": "Ukraine",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Ukraine",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 1,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 45700395,
- "gdp_md_est": 339800,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "UA",
- "iso_a3": "UKR",
- "iso_n3": "804",
- "un_a3": "804",
- "wb_a2": "UA",
- "wb_a3": "UKR",
- "woe_id": -99,
- "adm0_a3_is": "UKR",
- "adm0_a3_us": "UKR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Europe",
- "region_un": "Europe",
- "subregion": "Eastern Europe",
- "region_wb": "Europe & Central Asia",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1795
- ]
- ],
- [
- [
- 1796,
- -1581,
- -1274,
- -1584,
- -926,
- -1741,
- -1537,
- -283,
- -1655
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Uruguay",
- "sov_a3": "URY",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Uruguay",
- "adm0_a3": "URY",
- "geou_dif": 0,
- "geounit": "Uruguay",
- "gu_a3": "URY",
- "su_dif": 0,
- "subunit": "Uruguay",
- "su_a3": "URY",
- "brk_diff": 0,
- "name": "Uruguay",
- "name_long": "Uruguay",
- "brk_a3": "URY",
- "brk_name": "Uruguay",
- "brk_group": null,
- "abbrev": "Ury.",
- "postal": "UY",
- "formal_en": "Oriental Republic of Uruguay",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Uruguay",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 2,
- "mapcolor9": 2,
- "mapcolor13": 10,
- "pop_est": 3494382,
- "gdp_md_est": 43160,
- "pop_year": -99,
- "lastcensus": 2004,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "UY",
- "iso_a3": "URY",
- "iso_n3": "858",
- "un_a3": "858",
- "wb_a2": "UY",
- "wb_a3": "URY",
- "woe_id": -99,
- "adm0_a3_is": "URY",
- "adm0_a3_us": "URY",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "South America",
- "region_un": "Americas",
- "subregion": "South America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- 1797,
- -43,
- -316
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "United States of America",
- "sov_a3": "US1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Country",
- "admin": "United States of America",
- "adm0_a3": "USA",
- "geou_dif": 0,
- "geounit": "United States of America",
- "gu_a3": "USA",
- "su_dif": 0,
- "subunit": "United States of America",
- "su_a3": "USA",
- "brk_diff": 0,
- "name": "United States",
- "name_long": "United States",
- "brk_a3": "USA",
- "brk_name": "United States",
- "brk_group": null,
- "abbrev": "U.S.A.",
- "postal": "US",
- "formal_en": "United States of America",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "United States of America",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 5,
- "mapcolor9": 1,
- "mapcolor13": 1,
- "pop_est": 313973000,
- "gdp_md_est": 15094000,
- "pop_year": 0,
- "lastcensus": 2010,
- "gdp_year": 0,
- "economy": "1. Developed region: G7",
- "income_grp": "1. High income: OECD",
- "wikipedia": 0,
- "fips_10": null,
- "iso_a2": "US",
- "iso_a3": "USA",
- "iso_n3": "840",
- "un_a3": "840",
- "wb_a2": "US",
- "wb_a3": "USA",
- "woe_id": -99,
- "adm0_a3_is": "USA",
- "adm0_a3_us": "USA",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Northern America",
- "region_wb": "North America",
- "name_len": 13,
- "long_len": 13,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1798
- ]
- ],
- [
- [
- 1799
- ]
- ],
- [
- [
- 1800
- ]
- ],
- [
- [
- 1801
- ]
- ],
- [
- [
- 1802
- ]
- ],
- [
- [
- 1803
- ]
- ],
- [
- [
- 1804
- ]
- ],
- [
- [
- 1805
- ]
- ],
- [
- [
- 1806
- ]
- ],
- [
- [
- 1807
- ]
- ],
- [
- [
- 1808
- ]
- ],
- [
- [
- 1809
- ]
- ],
- [
- [
- 1810
- ]
- ],
- [
- [
- 1811
- ]
- ],
- [
- [
- 1812
- ]
- ],
- [
- [
- 1813
- ]
- ],
- [
- [
- 1814
- ]
- ],
- [
- [
- 1815
- ]
- ],
- [
- [
- 1816
- ]
- ],
- [
- [
- 1817
- ]
- ],
- [
- [
- 1818
- ]
- ],
- [
- [
- 1819
- ]
- ],
- [
- [
- 1820
- ]
- ],
- [
- [
- 1821
- ]
- ],
- [
- [
- 1822
- ]
- ],
- [
- [
- 1823
- ]
- ],
- [
- [
- 1824
- ]
- ],
- [
- [
- 1825
- ]
- ],
- [
- [
- 1826
- ]
- ],
- [
- [
- 1827
- ]
- ],
- [
- [
- 1828
- ]
- ],
- [
- [
- 1829
- ]
- ],
- [
- [
- 1830
- ]
- ],
- [
- [
- 1831
- ]
- ],
- [
- [
- 1832
- ]
- ],
- [
- [
- 1833
- ]
- ],
- [
- [
- 1834
- ]
- ],
- [
- [
- 1835
- ]
- ],
- [
- [
- 1836
- ]
- ],
- [
- [
- 1837
- ]
- ],
- [
- [
- 1838
- ]
- ],
- [
- [
- 1839
- ]
- ],
- [
- [
- 1840
- ]
- ],
- [
- [
- 1841
- ]
- ],
- [
- [
- 1842
- ]
- ],
- [
- [
- 1843
- ]
- ],
- [
- [
- 1844
- ]
- ],
- [
- [
- 1845
- ]
- ],
- [
- [
- 1846
- ]
- ],
- [
- [
- 1847
- ]
- ],
- [
- [
- 1848
- ]
- ],
- [
- [
- 1849
- ]
- ],
- [
- [
- 1850
- ]
- ],
- [
- [
- 1851
- ]
- ],
- [
- [
- 1852
- ]
- ],
- [
- [
- 1853
- ]
- ],
- [
- [
- 1854
- ]
- ],
- [
- [
- 1855
- ]
- ],
- [
- [
- -354,
- 1856,
- -1297,
- 1857,
- -440
- ]
- ],
- [
- [
- 1858
- ]
- ],
- [
- [
- 1859
- ]
- ],
- [
- [
- 1860
- ]
- ],
- [
- [
- 1861
- ]
- ],
- [
- [
- 1862
- ]
- ],
- [
- [
- 1863
- ]
- ],
- [
- [
- 1864
- ]
- ],
- [
- [
- 1865
- ]
- ],
- [
- [
- 1866
- ]
- ],
- [
- [
- 1867
- ]
- ],
- [
- [
- 1868
- ]
- ],
- [
- [
- 1869
- ]
- ],
- [
- [
- 1870
- ]
- ],
- [
- [
- 1871
- ]
- ],
- [
- [
- 1872
- ]
- ],
- [
- [
- 1873
- ]
- ],
- [
- [
- 1874
- ]
- ],
- [
- [
- 1875
- ]
- ],
- [
- [
- 1876
- ]
- ],
- [
- [
- 1877
- ]
- ],
- [
- [
- 1878
- ]
- ],
- [
- [
- 1879
- ]
- ],
- [
- [
- 1880
- ]
- ],
- [
- [
- 1881
- ]
- ],
- [
- [
- 1882
- ]
- ],
- [
- [
- 1883
- ]
- ],
- [
- [
- 1884
- ]
- ],
- [
- [
- 1885
- ]
- ],
- [
- [
- 1886
- ]
- ],
- [
- [
- 1887
- ]
- ],
- [
- [
- 1888
- ]
- ],
- [
- [
- 1889
- ]
- ],
- [
- [
- 1890
- ]
- ],
- [
- [
- 1891
- ]
- ],
- [
- [
- 1892
- ]
- ],
- [
- [
- 1893
- ]
- ],
- [
- [
- 1894
- ]
- ],
- [
- [
- 1895
- ]
- ],
- [
- [
- 1896
- ]
- ],
- [
- [
- 1897
- ]
- ],
- [
- [
- 1898
- ]
- ],
- [
- [
- 1899
- ]
- ],
- [
- [
- 1900
- ]
- ],
- [
- [
- 1901
- ]
- ],
- [
- [
- 1902
- ]
- ],
- [
- [
- 1903
- ]
- ],
- [
- [
- 1904
- ]
- ],
- [
- [
- 1905
- ]
- ],
- [
- [
- 1906
- ]
- ],
- [
- [
- 1907
- ]
- ],
- [
- [
- 1908
- ]
- ],
- [
- [
- 1909
- ]
- ],
- [
- [
- 1910
- ]
- ],
- [
- [
- 1911
- ]
- ],
- [
- [
- 1912
- ]
- ],
- [
- [
- 1913
- ]
- ],
- [
- [
- 1914
- ]
- ],
- [
- [
- 1915
- ]
- ],
- [
- [
- 1916
- ]
- ],
- [
- [
- 1917
- ]
- ],
- [
- [
- 1918
- ]
- ],
- [
- [
- 1919
- ]
- ],
- [
- [
- 1920
- ]
- ],
- [
- [
- 1921
- ]
- ],
- [
- [
- 1922
- ]
- ],
- [
- [
- 1923
- ]
- ],
- [
- [
- 1924
- ]
- ],
- [
- [
- -442,
- 1925,
- -382,
- 1926
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Uzbekistan",
- "sov_a3": "UZB",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Uzbekistan",
- "adm0_a3": "UZB",
- "geou_dif": 0,
- "geounit": "Uzbekistan",
- "gu_a3": "UZB",
- "su_dif": 0,
- "subunit": "Uzbekistan",
- "su_a3": "UZB",
- "brk_diff": 0,
- "name": "Uzbekistan",
- "name_long": "Uzbekistan",
- "brk_a3": "UZB",
- "brk_name": "Uzbekistan",
- "brk_group": null,
- "abbrev": "Uzb.",
- "postal": "UZ",
- "formal_en": "Republic of Uzbekistan",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Uzbekistan",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 3,
- "mapcolor9": 5,
- "mapcolor13": 4,
- "pop_est": 27606007,
- "gdp_md_est": 71670,
- "pop_year": -99,
- "lastcensus": 1989,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "UZ",
- "iso_a3": "UZB",
- "iso_n3": "860",
- "un_a3": "860",
- "wb_a2": "UZ",
- "wb_a3": "UZB",
- "woe_id": -99,
- "adm0_a3_is": "UZB",
- "adm0_a3_us": "UZB",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Central Asia",
- "region_wb": "Europe & Central Asia",
- "name_len": 10,
- "long_len": 10,
- "abbrev_len": 4,
- "tiny": 5,
- "homepart": 1
- },
- "arcs": [
- [
- [
- -1193
- ]
- ],
- [
- [
- -1194
- ]
- ],
- [
- [
- -1191,
- -1770,
- -7,
- -1773,
- -1180
- ],
- [
- -1769
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "Saint Vincent and the Grenadines",
- "sov_a3": "VCT",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Saint Vincent and the Grenadines",
- "adm0_a3": "VCT",
- "geou_dif": 0,
- "geounit": "Saint Vincent and the Grenadines",
- "gu_a3": "VCT",
- "su_dif": 0,
- "subunit": "Saint Vincent and the Grenadines",
- "su_a3": "VCT",
- "brk_diff": 0,
- "name": "St. Vin. and Gren.",
- "name_long": "Saint Vincent and the Grenadines",
- "brk_a3": "VCT",
- "brk_name": "St. Vin. and Gren.",
- "brk_group": null,
- "abbrev": "St.V.G.",
- "postal": "VC",
- "formal_en": "Saint Vincent and the Grenadines",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "St. Vincent and the Grenadines",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 1,
- "mapcolor9": 5,
- "mapcolor13": 7,
- "pop_est": 104574,
- "gdp_md_est": 1070,
- "pop_year": -99,
- "lastcensus": 2011,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "VC",
- "iso_a3": "VCT",
- "iso_n3": "670",
- "un_a3": "670",
- "wb_a2": "VC",
- "wb_a3": "VCT",
- "woe_id": -99,
- "adm0_a3_is": "VCT",
- "adm0_a3_us": "VCT",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 18,
- "long_len": 32,
- "abbrev_len": 7,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1927
- ]
- ],
- [
- [
- 1928
- ]
- ],
- [
- [
- 1929
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Venezuela",
- "sov_a3": "VEN",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Venezuela",
- "adm0_a3": "VEN",
- "geou_dif": 0,
- "geounit": "Venezuela",
- "gu_a3": "VEN",
- "su_dif": 0,
- "subunit": "Venezuela",
- "su_a3": "VEN",
- "brk_diff": 0,
- "name": "Venezuela",
- "name_long": "Venezuela",
- "brk_a3": "VEN",
- "brk_name": "Venezuela",
- "brk_group": null,
- "abbrev": "Ven.",
- "postal": "VE",
- "formal_en": "Bolivarian Republic of Venezuela",
- "formal_fr": "República Bolivariana de Venezuela",
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Venezuela, RB",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 3,
- "mapcolor9": 1,
- "mapcolor13": 4,
- "pop_est": 26814843,
- "gdp_md_est": 357400,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "VE",
- "iso_a3": "VEN",
- "iso_n3": "862",
- "un_a3": "862",
- "wb_a2": "VE",
- "wb_a3": "VEN",
- "woe_id": -99,
- "adm0_a3_is": "VEN",
- "adm0_a3_us": "VEN",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "South America",
- "region_un": "Americas",
- "subregion": "South America",
- "region_wb": "Latin America & Caribbean",
- "name_len": 9,
- "long_len": 9,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1930
- ]
- ],
- [
- [
- 1931
- ]
- ],
- [
- [
- 1932
- ]
- ],
- [
- [
- 1933
- ]
- ],
- [
- [
- -894,
- -320,
- -588,
- 1934
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "United Kingdom",
- "sov_a3": "GB1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "British Virgin Islands",
- "adm0_a3": "VGB",
- "geou_dif": 0,
- "geounit": "British Virgin Islands",
- "gu_a3": "VGB",
- "su_dif": 0,
- "subunit": "British Virgin Islands",
- "su_a3": "VGB",
- "brk_diff": 0,
- "name": "British Virgin Is.",
- "name_long": "British Virgin Islands",
- "brk_a3": "VGB",
- "brk_name": "British Virgin Is.",
- "brk_group": null,
- "abbrev": "V.I. (Br.)",
- "postal": "VG",
- "formal_en": "British Virgin Islands",
- "formal_fr": null,
- "note_adm0": "U.K.",
- "note_brk": null,
- "name_sort": "British Virgin Islands",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 6,
- "mapcolor9": 6,
- "mapcolor13": 3,
- "pop_est": 24491,
- "gdp_md_est": 853.4,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "2. Developed region: nonG7",
- "income_grp": "1. High income: OECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "VG",
- "iso_a3": "VGB",
- "iso_n3": "092",
- "un_a3": "092",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "VGB",
- "adm0_a3_us": "VGB",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 18,
- "long_len": 22,
- "abbrev_len": 10,
- "tiny": 3,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 1935
- ]
- ],
- [
- [
- 1936
- ]
- ],
- [
- [
- 1937
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 6,
- "sovereignt": "United States of America",
- "sov_a3": "US1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "United States Virgin Islands",
- "adm0_a3": "VIR",
- "geou_dif": 0,
- "geounit": "United States Virgin Islands",
- "gu_a3": "VIR",
- "su_dif": 0,
- "subunit": "United States Virgin Islands",
- "su_a3": "VIR",
- "brk_diff": 0,
- "name": "U.S. Virgin Is.",
- "name_long": "United States Virgin Islands",
- "brk_a3": "VIR",
- "brk_name": "U.S. Virgin Is.",
- "brk_group": null,
- "abbrev": "V.I. (U.S.)",
- "postal": "VI",
- "formal_en": "Virgin Islands of the United States",
- "formal_fr": null,
- "note_adm0": "U.S.A.",
- "note_brk": null,
- "name_sort": "Virgin Islands (U.S.)",
- "name_alt": null,
- "mapcolor7": 4,
- "mapcolor8": 5,
- "mapcolor9": 1,
- "mapcolor13": 1,
- "pop_est": 109825,
- "gdp_md_est": 1577,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "2. High income: nonOECD",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "VI",
- "iso_a3": "VIR",
- "iso_n3": "850",
- "un_a3": "850",
- "wb_a2": "VI",
- "wb_a3": "VIR",
- "woe_id": -99,
- "adm0_a3_is": "VIR",
- "adm0_a3_us": "VIR",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "North America",
- "region_un": "Americas",
- "subregion": "Caribbean",
- "region_wb": "Latin America & Caribbean",
- "name_len": 15,
- "long_len": 28,
- "abbrev_len": 11,
- "tiny": 3,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 1938
- ]
- ],
- [
- [
- 1939
- ]
- ],
- [
- [
- 1940
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "Vietnam",
- "sov_a3": "VNM",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Vietnam",
- "adm0_a3": "VNM",
- "geou_dif": 0,
- "geounit": "Vietnam",
- "gu_a3": "VNM",
- "su_dif": 0,
- "subunit": "Vietnam",
- "su_a3": "VNM",
- "brk_diff": 0,
- "name": "Vietnam",
- "name_long": "Vietnam",
- "brk_a3": "VNM",
- "brk_name": "Vietnam",
- "brk_group": null,
- "abbrev": "Viet.",
- "postal": "VN",
- "formal_en": "Socialist Republic of Vietnam",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Vietnam",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 6,
- "mapcolor9": 5,
- "mapcolor13": 4,
- "pop_est": 86967524,
- "gdp_md_est": 241700,
- "pop_year": -99,
- "lastcensus": 2009,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "VN",
- "iso_a3": "VNM",
- "iso_n3": "704",
- "un_a3": "704",
- "wb_a2": "VN",
- "wb_a3": "VNM",
- "woe_id": -99,
- "adm0_a3_is": "VNM",
- "adm0_a3_us": "VNM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "South-Eastern Asia",
- "region_wb": "East Asia & Pacific",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 5,
- "tiny": 2,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1941
- ]
- ],
- [
- [
- 1942
- ]
- ],
- [
- [
- 1943
- ]
- ],
- [
- [
- 1944
- ]
- ],
- [
- [
- 1945
- ]
- ],
- [
- [
- 1946
- ]
- ],
- [
- [
- 1947
- ]
- ],
- [
- [
- 1948,
- -1200,
- -1242,
- 1949,
- -1240,
- -538
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Vanuatu",
- "sov_a3": "VUT",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Vanuatu",
- "adm0_a3": "VUT",
- "geou_dif": 0,
- "geounit": "Vanuatu",
- "gu_a3": "VUT",
- "su_dif": 0,
- "subunit": "Vanuatu",
- "su_a3": "VUT",
- "brk_diff": 0,
- "name": "Vanuatu",
- "name_long": "Vanuatu",
- "brk_a3": "VUT",
- "brk_name": "Vanuatu",
- "brk_group": null,
- "abbrev": "Van.",
- "postal": "VU",
- "formal_en": "Republic of Vanuatu",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Vanuatu",
- "name_alt": null,
- "mapcolor7": 6,
- "mapcolor8": 3,
- "mapcolor9": 7,
- "mapcolor13": 3,
- "pop_est": 218519,
- "gdp_md_est": 988.5,
- "pop_year": -99,
- "lastcensus": 2009,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "VU",
- "iso_a3": "VUT",
- "iso_n3": "548",
- "un_a3": "548",
- "wb_a2": "VU",
- "wb_a3": "VUT",
- "woe_id": -99,
- "adm0_a3_is": "VUT",
- "adm0_a3_us": "VUT",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Melanesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 7,
- "long_len": 7,
- "abbrev_len": 4,
- "tiny": 2,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1950
- ]
- ],
- [
- [
- 1951
- ]
- ],
- [
- [
- 1952
- ]
- ],
- [
- [
- 1953
- ]
- ],
- [
- [
- 1954
- ]
- ],
- [
- [
- 1955
- ]
- ],
- [
- [
- 1956
- ]
- ],
- [
- [
- 1957
- ]
- ],
- [
- [
- 1958
- ]
- ],
- [
- [
- 1959
- ]
- ],
- [
- [
- 1960
- ]
- ],
- [
- [
- 1961
- ]
- ],
- [
- [
- 1962
- ]
- ],
- [
- [
- 1963
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 3,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "France",
- "sov_a3": "FR1",
- "adm0_dif": 1,
- "level": 2,
- "type": "Dependency",
- "admin": "Wallis and Futuna",
- "adm0_a3": "WLF",
- "geou_dif": 0,
- "geounit": "Wallis and Futuna",
- "gu_a3": "WLF",
- "su_dif": 0,
- "subunit": "Wallis and Futuna",
- "su_a3": "WLF",
- "brk_diff": 0,
- "name": "Wallis and Futuna Is.",
- "name_long": "Wallis and Futuna Islands",
- "brk_a3": "WLF",
- "brk_name": "Wallis and Futuna Islands",
- "brk_group": null,
- "abbrev": "Wlf.",
- "postal": "WF",
- "formal_en": "Wallis and Futuna Islands",
- "formal_fr": null,
- "note_adm0": "Fr.",
- "note_brk": null,
- "name_sort": "Wallis and Futuna",
- "name_alt": null,
- "mapcolor7": 7,
- "mapcolor8": 5,
- "mapcolor9": 9,
- "mapcolor13": 11,
- "pop_est": 15289,
- "gdp_md_est": 60,
- "pop_year": -99,
- "lastcensus": -99,
- "gdp_year": -99,
- "economy": "6. Developing region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "WF",
- "iso_a3": "WLF",
- "iso_n3": "876",
- "un_a3": "876",
- "wb_a2": "-99",
- "wb_a3": "-99",
- "woe_id": -99,
- "adm0_a3_is": "WLF",
- "adm0_a3_us": "WLF",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Polynesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 21,
- "long_len": 25,
- "abbrev_len": 4,
- "tiny": 3,
- "homepart": -99
- },
- "arcs": [
- [
- [
- 1964
- ]
- ],
- [
- [
- 1965
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 4,
- "sovereignt": "Samoa",
- "sov_a3": "WSM",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Samoa",
- "adm0_a3": "WSM",
- "geou_dif": 0,
- "geounit": "Samoa",
- "gu_a3": "WSM",
- "su_dif": 0,
- "subunit": "Samoa",
- "su_a3": "WSM",
- "brk_diff": 0,
- "name": "Samoa",
- "name_long": "Samoa",
- "brk_a3": "WSM",
- "brk_name": "Samoa",
- "brk_group": null,
- "abbrev": "Samoa",
- "postal": "WS",
- "formal_en": "Independent State of Samoa",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Samoa",
- "name_alt": null,
- "mapcolor7": 3,
- "mapcolor8": 3,
- "mapcolor9": 4,
- "mapcolor13": 6,
- "pop_est": 219998,
- "gdp_md_est": 1049,
- "pop_year": -99,
- "lastcensus": 2006,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "WS",
- "iso_a3": "WSM",
- "iso_n3": "882",
- "un_a3": "882",
- "wb_a2": "WS",
- "wb_a3": "WSM",
- "woe_id": -99,
- "adm0_a3_is": "WSM",
- "adm0_a3_us": "WSM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Oceania",
- "region_un": "Oceania",
- "subregion": "Polynesia",
- "region_wb": "East Asia & Pacific",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1966
- ]
- ],
- [
- [
- 1967
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Yemen",
- "sov_a3": "YEM",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Yemen",
- "adm0_a3": "YEM",
- "geou_dif": 0,
- "geounit": "Yemen",
- "gu_a3": "YEM",
- "su_dif": 0,
- "subunit": "Yemen",
- "su_a3": "YEM",
- "brk_diff": 0,
- "name": "Yemen",
- "name_long": "Yemen",
- "brk_a3": "YEM",
- "brk_name": "Yemen",
- "brk_group": null,
- "abbrev": "Yem.",
- "postal": "YE",
- "formal_en": "Republic of Yemen",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Yemen, Rep.",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 3,
- "mapcolor9": 3,
- "mapcolor13": 11,
- "pop_est": 23822783,
- "gdp_md_est": 55280,
- "pop_year": -99,
- "lastcensus": 2004,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "YE",
- "iso_a3": "YEM",
- "iso_n3": "887",
- "un_a3": "887",
- "wb_a2": "RY",
- "wb_a3": "YEM",
- "woe_id": -99,
- "adm0_a3_is": "YEM",
- "adm0_a3_us": "YEM",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Asia",
- "region_un": "Asia",
- "subregion": "Western Asia",
- "region_wb": "Middle East & North Africa",
- "name_len": 5,
- "long_len": 5,
- "abbrev_len": 4,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1968
- ]
- ],
- [
- [
- 1969
- ]
- ],
- [
- [
- 1970
- ]
- ],
- [
- [
- 1971
- ]
- ],
- [
- [
- 1972,
- -1696,
- -1447
- ]
- ]
- ]
- },
- {
- "type": "MultiPolygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 2,
- "sovereignt": "South Africa",
- "sov_a3": "ZAF",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "South Africa",
- "adm0_a3": "ZAF",
- "geou_dif": 0,
- "geounit": "South Africa",
- "gu_a3": "ZAF",
- "su_dif": 0,
- "subunit": "South Africa",
- "su_a3": "ZAF",
- "brk_diff": 0,
- "name": "South Africa",
- "name_long": "South Africa",
- "brk_a3": "ZAF",
- "brk_name": "South Africa",
- "brk_group": null,
- "abbrev": "S.Af.",
- "postal": "ZA",
- "formal_en": "Republic of South Africa",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "South Africa",
- "name_alt": null,
- "mapcolor7": 2,
- "mapcolor8": 3,
- "mapcolor9": 4,
- "mapcolor13": 2,
- "pop_est": 49052489,
- "gdp_md_est": 491000,
- "pop_year": -99,
- "lastcensus": 2001,
- "gdp_year": -99,
- "economy": "5. Emerging region: G20",
- "income_grp": "3. Upper middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "ZA",
- "iso_a3": "ZAF",
- "iso_n3": "710",
- "un_a3": "710",
- "wb_a2": "ZA",
- "wb_a3": "ZAF",
- "woe_id": -99,
- "adm0_a3_is": "ZAF",
- "adm0_a3_us": "ZAF",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Southern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 12,
- "long_len": 12,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- [
- 1973
- ]
- ],
- [
- [
- -1340,
- -1749,
- -1338,
- 1974,
- -1368,
- -330,
- 1975
- ],
- [
- -1258
- ]
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Zambia",
- "sov_a3": "ZMB",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Zambia",
- "adm0_a3": "ZMB",
- "geou_dif": 0,
- "geounit": "Zambia",
- "gu_a3": "ZMB",
- "su_dif": 0,
- "subunit": "Zambia",
- "su_a3": "ZMB",
- "brk_diff": 0,
- "name": "Zambia",
- "name_long": "Zambia",
- "brk_a3": "ZMB",
- "brk_name": "Zambia",
- "brk_group": null,
- "abbrev": "Zambia",
- "postal": "ZM",
- "formal_en": "Republic of Zambia",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Zambia",
- "name_alt": null,
- "mapcolor7": 5,
- "mapcolor8": 8,
- "mapcolor9": 5,
- "mapcolor13": 13,
- "pop_est": 11862740,
- "gdp_md_est": 17500,
- "pop_year": -99,
- "lastcensus": 2010,
- "gdp_year": -99,
- "economy": "7. Least developed region",
- "income_grp": "4. Lower middle income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "ZM",
- "iso_a3": "ZMB",
- "iso_n3": "894",
- "un_a3": "894",
- "wb_a2": "ZM",
- "wb_a3": "ZMB",
- "woe_id": -99,
- "adm0_a3_is": "ZMB",
- "adm0_a3_us": "ZMB",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 6,
- "long_len": 6,
- "abbrev_len": 6,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -1354,
- -1342,
- 1976,
- -1367,
- -9,
- -581,
- -1794
- ]
- ]
- },
- {
- "type": "Polygon",
- "properties": {
- "scalerank": 1,
- "featurecla": "Admin-0 country",
- "labelrank": 3,
- "sovereignt": "Zimbabwe",
- "sov_a3": "ZWE",
- "adm0_dif": 0,
- "level": 2,
- "type": "Sovereign country",
- "admin": "Zimbabwe",
- "adm0_a3": "ZWE",
- "geou_dif": 0,
- "geounit": "Zimbabwe",
- "gu_a3": "ZWE",
- "su_dif": 0,
- "subunit": "Zimbabwe",
- "su_a3": "ZWE",
- "brk_diff": 0,
- "name": "Zimbabwe",
- "name_long": "Zimbabwe",
- "brk_a3": "ZWE",
- "brk_name": "Zimbabwe",
- "brk_group": null,
- "abbrev": "Zimb.",
- "postal": "ZW",
- "formal_en": "Republic of Zimbabwe",
- "formal_fr": null,
- "note_adm0": null,
- "note_brk": null,
- "name_sort": "Zimbabwe",
- "name_alt": null,
- "mapcolor7": 1,
- "mapcolor8": 5,
- "mapcolor9": 3,
- "mapcolor13": 9,
- "pop_est": 12619600,
- "gdp_md_est": 9323,
- "pop_year": 0,
- "lastcensus": 2002,
- "gdp_year": 0,
- "economy": "5. Emerging region: G20",
- "income_grp": "5. Low income",
- "wikipedia": -99,
- "fips_10": null,
- "iso_a2": "ZW",
- "iso_a3": "ZWE",
- "iso_n3": "716",
- "un_a3": "716",
- "wb_a2": "ZW",
- "wb_a3": "ZWE",
- "woe_id": -99,
- "adm0_a3_is": "ZWE",
- "adm0_a3_us": "ZWE",
- "adm0_a3_un": -99,
- "adm0_a3_wb": -99,
- "continent": "Africa",
- "region_un": "Africa",
- "subregion": "Eastern Africa",
- "region_wb": "Sub-Saharan Africa",
- "name_len": 8,
- "long_len": 8,
- "abbrev_len": 5,
- "tiny": -99,
- "homepart": 1
- },
- "arcs": [
- [
- -1976,
- -329,
- -1977,
- -1341
- ]
- ]
- }
- ]
- }
- },
- "arcs": [
- [
- [
- 3058,
- 5901
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 7080,
- 7328
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 7070,
- 7316
- ],
- [
- -3,
- -2
- ],
- [
- -7,
- -5
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- -9,
- 0
- ],
- [
- -8,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -7
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -6,
- -4
- ],
- [
- -5,
- -2
- ],
- [
- -7,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -7,
- 4
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -7
- ],
- [
- 5,
- -10
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -9
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -5,
- -5
- ],
- [
- -4,
- -5
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -11
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -11
- ],
- [
- 1,
- -18
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -8,
- -7
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -9
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -11
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -11
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -3
- ],
- [
- -9,
- -4
- ],
- [
- -5,
- -3
- ],
- [
- -8,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -11,
- 4
- ],
- [
- -30,
- -5
- ],
- [
- -3,
- 1
- ],
- [
- -10,
- 6
- ],
- [
- -14,
- 7
- ],
- [
- -8,
- 5
- ],
- [
- -11,
- 7
- ]
- ],
- [
- [
- 6689,
- 6904
- ],
- [
- 8,
- 15
- ]
- ],
- [
- [
- 6697,
- 6919
- ],
- [
- 6,
- 14
- ],
- [
- 6,
- 13
- ],
- [
- 7,
- 14
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 10
- ],
- [
- -1,
- 12
- ],
- [
- -3,
- 5
- ],
- [
- -9,
- 3
- ],
- [
- -6,
- 1
- ],
- [
- -7,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 11
- ],
- [
- 0,
- 4
- ],
- [
- -3,
- 21
- ],
- [
- -2,
- 11
- ],
- [
- -2,
- 11
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 4,
- 11
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- -2,
- 15
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 7,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ]
- ],
- [
- [
- 6701,
- 7235
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 4,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 12
- ],
- [
- 2,
- 12
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- -4
- ],
- [
- 6,
- -5
- ],
- [
- 6,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 6847,
- 7335
- ],
- [
- 9,
- 1
- ],
- [
- 6,
- -2
- ],
- [
- 4,
- -6
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 6882,
- 7325
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -6
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 7
- ],
- [
- 3,
- 8
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- -2
- ],
- [
- 6,
- -7
- ],
- [
- 2,
- -8
- ],
- [
- -2,
- -9
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -11
- ],
- [
- -1,
- -10
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -9
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -10
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 4
- ],
- [
- 6,
- 8
- ],
- [
- 5,
- 5
- ],
- [
- 9,
- 3
- ],
- [
- 2,
- 8
- ],
- [
- 4,
- 5
- ],
- [
- 9,
- 8
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5665,
- 4558
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -10
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -14
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -9
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -8,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -8,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -8,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -18
- ],
- [
- 0,
- -19
- ],
- [
- 0,
- -18
- ],
- [
- 0,
- -19
- ],
- [
- 0,
- -18
- ],
- [
- 0,
- -19
- ],
- [
- 0,
- -18
- ],
- [
- 0,
- -19
- ],
- [
- 0,
- -13
- ],
- [
- 2,
- -18
- ],
- [
- 3,
- -19
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -8
- ],
- [
- 3,
- -5
- ],
- [
- 5,
- -10
- ],
- [
- 6,
- -12
- ],
- [
- 6,
- -11
- ],
- [
- 6,
- -9
- ]
- ],
- [
- [
- 5649,
- 4168
- ],
- [
- -9,
- -4
- ],
- [
- -12,
- -4
- ],
- [
- -8,
- -4
- ],
- [
- -11,
- -4
- ],
- [
- -6,
- -2
- ],
- [
- -9,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -6,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -6,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- -8,
- 1
- ],
- [
- -7,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 8
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -8,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -10,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -10,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -10,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -2
- ]
- ],
- [
- [
- 5326,
- 4190
- ],
- [
- 1,
- 22
- ],
- [
- 1,
- 10
- ],
- [
- 0,
- 11
- ],
- [
- -1,
- 30
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 16
- ],
- [
- 6,
- 35
- ],
- [
- 2,
- 34
- ],
- [
- 4,
- 17
- ],
- [
- 1,
- 18
- ],
- [
- 10,
- 23
- ],
- [
- 2,
- 15
- ],
- [
- 5,
- 7
- ],
- [
- 7,
- 8
- ],
- [
- 5,
- 13
- ],
- [
- 3,
- 9
- ],
- [
- 2,
- 18
- ],
- [
- 0,
- 19
- ],
- [
- 2,
- 25
- ],
- [
- 0,
- 7
- ],
- [
- -3,
- 10
- ],
- [
- 0,
- 7
- ],
- [
- -3,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 9
- ],
- [
- -4,
- 15
- ],
- [
- -1,
- 10
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 9
- ],
- [
- -1,
- 9
- ],
- [
- -2,
- 9
- ],
- [
- -2,
- 11
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 9,
- 18
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- -8,
- 34
- ],
- [
- -6,
- 31
- ],
- [
- -1,
- 16
- ],
- [
- -9,
- 21
- ],
- [
- -3,
- 14
- ],
- [
- -2,
- 9
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 3
- ],
- [
- 7,
- 2
- ],
- [
- 6,
- 6
- ],
- [
- 1,
- 2
- ]
- ],
- [
- [
- 5362,
- 4846
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 8,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 9,
- 1
- ],
- [
- 8,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -9
- ],
- [
- 3,
- -10
- ],
- [
- 2,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -9
- ],
- [
- 5,
- -15
- ],
- [
- 4,
- -11
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 5
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 1,
- 15
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 4,
- 6
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 8,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -10
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 8,
- -1
- ],
- [
- 8,
- 0
- ],
- [
- 9,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -10
- ],
- [
- -2,
- -15
- ],
- [
- 1,
- -14
- ],
- [
- 3,
- -14
- ],
- [
- 0,
- -20
- ],
- [
- -1,
- -12
- ],
- [
- -1,
- -15
- ],
- [
- -1,
- -18
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -7
- ],
- [
- 4,
- -8
- ],
- [
- 3,
- -11
- ],
- [
- 2,
- -12
- ],
- [
- 1,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -8
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 6
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ]
- ],
- [
- [
- 5339,
- 4852
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 8
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 10
- ],
- [
- -1,
- 2
- ]
- ],
- [
- [
- 5333,
- 4896
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5363,
- 4917
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -10
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -16
- ],
- [
- 0,
- -15
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 3250,
- 6233
- ],
- [
- -5,
- -3
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 5557,
- 7634
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -9
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5571,
- 7596
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5582,
- 7537
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 5555,
- 7471
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 10
- ],
- [
- -10,
- 10
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 8
- ],
- [
- 0,
- 10
- ],
- [
- 1,
- 8
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 9
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 0
- ]
- ],
- [
- [
- 5537,
- 7595
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5572,
- 8642
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 5546,
- 8650
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 5555,
- 8660
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -7,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 5047,
- 7632
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ]
- ],
- [
- [
- 5039,
- 7637
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 6497,
- 6576
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 6461,
- 6583
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 6481,
- 6581
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 6512,
- 6592
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 6563,
- 6661
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -32
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 6566,
- 6623
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -11
- ],
- [
- -2,
- -9
- ],
- [
- -1,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -8
- ]
- ],
- [
- [
- 6532,
- 6492
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -5,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 2
- ]
- ],
- [
- [
- 6432,
- 6583
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -11
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 7,
- 7
- ],
- [
- 4,
- 2
- ],
- [
- 10,
- 0
- ],
- [
- 9,
- -3
- ],
- [
- 13,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- 5
- ],
- [
- 5,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 10,
- 13
- ],
- [
- 6,
- 11
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 6
- ],
- [
- 11,
- 17
- ],
- [
- 3,
- 8
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 6557,
- 6685
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 6561,
- 6636
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 3207,
- 2032
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -8,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ]
- ],
- [
- [
- 3093,
- 2024
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 18
- ],
- [
- 0,
- 15
- ],
- [
- 0,
- 16
- ],
- [
- 0,
- 15
- ],
- [
- 0,
- 16
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ]
- ],
- [
- [
- 3093,
- 2151
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- -12
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 6,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -14
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -7
- ],
- [
- 5,
- -8
- ],
- [
- 5,
- -7
- ],
- [
- 7,
- -6
- ],
- [
- 5,
- -4
- ],
- [
- 6,
- -6
- ],
- [
- 6,
- -7
- ],
- [
- 6,
- -5
- ],
- [
- 7,
- -4
- ],
- [
- 6,
- -3
- ],
- [
- 11,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -8,
- 5
- ],
- [
- -6,
- 1
- ],
- [
- -18,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 3281,
- 2928
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 3259,
- 3903
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 5,
- -5
- ],
- [
- 5,
- -10
- ],
- [
- 4,
- -14
- ],
- [
- 3,
- -11
- ],
- [
- 4,
- -7
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -6
- ],
- [
- 4,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 6,
- -6
- ],
- [
- 9,
- -6
- ],
- [
- 7,
- -3
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- -5
- ],
- [
- 8,
- -10
- ],
- [
- 5,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 6,
- -6
- ],
- [
- 12,
- -13
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -4
- ],
- [
- 4,
- -5
- ],
- [
- 4,
- -11
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 12,
- 2
- ],
- [
- 10,
- -3
- ],
- [
- 11,
- -6
- ],
- [
- 8,
- -2
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 12
- ],
- [
- 1,
- 18
- ],
- [
- 1,
- 25
- ]
- ],
- [
- [
- 3483,
- 3711
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -12
- ],
- [
- 2,
- -8
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -8
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -8
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -8
- ],
- [
- -5,
- -10
- ],
- [
- -4,
- -7
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -6
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 3399,
- 3445
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -4,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -9
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -9
- ]
- ],
- [
- [
- 3383,
- 3313
- ],
- [
- -1,
- -5
- ],
- [
- 2,
- -23
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -10
- ],
- [
- -3,
- -22
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -9
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -8
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -9
- ],
- [
- 1,
- -4
- ],
- [
- 4,
- -9
- ],
- [
- 14,
- -12
- ],
- [
- 6,
- -7
- ],
- [
- 7,
- -10
- ],
- [
- 4,
- -10
- ],
- [
- 0,
- -8
- ],
- [
- -5,
- -13
- ],
- [
- -1,
- -10
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -7
- ],
- [
- 5,
- -9
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -18
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -6
- ],
- [
- -10,
- -28
- ],
- [
- -9,
- -17
- ],
- [
- -3,
- -10
- ],
- [
- -1,
- -10
- ],
- [
- -3,
- -5
- ],
- [
- -14,
- -15
- ],
- [
- -23,
- -14
- ],
- [
- -19,
- -7
- ],
- [
- -4,
- -2
- ],
- [
- -30,
- -8
- ],
- [
- -6,
- -1
- ],
- [
- -7,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- -6,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -8
- ],
- [
- -1,
- -9
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- -4,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -15
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -14
- ],
- [
- 0,
- -10
- ],
- [
- 1,
- -6
- ],
- [
- 4,
- -12
- ],
- [
- -2,
- -8
- ],
- [
- -3,
- -4
- ],
- [
- -11,
- -9
- ],
- [
- -4,
- -4
- ],
- [
- -7,
- -3
- ],
- [
- -12,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -10,
- 8
- ],
- [
- -7,
- 5
- ],
- [
- -6,
- 4
- ],
- [
- -7,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -9
- ],
- [
- 1,
- -7
- ],
- [
- 3,
- -19
- ],
- [
- 0,
- -11
- ],
- [
- -2,
- -13
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -4
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -5,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -9,
- -4
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- -6
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- 11,
- -9
- ],
- [
- 6,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -8,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -6
- ],
- [
- -6,
- -13
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -9
- ],
- [
- 2,
- -15
- ],
- [
- -2,
- -7
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -7
- ],
- [
- -8,
- -11
- ],
- [
- -1,
- -7
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -12,
- 3
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -8,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -9,
- -18
- ],
- [
- -3,
- -12
- ],
- [
- -5,
- -11
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -7
- ],
- [
- 17,
- -26
- ],
- [
- 3,
- -2
- ],
- [
- 18,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -13
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- -4
- ],
- [
- -5,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -11,
- -15
- ],
- [
- -5,
- -4
- ],
- [
- -5,
- -6
- ],
- [
- -7,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -7
- ],
- [
- -5,
- -8
- ],
- [
- -6,
- -17
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- -30
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -6,
- -6
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -7,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 6,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -6
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -9
- ],
- [
- 0,
- -7
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -12
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -4
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 7,
- -17
- ],
- [
- 5,
- -11
- ],
- [
- 3,
- -6
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 3098,
- 2168
- ],
- [
- 0,
- 4
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -8,
- 4
- ],
- [
- -8,
- 0
- ],
- [
- -6,
- 3
- ],
- [
- -7,
- 4
- ],
- [
- -14,
- 1
- ],
- [
- -13,
- 0
- ],
- [
- -13,
- 0
- ],
- [
- -8,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 10
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 8
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- 2,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 9,
- 1
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 8
- ],
- [
- -1,
- 7
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 6
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 4,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -6,
- 3
- ],
- [
- -6,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -13,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 12
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 12
- ],
- [
- -2,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 18
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 9
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 9
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 10
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 13
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 12
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 11
- ],
- [
- 1,
- 8
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 10
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 9
- ],
- [
- 2,
- 10
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 13
- ],
- [
- -1,
- 13
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 15
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 8
- ],
- [
- 3,
- 8
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 10
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 8
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 19
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 10
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 10
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 5,
- 5
- ],
- [
- 5,
- 3
- ],
- [
- 9,
- 8
- ],
- [
- 6,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 18
- ],
- [
- 4,
- 22
- ],
- [
- 2,
- 14
- ],
- [
- -5,
- 10
- ]
- ],
- [
- [
- 3133,
- 3869
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- -9
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 12,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -8
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -10
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 11
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 8
- ],
- [
- 5,
- 16
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 11,
- 1
- ],
- [
- 12,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 6265,
- 7523
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 6291,
- 7425
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 6280,
- 7423
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 9
- ],
- [
- 1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -1
- ]
- ],
- [
- [
- 6243,
- 7471
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 8
- ],
- [
- -4,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ]
- ],
- [
- [
- 6206,
- 7552
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 6249,
- 7562
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -6
- ],
- [
- 5,
- -5
- ],
- [
- 6,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 6249,
- 7547
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 258,
- 4357
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 500,
- 396
- ],
- [
- -9,
- -1
- ],
- [
- -20,
- 3
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 28,
- -1
- ],
- [
- 11,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 19,
- -6
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- -5
- ]
- ],
- [
- [
- 611,
- 455
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -11,
- 7
- ],
- [
- -6,
- 4
- ],
- [
- -5,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 15,
- -7
- ],
- [
- 3,
- -2
- ],
- [
- 12,
- -5
- ],
- [
- -5,
- -4
- ]
- ],
- [
- [
- 543,
- 484
- ],
- [
- -3,
- 0
- ],
- [
- -75,
- 7
- ],
- [
- -14,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 19,
- 2
- ],
- [
- 20,
- -2
- ],
- [
- 25,
- -5
- ],
- [
- 17,
- -3
- ],
- [
- 9,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 724,
- 574
- ],
- [
- -5,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -11,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -13,
- 3
- ],
- [
- -6,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 14,
- -4
- ],
- [
- 17,
- -5
- ],
- [
- 14,
- -3
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 3340,
- 556
- ],
- [
- -1,
- -12
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -9,
- -4
- ],
- [
- -40,
- 4
- ],
- [
- -18,
- 3
- ],
- [
- -8,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -16,
- -2
- ],
- [
- -10,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -26,
- 8
- ],
- [
- -27,
- 9
- ],
- [
- -11,
- 5
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 96,
- 0
- ],
- [
- 8,
- 1
- ],
- [
- 17,
- 1
- ],
- [
- 9,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- -8,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 11,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 6,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 13,
- 4
- ],
- [
- 20,
- -2
- ],
- [
- 4,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 8,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 4135,
- 588
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- -5
- ],
- [
- 22,
- -5
- ],
- [
- 7,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -10,
- -5
- ],
- [
- -12,
- 4
- ],
- [
- -21,
- 3
- ],
- [
- -6,
- 3
- ],
- [
- -5,
- 6
- ],
- [
- 9,
- 6
- ],
- [
- 2,
- -1
- ],
- [
- 13,
- -8
- ]
- ],
- [
- [
- 4101,
- 595
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -10,
- -4
- ]
- ],
- [
- [
- 3162,
- 571
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -14,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- -17,
- 8
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- -2
- ],
- [
- 13,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 14,
- -1
- ],
- [
- 7,
- 0
- ],
- [
- 4,
- -7
- ],
- [
- 8,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- -11,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- -2
- ]
- ],
- [
- [
- 3131,
- 607
- ],
- [
- -4,
- -2
- ],
- [
- -21,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 9,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 12,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 4057,
- 615
- ],
- [
- -3,
- -2
- ],
- [
- -68,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 9,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 7,
- 2
- ],
- [
- 6,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 31,
- -7
- ],
- [
- 11,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 582,
- 587
- ],
- [
- -35,
- -2
- ],
- [
- -14,
- 2
- ],
- [
- -29,
- 6
- ],
- [
- -41,
- 11
- ],
- [
- -11,
- 4
- ],
- [
- -7,
- 3
- ],
- [
- -7,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 9,
- 4
- ],
- [
- 4,
- 4
- ],
- [
- 9,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 15,
- -6
- ],
- [
- 10,
- -6
- ],
- [
- 14,
- -7
- ],
- [
- 15,
- -8
- ],
- [
- 8,
- -3
- ],
- [
- 7,
- -5
- ],
- [
- 8,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3046,
- 594
- ],
- [
- -6,
- 0
- ],
- [
- -12,
- 1
- ],
- [
- -12,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 11
- ],
- [
- 6,
- 7
- ],
- [
- 5,
- 4
- ],
- [
- 18,
- 9
- ],
- [
- 2,
- 1
- ],
- [
- 16,
- 5
- ],
- [
- 6,
- 2
- ],
- [
- 10,
- 5
- ],
- [
- 53,
- 18
- ],
- [
- 13,
- 3
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -9,
- -6
- ],
- [
- -19,
- -11
- ],
- [
- -13,
- -8
- ],
- [
- -17,
- -12
- ],
- [
- -4,
- -4
- ],
- [
- -8,
- -9
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -11,
- -3
- ],
- [
- -6,
- -1
- ]
- ],
- [
- [
- 9656,
- 683
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -12,
- 1
- ],
- [
- -8,
- -3
- ],
- [
- -10,
- -2
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 13,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- 4
- ],
- [
- 6,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 3743,
- 644
- ],
- [
- 4,
- 0
- ],
- [
- 15,
- 1
- ],
- [
- 14,
- 0
- ],
- [
- 9,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -8
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- -2,
- -13
- ],
- [
- -2,
- -5
- ],
- [
- -5,
- -5
- ],
- [
- -7,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 8,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -158,
- -26
- ],
- [
- -6,
- -1
- ],
- [
- -6,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -122,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 6,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 11,
- 12
- ],
- [
- 5,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 16,
- 9
- ],
- [
- 15,
- 9
- ],
- [
- 14,
- 11
- ],
- [
- 8,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -8,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 6
- ],
- [
- 17,
- 13
- ],
- [
- 6,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 39,
- 12
- ],
- [
- 6,
- 2
- ],
- [
- 12,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 16,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 13,
- -3
- ],
- [
- 19,
- -6
- ],
- [
- 7,
- -3
- ],
- [
- 7,
- -3
- ],
- [
- 7,
- -5
- ],
- [
- 6,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -31,
- -4
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 3,
- -2
- ]
- ],
- [
- [
- 855,
- 729
- ],
- [
- 8,
- -3
- ],
- [
- -14,
- 1
- ],
- [
- -6,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 822,
- 727
- ],
- [
- -2,
- 0
- ],
- [
- -24,
- 5
- ],
- [
- -5,
- 1
- ],
- [
- 8,
- 3
- ],
- [
- 6,
- 0
- ],
- [
- 14,
- -7
- ],
- [
- 4,
- 0
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 9640,
- 730
- ],
- [
- 11,
- -4
- ],
- [
- 27,
- 0
- ],
- [
- 23,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- -6,
- -3
- ],
- [
- -10,
- -5
- ],
- [
- -7,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -12,
- 3
- ],
- [
- -14,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -7,
- -3
- ],
- [
- -9,
- -5
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -8,
- 9
- ],
- [
- -1,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 6,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 872,
- 748
- ],
- [
- -11,
- 0
- ],
- [
- -7,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 15,
- -2
- ],
- [
- 6,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -1
- ]
- ],
- [
- [
- 855,
- 742
- ],
- [
- -2,
- -1
- ],
- [
- -12,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -17,
- 1
- ],
- [
- -7,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 15,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 7,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 928,
- 751
- ],
- [
- -11,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 18,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- -12,
- -1
- ]
- ],
- [
- [
- 852,
- 765
- ],
- [
- 11,
- -1
- ],
- [
- 7,
- 1
- ],
- [
- 8,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -9,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -7,
- 1
- ],
- [
- -6,
- 4
- ],
- [
- 4,
- 2
- ]
- ],
- [
- [
- 827,
- 762
- ],
- [
- -12,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 18,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -4,
- -2
- ]
- ],
- [
- [
- 900,
- 769
- ],
- [
- 1,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 922,
- 770
- ],
- [
- -3,
- -5
- ],
- [
- -9,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -4
- ]
- ],
- [
- [
- 925,
- 792
- ],
- [
- -5,
- -1
- ],
- [
- -8,
- 4
- ],
- [
- -5,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 11,
- -2
- ],
- [
- 7,
- -9
- ]
- ],
- [
- [
- 9526,
- 831
- ],
- [
- -5,
- -7
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 966,
- 823
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -14,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 10,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 9554,
- 874
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 8,
- 4
- ],
- [
- 5,
- 2
- ],
- [
- -3,
- -8
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 1322,
- 896
- ],
- [
- -4,
- -3
- ],
- [
- -9,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 8,
- 2
- ],
- [
- 5,
- -1
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 1359,
- 888
- ],
- [
- -3,
- -1
- ],
- [
- -12,
- 3
- ],
- [
- -6,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- 6,
- 4
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 9,
- -2
- ],
- [
- 8,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -4
- ]
- ],
- [
- [
- 1462,
- 886
- ],
- [
- -4,
- -1
- ],
- [
- -9,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 8
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 11,
- -4
- ],
- [
- 7,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- -4,
- -2
- ]
- ],
- [
- [
- 1757,
- 912
- ],
- [
- -14,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 28,
- 12
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -8,
- -7
- ],
- [
- -4,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -2
- ]
- ],
- [
- [
- 1679,
- 915
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -4,
- 10
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 8,
- 0
- ],
- [
- 7,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -11,
- -5
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 1651,
- 936
- ],
- [
- 5,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -20,
- -10
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -34,
- -4
- ],
- [
- -16,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 5,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- -9,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 13,
- 0
- ],
- [
- 13,
- -2
- ],
- [
- 13,
- -1
- ],
- [
- 21,
- -1
- ],
- [
- 5,
- 0
- ]
- ],
- [
- [
- 4427,
- 928
- ],
- [
- -1,
- -13
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 5,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 13
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -13,
- 2
- ],
- [
- -12,
- -1
- ],
- [
- 3,
- 3
- ],
- [
- 18,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 6
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -5
- ]
- ],
- [
- [
- 9717,
- 944
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 5,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 1491,
- 963
- ],
- [
- 7,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -9,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 8,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 12,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -19,
- 1
- ],
- [
- -6,
- 1
- ],
- [
- -9,
- 6
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 5
- ],
- [
- -10,
- 4
- ],
- [
- -6,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 7
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 5
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 8,
- 0
- ]
- ],
- [
- [
- 2948,
- 959
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- 7
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- -4,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -3
- ]
- ],
- [
- [
- 2096,
- 970
- ],
- [
- -3,
- -3
- ],
- [
- -7,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 12,
- -13
- ]
- ],
- [
- [
- 2934,
- 973
- ],
- [
- -4,
- -7
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -37,
- 16
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 10,
- 3
- ],
- [
- 25,
- -4
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -4,
- -6
- ]
- ],
- [
- [
- 2394,
- 984
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 2468,
- 969
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- 1,
- 13
- ],
- [
- 3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 6
- ],
- [
- -4,
- 8
- ],
- [
- 2,
- 2
- ],
- [
- 9,
- 2
- ],
- [
- 9,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -6
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -2
- ]
- ],
- [
- [
- 2360,
- 998
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 13,
- 5
- ],
- [
- 5,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -17,
- -3
- ]
- ],
- [
- [
- 4552,
- 998
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -4
- ]
- ],
- [
- [
- 6901,
- 1019
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -6,
- -2
- ]
- ],
- [
- [
- 4652,
- 1027
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 6941,
- 1041
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 2275,
- 1042
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- 7,
- 0
- ],
- [
- 3,
- 11
- ],
- [
- 6,
- 2
- ],
- [
- 3,
- -6
- ],
- [
- -3,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 6,
- 5
- ],
- [
- 13,
- 1
- ],
- [
- 8,
- -3
- ],
- [
- -5,
- -9
- ],
- [
- -12,
- -5
- ],
- [
- -7,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 7,
- 3
- ],
- [
- 16,
- 5
- ],
- [
- 6,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -9
- ],
- [
- -7,
- -2
- ],
- [
- -7,
- 0
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -18,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -7,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -7,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -6,
- 4
- ],
- [
- -7,
- 0
- ],
- [
- -7,
- 1
- ],
- [
- -8,
- 3
- ],
- [
- -7,
- 2
- ],
- [
- -9,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -34,
- 6
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 48,
- 6
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -6
- ],
- [
- 5,
- -6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 5
- ],
- [
- 9,
- -2
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 9,
- 5
- ],
- [
- 7,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -5
- ]
- ],
- [
- [
- 4917,
- 1082
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- -7
- ]
- ],
- [
- [
- 3318,
- 1091
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 4929,
- 1108
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- -6
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -13,
- 7
- ],
- [
- -3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 14,
- 0
- ],
- [
- 8,
- -1
- ],
- [
- 6,
- -4
- ]
- ],
- [
- [
- 2952,
- 1115
- ],
- [
- 5,
- -5
- ],
- [
- -4,
- -4
- ],
- [
- -15,
- -7
- ],
- [
- -8,
- -3
- ],
- [
- -8,
- -2
- ],
- [
- -38,
- -7
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 23,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 6,
- -10
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -4
- ]
- ],
- [
- [
- 3312,
- 1111
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 10,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- -4
- ]
- ],
- [
- [
- 4836,
- 1120
- ],
- [
- -7,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -7
- ]
- ],
- [
- [
- 5084,
- 1118
- ],
- [
- -10,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 12,
- 7
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -2
- ]
- ],
- [
- [
- 4908,
- 1121
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 6,
- 8
- ],
- [
- 3,
- 2
- ],
- [
- 7,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -15,
- -2
- ]
- ],
- [
- [
- 3008,
- 1137
- ],
- [
- 1,
- -2
- ],
- [
- 6,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 2
- ]
- ],
- [
- [
- 6999,
- 1115
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 5125,
- 1124
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 5745,
- 1130
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -10,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 9,
- 8
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 4,
- -8
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5036,
- 1137
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 8,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -6
- ],
- [
- -4,
- -7
- ]
- ],
- [
- [
- 3301,
- 1153
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 2917,
- 1168
- ],
- [
- 5,
- -2
- ],
- [
- 7,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -8
- ],
- [
- -4,
- -2
- ],
- [
- -12,
- 1
- ],
- [
- -13,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 10,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 1
- ]
- ],
- [
- [
- 5450,
- 1151
- ],
- [
- -2,
- -3
- ],
- [
- -8,
- 5
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 10,
- 1
- ],
- [
- 9,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -8,
- -5
- ],
- [
- -3,
- -10
- ]
- ],
- [
- [
- 3000,
- 1169
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- 2
- ],
- [
- -12,
- 3
- ],
- [
- -5,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 7,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 9,
- -12
- ]
- ],
- [
- [
- 3278,
- 1168
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 8
- ],
- [
- -7,
- 12
- ],
- [
- -2,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 5,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 3054,
- 1199
- ],
- [
- -1,
- -7
- ],
- [
- 5,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 8,
- -15
- ],
- [
- 2,
- -5
- ],
- [
- 4,
- -14
- ],
- [
- 3,
- -10
- ],
- [
- 11,
- -19
- ],
- [
- 4,
- -10
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -8
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -10
- ],
- [
- 1,
- -13
- ],
- [
- 0,
- -23
- ],
- [
- 0,
- -6
- ],
- [
- -4,
- -9
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -14,
- -13
- ],
- [
- -2,
- -6
- ],
- [
- -23,
- -5
- ],
- [
- -14,
- -3
- ],
- [
- -5,
- 3
- ],
- [
- -5,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -19,
- -1
- ],
- [
- -15,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 6,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 7,
- -2
- ],
- [
- 15,
- -2
- ],
- [
- 20,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 7,
- 6
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -8,
- -3
- ],
- [
- -6,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -7,
- 2
- ],
- [
- -6,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 22,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -14,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -7,
- 2
- ],
- [
- -7,
- 5
- ],
- [
- -5,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -14,
- -15
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -7,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -10,
- -7
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 6,
- 3
- ],
- [
- 6,
- 1
- ],
- [
- 6,
- -4
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 6,
- -4
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -6,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 10,
- -3
- ],
- [
- 6,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 12,
- 3
- ],
- [
- -6,
- 3
- ],
- [
- -13,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 10,
- 3
- ],
- [
- 10,
- 0
- ],
- [
- 18,
- -4
- ],
- [
- 5,
- 2
- ],
- [
- 6,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- 13,
- 0
- ],
- [
- 10,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 10,
- -9
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -10,
- 1
- ],
- [
- -7,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 4,
- 7
- ],
- [
- 14,
- 8
- ],
- [
- 6,
- 2
- ],
- [
- 7,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 8,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -7,
- 5
- ],
- [
- -7,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -11,
- 1
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -16,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 9
- ],
- [
- 2,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 14,
- 4
- ],
- [
- 27,
- 5
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -11
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 2485,
- 1221
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 3315,
- 1223
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 3129,
- 1281
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 9578,
- 1294
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3129,
- 1331
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 7383,
- 1327
- ],
- [
- -5,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -8,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 6,
- -1
- ],
- [
- 7,
- -2
- ],
- [
- 3,
- -7
- ],
- [
- -3,
- -4
- ]
- ],
- [
- [
- 6348,
- 1337
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 0
- ]
- ],
- [
- [
- 9535,
- 1335
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 7403,
- 1338
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 3111,
- 1297
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 7,
- 10
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- 12,
- 8
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -5
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 7370,
- 1347
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -3
- ]
- ],
- [
- [
- 7745,
- 1355
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- -3
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 9516,
- 1355
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 7,
- -11
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 7784,
- 1370
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3150,
- 1371
- ],
- [
- -6,
- -7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 7683,
- 1380
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -15,
- -2
- ],
- [
- -3,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ]
- ],
- [
- [
- 7572,
- 1393
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3171,
- 1391
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 5,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 7804,
- 1401
- ],
- [
- -12,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -7,
- -6
- ]
- ],
- [
- [
- 7871,
- 1414
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -8,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 3241,
- 1448
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 3410,
- 1465
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 8,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -7,
- -6
- ]
- ],
- [
- [
- 3245,
- 1470
- ],
- [
- -3,
- -6
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 9,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 7,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 3,
- -6
- ]
- ],
- [
- [
- 3268,
- 1473
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 6,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 3279,
- 1493
- ],
- [
- -3,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 3393,
- 1494
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- 7,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- 8,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 3406,
- 1509
- ],
- [
- 0,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -8,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 7,
- 2
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 3315,
- 1505
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 3448,
- 1524
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 10,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- -4,
- -3
- ]
- ],
- [
- [
- 0,
- 325
- ],
- [
- 45,
- 1
- ],
- [
- 9,
- -1
- ],
- [
- 9,
- -2
- ],
- [
- 21,
- 0
- ],
- [
- 19,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 7,
- -2
- ],
- [
- 13,
- 2
- ],
- [
- 11,
- 1
- ],
- [
- 9,
- 0
- ],
- [
- 82,
- -5
- ],
- [
- 85,
- -8
- ],
- [
- 17,
- -2
- ],
- [
- 15,
- -6
- ],
- [
- 17,
- 0
- ],
- [
- 95,
- -4
- ],
- [
- 15,
- 0
- ],
- [
- 59,
- -5
- ],
- [
- 102,
- -12
- ],
- [
- 9,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- -5,
- 6
- ],
- [
- -10,
- 6
- ],
- [
- -13,
- 4
- ],
- [
- 9,
- 1
- ],
- [
- 18,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -10,
- 2
- ],
- [
- -36,
- 2
- ],
- [
- -147,
- 14
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -22,
- 1
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 34,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -14,
- 5
- ],
- [
- -5,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 11,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -24,
- 8
- ],
- [
- -16,
- 3
- ],
- [
- -11,
- -2
- ],
- [
- -20,
- 0
- ],
- [
- -25,
- -2
- ],
- [
- -7,
- 2
- ],
- [
- -7,
- 3
- ],
- [
- -8,
- 5
- ],
- [
- -5,
- 2
- ],
- [
- -7,
- 5
- ],
- [
- -11,
- 4
- ],
- [
- -56,
- 11
- ],
- [
- -10,
- 3
- ],
- [
- -70,
- 18
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 32,
- -7
- ],
- [
- 7,
- 0
- ],
- [
- 7,
- 2
- ],
- [
- 5,
- -1
- ],
- [
- 8,
- 2
- ],
- [
- 8,
- 1
- ],
- [
- 22,
- -6
- ],
- [
- 44,
- -8
- ],
- [
- 12,
- -4
- ],
- [
- 6,
- -2
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 6,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 9,
- 1
- ],
- [
- 42,
- 1
- ],
- [
- 16,
- -1
- ],
- [
- 20,
- -5
- ],
- [
- 8,
- -7
- ],
- [
- 5,
- -3
- ],
- [
- 11,
- 3
- ],
- [
- 9,
- 3
- ],
- [
- 17,
- 2
- ],
- [
- 6,
- -1
- ],
- [
- 9,
- -4
- ],
- [
- 10,
- -6
- ],
- [
- 45,
- 2
- ],
- [
- 19,
- 0
- ],
- [
- 13,
- -3
- ],
- [
- 48,
- 9
- ],
- [
- 8,
- 2
- ],
- [
- 11,
- 7
- ],
- [
- -9,
- 2
- ],
- [
- -7,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 14,
- 2
- ],
- [
- 28,
- 3
- ],
- [
- 16,
- 2
- ],
- [
- 8,
- 7
- ],
- [
- 37,
- 11
- ],
- [
- 12,
- 5
- ],
- [
- 11,
- 8
- ],
- [
- -25,
- 16
- ],
- [
- -23,
- 13
- ],
- [
- 8,
- 4
- ],
- [
- 7,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- -7,
- 4
- ],
- [
- -7,
- 4
- ],
- [
- -12,
- 3
- ],
- [
- -44,
- 8
- ],
- [
- -15,
- 3
- ],
- [
- 6,
- 5
- ],
- [
- 8,
- 4
- ],
- [
- 17,
- 2
- ],
- [
- 108,
- 6
- ],
- [
- 108,
- 7
- ],
- [
- 3,
- 4
- ],
- [
- -14,
- 4
- ],
- [
- -13,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -19,
- 5
- ],
- [
- -5,
- 1
- ],
- [
- -6,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 4,
- 8
- ],
- [
- 6,
- 3
- ],
- [
- 11,
- 2
- ],
- [
- 7,
- 1
- ],
- [
- 23,
- 0
- ],
- [
- 8,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -7,
- 2
- ],
- [
- -17,
- 5
- ],
- [
- -40,
- 6
- ],
- [
- -16,
- 5
- ],
- [
- -9,
- 4
- ],
- [
- -7,
- 4
- ],
- [
- -8,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -13,
- -2
- ],
- [
- -22,
- 1
- ],
- [
- -28,
- 4
- ],
- [
- -19,
- 5
- ],
- [
- -26,
- 12
- ],
- [
- -9,
- 7
- ],
- [
- 7,
- 4
- ],
- [
- 8,
- 3
- ],
- [
- 33,
- 6
- ],
- [
- 5,
- 2
- ],
- [
- 7,
- 6
- ],
- [
- -11,
- 3
- ],
- [
- -10,
- -1
- ],
- [
- -8,
- 2
- ],
- [
- -34,
- 0
- ],
- [
- -20,
- 0
- ],
- [
- -16,
- 7
- ],
- [
- -12,
- 7
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 6
- ],
- [
- 4,
- 9
- ],
- [
- 4,
- 7
- ],
- [
- -1,
- 8
- ],
- [
- 1,
- 12
- ],
- [
- 6,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 11,
- -9
- ],
- [
- 9,
- 0
- ],
- [
- 13,
- 1
- ],
- [
- 8,
- 5
- ],
- [
- 5,
- 2
- ],
- [
- 8,
- 0
- ],
- [
- 15,
- -2
- ],
- [
- 8,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 25,
- -5
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 11,
- -2
- ],
- [
- 30,
- 2
- ],
- [
- 8,
- -1
- ],
- [
- 21,
- -8
- ],
- [
- 18,
- -9
- ],
- [
- 6,
- -3
- ],
- [
- 10,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 10,
- 4
- ],
- [
- 21,
- 5
- ],
- [
- 5,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -9,
- 3
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 6,
- 1
- ],
- [
- 10,
- -6
- ],
- [
- 13,
- -6
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 2
- ],
- [
- 8,
- 2
- ],
- [
- 15,
- -12
- ],
- [
- 8,
- -1
- ],
- [
- 11,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -5,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -11,
- 5
- ],
- [
- -17,
- 9
- ],
- [
- -16,
- 4
- ],
- [
- -35,
- -3
- ],
- [
- -12,
- 2
- ],
- [
- -8,
- 2
- ],
- [
- -9,
- 3
- ],
- [
- 10,
- 3
- ],
- [
- 11,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 13,
- -1
- ],
- [
- 29,
- -11
- ],
- [
- 6,
- -1
- ],
- [
- 20,
- -5
- ],
- [
- 5,
- 0
- ],
- [
- 7,
- 1
- ],
- [
- -6,
- 5
- ],
- [
- -6,
- 3
- ],
- [
- -14,
- 10
- ],
- [
- 1,
- 4
- ],
- [
- 10,
- 8
- ],
- [
- 24,
- 0
- ],
- [
- 11,
- 3
- ],
- [
- 14,
- 6
- ],
- [
- 18,
- 9
- ],
- [
- 15,
- 2
- ],
- [
- 19,
- 3
- ],
- [
- 7,
- -3
- ],
- [
- 16,
- -9
- ],
- [
- 10,
- -3
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- -10,
- 11
- ],
- [
- 6,
- 2
- ],
- [
- 8,
- 1
- ],
- [
- 7,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 17,
- 11
- ],
- [
- 15,
- 3
- ],
- [
- 42,
- 5
- ],
- [
- 15,
- -5
- ],
- [
- 12,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 6
- ],
- [
- 7,
- 11
- ],
- [
- 5,
- 4
- ],
- [
- 19,
- 5
- ],
- [
- 14,
- 0
- ],
- [
- 11,
- -5
- ],
- [
- 9,
- -3
- ],
- [
- 9,
- -2
- ],
- [
- 9,
- 0
- ],
- [
- 14,
- 3
- ],
- [
- 17,
- 1
- ],
- [
- 9,
- 1
- ],
- [
- 9,
- -2
- ],
- [
- 24,
- -1
- ],
- [
- 18,
- -4
- ],
- [
- 12,
- 0
- ],
- [
- 15,
- 4
- ],
- [
- 8,
- 0
- ],
- [
- 30,
- 6
- ],
- [
- 24,
- 1
- ],
- [
- 17,
- -2
- ],
- [
- 29,
- 1
- ],
- [
- 29,
- -1
- ],
- [
- 11,
- -2
- ],
- [
- 66,
- 1
- ],
- [
- 51,
- 6
- ],
- [
- 8,
- 2
- ],
- [
- 11,
- 6
- ],
- [
- 6,
- 5
- ],
- [
- 4,
- 2
- ],
- [
- 9,
- 1
- ],
- [
- 14,
- -2
- ],
- [
- 21,
- -4
- ],
- [
- 18,
- 2
- ],
- [
- 33,
- -3
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 11
- ],
- [
- 5,
- 16
- ],
- [
- 5,
- 5
- ],
- [
- 8,
- -1
- ],
- [
- 23,
- -10
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -8
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- -4
- ],
- [
- -8,
- -6
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -11
- ],
- [
- -4,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 14,
- 3
- ],
- [
- 26,
- 4
- ],
- [
- 8,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 7
- ],
- [
- 5,
- 5
- ],
- [
- 5,
- -1
- ],
- [
- 7,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 7,
- -2
- ],
- [
- 6,
- -1
- ],
- [
- 7,
- -5
- ],
- [
- 2,
- -9
- ],
- [
- -2,
- -10
- ],
- [
- -7,
- -8
- ],
- [
- -12,
- -6
- ],
- [
- -13,
- -11
- ],
- [
- 3,
- -5
- ],
- [
- 7,
- 2
- ],
- [
- 31,
- -1
- ],
- [
- 19,
- 1
- ],
- [
- 13,
- -1
- ],
- [
- 16,
- -3
- ],
- [
- 12,
- -4
- ],
- [
- 15,
- 0
- ],
- [
- 9,
- 1
- ],
- [
- 9,
- -2
- ],
- [
- 34,
- 9
- ],
- [
- 14,
- 4
- ],
- [
- 8,
- -2
- ],
- [
- 12,
- 2
- ],
- [
- 8,
- -2
- ],
- [
- 13,
- 3
- ],
- [
- 8,
- 0
- ],
- [
- 10,
- -1
- ],
- [
- 30,
- 0
- ],
- [
- 2,
- -6
- ],
- [
- 9,
- -8
- ],
- [
- 7,
- -3
- ],
- [
- 9,
- 1
- ],
- [
- 7,
- 3
- ],
- [
- 11,
- -1
- ],
- [
- 15,
- 3
- ],
- [
- 15,
- -1
- ],
- [
- 7,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- -5,
- 3
- ],
- [
- -13,
- 3
- ],
- [
- -12,
- 8
- ],
- [
- -6,
- 1
- ],
- [
- -9,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- 6,
- 3
- ],
- [
- 7,
- 9
- ],
- [
- -3,
- 9
- ],
- [
- -4,
- 2
- ],
- [
- -8,
- -1
- ],
- [
- -9,
- -3
- ],
- [
- -4,
- 2
- ],
- [
- -7,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- -7,
- 15
- ],
- [
- -4,
- 4
- ],
- [
- -10,
- 4
- ],
- [
- -10,
- 2
- ],
- [
- -9,
- 2
- ],
- [
- -3,
- 6
- ],
- [
- 2,
- 8
- ],
- [
- 11,
- 2
- ],
- [
- 10,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 7,
- 0
- ],
- [
- 8,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 26,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 8,
- 2
- ],
- [
- -9,
- 2
- ],
- [
- -9,
- 5
- ],
- [
- -14,
- 5
- ],
- [
- -11,
- 3
- ],
- [
- -21,
- 2
- ],
- [
- -11,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -24,
- 0
- ],
- [
- -7,
- 2
- ],
- [
- -4,
- 5
- ],
- [
- -7,
- 14
- ],
- [
- -2,
- 8
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 7,
- 0
- ],
- [
- 10,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 11,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 10,
- 2
- ],
- [
- 14,
- 1
- ],
- [
- 7,
- -2
- ],
- [
- 9,
- -1
- ],
- [
- 12,
- 2
- ],
- [
- 45,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- 1
- ],
- [
- 15,
- -5
- ],
- [
- 7,
- -3
- ],
- [
- 8,
- -2
- ],
- [
- 7,
- -1
- ],
- [
- 7,
- 1
- ],
- [
- 10,
- 3
- ],
- [
- 8,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 12,
- 0
- ],
- [
- 10,
- -4
- ],
- [
- 7,
- 2
- ],
- [
- 8,
- 4
- ],
- [
- 24,
- 3
- ],
- [
- 17,
- -1
- ],
- [
- 29,
- -8
- ],
- [
- 7,
- 0
- ],
- [
- 14,
- 4
- ],
- [
- 4,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- 6
- ],
- [
- 8,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 8
- ],
- [
- 10,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 9,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -4,
- -4
- ],
- [
- -6,
- -11
- ],
- [
- 4,
- -6
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 9,
- 3
- ],
- [
- 6,
- 0
- ],
- [
- 10,
- -9
- ],
- [
- 7,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 17,
- 8
- ],
- [
- 5,
- 1
- ],
- [
- 6,
- -4
- ],
- [
- 9,
- -9
- ],
- [
- 8,
- -5
- ],
- [
- 12,
- -3
- ],
- [
- 9,
- -1
- ],
- [
- 12,
- -4
- ],
- [
- 6,
- -4
- ],
- [
- 15,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 18,
- -7
- ],
- [
- 16,
- 3
- ],
- [
- 8,
- 4
- ],
- [
- 4,
- 6
- ],
- [
- -2,
- 9
- ],
- [
- -1,
- 9
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 19,
- -11
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -5,
- 8
- ],
- [
- 1,
- 6
- ],
- [
- 4,
- 2
- ],
- [
- 8,
- -3
- ],
- [
- 10,
- -2
- ],
- [
- 8,
- -3
- ],
- [
- 15,
- -13
- ],
- [
- 5,
- -11
- ],
- [
- 11,
- -3
- ],
- [
- 7,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 11,
- 2
- ],
- [
- 9,
- 0
- ],
- [
- 8,
- 2
- ],
- [
- 2,
- -7
- ],
- [
- -7,
- -8
- ],
- [
- -3,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 13,
- -1
- ],
- [
- 10,
- 4
- ],
- [
- 9,
- 1
- ],
- [
- 8,
- 4
- ],
- [
- 7,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 8,
- -3
- ],
- [
- 7,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 30,
- 14
- ],
- [
- 7,
- 0
- ],
- [
- 8,
- 1
- ],
- [
- 11,
- 3
- ],
- [
- 8,
- 2
- ],
- [
- 7,
- 0
- ],
- [
- 12,
- 5
- ],
- [
- 19,
- -1
- ],
- [
- 10,
- 3
- ],
- [
- 19,
- 3
- ],
- [
- 13,
- 4
- ],
- [
- 23,
- 10
- ],
- [
- 9,
- 6
- ],
- [
- 10,
- 13
- ],
- [
- 6,
- 12
- ],
- [
- 7,
- 18
- ],
- [
- -3,
- 11
- ],
- [
- -4,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- -7,
- 11
- ],
- [
- -2,
- 14
- ],
- [
- 1,
- 13
- ],
- [
- -3,
- 12
- ],
- [
- -3,
- 9
- ],
- [
- -5,
- 16
- ],
- [
- -7,
- 10
- ],
- [
- -7,
- 13
- ],
- [
- 0,
- 12
- ],
- [
- -2,
- 9
- ],
- [
- -5,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 9,
- 2
- ],
- [
- 21,
- -3
- ],
- [
- 2,
- 5
- ],
- [
- 6,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- -1,
- 8
- ],
- [
- -5,
- 3
- ],
- [
- -5,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- 2,
- 7
- ],
- [
- 5,
- 9
- ],
- [
- 2,
- 3
- ],
- [
- -5,
- 6
- ],
- [
- -5,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 8
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -10,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 9
- ],
- [
- 2,
- 9
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 6
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -10
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 10
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 7
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 5
- ],
- [
- 5,
- 3
- ],
- [
- 7,
- -3
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 10,
- 6
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 2
- ],
- [
- 7,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 6,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 10
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 16,
- 9
- ],
- [
- 8,
- 1
- ],
- [
- 14,
- 5
- ],
- [
- 8,
- 6
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 7
- ],
- [
- 6,
- 1
- ],
- [
- 13,
- 5
- ],
- [
- 9,
- 8
- ],
- [
- 14,
- 5
- ],
- [
- 6,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -8
- ],
- [
- 4,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -12,
- -6
- ],
- [
- -7,
- -9
- ],
- [
- -6,
- -9
- ],
- [
- -3,
- -6
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 5
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 7
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -8,
- -7
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -7,
- -11
- ],
- [
- -4,
- -4
- ],
- [
- -8,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- 4,
- -9
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 3,
- -7
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- -6,
- -1
- ],
- [
- -5,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 4,
- -7
- ],
- [
- 4,
- -4
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -5
- ],
- [
- -5,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 6
- ],
- [
- -7,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -8,
- 13
- ],
- [
- -5,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -6,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 7,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -10,
- 4
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -5,
- -8
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 7,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -13,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 7,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 7,
- -4
- ],
- [
- 13,
- -4
- ],
- [
- 10,
- -1
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- 7,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 16,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- -2
- ],
- [
- -10,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 8,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- -4,
- -8
- ],
- [
- 1,
- -5
- ],
- [
- 4,
- -6
- ],
- [
- 6,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- -3
- ],
- [
- 7,
- -6
- ],
- [
- 4,
- -6
- ],
- [
- 1,
- -14
- ],
- [
- 6,
- -12
- ],
- [
- 7,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -6,
- 2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- 4,
- -4
- ],
- [
- 6,
- -4
- ],
- [
- 14,
- 1
- ],
- [
- 1,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- 3,
- -6
- ],
- [
- 7,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 1,
- -8
- ],
- [
- 7,
- -9
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -8,
- -8
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 9,
- 7
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -17,
- -2
- ],
- [
- -8,
- -3
- ],
- [
- -9,
- -6
- ],
- [
- 10,
- -3
- ],
- [
- 8,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -9,
- -2
- ],
- [
- -7,
- 0
- ],
- [
- 0,
- -8
- ],
- [
- 10,
- -6
- ],
- [
- 6,
- 3
- ],
- [
- 5,
- -1
- ],
- [
- 0,
- -9
- ],
- [
- 4,
- -10
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -9
- ],
- [
- -3,
- -5
- ],
- [
- -8,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- -3
- ],
- [
- -6,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- 5
- ],
- [
- -6,
- 3
- ],
- [
- -8,
- 2
- ],
- [
- -8,
- 1
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -7
- ],
- [
- 3,
- -7
- ],
- [
- 6,
- 2
- ],
- [
- 9,
- -4
- ],
- [
- 6,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- -3,
- -9
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- 4
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- 14,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- -5,
- -4
- ],
- [
- -10,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- 14,
- -2
- ],
- [
- 6,
- 1
- ],
- [
- 9,
- 4
- ],
- [
- 2,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- -6
- ],
- [
- -10,
- -2
- ],
- [
- -8,
- 0
- ],
- [
- -9,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 6,
- -10
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -5,
- -4
- ],
- [
- -7,
- -1
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- 9
- ],
- [
- -5,
- 3
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- 2
- ],
- [
- -6,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- 10,
- -2
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -9,
- -1
- ],
- [
- -8,
- -2
- ],
- [
- -12,
- -5
- ],
- [
- 9,
- -2
- ],
- [
- 8,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -20,
- -7
- ],
- [
- -20,
- -10
- ],
- [
- -7,
- -2
- ],
- [
- -8,
- -2
- ],
- [
- -18,
- -8
- ],
- [
- -11,
- -3
- ],
- [
- -32,
- -6
- ],
- [
- -49,
- -14
- ],
- [
- -17,
- -10
- ],
- [
- -5,
- -7
- ],
- [
- -4,
- -2
- ],
- [
- -9,
- -2
- ],
- [
- -10,
- -1
- ],
- [
- -25,
- -1
- ],
- [
- -25,
- 4
- ],
- [
- -21,
- 0
- ],
- [
- -12,
- -1
- ],
- [
- -38,
- 7
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -8,
- 1
- ],
- [
- -26,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- 3,
- -8
- ],
- [
- 10,
- -9
- ],
- [
- 16,
- -16
- ],
- [
- 8,
- -4
- ],
- [
- 6,
- -3
- ],
- [
- 10,
- -5
- ],
- [
- 22,
- 0
- ],
- [
- 31,
- -3
- ],
- [
- 17,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -10,
- -12
- ],
- [
- -7,
- -4
- ],
- [
- -15,
- -8
- ],
- [
- -21,
- -4
- ],
- [
- -17,
- 1
- ],
- [
- -29,
- 7
- ],
- [
- -36,
- 6
- ],
- [
- -54,
- 5
- ],
- [
- -11,
- 3
- ],
- [
- -14,
- 2
- ],
- [
- -8,
- -2
- ],
- [
- -6,
- -3
- ],
- [
- -13,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 54,
- -16
- ],
- [
- 46,
- -11
- ],
- [
- 5,
- -3
- ],
- [
- 7,
- -2
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -6
- ],
- [
- -9,
- -5
- ],
- [
- -24,
- 0
- ],
- [
- -29,
- -4
- ],
- [
- -15,
- 0
- ],
- [
- -14,
- 4
- ],
- [
- -31,
- 11
- ],
- [
- -19,
- 8
- ],
- [
- -13,
- 10
- ],
- [
- -9,
- 8
- ],
- [
- -10,
- 7
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 5,
- -6
- ],
- [
- 7,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 9,
- -9
- ],
- [
- 8,
- -3
- ],
- [
- 11,
- -6
- ],
- [
- 25,
- -10
- ],
- [
- 5,
- -4
- ],
- [
- 8,
- -8
- ],
- [
- 1,
- -6
- ],
- [
- 8,
- -5
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 7,
- 1
- ],
- [
- 20,
- -2
- ],
- [
- 82,
- -1
- ],
- [
- 8,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -10
- ],
- [
- -9,
- -11
- ],
- [
- -6,
- -5
- ],
- [
- -10,
- -2
- ],
- [
- -8,
- -3
- ],
- [
- -14,
- -1
- ],
- [
- -27,
- 1
- ],
- [
- -27,
- 0
- ],
- [
- 21,
- -5
- ],
- [
- 20,
- -5
- ],
- [
- 28,
- 1
- ],
- [
- 12,
- 1
- ],
- [
- 9,
- 2
- ],
- [
- 4,
- -3
- ],
- [
- 8,
- -8
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -9
- ],
- [
- 2,
- -5
- ],
- [
- 4,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -4
- ],
- [
- 8,
- -1
- ],
- [
- 8,
- 3
- ],
- [
- 16,
- 1
- ],
- [
- 15,
- -5
- ],
- [
- 10,
- -1
- ],
- [
- 13,
- 4
- ],
- [
- 11,
- 5
- ],
- [
- 22,
- 5
- ],
- [
- 4,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 9,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- 5,
- -7
- ],
- [
- 6,
- -4
- ],
- [
- 7,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 13,
- -2
- ],
- [
- 16,
- 2
- ],
- [
- 8,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- -1
- ],
- [
- 66,
- -18
- ],
- [
- 23,
- -4
- ],
- [
- 35,
- -2
- ],
- [
- 28,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- -11,
- -3
- ],
- [
- -11,
- 0
- ],
- [
- -17,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -13,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -9,
- -3
- ],
- [
- -17,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 6,
- -1
- ],
- [
- 12,
- -1
- ],
- [
- 18,
- 1
- ],
- [
- 1,
- -5
- ],
- [
- -16,
- -1
- ],
- [
- -33,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -3,
- -8
- ],
- [
- 5,
- -5
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 7,
- -3
- ],
- [
- 7,
- -3
- ],
- [
- 15,
- 0
- ],
- [
- 17,
- 4
- ],
- [
- 9,
- 0
- ],
- [
- 23,
- 3
- ],
- [
- 20,
- -1
- ],
- [
- 29,
- 5
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- -8,
- -4
- ],
- [
- -35,
- -11
- ],
- [
- -13,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 5,
- -6
- ],
- [
- 9,
- -6
- ],
- [
- 6,
- -9
- ],
- [
- 6,
- -1
- ],
- [
- 11,
- 4
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -7
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 4,
- -3
- ],
- [
- 13,
- -1
- ],
- [
- 16,
- -1
- ],
- [
- 15,
- 0
- ],
- [
- 9,
- -1
- ],
- [
- 35,
- 19
- ],
- [
- 13,
- 10
- ],
- [
- 7,
- 3
- ],
- [
- 6,
- 3
- ],
- [
- 28,
- 12
- ],
- [
- 7,
- 4
- ],
- [
- 8,
- 5
- ],
- [
- 14,
- 1
- ],
- [
- 19,
- 9
- ],
- [
- 17,
- 6
- ],
- [
- 7,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 15,
- 0
- ],
- [
- 11,
- 1
- ],
- [
- 19,
- 4
- ],
- [
- 14,
- 3
- ],
- [
- 16,
- 2
- ],
- [
- 17,
- 1
- ],
- [
- 46,
- 4
- ],
- [
- 13,
- -2
- ],
- [
- 15,
- -5
- ],
- [
- 10,
- 1
- ],
- [
- 12,
- 1
- ],
- [
- 9,
- 2
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- -5,
- -7
- ],
- [
- -7,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- 9,
- -4
- ],
- [
- 11,
- 1
- ],
- [
- 20,
- 4
- ],
- [
- 17,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 7,
- 0
- ],
- [
- 11,
- 3
- ],
- [
- 13,
- 15
- ],
- [
- 17,
- 14
- ],
- [
- 15,
- 10
- ],
- [
- 9,
- 11
- ],
- [
- 8,
- 6
- ],
- [
- 8,
- 5
- ],
- [
- 6,
- 2
- ],
- [
- 13,
- 1
- ],
- [
- 19,
- 7
- ],
- [
- 28,
- 9
- ],
- [
- 21,
- -4
- ],
- [
- 22,
- -6
- ],
- [
- 11,
- 5
- ],
- [
- 9,
- 1
- ],
- [
- 7,
- 2
- ],
- [
- 8,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 7,
- 4
- ],
- [
- 5,
- 5
- ],
- [
- 27,
- 3
- ],
- [
- 29,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 10,
- 1
- ],
- [
- 13,
- 3
- ],
- [
- 17,
- 1
- ],
- [
- 9,
- 0
- ],
- [
- 8,
- 8
- ],
- [
- 16,
- 2
- ],
- [
- 18,
- 3
- ],
- [
- 7,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 141,
- 6
- ],
- [
- 6,
- 3
- ],
- [
- 13,
- 3
- ],
- [
- 4,
- 6
- ],
- [
- -19,
- 3
- ],
- [
- -5,
- 2
- ],
- [
- -7,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -16,
- 1
- ],
- [
- -130,
- 9
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 6
- ],
- [
- 1,
- 10
- ],
- [
- -4,
- 8
- ],
- [
- -9,
- 2
- ],
- [
- -9,
- 0
- ],
- [
- -12,
- -1
- ],
- [
- -31,
- -4
- ],
- [
- -13,
- -1
- ],
- [
- -33,
- 7
- ],
- [
- -22,
- 8
- ],
- [
- -15,
- 2
- ],
- [
- -10,
- 6
- ],
- [
- -10,
- 4
- ],
- [
- -1,
- 9
- ],
- [
- 3,
- 8
- ],
- [
- 18,
- 25
- ],
- [
- 12,
- 12
- ],
- [
- 8,
- 0
- ],
- [
- 7,
- 6
- ],
- [
- 7,
- 12
- ],
- [
- 6,
- 5
- ],
- [
- 14,
- 7
- ],
- [
- 5,
- 2
- ],
- [
- 22,
- 8
- ],
- [
- 5,
- 0
- ],
- [
- 10,
- -1
- ],
- [
- 11,
- 7
- ],
- [
- 33,
- 15
- ],
- [
- 7,
- 6
- ],
- [
- 9,
- 4
- ],
- [
- 27,
- 13
- ],
- [
- 24,
- 6
- ],
- [
- 11,
- 2
- ],
- [
- 15,
- 4
- ],
- [
- 16,
- 6
- ],
- [
- 14,
- 6
- ],
- [
- 49,
- 11
- ],
- [
- 30,
- 3
- ],
- [
- 21,
- 3
- ],
- [
- 14,
- -2
- ],
- [
- 14,
- 1
- ],
- [
- 13,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 8,
- 6
- ],
- [
- 28,
- -3
- ],
- [
- 18,
- 4
- ],
- [
- 7,
- 0
- ],
- [
- 8,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 6
- ],
- [
- 3,
- 7
- ],
- [
- 3,
- 4
- ],
- [
- 8,
- 4
- ],
- [
- 5,
- 7
- ],
- [
- 4,
- 9
- ],
- [
- 13,
- 19
- ],
- [
- 4,
- 2
- ],
- [
- 9,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- 21,
- -5
- ],
- [
- 4,
- 2
- ],
- [
- 7,
- 5
- ],
- [
- 5,
- 7
- ],
- [
- 12,
- 10
- ],
- [
- 3,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -18,
- -2
- ],
- [
- -14,
- -3
- ],
- [
- -13,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- -5,
- 3
- ],
- [
- -8,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 8
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 10,
- 10
- ],
- [
- 5,
- 4
- ],
- [
- 17,
- 2
- ],
- [
- 19,
- -4
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 6
- ],
- [
- -5,
- 9
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 10,
- -1
- ],
- [
- 10,
- -2
- ],
- [
- 11,
- 0
- ],
- [
- 12,
- 9
- ],
- [
- 19,
- 8
- ],
- [
- 8,
- 3
- ],
- [
- 8,
- 2
- ],
- [
- 4,
- 7
- ],
- [
- 7,
- 15
- ],
- [
- 4,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -10,
- 4
- ],
- [
- -13,
- 6
- ],
- [
- -4,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 8,
- -3
- ],
- [
- 9,
- -6
- ],
- [
- 5,
- -2
- ],
- [
- 5,
- -5
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 7
- ],
- [
- 4,
- 8
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 6,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 6,
- -6
- ],
- [
- 8,
- -4
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 7,
- -10
- ],
- [
- 9,
- -18
- ],
- [
- 4,
- -1
- ],
- [
- 8,
- 2
- ],
- [
- 9,
- 1
- ],
- [
- 5,
- 5
- ],
- [
- 1,
- 13
- ],
- [
- 3,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -4,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 10,
- -3
- ],
- [
- 6,
- -1
- ],
- [
- 8,
- 2
- ],
- [
- 8,
- 3
- ],
- [
- 9,
- 3
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- -3,
- -7
- ],
- [
- -5,
- -5
- ],
- [
- -5,
- -6
- ],
- [
- -2,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 42,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- 7,
- -2
- ],
- [
- 14,
- 1
- ],
- [
- 11,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 10,
- -2
- ],
- [
- 7,
- -5
- ],
- [
- 14,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 6
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- -5
- ],
- [
- 1,
- -11
- ],
- [
- 2,
- -5
- ],
- [
- 6,
- -5
- ],
- [
- 6,
- 4
- ],
- [
- 4,
- 5
- ],
- [
- 10,
- 9
- ],
- [
- 10,
- 8
- ],
- [
- 9,
- 4
- ],
- [
- 20,
- 7
- ],
- [
- 10,
- 4
- ],
- [
- 19,
- 6
- ],
- [
- 25,
- 3
- ],
- [
- 45,
- 11
- ],
- [
- 14,
- 1
- ],
- [
- 24,
- 3
- ],
- [
- 13,
- 3
- ],
- [
- 12,
- 2
- ],
- [
- 8,
- 8
- ],
- [
- 17,
- -6
- ],
- [
- 6,
- 0
- ],
- [
- 8,
- 4
- ],
- [
- 9,
- 12
- ],
- [
- 14,
- -5
- ],
- [
- 7,
- -7
- ],
- [
- 9,
- -6
- ],
- [
- 21,
- -11
- ],
- [
- 7,
- -2
- ],
- [
- 14,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- 7
- ],
- [
- 6,
- 10
- ],
- [
- 5,
- 5
- ],
- [
- 6,
- 3
- ],
- [
- 7,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 12,
- 1
- ],
- [
- 7,
- -10
- ],
- [
- 6,
- -4
- ],
- [
- 8,
- -3
- ],
- [
- 19,
- 3
- ],
- [
- 16,
- 0
- ],
- [
- 14,
- -2
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- 8
- ],
- [
- 9,
- 3
- ],
- [
- 6,
- -4
- ],
- [
- 4,
- -11
- ],
- [
- 12,
- -3
- ],
- [
- 27,
- -5
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 7
- ],
- [
- 6,
- 1
- ],
- [
- 7,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -5
- ],
- [
- -2,
- -11
- ],
- [
- -3,
- -11
- ],
- [
- 3,
- -8
- ],
- [
- 4,
- -5
- ],
- [
- 4,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 26,
- 4
- ],
- [
- 3,
- 10
- ],
- [
- 4,
- 10
- ],
- [
- 10,
- 14
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 7,
- -7
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -5,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 15,
- -4
- ],
- [
- 4,
- 1
- ],
- [
- 8,
- 4
- ],
- [
- 7,
- 9
- ],
- [
- 4,
- 10
- ],
- [
- 6,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 0,
- -10
- ],
- [
- 5,
- -6
- ],
- [
- 5,
- -4
- ],
- [
- 12,
- -5
- ],
- [
- 13,
- -1
- ],
- [
- 9,
- -3
- ],
- [
- 15,
- 1
- ],
- [
- 7,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 8,
- 2
- ],
- [
- 9,
- 6
- ],
- [
- 5,
- 2
- ],
- [
- 19,
- 6
- ],
- [
- 15,
- 5
- ],
- [
- 15,
- 11
- ],
- [
- 15,
- 6
- ],
- [
- 23,
- 3
- ],
- [
- 6,
- 1
- ],
- [
- 9,
- 0
- ],
- [
- 22,
- 7
- ],
- [
- 8,
- 4
- ],
- [
- 5,
- 2
- ],
- [
- 5,
- 5
- ],
- [
- 3,
- 10
- ],
- [
- 2,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 8
- ],
- [
- -4,
- 7
- ],
- [
- -5,
- 10
- ],
- [
- 2,
- 12
- ],
- [
- 4,
- 5
- ],
- [
- 9,
- 5
- ],
- [
- 10,
- 1
- ],
- [
- 11,
- 0
- ],
- [
- 9,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- -4,
- -6
- ],
- [
- -5,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 6,
- -1
- ],
- [
- 15,
- 1
- ],
- [
- 5,
- -4
- ],
- [
- 10,
- -19
- ],
- [
- 3,
- -8
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- 1
- ],
- [
- 13,
- 0
- ],
- [
- 9,
- 2
- ],
- [
- 7,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 7,
- -5
- ],
- [
- 8,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 10,
- -6
- ],
- [
- 10,
- -13
- ],
- [
- 11,
- -7
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- 4,
- 4
- ],
- [
- 6,
- 8
- ],
- [
- 7,
- 10
- ],
- [
- 6,
- 11
- ],
- [
- 2,
- 15
- ],
- [
- 3,
- 11
- ],
- [
- 5,
- 6
- ],
- [
- 4,
- 4
- ],
- [
- 8,
- 4
- ],
- [
- 9,
- 0
- ],
- [
- 9,
- 9
- ],
- [
- 6,
- 3
- ],
- [
- 13,
- 5
- ],
- [
- 16,
- 5
- ],
- [
- 12,
- 13
- ],
- [
- 4,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 10,
- 0
- ],
- [
- 18,
- 5
- ],
- [
- 5,
- 0
- ],
- [
- 9,
- 4
- ],
- [
- 8,
- 7
- ],
- [
- 6,
- 3
- ],
- [
- 10,
- -1
- ],
- [
- 9,
- 5
- ],
- [
- 7,
- 0
- ],
- [
- 7,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 9,
- 0
- ],
- [
- 7,
- -5
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- 6,
- -6
- ],
- [
- 5,
- -3
- ],
- [
- 5,
- 0
- ],
- [
- 8,
- 4
- ],
- [
- 7,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 8
- ],
- [
- -1,
- 10
- ],
- [
- 0,
- 6
- ],
- [
- 12,
- 9
- ],
- [
- 5,
- 8
- ],
- [
- -9,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 7
- ],
- [
- 10,
- 6
- ],
- [
- 11,
- 0
- ],
- [
- 7,
- -5
- ],
- [
- 14,
- -8
- ],
- [
- 8,
- 0
- ],
- [
- 8,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- -3,
- 12
- ],
- [
- 1,
- 7
- ],
- [
- -6,
- 4
- ],
- [
- -2,
- 9
- ],
- [
- 2,
- 9
- ],
- [
- 8,
- 5
- ],
- [
- 9,
- 2
- ],
- [
- 21,
- 14
- ],
- [
- 6,
- 3
- ],
- [
- 13,
- 3
- ],
- [
- 16,
- 1
- ],
- [
- 20,
- 5
- ],
- [
- 36,
- -3
- ],
- [
- 9,
- -2
- ],
- [
- 6,
- -3
- ],
- [
- 6,
- -4
- ],
- [
- 7,
- -8
- ],
- [
- 11,
- -9
- ],
- [
- 14,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- -8
- ],
- [
- -6,
- -5
- ],
- [
- -4,
- -1
- ],
- [
- -9,
- 3
- ],
- [
- -6,
- 4
- ],
- [
- -4,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -7
- ],
- [
- -17,
- -13
- ],
- [
- 10,
- -4
- ],
- [
- 6,
- 3
- ],
- [
- 6,
- 6
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 13,
- 1
- ],
- [
- 7,
- 2
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 8,
- -4
- ],
- [
- 12,
- -4
- ],
- [
- 14,
- -14
- ],
- [
- 11,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 17,
- 2
- ],
- [
- 15,
- -7
- ],
- [
- 8,
- -2
- ],
- [
- 24,
- -2
- ],
- [
- 15,
- -5
- ],
- [
- 9,
- 5
- ],
- [
- 6,
- 2
- ],
- [
- 13,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 18,
- -5
- ],
- [
- 32,
- -6
- ],
- [
- 21,
- -2
- ],
- [
- 19,
- -1
- ],
- [
- 9,
- -2
- ],
- [
- 17,
- -2
- ],
- [
- 6,
- -3
- ],
- [
- 16,
- 2
- ],
- [
- 8,
- 2
- ],
- [
- 7,
- 5
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -10
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -7
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -5,
- -3
- ],
- [
- -6,
- -8
- ],
- [
- 0,
- -7
- ],
- [
- 3,
- -5
- ],
- [
- -3,
- -5
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- -8,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -9,
- 2
- ],
- [
- -7,
- 3
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -10,
- -8
- ],
- [
- -4,
- -5
- ],
- [
- -4,
- -6
- ],
- [
- 11,
- -3
- ],
- [
- 8,
- -5
- ],
- [
- 17,
- 0
- ],
- [
- 5,
- 3
- ],
- [
- 8,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -6
- ],
- [
- -2,
- -9
- ],
- [
- 0,
- -7
- ],
- [
- -9,
- -19
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- -5,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -8,
- -6
- ],
- [
- -4,
- -11
- ],
- [
- -5,
- -9
- ],
- [
- -8,
- -15
- ],
- [
- -4,
- -17
- ],
- [
- -2,
- -10
- ],
- [
- -2,
- -10
- ],
- [
- -7,
- -18
- ],
- [
- -4,
- -3
- ],
- [
- -7,
- -7
- ],
- [
- 2,
- -5
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- -2
- ],
- [
- 8,
- -3
- ],
- [
- 12,
- 7
- ],
- [
- 6,
- 5
- ],
- [
- 2,
- 10
- ],
- [
- -2,
- 9
- ],
- [
- 4,
- 6
- ],
- [
- 9,
- 8
- ],
- [
- 20,
- 6
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 6,
- 7
- ],
- [
- 6,
- 7
- ],
- [
- 9,
- 5
- ],
- [
- 8,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 10,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 12
- ],
- [
- 2,
- 8
- ],
- [
- 5,
- 12
- ],
- [
- 4,
- 9
- ],
- [
- 4,
- 5
- ],
- [
- 10,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 6,
- 8
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 9
- ],
- [
- 2,
- 8
- ],
- [
- 6,
- 5
- ],
- [
- 8,
- 10
- ],
- [
- 10,
- 1
- ],
- [
- 7,
- 5
- ],
- [
- 8,
- -4
- ],
- [
- 10,
- -4
- ],
- [
- 16,
- 1
- ],
- [
- 7,
- -2
- ],
- [
- 6,
- 3
- ],
- [
- 5,
- 7
- ],
- [
- 2,
- 8
- ],
- [
- 7,
- 5
- ],
- [
- 6,
- 0
- ],
- [
- 12,
- 9
- ],
- [
- 12,
- 8
- ],
- [
- 9,
- 1
- ],
- [
- 8,
- 7
- ],
- [
- 5,
- 10
- ],
- [
- 6,
- 8
- ],
- [
- 8,
- 7
- ],
- [
- 2,
- 13
- ],
- [
- 4,
- 7
- ],
- [
- 9,
- 6
- ],
- [
- 7,
- 3
- ],
- [
- 30,
- 10
- ],
- [
- 22,
- 7
- ],
- [
- 24,
- 8
- ],
- [
- 7,
- 0
- ],
- [
- 9,
- 4
- ],
- [
- 15,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- 9
- ],
- [
- 11,
- 9
- ],
- [
- 7,
- 3
- ],
- [
- 9,
- 7
- ],
- [
- 7,
- 1
- ],
- [
- 11,
- -2
- ],
- [
- 8,
- -2
- ],
- [
- 8,
- 0
- ],
- [
- 11,
- 7
- ],
- [
- 18,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 25,
- 9
- ],
- [
- 9,
- -2
- ],
- [
- 14,
- 2
- ],
- [
- 8,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 10,
- 0
- ],
- [
- 16,
- 3
- ],
- [
- 7,
- 2
- ],
- [
- 14,
- 8
- ],
- [
- 14,
- 1
- ],
- [
- 7,
- 2
- ],
- [
- 8,
- 2
- ],
- [
- 6,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 10,
- 3
- ],
- [
- 8,
- 0
- ],
- [
- 10,
- -4
- ],
- [
- 6,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 8,
- 6
- ],
- [
- 7,
- 2
- ],
- [
- 6,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 8,
- -3
- ],
- [
- 13,
- 1
- ],
- [
- 12,
- 1
- ],
- [
- 10,
- 3
- ],
- [
- 8,
- 3
- ],
- [
- 8,
- -5
- ],
- [
- 10,
- -2
- ],
- [
- 15,
- 8
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -6
- ],
- [
- 15,
- 1
- ],
- [
- 12,
- 6
- ],
- [
- 11,
- 4
- ],
- [
- 10,
- 3
- ],
- [
- 9,
- 4
- ],
- [
- 12,
- 15
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 19,
- 0
- ],
- [
- 6,
- 1
- ],
- [
- 8,
- 4
- ],
- [
- 14,
- -3
- ],
- [
- 13,
- -5
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 9,
- -3
- ],
- [
- 11,
- -6
- ],
- [
- 9,
- -1
- ],
- [
- 38,
- -14
- ],
- [
- 22,
- -4
- ],
- [
- 11,
- -5
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 6,
- -7
- ],
- [
- 14,
- -5
- ],
- [
- 16,
- -3
- ],
- [
- 10,
- 4
- ],
- [
- 17,
- 13
- ],
- [
- 5,
- 5
- ],
- [
- -1,
- 12
- ],
- [
- 9,
- 14
- ],
- [
- 15,
- 7
- ],
- [
- 19,
- 3
- ],
- [
- 12,
- 3
- ],
- [
- 15,
- 3
- ],
- [
- 7,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 6,
- -3
- ],
- [
- 7,
- -7
- ],
- [
- 10,
- -17
- ],
- [
- 8,
- -7
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 6,
- -4
- ],
- [
- 9,
- -12
- ],
- [
- -5,
- -11
- ],
- [
- -5,
- -4
- ],
- [
- -19,
- -5
- ],
- [
- -9,
- -3
- ],
- [
- -7,
- -2
- ],
- [
- -3,
- -9
- ],
- [
- 4,
- -5
- ],
- [
- 8,
- 2
- ],
- [
- 9,
- 1
- ],
- [
- 8,
- 2
- ],
- [
- 6,
- 3
- ],
- [
- 6,
- 4
- ],
- [
- 14,
- 2
- ],
- [
- 9,
- 3
- ],
- [
- 9,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- -4
- ],
- [
- 4,
- 0
- ],
- [
- 13,
- -1
- ],
- [
- 6,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 1
- ],
- [
- 10,
- 5
- ],
- [
- 12,
- 4
- ],
- [
- 12,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- -12,
- -6
- ],
- [
- -18,
- -7
- ],
- [
- -10,
- -7
- ],
- [
- 5,
- -3
- ],
- [
- 36,
- 8
- ],
- [
- 16,
- 6
- ],
- [
- 14,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 12,
- 9
- ],
- [
- 4,
- 3
- ],
- [
- 13,
- 3
- ],
- [
- 16,
- 3
- ],
- [
- 12,
- 4
- ],
- [
- 9,
- 4
- ],
- [
- 6,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 6,
- -3
- ],
- [
- 6,
- 0
- ],
- [
- 8,
- 3
- ],
- [
- 5,
- 8
- ],
- [
- 3,
- 5
- ],
- [
- 6,
- 2
- ],
- [
- 7,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 10,
- -4
- ],
- [
- 7,
- -2
- ],
- [
- 5,
- -15
- ],
- [
- 14,
- -14
- ],
- [
- 5,
- -3
- ],
- [
- 12,
- 1
- ],
- [
- 13,
- -5
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 7,
- 3
- ],
- [
- 7,
- 17
- ],
- [
- 7,
- 16
- ],
- [
- 7,
- 7
- ],
- [
- 4,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- 7,
- 3
- ],
- [
- 11,
- 1
- ],
- [
- 7,
- -1
- ],
- [
- 17,
- -1
- ],
- [
- 14,
- 4
- ],
- [
- 15,
- -1
- ],
- [
- 8,
- 5
- ],
- [
- 8,
- 1
- ],
- [
- 11,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 6,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -7
- ],
- [
- 3,
- 0
- ],
- [
- 11,
- 7
- ],
- [
- 5,
- 1
- ],
- [
- 11,
- 12
- ],
- [
- 6,
- -3
- ],
- [
- 12,
- -5
- ],
- [
- 5,
- -2
- ],
- [
- 10,
- -8
- ],
- [
- 5,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 12,
- -1
- ],
- [
- 12,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 6,
- -5
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 24,
- -2
- ],
- [
- 10,
- -3
- ],
- [
- 8,
- -5
- ],
- [
- 28,
- -2
- ],
- [
- 11,
- -5
- ],
- [
- 6,
- 3
- ],
- [
- 13,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 5,
- -4
- ],
- [
- 10,
- -4
- ],
- [
- 5,
- 1
- ],
- [
- 8,
- 3
- ],
- [
- 8,
- 4
- ],
- [
- 8,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -9
- ],
- [
- 5,
- 1
- ],
- [
- 7,
- 4
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- -3,
- -9
- ],
- [
- -7,
- -11
- ],
- [
- -3,
- -9
- ],
- [
- -6,
- -9
- ],
- [
- 1,
- -4
- ],
- [
- 6,
- -2
- ],
- [
- 6,
- 6
- ],
- [
- 14,
- 4
- ],
- [
- 6,
- 6
- ],
- [
- 12,
- 2
- ],
- [
- 12,
- -2
- ],
- [
- 8,
- -8
- ],
- [
- 16,
- -12
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- 8,
- -5
- ],
- [
- 7,
- -1
- ],
- [
- 6,
- 1
- ],
- [
- 25,
- -6
- ],
- [
- 12,
- 2
- ],
- [
- 10,
- 0
- ],
- [
- 13,
- 1
- ],
- [
- 10,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 9,
- 2
- ],
- [
- 8,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -14
- ],
- [
- 0,
- -8
- ],
- [
- 5,
- -3
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 20,
- -2
- ],
- [
- 7,
- 0
- ],
- [
- 8,
- -2
- ],
- [
- 7,
- -5
- ],
- [
- 8,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 6,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 8
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 11,
- -12
- ],
- [
- 8,
- -8
- ],
- [
- 3,
- -4
- ],
- [
- 5,
- -3
- ],
- [
- 10,
- -8
- ],
- [
- 14,
- -3
- ],
- [
- 13,
- -6
- ],
- [
- 15,
- 0
- ],
- [
- 13,
- -7
- ],
- [
- 8,
- 6
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- -2
- ],
- [
- 8,
- -5
- ],
- [
- 6,
- -1
- ],
- [
- 20,
- -8
- ],
- [
- 12,
- -4
- ],
- [
- 4,
- -6
- ],
- [
- 5,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -8
- ],
- [
- 13,
- -6
- ],
- [
- 4,
- -6
- ],
- [
- 6,
- -7
- ],
- [
- 11,
- -30
- ],
- [
- 6,
- -5
- ],
- [
- 8,
- 1
- ],
- [
- 7,
- -8
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -7,
- 20
- ],
- [
- 0,
- 11
- ],
- [
- 5,
- 6
- ],
- [
- 13,
- 1
- ],
- [
- 10,
- -11
- ],
- [
- 9,
- -7
- ],
- [
- 6,
- -1
- ],
- [
- 12,
- 0
- ],
- [
- 11,
- 8
- ],
- [
- 8,
- -3
- ],
- [
- 14,
- -1
- ],
- [
- 18,
- -4
- ],
- [
- 8,
- 0
- ],
- [
- 14,
- -1
- ],
- [
- 16,
- -7
- ],
- [
- 10,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 6,
- -5
- ],
- [
- 5,
- -1
- ],
- [
- 12,
- -5
- ],
- [
- 24,
- -13
- ],
- [
- 9,
- -4
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- -10
- ],
- [
- 5,
- -9
- ],
- [
- 2,
- -7
- ],
- [
- -5,
- -5
- ],
- [
- -7,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -5,
- -10
- ],
- [
- -2,
- -16
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -2
- ],
- [
- -8,
- 4
- ],
- [
- -9,
- 3
- ],
- [
- -11,
- 1
- ],
- [
- -9,
- 5
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- 5,
- -6
- ],
- [
- 5,
- -4
- ],
- [
- 13,
- -4
- ],
- [
- 15,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- -4,
- -5
- ],
- [
- -4,
- -10
- ],
- [
- -15,
- -8
- ],
- [
- -8,
- 6
- ],
- [
- -10,
- 1
- ],
- [
- -5,
- -3
- ],
- [
- -9,
- 0
- ],
- [
- -20,
- -1
- ],
- [
- -7,
- 7
- ],
- [
- -12,
- 5
- ],
- [
- 0,
- -4
- ],
- [
- 10,
- -13
- ],
- [
- 11,
- -3
- ],
- [
- 11,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- -5,
- -3
- ],
- [
- -7,
- 1
- ],
- [
- -8,
- -6
- ],
- [
- -16,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -6
- ],
- [
- -5,
- -5
- ],
- [
- -5,
- -3
- ],
- [
- -5,
- 1
- ],
- [
- -6,
- -2
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- 12
- ],
- [
- -3,
- 11
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- -2
- ],
- [
- -2,
- -9
- ],
- [
- 4,
- -16
- ],
- [
- 3,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -1
- ],
- [
- 7,
- -14
- ],
- [
- 7,
- -9
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -9,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -8,
- 2
- ],
- [
- -7,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -6,
- 0
- ],
- [
- -5,
- 8
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -10
- ],
- [
- -5,
- -3
- ],
- [
- -6,
- -5
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -20
- ],
- [
- -4,
- -4
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -21,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 6,
- 1
- ],
- [
- 18,
- -1
- ],
- [
- 8,
- -4
- ],
- [
- 2,
- -9
- ],
- [
- 3,
- -4
- ],
- [
- 6,
- -4
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -6
- ],
- [
- -6,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 6,
- -1
- ],
- [
- 3,
- -13
- ],
- [
- -4,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 6,
- -3
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- -6
- ],
- [
- 6,
- -8
- ],
- [
- 4,
- -7
- ],
- [
- 0,
- -11
- ],
- [
- 4,
- -7
- ],
- [
- 8,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 5,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -9,
- -6
- ],
- [
- -4,
- -5
- ],
- [
- 9,
- 0
- ],
- [
- 9,
- -5
- ],
- [
- 12,
- 5
- ],
- [
- 6,
- 6
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 4,
- -8
- ],
- [
- 15,
- -9
- ],
- [
- 8,
- -3
- ],
- [
- 8,
- -1
- ],
- [
- 8,
- 0
- ],
- [
- 2,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- 0
- ],
- [
- -9,
- -1
- ],
- [
- -7,
- 4
- ],
- [
- -5,
- 3
- ],
- [
- -41,
- -2
- ],
- [
- -9,
- -1
- ],
- [
- -11,
- -5
- ],
- [
- -11,
- -3
- ],
- [
- -17,
- -5
- ],
- [
- -7,
- -3
- ],
- [
- -19,
- 12
- ],
- [
- -6,
- 9
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- 9,
- -13
- ],
- [
- 4,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- 3
- ],
- [
- -9,
- 2
- ],
- [
- -9,
- -4
- ],
- [
- -11,
- -9
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -12,
- -7
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -11,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 6,
- -2
- ],
- [
- 7,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -5,
- -2
- ],
- [
- -6,
- -2
- ],
- [
- -39,
- -12
- ],
- [
- -5,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 14,
- -2
- ],
- [
- 41,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 6,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -7,
- -2
- ],
- [
- -6,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- 9,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -12
- ],
- [
- -1,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 12,
- -3
- ],
- [
- 18,
- -13
- ],
- [
- 5,
- 0
- ],
- [
- 7,
- -2
- ],
- [
- 12,
- -7
- ],
- [
- 4,
- -4
- ],
- [
- 7,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 17,
- -9
- ],
- [
- 2,
- -4
- ],
- [
- -35,
- -7
- ],
- [
- -35,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 38,
- 0
- ],
- [
- 10,
- -3
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 21,
- 4
- ],
- [
- 20,
- 2
- ],
- [
- 7,
- -1
- ],
- [
- 28,
- -15
- ],
- [
- 13,
- -5
- ],
- [
- 8,
- -2
- ],
- [
- 6,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- -3
- ],
- [
- 6,
- 1
- ],
- [
- 7,
- 4
- ],
- [
- 5,
- -1
- ],
- [
- 10,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -7,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- 5,
- -2
- ],
- [
- 8,
- -3
- ],
- [
- 48,
- -2
- ],
- [
- 13,
- -4
- ],
- [
- 14,
- 2
- ],
- [
- 6,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 7,
- -1
- ],
- [
- 11,
- -4
- ],
- [
- 14,
- -2
- ],
- [
- 12,
- 0
- ],
- [
- 15,
- -5
- ],
- [
- 7,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 33,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 8,
- -2
- ],
- [
- 8,
- 0
- ],
- [
- 47,
- -6
- ],
- [
- 17,
- -3
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 13,
- -3
- ],
- [
- 12,
- -1
- ],
- [
- 6,
- -4
- ],
- [
- -9988,
- -5
- ]
- ],
- [
- [
- 3457,
- 1545
- ],
- [
- 2,
- -1
- ],
- [
- 7,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -13,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -8,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 10,
- 4
- ],
- [
- 13,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 3442,
- 1551
- ],
- [
- -5,
- -6
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 9,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 3319,
- 1557
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -4
- ]
- ],
- [
- [
- 3260,
- 1551
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- 6,
- 3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- -6
- ]
- ],
- [
- [
- 3316,
- 1580
- ],
- [
- 1,
- 0
- ],
- [
- 12,
- 1
- ],
- [
- 4,
- -4
- ],
- [
- 4,
- 0
- ],
- [
- -10,
- -7
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -7,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -4
- ]
- ],
- [
- [
- 3350,
- 1587
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3365,
- 1595
- ],
- [
- -6,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 3389,
- 1618
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- -4
- ],
- [
- -6,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -5,
- -2
- ],
- [
- 1,
- 2
- ],
- [
- 7,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 7,
- 4
- ],
- [
- 4,
- -1
- ],
- [
- 8,
- 3
- ]
- ],
- [
- [
- 3498,
- 1653
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 3467,
- 1658
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 20,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -10,
- -1
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 3730,
- 1698
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -6,
- 4
- ],
- [
- -9,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 1
- ]
- ],
- [
- [
- 6924,
- 2358
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 6921,
- 2355
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 8
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 4,
- -2
- ]
- ],
- [
- [
- 6439,
- 2509
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 3285,
- 6165
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 3284,
- 6196
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 9412,
- 2033
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 11
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -7
- ]
- ],
- [
- [
- 9092,
- 2684
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 9095,
- 2693
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -7
- ]
- ],
- [
- [
- 9113,
- 2724
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 9028,
- 2835
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 8,
- -6
- ],
- [
- 5,
- -2
- ],
- [
- 8,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -10
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -9
- ],
- [
- 1,
- -9
- ],
- [
- 1,
- -11
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 8
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- 6
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -8
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 6
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 10
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 22
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 13
- ],
- [
- 5,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 8
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -5,
- 11
- ],
- [
- -3,
- 10
- ],
- [
- -4,
- 13
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 12
- ],
- [
- 0,
- 6
- ],
- [
- 3,
- -3
- ],
- [
- 6,
- -3
- ]
- ],
- [
- [
- 9117,
- 2850
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 9021,
- 2851
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 9119,
- 2862
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 3
- ]
- ],
- [
- [
- 9110,
- 2894
- ],
- [
- 5,
- -11
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 9
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 8997,
- 2873
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 9036,
- 2967
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 9040,
- 2975
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 8821,
- 3125
- ],
- [
- 7,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 12,
- 5
- ],
- [
- 7,
- 4
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 9264,
- 3604
- ],
- [
- -2,
- -16
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 10
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- -1
- ]
- ],
- [
- [
- 9261,
- 3610
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -7
- ]
- ],
- [
- [
- 8143,
- 3683
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- 18
- ],
- [
- -1,
- 12
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -17
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 9251,
- 3701
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 10
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- 4,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -10
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -6,
- -26
- ],
- [
- -2,
- -9
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 9198,
- 3831
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 12
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- -2
- ]
- ],
- [
- [
- 9180,
- 3898
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 9164,
- 3906
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 8206,
- 3986
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 9139,
- 4015
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 9136,
- 4023
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 9062,
- 4134
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 8873,
- 4198
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -1
- ]
- ],
- [
- [
- 8874,
- 4229
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- -6
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 8807,
- 4275
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 8793,
- 4284
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 8801,
- 4284
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 8460,
- 4297
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 8477,
- 4344
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 8797,
- 4389
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 8
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 8783,
- 4388
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 8786,
- 4516
- ],
- [
- -4,
- -5
- ],
- [
- 2,
- 6
- ],
- [
- 5,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 8623,
- 4511
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 4
- ],
- [
- -5,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 8627,
- 4529
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -8
- ],
- [
- -9,
- -12
- ],
- [
- -9,
- 10
- ],
- [
- -4,
- 8
- ],
- [
- -2,
- 10
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 8794,
- 4528
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- -2,
- -10
- ],
- [
- -3,
- -11
- ]
- ],
- [
- [
- 8682,
- 4533
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -7
- ]
- ],
- [
- [
- 8976,
- 4495
- ],
- [
- 0,
- -7
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -8
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -13
- ],
- [
- 0,
- -12
- ],
- [
- 2,
- -9
- ],
- [
- -1,
- -17
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -12
- ],
- [
- 1,
- -11
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -8
- ],
- [
- 8,
- -10
- ],
- [
- 4,
- -7
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -9
- ],
- [
- 3,
- -13
- ],
- [
- 0,
- -10
- ],
- [
- 3,
- -10
- ],
- [
- -1,
- -10
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -6
- ],
- [
- 3,
- -8
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -9
- ],
- [
- 4,
- -18
- ],
- [
- 2,
- -15
- ],
- [
- -1,
- -20
- ],
- [
- -2,
- -11
- ],
- [
- 1,
- -6
- ],
- [
- 5,
- -13
- ],
- [
- 3,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -10
- ],
- [
- 2,
- -8
- ],
- [
- 3,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -8
- ],
- [
- 4,
- -9
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 5,
- -7
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -8
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -7
- ],
- [
- 3,
- -9
- ],
- [
- 4,
- -6
- ],
- [
- 4,
- -7
- ],
- [
- 4,
- -9
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -10
- ],
- [
- 4,
- -6
- ],
- [
- 0,
- -11
- ],
- [
- 2,
- -15
- ],
- [
- 2,
- -13
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 12
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 5,
- -5
- ],
- [
- 4,
- -6
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -10
- ],
- [
- 0,
- -18
- ],
- [
- 1,
- -16
- ],
- [
- 1,
- -16
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 7,
- -11
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 4,
- -17
- ],
- [
- 2,
- -6
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -8
- ],
- [
- 4,
- -4
- ],
- [
- 4,
- -9
- ],
- [
- 0,
- -15
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -3,
- -19
- ],
- [
- 3,
- -39
- ],
- [
- -2,
- -13
- ],
- [
- 3,
- -12
- ],
- [
- 5,
- -21
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -9
- ],
- [
- 3,
- -11
- ],
- [
- 0,
- -17
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -10
- ],
- [
- -4,
- -11
- ],
- [
- -3,
- -14
- ],
- [
- 0,
- -12
- ],
- [
- -2,
- -23
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -10
- ],
- [
- -4,
- -23
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -11
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -13
- ],
- [
- -5,
- -20
- ],
- [
- -6,
- -15
- ],
- [
- -1,
- -11
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -7
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -4
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -12
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -8
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -4,
- -8
- ],
- [
- -4,
- -8
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -15
- ],
- [
- -2,
- -8
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -22
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -9
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -9
- ],
- [
- -1,
- -14
- ],
- [
- -1,
- -10
- ],
- [
- -2,
- -10
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -14
- ],
- [
- 1,
- -10
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -10,
- 1
- ],
- [
- -19,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -7,
- -4
- ],
- [
- -7,
- -7
- ],
- [
- -7,
- -10
- ],
- [
- -15,
- -25
- ],
- [
- -11,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -6,
- -7
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -10,
- -10
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -6,
- -7
- ],
- [
- -8,
- -13
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 6
- ],
- [
- -7,
- 4
- ],
- [
- -6,
- 7
- ],
- [
- -5,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -8,
- 7
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- -6
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 11
- ],
- [
- -6,
- 6
- ],
- [
- -11,
- 2
- ],
- [
- -6,
- 8
- ],
- [
- -5,
- 15
- ],
- [
- -9,
- 16
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 9
- ],
- [
- 2,
- 9
- ],
- [
- 0,
- 5
- ],
- [
- -4,
- 17
- ],
- [
- -5,
- 16
- ],
- [
- -2,
- 5
- ],
- [
- -6,
- 10
- ],
- [
- -6,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- -5
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 17
- ],
- [
- -1,
- 15
- ],
- [
- -1,
- 7
- ],
- [
- -5,
- 12
- ],
- [
- -2,
- 8
- ],
- [
- -3,
- 8
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- -15
- ],
- [
- -5,
- -24
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- 4,
- 19
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 10
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- 5,
- 18
- ],
- [
- 3,
- 9
- ],
- [
- 5,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- -2,
- 18
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -7
- ],
- [
- -3,
- -9
- ],
- [
- -4,
- -6
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -14
- ],
- [
- -4,
- -11
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -9,
- -23
- ],
- [
- -4,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -10
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 6
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- 11
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- 12
- ],
- [
- -1,
- 10
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 11
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 7
- ],
- [
- -4,
- 9
- ],
- [
- -1,
- 10
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -8,
- 2
- ],
- [
- -4,
- 10
- ],
- [
- -2,
- 14
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- -9,
- 8
- ],
- [
- -4,
- 8
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -12,
- 13
- ],
- [
- -3,
- 1
- ],
- [
- -9,
- -5
- ],
- [
- -3,
- 1
- ],
- [
- -14,
- 18
- ],
- [
- -9,
- 9
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- -18,
- 2
- ],
- [
- -16,
- -3
- ],
- [
- -10,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -11,
- -11
- ],
- [
- -13,
- -10
- ],
- [
- -11,
- -5
- ],
- [
- -10,
- -7
- ],
- [
- -7,
- -1
- ],
- [
- -8,
- -1
- ],
- [
- -18,
- 3
- ],
- [
- -6,
- -2
- ],
- [
- -10,
- -12
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- -4
- ],
- [
- -14,
- -15
- ],
- [
- -7,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- -4,
- -19
- ],
- [
- -3,
- -8
- ],
- [
- -6,
- -14
- ],
- [
- -4,
- -5
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- -5
- ],
- [
- -4,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -18,
- -6
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -9,
- 2
- ],
- [
- -17,
- -2
- ],
- [
- -8,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- 1
- ],
- [
- -10,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- -16
- ],
- [
- -5,
- -5
- ],
- [
- -5,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -11,
- -15
- ],
- [
- -10,
- -14
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -12,
- 4
- ],
- [
- -8,
- 0
- ],
- [
- -9,
- 3
- ],
- [
- -9,
- 7
- ],
- [
- -6,
- 4
- ],
- [
- -7,
- 15
- ],
- [
- -5,
- 6
- ],
- [
- -8,
- 7
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 14
- ],
- [
- 0,
- 16
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 6
- ],
- [
- 2,
- 10
- ],
- [
- 3,
- 10
- ],
- [
- -1,
- 11
- ],
- [
- -1,
- 19
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 10
- ],
- [
- 0,
- 29
- ],
- [
- -1,
- 11
- ],
- [
- -7,
- 23
- ],
- [
- -4,
- 19
- ],
- [
- -3,
- 9
- ],
- [
- -3,
- 15
- ],
- [
- -3,
- 19
- ],
- [
- 0,
- 10
- ],
- [
- -1,
- 19
- ],
- [
- 1,
- 10
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 17
- ],
- [
- -7,
- 16
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- -5,
- 14
- ],
- [
- -6,
- 12
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 25
- ],
- [
- -2,
- 12
- ],
- [
- -9,
- 28
- ],
- [
- -11,
- 25
- ],
- [
- -3,
- 10
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 3,
- -14
- ],
- [
- 1,
- -7
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 10
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 8
- ],
- [
- -2,
- 11
- ],
- [
- -3,
- 11
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -6
- ],
- [
- -1,
- -10
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -14
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 7
- ],
- [
- -6,
- 17
- ],
- [
- -6,
- 22
- ],
- [
- -3,
- 11
- ],
- [
- -3,
- 17
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 15
- ],
- [
- 1,
- 8
- ],
- [
- 6,
- 18
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 10
- ],
- [
- 3,
- 18
- ],
- [
- 5,
- 22
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -16
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -9
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 6,
- 18
- ],
- [
- 3,
- 7
- ],
- [
- 4,
- 5
- ],
- [
- 8,
- 6
- ],
- [
- 8,
- 8
- ],
- [
- 4,
- 8
- ],
- [
- 5,
- 6
- ],
- [
- 3,
- 8
- ],
- [
- 4,
- 4
- ],
- [
- 16,
- 19
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 8,
- 5
- ],
- [
- 4,
- 4
- ],
- [
- 7,
- 9
- ],
- [
- 3,
- 2
- ],
- [
- 8,
- 3
- ],
- [
- 8,
- 4
- ],
- [
- 10,
- 15
- ],
- [
- 7,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 5,
- 4
- ],
- [
- 12,
- 3
- ],
- [
- 7,
- 4
- ],
- [
- 12,
- 10
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- 7
- ],
- [
- 5,
- 9
- ],
- [
- 4,
- 12
- ],
- [
- 3,
- 11
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 9
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 5,
- 4
- ],
- [
- 7,
- 14
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 14
- ],
- [
- -1,
- 10
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 10
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 9
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -16
- ],
- [
- 2,
- -8
- ],
- [
- 3,
- -10
- ],
- [
- 3,
- -15
- ],
- [
- 3,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 11
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -11
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -8
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 7,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 8
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 5,
- -4
- ],
- [
- 5,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 4,
- -11
- ],
- [
- 8,
- -13
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -14
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 12,
- -6
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -8
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 10
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 6
- ],
- [
- 2,
- 10
- ],
- [
- 5,
- 10
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- -3,
- 9
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 4,
- 5
- ],
- [
- 2,
- 11
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 8,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- -6,
- 9
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 7
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -8
- ],
- [
- 4,
- -8
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -10
- ],
- [
- 2,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 6,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- 5
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- -6
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- 5
- ],
- [
- 5,
- 4
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- 10
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -10
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -7
- ],
- [
- -11,
- -25
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -13
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- -8
- ],
- [
- 0,
- -18
- ],
- [
- 2,
- -11
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -12
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- -17
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 8,
- -9
- ],
- [
- 4,
- -7
- ],
- [
- 7,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 5,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- 6,
- -5
- ],
- [
- 5,
- -4
- ],
- [
- 6,
- -14
- ],
- [
- 4,
- -8
- ],
- [
- 5,
- -6
- ],
- [
- 7,
- -4
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- -4
- ],
- [
- 6,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -9
- ],
- [
- 5,
- -3
- ],
- [
- 7,
- -10
- ],
- [
- 6,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- 0
- ],
- [
- 8,
- 5
- ],
- [
- 4,
- 4
- ],
- [
- 5,
- 8
- ],
- [
- 2,
- 13
- ],
- [
- 2,
- 10
- ],
- [
- 7,
- 21
- ],
- [
- 2,
- 11
- ],
- [
- 2,
- 13
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 10
- ],
- [
- 1,
- 17
- ],
- [
- 4,
- 24
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 11
- ],
- [
- -3,
- 22
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 11
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 14
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 9
- ],
- [
- -1,
- 18
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 8
- ],
- [
- 3,
- 16
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- 3,
- 15
- ],
- [
- 2,
- 20
- ],
- [
- 1,
- 19
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 5,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -11
- ],
- [
- 1,
- -11
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ]
- ],
- [
- [
- 8951,
- 4567
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -7
- ]
- ],
- [
- [
- 8953,
- 4597
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 8948,
- 4599
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 5470,
- 7983
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -11
- ],
- [
- 3,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 5476,
- 7949
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 6,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -6
- ]
- ],
- [
- [
- 5446,
- 7883
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -6,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 5380,
- 7863
- ],
- [
- -6,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -10,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -6,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 5290,
- 7883
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 5266,
- 7894
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 5264,
- 7907
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ]
- ],
- [
- [
- 5264,
- 7921
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 13,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 10
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 5383,
- 7993
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- -6
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 6280,
- 7423
- ],
- [
- -5,
- 2
- ],
- [
- -10,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- 11
- ],
- [
- -1,
- 2
- ]
- ],
- [
- [
- 6244,
- 7468
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 6349,
- 7594
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -9
- ],
- [
- 6,
- -15
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 6,
- -13
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -7
- ],
- [
- -6,
- 2
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -14
- ],
- [
- -3,
- -14
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -13
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -22
- ]
- ],
- [
- [
- 6357,
- 7398
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 10
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 6
- ],
- [
- -4,
- 8
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -6
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -6,
- -10
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 6249,
- 7562
- ],
- [
- 6,
- 8
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 8,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ]
- ],
- [
- [
- 6289,
- 7597
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -9
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 7
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 4
- ]
- ],
- [
- [
- 5848,
- 5046
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -11
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -6
- ],
- [
- -6,
- -12
- ],
- [
- -5,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -9,
- 1
- ]
- ],
- [
- [
- 5816,
- 4928
- ],
- [
- 0,
- 8
- ],
- [
- -2,
- 12
- ],
- [
- -3,
- 11
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ]
- ],
- [
- [
- 5805,
- 5027
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 5158,
- 8108
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- 0
- ]
- ],
- [
- [
- 5166,
- 8107
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -5,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 5169,
- 8071
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 5160,
- 8037
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 11
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ]
- ],
- [
- [
- 5070,
- 8127
- ],
- [
- 12,
- 10
- ],
- [
- 7,
- 5
- ],
- [
- 4,
- 1
- ]
- ],
- [
- [
- 5093,
- 8143
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ]
- ],
- [
- [
- 5117,
- 8144
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 4
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 5099,
- 5857
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -8
- ],
- [
- 0,
- -6
- ],
- [
- 5,
- -12
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -10
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -9
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -8
- ],
- [
- -2,
- -6
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -15
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -13
- ],
- [
- -1,
- -10
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -15
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 5075,
- 5551
- ],
- [
- -12,
- -3
- ],
- [
- -13,
- -4
- ],
- [
- -5,
- -2
- ]
- ],
- [
- [
- 5045,
- 5542
- ],
- [
- -1,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- -1,
- 8
- ],
- [
- -3,
- 9
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- 21
- ],
- [
- 0,
- 21
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 14
- ],
- [
- -1,
- 17
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 16
- ],
- [
- -1,
- 5
- ],
- [
- -4,
- 9
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 13
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 5
- ],
- [
- -6,
- 9
- ],
- [
- -4,
- 6
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 19
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 6
- ]
- ],
- [
- [
- 5025,
- 5817
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 7,
- 3
- ],
- [
- 4,
- -2
- ],
- [
- 6,
- 13
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 9
- ],
- [
- 1,
- 3
- ]
- ],
- [
- [
- 5066,
- 5869
- ],
- [
- 1,
- 6
- ],
- [
- -2,
- 11
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 8,
- -14
- ],
- [
- 3,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -6
- ]
- ],
- [
- [
- 5006,
- 6043
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -9
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -8
- ],
- [
- 3,
- -8
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- -10
- ],
- [
- 5,
- -9
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -8
- ],
- [
- 5,
- -11
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 5025,
- 5817
- ],
- [
- -8,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -9,
- 4
- ],
- [
- -6,
- 3
- ]
- ],
- [
- [
- 4998,
- 5824
- ],
- [
- -7,
- 3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -8,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -8,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -8,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -14
- ],
- [
- 0,
- -8
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -10
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 4925,
- 5730
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 4
- ]
- ],
- [
- [
- 4846,
- 5784
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 9
- ],
- [
- -1,
- 7
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 10
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 7,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 8,
- -10
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 9
- ],
- [
- 2,
- 7
- ],
- [
- 6,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 10,
- -6
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 15
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 5
- ],
- [
- 8,
- 8
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 7
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 3
- ],
- [
- 7,
- -4
- ],
- [
- 6,
- -4
- ]
- ],
- [
- [
- 7553,
- 6423
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 7551,
- 6441
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 7531,
- 6461
- ],
- [
- -3,
- -4
- ],
- [
- 1,
- 24
- ],
- [
- 2,
- -9
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -6
- ]
- ],
- [
- [
- 7542,
- 6473
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 7521,
- 6456
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- 4,
- 15
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -9
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -13
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 7517,
- 6506
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -5
- ]
- ],
- [
- [
- 7571,
- 6450
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -20
- ],
- [
- 0,
- -8
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 7564,
- 6381
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 11
- ],
- [
- -1,
- 20
- ],
- [
- 0,
- 10
- ],
- [
- -3,
- 11
- ],
- [
- -1,
- 16
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -4,
- 12
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- 8
- ],
- [
- -5,
- 17
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 10
- ],
- [
- -1,
- 10
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -7
- ],
- [
- -2,
- -9
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 8
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 3,
- 9
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- 17
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 4
- ]
- ],
- [
- [
- 7473,
- 6456
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 13
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 9
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- 2,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 9
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 9
- ],
- [
- 2,
- 10
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 12
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 13
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- 3,
- -6
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -13
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -16
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 8,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 8,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 4,
- -4
- ],
- [
- 5,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -11
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -9
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -12
- ],
- [
- 2,
- -15
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -11
- ],
- [
- 1,
- -10
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -10
- ],
- [
- 1,
- -9
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -9
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -21
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 5793,
- 7703
- ],
- [
- 0,
- -14
- ],
- [
- -3,
- -6
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -16
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -7,
- -14
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -8
- ],
- [
- 5,
- -9
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 5778,
- 7601
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5731,
- 7587
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 5
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 1
- ]
- ],
- [
- [
- 5636,
- 7565
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 14
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 10
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 9
- ]
- ],
- [
- [
- 5620,
- 7621
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 5630,
- 7732
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 9,
- 2
- ],
- [
- 8,
- -1
- ],
- [
- 12,
- -4
- ],
- [
- 7,
- -1
- ],
- [
- 6,
- 1
- ],
- [
- 11,
- -3
- ],
- [
- 9,
- -3
- ],
- [
- 10,
- -1
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- 8,
- 8
- ],
- [
- 7,
- 4
- ],
- [
- 10,
- 4
- ],
- [
- 7,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 8,
- -8
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 0
- ]
- ],
- [
- [
- 6405,
- 6675
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 2971,
- 6404
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -8
- ],
- [
- -6,
- -2
- ],
- [
- -7,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- -7
- ]
- ],
- [
- [
- 2974,
- 6423
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 2971,
- 6476
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- -1
- ]
- ],
- [
- [
- 2938,
- 6463
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -8
- ],
- [
- -4,
- -10
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -6
- ]
- ],
- [
- [
- 2943,
- 6493
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -2
- ]
- ],
- [
- [
- 2921,
- 6502
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- 12
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 8
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -11
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -7
- ]
- ],
- [
- [
- 2898,
- 6534
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -5,
- 7
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 2932,
- 6570
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 2843,
- 6581
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -9
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -8
- ],
- [
- -6,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 9
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 2908,
- 6578
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 9
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -13
- ],
- [
- 0,
- -1
- ],
- [
- 6,
- -13
- ]
- ],
- [
- [
- 2851,
- 6625
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 2840,
- 6607
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 9
- ],
- [
- 1,
- 6
- ],
- [
- -2,
- 10
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- 3,
- -5
- ]
- ],
- [
- [
- 2871,
- 6652
- ],
- [
- 4,
- -7
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -8
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -12
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 6
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -4
- ]
- ],
- [
- [
- 2819,
- 6723
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -8,
- -2
- ],
- [
- -8,
- -4
- ],
- [
- -5,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 9
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- -4
- ]
- ],
- [
- [
- 2855,
- 6676
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -5,
- 13
- ],
- [
- -8,
- 3
- ],
- [
- -4,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -11
- ],
- [
- -4,
- -6
- ],
- [
- 0,
- -16
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5527,
- 7768
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -6
- ],
- [
- 4,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5533,
- 7691
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -6
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 5512,
- 7635
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 5490,
- 7655
- ],
- [
- -2,
- 2
- ]
- ],
- [
- [
- 5488,
- 7657
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 9
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- 8
- ],
- [
- -5,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 8
- ],
- [
- -4,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 10
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 7,
- -1
- ],
- [
- 3,
- 5
- ],
- [
- 6,
- -6
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 3254,
- 6213
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 5781,
- 8418
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 5,
- -5
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -6
- ],
- [
- 6,
- -4
- ],
- [
- 5,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 6,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5882,
- 8185
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 8
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -9,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -6
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5655,
- 8151
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 10,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 9
- ],
- [
- -5,
- 19
- ],
- [
- -3,
- 20
- ]
- ],
- [
- [
- 5652,
- 8291
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ]
- ],
- [
- [
- 5738,
- 8390
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 8
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 2559,
- 6187
- ],
- [
- -2,
- -8
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 2557,
- 6216
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- -3,
- -13
- ]
- ],
- [
- [
- 2530,
- 6099
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 15
- ],
- [
- 1,
- 22
- ],
- [
- 0,
- 16
- ],
- [
- 0,
- 16
- ],
- [
- 0,
- 12
- ],
- [
- 1,
- 16
- ],
- [
- 0,
- 14
- ]
- ],
- [
- [
- 2523,
- 6210
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 4,
- 12
- ],
- [
- 2,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 2547,
- 6248
- ],
- [
- -1,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- -3,
- -16
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -8
- ],
- [
- 2,
- -5
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -13
- ],
- [
- -1,
- -19
- ],
- [
- -3,
- -8
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -8
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- -14
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 3202,
- 7044
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 3384,
- 4022
- ],
- [
- 1,
- 10
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- -9,
- 10
- ],
- [
- -7,
- 9
- ],
- [
- -10,
- 12
- ],
- [
- -12,
- 0
- ],
- [
- -13,
- -1
- ],
- [
- -13,
- -5
- ],
- [
- -12,
- -5
- ],
- [
- -5,
- -3
- ],
- [
- -12,
- -4
- ],
- [
- -7,
- -3
- ],
- [
- -2,
- -9
- ],
- [
- -2,
- -14
- ],
- [
- -3,
- -9
- ],
- [
- -3,
- -8
- ],
- [
- -4,
- -13
- ],
- [
- 0,
- -14
- ],
- [
- 0,
- -15
- ],
- [
- -3,
- -19
- ],
- [
- -3,
- -17
- ],
- [
- -2,
- -17
- ],
- [
- -2,
- -11
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 3133,
- 3869
- ],
- [
- -4,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 8
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 8
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 9
- ],
- [
- -3,
- 10
- ],
- [
- -3,
- 10
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -6,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -4,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 9
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 10
- ],
- [
- -4,
- 9
- ],
- [
- 0,
- 6
- ]
- ],
- [
- [
- 3069,
- 4175
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 8
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 23
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 12
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 10
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 11
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 24
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -4,
- 13
- ],
- [
- -3,
- 12
- ],
- [
- -3,
- 11
- ],
- [
- -4,
- 13
- ],
- [
- -2,
- 8
- ],
- [
- -3,
- 10
- ],
- [
- -3,
- 9
- ],
- [
- -3,
- 13
- ]
- ],
- [
- [
- 3067,
- 4553
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 9
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 5,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 11,
- 17
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 9,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -11
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -7
- ],
- [
- 5,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -4
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 4,
- -9
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 6,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- -4
- ],
- [
- 5,
- -6
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -27
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -11
- ],
- [
- 4,
- -9
- ],
- [
- 1,
- -15
- ],
- [
- 0,
- -9
- ],
- [
- 1,
- -13
- ],
- [
- 0,
- -8
- ],
- [
- 10,
- -1
- ],
- [
- 11,
- -1
- ],
- [
- 13,
- -1
- ],
- [
- 12,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -4,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -12
- ],
- [
- 1,
- -10
- ],
- [
- 1,
- -9
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- 6,
- -9
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -16
- ],
- [
- 2,
- -10
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -11
- ],
- [
- -3,
- -15
- ],
- [
- -1,
- -11
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -9
- ],
- [
- -3,
- -11
- ],
- [
- -2,
- -12
- ],
- [
- -2,
- -6
- ],
- [
- 3,
- -6
- ],
- [
- 4,
- -8
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 3653,
- 3584
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 14
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -8
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 3650,
- 3663
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 8
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 3742,
- 3808
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 4,
- 10
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3774,
- 3851
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 3919,
- 4408
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 3923,
- 4429
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -6
- ]
- ],
- [
- [
- 3764,
- 5014
- ],
- [
- -3,
- -5
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -8
- ]
- ],
- [
- [
- 3753,
- 5108
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 5
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 3560,
- 5101
- ],
- [
- -3,
- -1
- ],
- [
- 4,
- 15
- ],
- [
- 3,
- 6
- ],
- [
- 0,
- 14
- ],
- [
- 4,
- 11
- ],
- [
- 3,
- 5
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- -8
- ],
- [
- -4,
- -20
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -11
- ],
- [
- -5,
- -7
- ],
- [
- -5,
- -6
- ]
- ],
- [
- [
- 3621,
- 5171
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 9,
- -3
- ],
- [
- 6,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- -7
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- -7,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 5,
- 7
- ],
- [
- 6,
- 2
- ],
- [
- 17,
- -6
- ]
- ],
- [
- [
- 3593,
- 5176
- ],
- [
- -8,
- -11
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 3626,
- 5177
- ],
- [
- -7,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 3618,
- 5199
- ],
- [
- 1,
- -3
- ],
- [
- -4,
- -12
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 4
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 4,
- 0
- ],
- [
- 7,
- 4
- ],
- [
- 4,
- -2
- ]
- ],
- [
- [
- 3599,
- 5192
- ],
- [
- -1,
- -9
- ],
- [
- -5,
- 4
- ],
- [
- 1,
- 9
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -11
- ],
- [
- 1,
- -7
- ],
- [
- -3,
- -7
- ]
- ],
- [
- [
- 3607,
- 5206
- ],
- [
- -4,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -8
- ]
- ],
- [
- [
- 3602,
- 5295
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -9
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 3431,
- 5296
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- -3
- ],
- [
- 6,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- -5
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 3483,
- 5318
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 13
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 11
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ]
- ],
- [
- [
- 3565,
- 5418
- ],
- [
- 2,
- 10
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -5
- ],
- [
- 3,
- -7
- ],
- [
- 4,
- -25
- ],
- [
- 1,
- -22
- ],
- [
- 1,
- -12
- ],
- [
- 5,
- -24
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -10
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -13
- ],
- [
- -1,
- -9
- ],
- [
- 1,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -6,
- -10
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- -13
- ],
- [
- -5,
- -11
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -9
- ],
- [
- -5,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -13
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -12
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -10
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- 2
- ],
- [
- -9,
- -8
- ],
- [
- -3,
- -3
- ],
- [
- 10,
- 0
- ],
- [
- 3,
- -5
- ],
- [
- 7,
- 3
- ],
- [
- 8,
- 11
- ],
- [
- 3,
- 3
- ],
- [
- 7,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 5,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -7
- ],
- [
- 3,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 6,
- -9
- ],
- [
- 4,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- 3
- ],
- [
- 8,
- 8
- ],
- [
- -3,
- -14
- ],
- [
- -1,
- -12
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -13
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 9
- ],
- [
- 6,
- 24
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 8,
- 20
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- 4,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -5
- ],
- [
- 5,
- -3
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -12
- ],
- [
- 0,
- -9
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 7
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -22
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- 11
- ],
- [
- 2,
- 12
- ],
- [
- 2,
- 12
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 5,
- 10
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 5
- ],
- [
- 8,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 8,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 10,
- -8
- ],
- [
- 7,
- -1
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- 3
- ],
- [
- 9,
- 1
- ],
- [
- 11,
- 4
- ],
- [
- 7,
- -1
- ],
- [
- 7,
- -3
- ],
- [
- 6,
- -7
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- -4
- ],
- [
- 10,
- -11
- ],
- [
- 3,
- -7
- ],
- [
- 6,
- -9
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- -9
- ],
- [
- 3,
- -5
- ],
- [
- 6,
- -15
- ],
- [
- 7,
- -11
- ],
- [
- 4,
- -11
- ],
- [
- 9,
- -7
- ],
- [
- 4,
- -11
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -3
- ],
- [
- 6,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 5,
- 3
- ],
- [
- 12,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 5,
- -18
- ],
- [
- 2,
- -20
- ],
- [
- 2,
- -15
- ],
- [
- 3,
- -12
- ],
- [
- 1,
- -23
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -15
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -18
- ],
- [
- -5,
- -31
- ],
- [
- -5,
- -17
- ],
- [
- -7,
- -18
- ],
- [
- -5,
- -9
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -5,
- -14
- ],
- [
- -5,
- -8
- ],
- [
- -4,
- -15
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- -6
- ],
- [
- -4,
- -5
- ],
- [
- -4,
- -8
- ],
- [
- -5,
- -14
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -7
- ],
- [
- -4,
- -10
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -8
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -9
- ],
- [
- -6,
- -26
- ],
- [
- -8,
- -22
- ],
- [
- -1,
- -6
- ],
- [
- -7,
- -15
- ],
- [
- -4,
- -7
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 11
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- -4,
- -8
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- -36
- ],
- [
- 1,
- -16
- ],
- [
- 0,
- -19
- ],
- [
- 2,
- -18
- ],
- [
- 1,
- -16
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- -19
- ],
- [
- -2,
- -18
- ],
- [
- -2,
- -15
- ],
- [
- -1,
- -16
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -8
- ],
- [
- 2,
- -18
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -8
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- -16
- ],
- [
- -2,
- -22
- ],
- [
- 0,
- -12
- ],
- [
- 1,
- -25
- ],
- [
- -1,
- -10
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- -5
- ],
- [
- -3,
- -13
- ],
- [
- -2,
- -14
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- -8
- ],
- [
- -2,
- -8
- ],
- [
- -6,
- -12
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -8
- ],
- [
- -3,
- -11
- ],
- [
- -3,
- -16
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -18
- ],
- [
- 0,
- -4
- ],
- [
- -4,
- -5
- ],
- [
- -12,
- -9
- ],
- [
- -4,
- -4
- ],
- [
- -8,
- -16
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- 0
- ],
- [
- -13,
- 0
- ],
- [
- -7,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -5,
- 3
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -6,
- 1
- ],
- [
- -7,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -8,
- -3
- ],
- [
- -7,
- -11
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -19,
- -18
- ],
- [
- -6,
- -7
- ],
- [
- -8,
- -15
- ],
- [
- -12,
- -17
- ],
- [
- -7,
- -9
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- -10
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- -7
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -4,
- -12
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -14
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 2,
- -10
- ],
- [
- 1,
- -11
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -10
- ],
- [
- 1,
- -16
- ],
- [
- 0,
- -14
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -7
- ],
- [
- 0,
- -8
- ],
- [
- -6,
- -7
- ],
- [
- -7,
- -10
- ],
- [
- -6,
- -12
- ],
- [
- -7,
- -16
- ],
- [
- -8,
- -26
- ],
- [
- -8,
- -36
- ],
- [
- -8,
- -27
- ],
- [
- -4,
- -10
- ],
- [
- -5,
- -11
- ],
- [
- -6,
- -12
- ],
- [
- -9,
- -13
- ],
- [
- -9,
- -12
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 7,
- 12
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 8
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 6
- ],
- [
- -1,
- 16
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -8,
- -8
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- 4,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -9
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- -10
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -6,
- -8
- ],
- [
- -6,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -11
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -7
- ],
- [
- -5,
- -25
- ],
- [
- -4,
- -15
- ],
- [
- -3,
- -7
- ],
- [
- -4,
- -8
- ],
- [
- -13,
- -20
- ]
- ],
- [
- [
- 3517,
- 3240
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 19
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- 6
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -8,
- 6
- ],
- [
- -4,
- 6
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 9
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -6,
- 10
- ],
- [
- -9,
- 15
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- 4
- ]
- ],
- [
- [
- 3483,
- 3711
- ],
- [
- 0,
- 8
- ],
- [
- 4,
- 12
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 11
- ],
- [
- 3,
- 20
- ],
- [
- 1,
- 13
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ]
- ],
- [
- [
- 3067,
- 4553
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 15
- ],
- [
- 0,
- 13
- ],
- [
- 1,
- 10
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- -2
- ],
- [
- -7,
- -1
- ],
- [
- -8,
- 0
- ],
- [
- -7,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -6,
- 3
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- 3,
- 8
- ],
- [
- 4,
- 8
- ],
- [
- 0,
- 8
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 5,
- 9
- ],
- [
- 5,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 8
- ],
- [
- 2,
- 9
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 11
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 7
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 4
- ]
- ],
- [
- [
- 3056,
- 4940
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 19
- ],
- [
- 2,
- 18
- ],
- [
- 2,
- 19
- ],
- [
- 1,
- 20
- ],
- [
- 2,
- 21
- ],
- [
- 2,
- 16
- ],
- [
- 1,
- 15
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 12
- ],
- [
- 0,
- 10
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 10
- ],
- [
- 1,
- 15
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 14
- ],
- [
- 0,
- 14
- ],
- [
- 0,
- 9
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 8
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -11
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 2
- ]
- ],
- [
- [
- 3142,
- 5254
- ],
- [
- 7,
- -13
- ],
- [
- 5,
- -10
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- -3,
- 12
- ],
- [
- -2,
- 11
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -8,
- 13
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -10
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 16
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- 5
- ],
- [
- 8,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 3312,
- 5483
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -11
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -13
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -13
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 3347,
- 5937
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 8194,
- 5466
- ],
- [
- 4,
- 0
- ]
- ],
- [
- [
- 8198,
- 5466
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -11
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 11
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 5
- ]
- ],
- [
- [
- 8194,
- 5466
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 8168,
- 5448
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 7545,
- 6783
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- 1
- ],
- [
- -8,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- -5,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 7468,
- 6757
- ],
- [
- 2,
- 9
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 7
- ],
- [
- 3,
- 7
- ],
- [
- 3,
- 7
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5701,
- 4159
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 6,
- -12
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 4,
- -8
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 4,
- -17
- ],
- [
- 2,
- -10
- ],
- [
- 2,
- -1
- ],
- [
- 7,
- -11
- ],
- [
- 5,
- -8
- ],
- [
- 7,
- -6
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -6
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -9
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -9
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 10,
- -3
- ],
- [
- 6,
- -4
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -8
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 5815,
- 3905
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- -5
- ],
- [
- -5,
- -11
- ],
- [
- -3,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- -27
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -8,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -8
- ],
- [
- -3,
- -13
- ],
- [
- -2,
- -9
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -10
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 6
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 7
- ],
- [
- -4,
- 5
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -11
- ],
- [
- -3,
- -12
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- -10
- ],
- [
- -4,
- -11
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -10,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 10
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 11
- ],
- [
- -3,
- 14
- ],
- [
- -4,
- 15
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- -9,
- 13
- ],
- [
- -2,
- 2
- ]
- ],
- [
- [
- 5554,
- 3757
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 16
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 16
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 16
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 16
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 14
- ],
- [
- 7,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- 9,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 24
- ],
- [
- 0,
- 23
- ],
- [
- 0,
- 24
- ],
- [
- 0,
- 23
- ],
- [
- 0,
- 24
- ],
- [
- 0,
- 23
- ],
- [
- 0,
- 24
- ],
- [
- 0,
- 23
- ],
- [
- 0,
- 12
- ],
- [
- 7,
- 0
- ],
- [
- 8,
- 3
- ],
- [
- 14,
- 4
- ],
- [
- 12,
- 4
- ],
- [
- 8,
- 3
- ],
- [
- 10,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -11
- ],
- [
- 3,
- -9
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 7,
- 11
- ],
- [
- 3,
- 2
- ],
- [
- 9,
- 2
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 5634,
- 5813
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 8,
- -17
- ],
- [
- 2,
- -4
- ],
- [
- 4,
- -12
- ],
- [
- 2,
- -8
- ],
- [
- 3,
- -12
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -16
- ],
- [
- -1,
- -5
- ],
- [
- -4,
- -8
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 7,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ]
- ],
- [
- [
- 5670,
- 5683
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -9
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 8,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -10
- ],
- [
- 5,
- -9
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- 6,
- -6
- ],
- [
- 9,
- -9
- ],
- [
- 4,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- -2,
- -10
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -9
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -5
- ]
- ],
- [
- [
- 5761,
- 5478
- ],
- [
- -8,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -13,
- 5
- ],
- [
- -9,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -12
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- -3
- ],
- [
- -9,
- 4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -8
- ],
- [
- -3,
- -14
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -14,
- 7
- ],
- [
- -6,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -5,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 9
- ],
- [
- -5,
- 8
- ],
- [
- -6,
- 7
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -5,
- -3
- ],
- [
- -7,
- -10
- ],
- [
- -6,
- -22
- ],
- [
- -4,
- -8
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -9
- ],
- [
- -1,
- -16
- ],
- [
- 0,
- -12
- ]
- ],
- [
- [
- 5516,
- 5384
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -7,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -9
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -8
- ],
- [
- -2,
- -9
- ],
- [
- -2,
- -8
- ],
- [
- -2,
- -7
- ]
- ],
- [
- [
- 5449,
- 5315
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 7
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 8
- ],
- [
- -3,
- 7
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -4,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 23
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 22
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 11
- ],
- [
- 4,
- 11
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 6
- ],
- [
- 2,
- 9
- ]
- ],
- [
- [
- 5429,
- 5617
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 4,
- -6
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 7
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 5
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 8,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 9
- ],
- [
- 3,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -5,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 8,
- 0
- ],
- [
- 6,
- 8
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 7
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 7,
- 15
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 10
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 6,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 3339,
- 7715
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 3
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 3159,
- 7735
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- -2,
- -6
- ]
- ],
- [
- [
- 3145,
- 7757
- ],
- [
- -4,
- -3
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 3306,
- 7804
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 2953,
- 7809
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 4,
- 5
- ],
- [
- 4,
- 2
- ],
- [
- -3,
- -7
- ]
- ],
- [
- [
- 2956,
- 7803
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 8
- ],
- [
- 2,
- 0
- ],
- [
- -2,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 3027,
- 7884
- ],
- [
- -3,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 3302,
- 7830
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- 10
- ],
- [
- 0,
- 2
- ],
- [
- -7,
- -3
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- -6
- ],
- [
- -8,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 13
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 7,
- 20
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 7
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -9
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -12
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- -6
- ]
- ],
- [
- [
- 3227,
- 7860
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 7,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 7,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -5
- ],
- [
- -6,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 4,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -8,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 6
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -8
- ],
- [
- 6,
- -8
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 3280,
- 7907
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- 3,
- 11
- ],
- [
- 2,
- 3
- ],
- [
- 6,
- 7
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 3493,
- 7916
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -8
- ]
- ],
- [
- [
- 3208,
- 7942
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ]
- ],
- [
- [
- 3209,
- 7946
- ],
- [
- -4,
- -3
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 1571,
- 7992
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 10
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 1573,
- 8000
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 6,
- -8
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 2924,
- 7776
- ],
- [
- 4,
- 2
- ],
- [
- 9,
- 9
- ],
- [
- 6,
- 3
- ],
- [
- 8,
- 9
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 7
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 9
- ],
- [
- 5,
- 5
- ],
- [
- 7,
- 5
- ],
- [
- 7,
- 10
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 5
- ],
- [
- 7,
- 1
- ],
- [
- 6,
- 4
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- 13,
- 11
- ],
- [
- 3,
- 5
- ],
- [
- 5,
- 10
- ],
- [
- 4,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 6,
- 9
- ],
- [
- 6,
- 11
- ],
- [
- 3,
- 9
- ],
- [
- 5,
- 4
- ],
- [
- 8,
- 13
- ],
- [
- 5,
- 6
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 5
- ],
- [
- 4,
- 5
- ],
- [
- 5,
- 5
- ],
- [
- 10,
- 6
- ],
- [
- 9,
- 7
- ],
- [
- 12,
- 6
- ],
- [
- 15,
- 9
- ],
- [
- 11,
- 5
- ],
- [
- 9,
- 1
- ],
- [
- 10,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 16,
- -4
- ],
- [
- 7,
- -5
- ],
- [
- 9,
- -10
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -7
- ],
- [
- 0,
- -8
- ],
- [
- -3,
- -7
- ],
- [
- -8,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -8,
- 5
- ],
- [
- -5,
- 4
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -7,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -4
- ],
- [
- 10,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -9
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- 6,
- 2
- ],
- [
- -1,
- -3
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- -1,
- -12
- ],
- [
- -5,
- -8
- ],
- [
- -7,
- -7
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -7
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -9
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 9,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- -7,
- -5
- ],
- [
- 5,
- -4
- ],
- [
- 5,
- -6
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 8,
- 8
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- 10,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -6
- ],
- [
- -7,
- -3
- ],
- [
- -7,
- -5
- ],
- [
- -7,
- -4
- ],
- [
- -7,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -7
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -7
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -6,
- -9
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 10
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 16
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 13
- ],
- [
- 6,
- 12
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -8
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 21,
- 21
- ],
- [
- 4,
- 3
- ],
- [
- 8,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- -1,
- 7
- ],
- [
- 2,
- 4
- ],
- [
- 10,
- 6
- ],
- [
- 8,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- -6,
- 1
- ],
- [
- -8,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -8,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 6
- ],
- [
- 7,
- 9
- ],
- [
- 5,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- -5,
- -10
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- -7,
- -4
- ],
- [
- -7,
- -8
- ],
- [
- -9,
- -6
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- -5,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ]
- ],
- [
- [
- 3135,
- 7785
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 9
- ],
- [
- -3,
- 5
- ],
- [
- -5,
- 6
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- -4,
- -9
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -9
- ],
- [
- -4,
- -8
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -7
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -11
- ],
- [
- -11,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 1497,
- 8027
- ],
- [
- 1,
- -6
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -1
- ]
- ],
- [
- [
- 3484,
- 8040
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3497,
- 8049
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- -7,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 1551,
- 8037
- ],
- [
- 1,
- -1
- ],
- [
- -7,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -8
- ]
- ],
- [
- [
- 1482,
- 8041
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 3283,
- 8012
- ],
- [
- -12,
- -1
- ],
- [
- -9,
- 3
- ],
- [
- -7,
- 2
- ],
- [
- -6,
- 3
- ],
- [
- -15,
- 10
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -15,
- 10
- ],
- [
- -2,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 11,
- -3
- ],
- [
- 13,
- -4
- ],
- [
- 5,
- -2
- ],
- [
- 7,
- -4
- ],
- [
- 6,
- -5
- ],
- [
- 14,
- -12
- ],
- [
- 2,
- -1
- ],
- [
- 7,
- -7
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 1528,
- 8065
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 1523,
- 8069
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 11
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 3457,
- 8105
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 1467,
- 8101
- ],
- [
- 13,
- -8
- ],
- [
- 14,
- -3
- ],
- [
- 10,
- -4
- ],
- [
- 7,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -8
- ],
- [
- 2,
- -6
- ],
- [
- 5,
- -9
- ],
- [
- 3,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -6
- ],
- [
- 6,
- -6
- ],
- [
- 4,
- -3
- ],
- [
- 8,
- -5
- ],
- [
- 6,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -8
- ],
- [
- 4,
- -7
- ],
- [
- 3,
- -14
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -9,
- 3
- ],
- [
- -6,
- 3
- ],
- [
- -7,
- 4
- ],
- [
- -9,
- 5
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 8
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -7,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -4,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 7,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 15,
- -10
- ]
- ],
- [
- [
- 3459,
- 8152
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -7
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -6,
- -9
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -9
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 7
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -9,
- -7
- ],
- [
- -3,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -5,
- -8
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- 4
- ],
- [
- 4,
- -5
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 9,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- -6
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- -7
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 7,
- 14
- ],
- [
- 5,
- 4
- ],
- [
- 5,
- 5
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -9
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -6,
- -18
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -8
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 12
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -5,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 7
- ],
- [
- 3,
- 10
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- -5
- ],
- [
- -5,
- -12
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 7
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- -12
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 11
- ],
- [
- 6,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- 4
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -7,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- 1
- ],
- [
- -15,
- 3
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -9,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -10,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 9,
- 10
- ],
- [
- 7,
- 9
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 6,
- 7
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 6,
- 19
- ],
- [
- 2,
- 10
- ],
- [
- 4,
- 15
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 8,
- 5
- ],
- [
- 5,
- 5
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 1446,
- 8149
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 3462,
- 8173
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 2795,
- 8176
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 9,
- 6
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 1360,
- 8177
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- -4
- ],
- [
- -1,
- -7
- ]
- ],
- [
- [
- 1434,
- 8202
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -12
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 1418,
- 8208
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 6,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 1408,
- 8236
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -7
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 2757,
- 8222
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -7,
- 4
- ],
- [
- -14,
- 6
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 14,
- 2
- ],
- [
- 6,
- -1
- ],
- [
- 6,
- -9
- ],
- [
- 4,
- -7
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 1340,
- 8248
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 4,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -6,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 6
- ],
- [
- -7,
- 12
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -9,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -2
- ]
- ],
- [
- [
- 1429,
- 8233
- ],
- [
- 1,
- -18
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 10
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -10
- ]
- ],
- [
- [
- 1412,
- 8243
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -8
- ]
- ],
- [
- [
- 2779,
- 8254
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 1393,
- 8246
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 9
- ],
- [
- -5,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- -11
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 1382,
- 8292
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -4
- ]
- ],
- [
- [
- 1315,
- 8301
- ],
- [
- 3,
- -3
- ],
- [
- 6,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -9,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 8,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -8
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -12
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -9,
- -5
- ],
- [
- -5,
- 1
- ],
- [
- -5,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -6,
- 6
- ],
- [
- -5,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 7,
- -1
- ]
- ],
- [
- [
- 1363,
- 8322
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 1373,
- 8338
- ],
- [
- 2,
- 4
- ],
- [
- 5,
- 7
- ],
- [
- 3,
- 4
- ]
- ],
- [
- [
- 1383,
- 8353
- ],
- [
- 0,
- -4
- ],
- [
- -4,
- -8
- ],
- [
- -5,
- -4
- ],
- [
- -1,
- 1
- ]
- ],
- [
- [
- 3305,
- 8412
- ],
- [
- 1,
- -2
- ],
- [
- -5,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 2810,
- 8418
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 2778,
- 8421
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -8,
- -7
- ]
- ],
- [
- [
- 2807,
- 8425
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -10
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- 12
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- -13
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -4
- ],
- [
- 7,
- 17
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -6,
- -10
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 6,
- 11
- ],
- [
- 6,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 2791,
- 8447
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 2781,
- 8454
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3285,
- 8499
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- -5,
- 0
- ],
- [
- -5,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ]
- ],
- [
- [
- 2785,
- 8497
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 3079,
- 8584
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 2770,
- 8618
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 2776,
- 8627
- ],
- [
- -3,
- -1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 3211,
- 8661
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 3104,
- 8654
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -3
- ]
- ],
- [
- [
- 2818,
- 8682
- ],
- [
- -4,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -1
- ]
- ],
- [
- [
- 3199,
- 8718
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -9,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 2415,
- 8746
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 3193,
- 8748
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 2790,
- 8779
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 8
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 3199,
- 8787
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 2944,
- 8791
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -7,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 8,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 3046,
- 8787
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -4,
- 5
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 6,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 2722,
- 8810
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -8,
- -7
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -12,
- -11
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -9,
- -5
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 6
- ],
- [
- 10,
- 19
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 7,
- 4
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 2836,
- 8840
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 6
- ],
- [
- -6,
- 7
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 2870,
- 8835
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -8,
- 8
- ],
- [
- 6,
- 6
- ],
- [
- 10,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -7
- ]
- ],
- [
- [
- 2843,
- 8870
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 2641,
- 8943
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 8
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 7,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 7,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -8
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 9,
- -7
- ],
- [
- 3,
- -1
- ],
- [
- 8,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -7
- ],
- [
- 3,
- -13
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 10,
- 3
- ],
- [
- 7,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- -5
- ],
- [
- -6,
- -4
- ],
- [
- -7,
- -7
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -16,
- 8
- ],
- [
- -5,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 11
- ],
- [
- -3,
- 2
- ],
- [
- -10,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -8,
- -8
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -8
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -8,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- -4,
- 22
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -14,
- -3
- ],
- [
- -7,
- 1
- ],
- [
- -8,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 13,
- 7
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 4,
- 14
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 24
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 8
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 4,
- -10
- ]
- ],
- [
- [
- 2648,
- 8961
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 2674,
- 8974
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 8,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 2691,
- 9002
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 1997,
- 9043
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 3
- ]
- ],
- [
- [
- 3259,
- 9046
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -5
- ]
- ],
- [
- [
- 2003,
- 9066
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 1967,
- 9099
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ]
- ],
- [
- [
- 2955,
- 9088
- ],
- [
- -14,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 9,
- 2
- ],
- [
- 7,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 9,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -6,
- -1
- ]
- ],
- [
- [
- 1963,
- 9100
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 2594,
- 9085
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 2898,
- 9119
- ],
- [
- 14,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -12
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -10,
- -5
- ],
- [
- -8,
- -1
- ],
- [
- -8,
- 0
- ],
- [
- -10,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- 10
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 8
- ],
- [
- 3,
- 5
- ],
- [
- 5,
- 9
- ],
- [
- 6,
- 8
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 6,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -1
- ]
- ],
- [
- [
- 2806,
- 9112
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -4,
- -4
- ]
- ],
- [
- [
- 2096,
- 9124
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 2920,
- 9121
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 4
- ],
- [
- -6,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 2171,
- 9134
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -9,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 2216,
- 9147
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -6
- ]
- ],
- [
- [
- 2222,
- 9159
- ],
- [
- 0,
- -4
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 2486,
- 9171
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 2799,
- 9149
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -5,
- -2
- ]
- ],
- [
- [
- 2494,
- 9182
- ],
- [
- 1,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 2861,
- 9166
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 2189,
- 9181
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 2347,
- 9191
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ]
- ],
- [
- [
- 1138,
- 9191
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -4,
- -1
- ]
- ],
- [
- [
- 3113,
- 9189
- ],
- [
- -1,
- 0
- ],
- [
- -7,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 2832,
- 9199
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 7
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ]
- ],
- [
- [
- 2793,
- 9203
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -9,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -9,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- -2
- ]
- ],
- [
- [
- 2293,
- 9195
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -2
- ],
- [
- 11,
- -7
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -8
- ],
- [
- 3,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -6,
- -5
- ],
- [
- -4,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -11,
- 5
- ],
- [
- -7,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -6,
- 5
- ],
- [
- -5,
- 2
- ],
- [
- -10,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 10,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 7,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 2585,
- 9222
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- -2
- ]
- ],
- [
- [
- 2213,
- 9244
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 2924,
- 7776
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- -4
- ],
- [
- -6,
- -7
- ],
- [
- -11,
- -16
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -9
- ],
- [
- -4,
- -7
- ],
- [
- -3,
- -8
- ],
- [
- -3,
- -9
- ],
- [
- -7,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -8,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -10
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -7,
- -6
- ],
- [
- -9,
- -6
- ],
- [
- -7,
- -6
- ],
- [
- -6,
- -4
- ],
- [
- -12,
- -4
- ],
- [
- -10,
- -3
- ],
- [
- -7,
- -2
- ],
- [
- -6,
- -6
- ],
- [
- -7,
- -7
- ],
- [
- -6,
- -5
- ],
- [
- -7,
- -7
- ],
- [
- -6,
- -6
- ],
- [
- -7,
- 0
- ],
- [
- -5,
- 5
- ],
- [
- -5,
- 4
- ],
- [
- -3,
- 9
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 16
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 11
- ],
- [
- 4,
- 12
- ],
- [
- 1,
- 5
- ],
- [
- -2,
- 15
- ],
- [
- -1,
- 11
- ],
- [
- -1,
- 10
- ],
- [
- -1,
- 12
- ],
- [
- -1,
- 10
- ],
- [
- -1,
- 10
- ],
- [
- -1,
- 10
- ],
- [
- -2,
- 10
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 8
- ],
- [
- -6,
- 6
- ],
- [
- -5,
- 4
- ],
- [
- -7,
- 6
- ],
- [
- -6,
- 6
- ],
- [
- -5,
- 5
- ],
- [
- 3,
- 10
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 8
- ],
- [
- -5,
- 5
- ],
- [
- -6,
- 4
- ],
- [
- -5,
- 5
- ],
- [
- -5,
- 5
- ],
- [
- -6,
- 4
- ],
- [
- -5,
- 5
- ],
- [
- -6,
- 4
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -5,
- 4
- ],
- [
- -7,
- 5
- ],
- [
- -8,
- 7
- ],
- [
- -8,
- 6
- ],
- [
- -7,
- 6
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -5,
- 4
- ],
- [
- -6,
- 4
- ],
- [
- -7,
- -2
- ],
- [
- -8,
- -7
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- -1
- ],
- [
- -8,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- -5
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -6,
- 5
- ],
- [
- -4,
- 6
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -6,
- 2
- ],
- [
- -10,
- 3
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 8
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -12
- ],
- [
- -6,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -3,
- 0
- ]
- ],
- [
- [
- 1589,
- 8006
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -9,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 11
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- 8
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -5,
- 11
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -2
- ],
- [
- -8,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -10,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -9,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 5
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 5,
- 10
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 9,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- -10,
- 1
- ],
- [
- -8,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 7
- ],
- [
- -4,
- -1
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- -5
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -5,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -11,
- -15
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -12
- ],
- [
- -3,
- -9
- ],
- [
- -2,
- 12
- ],
- [
- -5,
- 9
- ],
- [
- 9,
- 9
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -8
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 11
- ],
- [
- 2,
- 10
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -7,
- -5
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 16
- ],
- [
- -4,
- 6
- ],
- [
- -6,
- 4
- ],
- [
- -6,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- 2,
- -1
- ],
- [
- 8,
- -7
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -6
- ],
- [
- 0,
- 4
- ],
- [
- -5,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 8
- ],
- [
- -4,
- 2
- ],
- [
- -6,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 3,
- 8
- ],
- [
- 4,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 7,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -5,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 11
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 7
- ],
- [
- 6,
- 10
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -8
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 1388,
- 8403
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 7
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- -5,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 7
- ],
- [
- -3,
- 6
- ],
- [
- -4,
- 8
- ],
- [
- -3,
- 7
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 7
- ],
- [
- -4,
- 8
- ],
- [
- -4,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- -4,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- -4,
- 6
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- 7
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -7,
- -4
- ],
- [
- -6,
- -4
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- -11
- ],
- [
- -3,
- -7
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- 5
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- 6
- ],
- [
- -3,
- 4
- ],
- [
- -6,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- -5,
- 6
- ],
- [
- -2,
- 7
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- -5
- ],
- [
- -4,
- -4
- ],
- [
- -6,
- 3
- ],
- [
- -8,
- 4
- ],
- [
- -2,
- -5
- ],
- [
- -6,
- 3
- ],
- [
- -7,
- 2
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 16
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 16
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 16
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 16
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 16
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ],
- [
- 0,
- 17
- ]
- ],
- [
- [
- 1083,
- 9196
- ],
- [
- 4,
- -1
- ],
- [
- 13,
- -2
- ],
- [
- 12,
- 1
- ],
- [
- 22,
- -6
- ],
- [
- 13,
- -12
- ],
- [
- 11,
- -5
- ],
- [
- 5,
- -4
- ],
- [
- 7,
- -4
- ],
- [
- 17,
- -7
- ],
- [
- 5,
- -1
- ],
- [
- 10,
- -3
- ],
- [
- 6,
- 0
- ],
- [
- 11,
- -1
- ],
- [
- 7,
- -3
- ],
- [
- 14,
- -7
- ],
- [
- 3,
- -1
- ],
- [
- -4,
- 8
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -6,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 6,
- 11
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 3
- ],
- [
- 6,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 10,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- 6,
- 2
- ],
- [
- 7,
- 4
- ],
- [
- 6,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 2
- ],
- [
- 9,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 10,
- 8
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 7,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -23,
- -13
- ],
- [
- -7,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -7,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -11,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -7
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 17,
- -2
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 6,
- 9
- ],
- [
- 4,
- 5
- ],
- [
- 5,
- 5
- ],
- [
- 6,
- 4
- ],
- [
- 16,
- 6
- ],
- [
- 8,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 9,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 7
- ],
- [
- 5,
- 3
- ],
- [
- 9,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- -8,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 11,
- -8
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 6,
- -10
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 10,
- -11
- ],
- [
- 5,
- -4
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -9
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -8,
- -9
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 12,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 9,
- 0
- ],
- [
- 9,
- 0
- ],
- [
- 9,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 11,
- -5
- ],
- [
- 4,
- -2
- ],
- [
- 14,
- -12
- ],
- [
- 5,
- -2
- ],
- [
- 8,
- -2
- ],
- [
- 27,
- -5
- ],
- [
- 3,
- -1
- ],
- [
- 8,
- -6
- ],
- [
- 5,
- -3
- ],
- [
- 5,
- -2
- ],
- [
- 8,
- -3
- ],
- [
- 14,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 13,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -5,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 6,
- -3
- ],
- [
- 7,
- -3
- ],
- [
- 10,
- -6
- ],
- [
- 6,
- -5
- ],
- [
- 5,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -14,
- 1
- ],
- [
- -3,
- -4
- ],
- [
- -7,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 6,
- -3
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 13,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 11,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 11,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 3
- ],
- [
- 12,
- 7
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 11,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -6
- ],
- [
- 4,
- -5
- ],
- [
- 10,
- -8
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 7,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 6,
- -8
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -8,
- 11
- ],
- [
- -4,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 7,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -6,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -8,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -9,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 8,
- 13
- ],
- [
- 1,
- 1
- ],
- [
- 15,
- 2
- ],
- [
- 9,
- 2
- ],
- [
- 17,
- 7
- ],
- [
- 4,
- 1
- ],
- [
- 10,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 8,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 4,
- -3
- ],
- [
- 8,
- -7
- ],
- [
- 5,
- -5
- ],
- [
- 4,
- -2
- ],
- [
- 9,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 13,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 12,
- -1
- ],
- [
- 9,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 7,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 10,
- -13
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 9,
- -5
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -6,
- 3
- ],
- [
- -5,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -7,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- -4
- ],
- [
- 4,
- 1
- ],
- [
- 8,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 10,
- 0
- ],
- [
- 5,
- 3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -7,
- -10
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 10,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -19
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 4,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- -6
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 13,
- -14
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 10,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 10
- ],
- [
- 2,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- 9
- ],
- [
- -2,
- 5
- ],
- [
- -5,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- 17
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 7,
- 6
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 4,
- 5
- ],
- [
- 5,
- 5
- ],
- [
- 7,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -8,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 7,
- 5
- ],
- [
- 4,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 9,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 0,
- -1
- ],
- [
- -5,
- -7
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -13,
- 6
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -7,
- 8
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 6,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- -8,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 6,
- 5
- ],
- [
- 3,
- 5
- ],
- [
- 8,
- 7
- ],
- [
- 9,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 5,
- -5
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 5,
- -4
- ],
- [
- 5,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 7,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -7
- ],
- [
- 5,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 9,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -6,
- -6
- ],
- [
- -13,
- -10
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 9,
- -4
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 9,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 14,
- -11
- ],
- [
- 4,
- -9
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -8
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 4
- ],
- [
- 6,
- 8
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 5,
- -5
- ],
- [
- 9,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -10
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -11
- ],
- [
- 5,
- -8
- ],
- [
- 14,
- -16
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 5
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 10,
- 13
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 14
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 11,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -7,
- 5
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 10,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 9,
- -5
- ],
- [
- 7,
- -3
- ],
- [
- 3,
- 1
- ],
- [
- 15,
- -1
- ],
- [
- 7,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 9,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 6,
- -1
- ],
- [
- 9,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -8,
- -7
- ],
- [
- -4,
- -2
- ],
- [
- -6,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 8,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -7,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -8
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -7
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- -4
- ],
- [
- 6,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -9
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -8,
- -2
- ],
- [
- -7,
- -7
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -5,
- 8
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 8,
- -9
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -6
- ],
- [
- 4,
- -8
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -8,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -8,
- 4
- ],
- [
- -5,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 5
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- -2
- ],
- [
- -8,
- -1
- ],
- [
- -16,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 7,
- -3
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -19,
- -21
- ],
- [
- -7,
- -8
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -8,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -8,
- 7
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -9,
- 7
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -6,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 7,
- -4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 11,
- -2
- ],
- [
- 12,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- -5
- ],
- [
- 10,
- -12
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 22,
- -4
- ],
- [
- 7,
- 0
- ],
- [
- 15,
- -1
- ],
- [
- 8,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -8
- ],
- [
- -3,
- -5
- ],
- [
- -17,
- -25
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -7,
- -6
- ],
- [
- -8,
- -4
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -7
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -12,
- 6
- ],
- [
- -4,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -12,
- 7
- ],
- [
- -13,
- 5
- ],
- [
- -7,
- 7
- ],
- [
- 3,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 18,
- -8
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -8,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 6,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- -5
- ],
- [
- 5,
- -3
- ],
- [
- 6,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 6,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -11
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -7,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -12,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -8,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 6,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -8,
- -6
- ],
- [
- -6,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -6
- ],
- [
- -4,
- -9
- ],
- [
- -3,
- -8
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -11
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -27
- ],
- [
- 0,
- -12
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -18
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 15
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 8,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -4
- ],
- [
- 5,
- -16
- ],
- [
- 2,
- -8
- ],
- [
- 3,
- -13
- ],
- [
- 1,
- -4
- ],
- [
- 6,
- -18
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 3,
- 2
- ],
- [
- 7,
- 4
- ],
- [
- 25,
- 10
- ],
- [
- 6,
- 1
- ],
- [
- 8,
- -2
- ],
- [
- 7,
- -5
- ],
- [
- 8,
- -5
- ],
- [
- 8,
- -4
- ],
- [
- 12,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 7,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 7,
- -7
- ],
- [
- 5,
- -4
- ],
- [
- 5,
- -4
- ],
- [
- 6,
- -7
- ],
- [
- 9,
- -16
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 10,
- -4
- ],
- [
- 15,
- -8
- ],
- [
- 7,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- -12
- ],
- [
- -1,
- -1
- ],
- [
- 5,
- 9
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 10,
- -3
- ],
- [
- 7,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -9
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -19
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -7
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -9
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -10
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- -5
- ],
- [
- 7,
- -10
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -8
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- -4
- ],
- [
- -5,
- -8
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 3
- ],
- [
- 5,
- 7
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 5,
- -9
- ],
- [
- 6,
- -8
- ],
- [
- 3,
- -6
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -5,
- 7
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -5,
- 10
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -4,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 12
- ],
- [
- -2,
- 9
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 21,
- 11
- ],
- [
- 2,
- 1
- ],
- [
- 10,
- 6
- ],
- [
- 5,
- 4
- ],
- [
- 4,
- 4
- ],
- [
- 7,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 11,
- 12
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 7
- ],
- [
- 4,
- 7
- ],
- [
- 4,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 11
- ],
- [
- -1,
- 16
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 12
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 6
- ],
- [
- -8,
- 15
- ],
- [
- -9,
- 10
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -6,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -10,
- 11
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 8
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -6
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -5,
- 13
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -7,
- -2
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 6,
- 8
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- -6,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 11
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 8,
- 7
- ],
- [
- 6,
- 2
- ],
- [
- 5,
- -1
- ],
- [
- 9,
- -2
- ],
- [
- 7,
- -3
- ],
- [
- 23,
- -9
- ],
- [
- 4,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 9,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 8,
- -6
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 6,
- 4
- ],
- [
- 6,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -5
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -6
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 7,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 5,
- -7
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 8,
- -5
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- 0
- ],
- [
- -15,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 15,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 8,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 7,
- 8
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -8
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -10
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -2
- ],
- [
- -6,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 7,
- 4
- ],
- [
- 8,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 13
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -8
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -7
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 5
- ],
- [
- 6,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -8
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -4
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 11
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -5,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -6
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -8
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- -6,
- -7
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -9
- ],
- [
- -4,
- -7
- ],
- [
- -7,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 5
- ],
- [
- 5,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -10
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 8,
- -9
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -5,
- -2
- ],
- [
- -14,
- 3
- ],
- [
- -9,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 8,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 7,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -5
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 7
- ],
- [
- 3,
- 2
- ],
- [
- 8,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -7,
- -11
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- 4
- ],
- [
- 9,
- 10
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -7
- ],
- [
- 8,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- 0
- ],
- [
- -8,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -8,
- -5
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 6,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 4
- ],
- [
- 5,
- 5
- ],
- [
- 6,
- 8
- ],
- [
- 7,
- 6
- ],
- [
- 9,
- 4
- ],
- [
- 7,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 16,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 6,
- -13
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 3,
- 3
- ],
- [
- 6,
- 8
- ],
- [
- 5,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -7
- ],
- [
- 2,
- -7
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -9,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -9,
- -12
- ],
- [
- -8,
- -8
- ],
- [
- -7,
- -6
- ],
- [
- -12,
- -13
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -9,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -12,
- -17
- ],
- [
- -3,
- -5
- ],
- [
- -6,
- -6
- ],
- [
- -6,
- -11
- ],
- [
- -6,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -5,
- -4
- ],
- [
- -10,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -12,
- -5
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -7,
- 0
- ],
- [
- -6,
- 3
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -10,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -9,
- 3
- ],
- [
- -10,
- -2
- ],
- [
- -9,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -14,
- -3
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- -6
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -6
- ],
- [
- -6,
- -4
- ],
- [
- -8,
- -22
- ],
- [
- -1,
- -9
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -14,
- -4
- ],
- [
- -6,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -7,
- -7
- ],
- [
- -8,
- -14
- ],
- [
- -4,
- -11
- ],
- [
- -5,
- -8
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -7,
- 5
- ],
- [
- -18,
- 5
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 10,
- -6
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- -2,
- -8
- ],
- [
- -2,
- -7
- ],
- [
- -3,
- -5
- ],
- [
- -8,
- -14
- ],
- [
- -4,
- -5
- ],
- [
- -7,
- -16
- ],
- [
- -8,
- -8
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -8
- ],
- [
- -10,
- -5
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -5
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -12,
- -11
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -7
- ],
- [
- -5,
- -10
- ],
- [
- -7,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -8,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 7,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -4,
- -2
- ],
- [
- -7,
- -6
- ],
- [
- -10,
- -12
- ]
- ],
- [
- [
- 2311,
- 9385
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 1819,
- 9365
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 8,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 9,
- 0
- ],
- [
- 8,
- -3
- ],
- [
- 11,
- -3
- ],
- [
- 17,
- -7
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -7,
- -8
- ],
- [
- -6,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 5,
- 6
- ],
- [
- 7,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 7,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -8,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- -1
- ],
- [
- 12,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 11,
- -7
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -10
- ],
- [
- 5,
- -14
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 10,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- -6,
- 7
- ],
- [
- -5,
- 7
- ],
- [
- -2,
- 9
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -7,
- 27
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 9,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 10,
- -5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 10,
- -4
- ],
- [
- 11,
- -7
- ],
- [
- 8,
- -4
- ],
- [
- 5,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 10,
- -25
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 7,
- -9
- ],
- [
- 3,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 9,
- -8
- ],
- [
- 6,
- -9
- ],
- [
- 3,
- -2
- ],
- [
- 7,
- -6
- ],
- [
- 8,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 9,
- -7
- ],
- [
- 4,
- -3
- ],
- [
- 6,
- -4
- ],
- [
- 11,
- -7
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 9,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -6,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -7,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- 8
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 8,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -7
- ],
- [
- -3,
- -2
- ],
- [
- -11,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -8,
- 0
- ],
- [
- -8,
- -1
- ],
- [
- -10,
- 2
- ],
- [
- -7,
- 1
- ],
- [
- -8,
- 4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -15,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -8,
- 2
- ],
- [
- -7,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- -9
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -7
- ],
- [
- -3,
- -2
- ],
- [
- -11,
- -3
- ],
- [
- -14,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -6,
- -4
- ],
- [
- -15,
- -5
- ],
- [
- -14,
- -2
- ],
- [
- -14,
- -1
- ],
- [
- -10,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -22,
- -1
- ],
- [
- -10,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -6,
- 10
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 9
- ],
- [
- -11,
- 4
- ],
- [
- -7,
- 1
- ],
- [
- -10,
- 0
- ],
- [
- -13,
- -1
- ],
- [
- -13,
- 1
- ],
- [
- -7,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- -12,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -8,
- 9
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 16,
- 5
- ],
- [
- 29,
- 4
- ],
- [
- 26,
- 4
- ],
- [
- 12,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 13,
- 0
- ],
- [
- 16,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 12,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -10,
- 5
- ],
- [
- -29,
- 10
- ],
- [
- -7,
- 2
- ],
- [
- -10,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -13,
- -1
- ],
- [
- -19,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -19,
- -2
- ],
- [
- -16,
- 2
- ],
- [
- -19,
- 15
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 9,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- 14,
- 4
- ],
- [
- 14,
- 3
- ],
- [
- 11,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- 1
- ],
- [
- 7,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -7,
- 2
- ],
- [
- -33,
- -6
- ],
- [
- -16,
- -1
- ],
- [
- -10,
- -2
- ],
- [
- -6,
- 0
- ],
- [
- -7,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 7,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- -4,
- 0
- ],
- [
- -13,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -8,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 10,
- 11
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 6,
- 5
- ],
- [
- 17,
- 12
- ],
- [
- 8,
- 5
- ],
- [
- 8,
- 2
- ],
- [
- 11,
- 6
- ],
- [
- 28,
- 9
- ],
- [
- 25,
- 9
- ],
- [
- 10,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -6,
- -6
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 2075,
- 9384
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -6,
- 6
- ],
- [
- -8,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -9,
- 6
- ],
- [
- -6,
- 3
- ],
- [
- -5,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 7,
- 1
- ],
- [
- 24,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 8,
- -5
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- -8
- ],
- [
- -5,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -1
- ]
- ],
- [
- [
- 2790,
- 9426
- ],
- [
- 5,
- -1
- ],
- [
- 30,
- 2
- ],
- [
- 6,
- -1
- ],
- [
- 19,
- -7
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 7,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -7,
- -1
- ],
- [
- -17,
- 1
- ],
- [
- -22,
- 4
- ],
- [
- -14,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -16,
- -5
- ],
- [
- -6,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -9,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -9,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 8,
- -4
- ],
- [
- 7,
- 0
- ],
- [
- 9,
- -3
- ]
- ],
- [
- [
- 2594,
- 9274
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 9,
- 5
- ],
- [
- 5,
- 1
- ],
- [
- 15,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 15
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -6,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 12,
- -5
- ],
- [
- 7,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -8,
- 6
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 8,
- -2
- ],
- [
- 20,
- -7
- ],
- [
- 0,
- 2
- ],
- [
- -23,
- 10
- ],
- [
- -8,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 12,
- 13
- ],
- [
- 11,
- 3
- ],
- [
- 6,
- 4
- ],
- [
- 9,
- 0
- ],
- [
- 8,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 9,
- 3
- ],
- [
- 11,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 12,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 10,
- -2
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -7
- ],
- [
- 3,
- -9
- ],
- [
- 3,
- -4
- ],
- [
- 6,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -7,
- -7
- ],
- [
- -9,
- -8
- ],
- [
- -7,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 13,
- 10
- ],
- [
- 5,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 9,
- 9
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- -6,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 7,
- -6
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 9
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 11,
- -6
- ],
- [
- 5,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -7,
- 3
- ],
- [
- -10,
- 4
- ],
- [
- -5,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 10,
- 5
- ],
- [
- 7,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- 9,
- 0
- ],
- [
- 10,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- -4
- ],
- [
- 8,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 11,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -10,
- -11
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -7
- ],
- [
- -4,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 4
- ],
- [
- 8,
- 5
- ],
- [
- 7,
- 2
- ],
- [
- 6,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -8,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -8,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 7,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 7,
- 7
- ],
- [
- 2,
- 7
- ],
- [
- 3,
- 7
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -7
- ],
- [
- -9,
- -11
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- 3
- ],
- [
- -4,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 8,
- 6
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 7,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -7,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -8,
- -7
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 9,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 8,
- 2
- ],
- [
- 10,
- -4
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -7,
- -6
- ],
- [
- -5,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -4,
- -17
- ],
- [
- 3,
- 5
- ],
- [
- 7,
- 18
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 8,
- 5
- ],
- [
- 6,
- 3
- ],
- [
- 7,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 11,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -7,
- -3
- ],
- [
- -10,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 5
- ],
- [
- 5,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 9,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -6
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 9,
- -10
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -8
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -13,
- 3
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -8,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -8,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 8,
- 3
- ],
- [
- 8,
- 0
- ],
- [
- 12,
- -5
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 11,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -3
- ],
- [
- 8,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -11,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -8,
- -2
- ],
- [
- -5,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -12,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 16,
- 5
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 8,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- 0
- ],
- [
- -8,
- 3
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -14,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 13,
- -6
- ],
- [
- 9,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 8,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 5,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- 8,
- 2
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -5
- ],
- [
- -4,
- -8
- ],
- [
- -3,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 6
- ],
- [
- 7,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 6,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 7,
- -7
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- -6
- ],
- [
- -6,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- -9,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 8,
- -6
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -11,
- -10
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 9,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 7,
- 9
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 9,
- -9
- ],
- [
- 4,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- 5
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 12,
- -7
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -8,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 4,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 8,
- -4
- ],
- [
- 6,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- 9
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -6,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -18
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 5
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -7
- ],
- [
- -3,
- -8
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -8,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -8,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 6,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 11
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 4
- ],
- [
- -5,
- 4
- ],
- [
- -4,
- 2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -5
- ],
- [
- 7,
- -6
- ],
- [
- 3,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -7,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -5,
- 7
- ],
- [
- -9,
- 7
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -5,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -9
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- -7
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 6,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -6,
- 16
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -5,
- 7
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -9
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 4
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -14
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- -5,
- 5
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -7,
- 6
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- 8
- ],
- [
- -6,
- 9
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -11,
- 11
- ],
- [
- -7,
- 5
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- 4,
- -6
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -6
- ],
- [
- 5,
- -8
- ],
- [
- 2,
- -3
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 8,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -8
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -7,
- 5
- ],
- [
- -10,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -26,
- 4
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -10,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -7,
- 9
- ],
- [
- -5,
- 10
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -7,
- 5
- ],
- [
- -6,
- 2
- ],
- [
- -6,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- -8,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- -6,
- 10
- ],
- [
- -4,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -10,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 5
- ],
- [
- -7,
- 9
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 8
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -8,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 12,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 8,
- -3
- ],
- [
- 12,
- -5
- ],
- [
- 6,
- -3
- ],
- [
- 5,
- -5
- ],
- [
- 4,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -7,
- 8
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 11,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 7
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- 4
- ],
- [
- -7,
- 8
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 12,
- 9
- ],
- [
- 10,
- 8
- ],
- [
- 4,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 5,
- 9
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 18
- ],
- [
- -4,
- 9
- ],
- [
- -5,
- 7
- ],
- [
- -5,
- 10
- ],
- [
- -7,
- 9
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -7,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 4,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -6,
- -3
- ],
- [
- -11,
- -7
- ],
- [
- -5,
- -2
- ],
- [
- -5,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -8,
- 4
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 8
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -8,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 9,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- -6,
- -1
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -15,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -8,
- 3
- ],
- [
- -4,
- 0
- ],
- [
- -8,
- 2
- ],
- [
- -13,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -18,
- 12
- ],
- [
- -11,
- -4
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- 2
- ],
- [
- -12,
- 6
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -11,
- -2
- ],
- [
- -9,
- 0
- ],
- [
- -18,
- 2
- ],
- [
- -7,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -10,
- 2
- ],
- [
- -10,
- -4
- ],
- [
- -12,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -6,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -8,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -8,
- 7
- ],
- [
- -6,
- 4
- ],
- [
- -7,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -10,
- 13
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 11
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 10,
- -1
- ],
- [
- 9,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- -3
- ],
- [
- 7,
- -2
- ],
- [
- 6,
- 0
- ],
- [
- 8,
- 1
- ],
- [
- 10,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -6,
- 3
- ],
- [
- -5,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -15,
- 1
- ],
- [
- -14,
- 3
- ],
- [
- -9,
- 4
- ],
- [
- -8,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 9
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- 7,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- 5,
- 7
- ],
- [
- 5,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 4
- ],
- [
- 6,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 15,
- 11
- ],
- [
- 6,
- 4
- ],
- [
- 6,
- 3
- ],
- [
- 7,
- 2
- ],
- [
- 20,
- 5
- ],
- [
- 10,
- 1
- ],
- [
- 12,
- -1
- ],
- [
- 24,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- -6
- ],
- [
- -8,
- -4
- ],
- [
- -5,
- -4
- ],
- [
- -9,
- -9
- ],
- [
- -3,
- -3
- ],
- [
- -11,
- -17
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 6,
- -8
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -7
- ],
- [
- 5,
- -7
- ],
- [
- 8,
- -8
- ],
- [
- 6,
- -5
- ],
- [
- 6,
- -3
- ],
- [
- 6,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -8,
- -5
- ],
- [
- -9,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -6,
- -4
- ],
- [
- -8,
- -3
- ],
- [
- -4,
- -2
- ]
- ],
- [
- [
- 2222,
- 9443
- ],
- [
- 23,
- -12
- ],
- [
- 4,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 7,
- 2
- ],
- [
- 10,
- 2
- ],
- [
- 7,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 7,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -3
- ],
- [
- -9,
- -3
- ],
- [
- -10,
- -10
- ],
- [
- -6,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -8
- ],
- [
- -9,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -16,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 5,
- -10
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -6,
- -6
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 7
- ],
- [
- -5,
- 6
- ],
- [
- -5,
- 6
- ],
- [
- -10,
- 9
- ],
- [
- -6,
- 5
- ],
- [
- -8,
- 9
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -12,
- 6
- ],
- [
- -7,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 12,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 10
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -7,
- 6
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -15,
- 9
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -4
- ],
- [
- 5,
- -3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 12,
- 2
- ],
- [
- 8,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ]
- ],
- [
- [
- 2270,
- 9439
- ],
- [
- -8,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -9,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 7,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 15,
- 4
- ],
- [
- 7,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -8,
- -4
- ],
- [
- -3,
- -1
- ]
- ],
- [
- [
- 2412,
- 9455
- ],
- [
- 11,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 10,
- 3
- ],
- [
- 6,
- 1
- ],
- [
- 16,
- -1
- ],
- [
- 12,
- -4
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- -6
- ],
- [
- -5,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -7
- ],
- [
- -5,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- -6,
- -6
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -26,
- 5
- ],
- [
- -7,
- 0
- ],
- [
- -17,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 7,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 6,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -9,
- -10
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -10,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -11,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 10
- ],
- [
- -2,
- 9
- ],
- [
- -8,
- 16
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 14
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 11,
- -4
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 7,
- 2
- ],
- [
- 15,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 7,
- -1
- ]
- ],
- [
- [
- 1674,
- 9453
- ],
- [
- 0,
- -1
- ],
- [
- 7,
- 6
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 7,
- 8
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 10,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 8,
- -3
- ],
- [
- 7,
- -4
- ],
- [
- 7,
- -4
- ],
- [
- 21,
- -16
- ],
- [
- 9,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -13,
- -5
- ],
- [
- -7,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -16,
- -8
- ],
- [
- -11,
- -4
- ],
- [
- -14,
- -8
- ],
- [
- -28,
- -13
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -8,
- -14
- ],
- [
- -3,
- -4
- ],
- [
- -7,
- -3
- ],
- [
- -9,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -8
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -14
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -8,
- -3
- ],
- [
- -7,
- -2
- ],
- [
- -8,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -11,
- -10
- ],
- [
- -11,
- -5
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -5,
- 12
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -5,
- 7
- ],
- [
- -2,
- 1
- ],
- [
- -21,
- 9
- ],
- [
- -10,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -13,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 9,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 11
- ],
- [
- 8,
- 6
- ],
- [
- 3,
- 7
- ],
- [
- 6,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -9,
- 17
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 34,
- 5
- ],
- [
- 24,
- 2
- ],
- [
- 24,
- 4
- ],
- [
- 7,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- -3
- ],
- [
- 7,
- -4
- ],
- [
- 9,
- -4
- ],
- [
- 17,
- -5
- ],
- [
- 11,
- -2
- ],
- [
- -5,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 2295,
- 9476
- ],
- [
- -8,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 7,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 2352,
- 9475
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -10,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 2108,
- 9506
- ],
- [
- -6,
- -1
- ],
- [
- -9,
- 2
- ],
- [
- -5,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 8,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -8,
- -2
- ]
- ],
- [
- [
- 2401,
- 9505
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -10,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -9,
- 6
- ],
- [
- -5,
- 0
- ],
- [
- -11,
- 2
- ],
- [
- -7,
- 6
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- 7
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 18,
- 5
- ],
- [
- 4,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 9,
- -7
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 2331,
- 9533
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 10,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 1637,
- 9547
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 2374,
- 9547
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -6,
- -1
- ]
- ],
- [
- [
- 1713,
- 9537
- ],
- [
- -8,
- -4
- ],
- [
- -6,
- 1
- ],
- [
- -7,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 4
- ],
- [
- 11,
- 8
- ],
- [
- 7,
- 3
- ],
- [
- 6,
- 2
- ],
- [
- 7,
- 5
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -7
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -7
- ],
- [
- -9,
- -11
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 2804,
- 9557
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -7,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 5
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 2160,
- 9562
- ],
- [
- 6,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -10,
- -1
- ],
- [
- -10,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 6,
- 6
- ],
- [
- -5,
- 2
- ],
- [
- -16,
- -4
- ],
- [
- -6,
- 2
- ],
- [
- 5,
- 6
- ],
- [
- -5,
- 1
- ],
- [
- -7,
- 0
- ],
- [
- -4,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 10,
- 2
- ],
- [
- 12,
- 2
- ],
- [
- 13,
- 3
- ],
- [
- 10,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -4
- ]
- ],
- [
- [
- 2110,
- 9595
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 11,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -23,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 8,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 2286,
- 9588
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 12,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -7
- ],
- [
- 2,
- -7
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- -6,
- -5
- ],
- [
- 1,
- -9
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -7,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- -3
- ],
- [
- -9,
- 1
- ],
- [
- -8,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 9,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -7,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 12,
- 3
- ],
- [
- 9,
- 6
- ],
- [
- 5,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 11,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -20,
- -1
- ],
- [
- -27,
- -4
- ],
- [
- -9,
- -1
- ],
- [
- -7,
- 1
- ],
- [
- -30,
- -6
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 9,
- 5
- ],
- [
- 4,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 6,
- 1
- ],
- [
- 10,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -7,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- -8,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 7,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -10,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 19,
- -11
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -8,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 1
- ],
- [
- -8,
- 1
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 9,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -13,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 7,
- 4
- ],
- [
- 5,
- 2
- ],
- [
- 9,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 10,
- -6
- ],
- [
- 4,
- -4
- ],
- [
- 8,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- 3
- ],
- [
- 5,
- -1
- ],
- [
- 7,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 7,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 2188,
- 9595
- ],
- [
- -7,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 10,
- 3
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 8,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- -14,
- -5
- ],
- [
- -13,
- -4
- ]
- ],
- [
- [
- 1992,
- 9565
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -6,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- 4
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 14,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -5,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- -5,
- -12
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -14,
- -4
- ],
- [
- -10,
- -5
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -8,
- 2
- ],
- [
- -10,
- 3
- ],
- [
- -6,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- -3
- ],
- [
- -14,
- -7
- ],
- [
- -19,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- -10,
- -3
- ],
- [
- -12,
- -5
- ],
- [
- -22,
- -5
- ],
- [
- -14,
- -1
- ],
- [
- -13,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -10,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 8,
- 3
- ],
- [
- 15,
- 3
- ],
- [
- 13,
- 6
- ],
- [
- 5,
- 1
- ],
- [
- 13,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 6,
- 4
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -8,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -6,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -7,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -11,
- -1
- ],
- [
- -10,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -8,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -12,
- -5
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -11,
- 4
- ],
- [
- -10,
- 8
- ],
- [
- -10,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -14,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 19,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 21,
- 7
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- -25,
- -5
- ],
- [
- -11,
- -2
- ],
- [
- -17,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 12,
- 2
- ],
- [
- 15,
- 2
- ],
- [
- 10,
- 0
- ],
- [
- 9,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- -17,
- 0
- ],
- [
- -21,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 7,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 23,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -18,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 16,
- 4
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -1
- ],
- [
- 13,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 7,
- -2
- ],
- [
- 10,
- -8
- ],
- [
- 13,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 39,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -24,
- 9
- ],
- [
- -2,
- 4
- ],
- [
- 11,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -7,
- 4
- ],
- [
- -5,
- 0
- ],
- [
- -8,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 8,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 10,
- 10
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 7,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- 0
- ]
- ],
- [
- [
- 2507,
- 9591
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 1845,
- 9604
- ],
- [
- -4,
- -2
- ],
- [
- -29,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 6,
- 2
- ],
- [
- 15,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 2380,
- 9614
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 3,
- 2
- ],
- [
- 12,
- 8
- ],
- [
- 7,
- -1
- ],
- [
- 12,
- 1
- ],
- [
- 14,
- 3
- ],
- [
- 7,
- 1
- ],
- [
- 7,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 10,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- 1
- ],
- [
- -11,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 13,
- -1
- ],
- [
- 44,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -25,
- -2
- ],
- [
- -14,
- 2
- ],
- [
- -12,
- 3
- ],
- [
- -4,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 7,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 13,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 7,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -7,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 8,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 10,
- -6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 11,
- -8
- ],
- [
- 13,
- 4
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- 12,
- -7
- ],
- [
- 8,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 8,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- -5,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 10,
- 3
- ],
- [
- 6,
- 0
- ],
- [
- 11,
- 4
- ],
- [
- 7,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 13,
- 7
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- -1
- ],
- [
- 15,
- -3
- ],
- [
- 4,
- 0
- ],
- [
- 15,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 14,
- -3
- ],
- [
- 10,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 13,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 10,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -10,
- -4
- ],
- [
- -10,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 9,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -12,
- -3
- ],
- [
- -7,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -27,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -7,
- -3
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -10,
- 3
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -10,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -7,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -8,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -8,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -10,
- 1
- ],
- [
- -6,
- -2
- ],
- [
- -12,
- 1
- ],
- [
- -11,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -8,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -9,
- 3
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- 5
- ],
- [
- -5,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -7,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 9
- ],
- [
- -2,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 6,
- 8
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -5,
- 5
- ],
- [
- -6,
- 7
- ],
- [
- -5,
- 6
- ],
- [
- -6,
- 8
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -15,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -7,
- -2
- ],
- [
- -8,
- 1
- ],
- [
- -5,
- 5
- ],
- [
- -10,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -19,
- 8
- ],
- [
- -5,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 8,
- 3
- ],
- [
- 6,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 14,
- -3
- ],
- [
- 15,
- -4
- ],
- [
- 8,
- -2
- ]
- ],
- [
- [
- 1790,
- 9640
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -16,
- -5
- ],
- [
- -4,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- -4
- ],
- [
- 6,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 6,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -6,
- -1
- ],
- [
- -15,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -7,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- -7,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -9
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -8,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 8,
- 8
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 21,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 10,
- 10
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 14,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 10,
- 8
- ],
- [
- 10,
- 6
- ],
- [
- 4,
- 4
- ],
- [
- 7,
- 3
- ],
- [
- 7,
- 2
- ],
- [
- 23,
- 3
- ],
- [
- 16,
- -4
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -7,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 9,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 13,
- -5
- ]
- ],
- [
- [
- 2504,
- 9634
- ],
- [
- -7,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -21,
- 7
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 7,
- -2
- ],
- [
- 9,
- -6
- ],
- [
- 4,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 2095,
- 9627
- ],
- [
- -4,
- -1
- ],
- [
- -8,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -5,
- 5
- ],
- [
- -4,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -5,
- 6
- ],
- [
- 5,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 6,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 2347,
- 9664
- ],
- [
- 7,
- -2
- ],
- [
- 8,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 18,
- -1
- ],
- [
- 12,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- -6,
- -2
- ],
- [
- -5,
- -9
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -16,
- 1
- ],
- [
- -44,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 13,
- 4
- ],
- [
- 5,
- 0
- ]
- ],
- [
- [
- 2175,
- 9659
- ],
- [
- -4,
- -1
- ],
- [
- -7,
- 1
- ],
- [
- -8,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 10,
- 1
- ],
- [
- 7,
- -1
- ],
- [
- 9,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -11,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- -1
- ]
- ],
- [
- [
- 1838,
- 9662
- ],
- [
- -8,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -9,
- 3
- ],
- [
- -10,
- 9
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 8,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 1932,
- 9682
- ],
- [
- 22,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -12,
- -3
- ],
- [
- -16,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 12,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -9,
- -2
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -20,
- -5
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -7,
- 4
- ],
- [
- -8,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 14,
- 4
- ],
- [
- 31,
- 5
- ],
- [
- 9,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 8,
- 0
- ]
- ],
- [
- [
- 2139,
- 9685
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -6,
- -4
- ]
- ],
- [
- [
- 1949,
- 9714
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- -1
- ],
- [
- -8,
- 1
- ],
- [
- -8,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -10,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- 1
- ],
- [
- -10,
- 5
- ],
- [
- -12,
- -2
- ],
- [
- -12,
- -3
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 8,
- 3
- ],
- [
- 6,
- 2
- ],
- [
- 12,
- 3
- ],
- [
- 14,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 9,
- 3
- ],
- [
- 6,
- 2
- ],
- [
- 7,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- 6,
- -1
- ],
- [
- 3,
- -2
- ]
- ],
- [
- [
- 2327,
- 9707
- ],
- [
- 7,
- -1
- ],
- [
- 11,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 11,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -5,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -9,
- -2
- ],
- [
- -13,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -10,
- 2
- ],
- [
- -5,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 12,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -9,
- 2
- ],
- [
- -13,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 7,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 13,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 10,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 2127,
- 9752
- ],
- [
- 6,
- -1
- ],
- [
- 8,
- -4
- ],
- [
- 7,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 11,
- -6
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 13,
- 2
- ],
- [
- 12,
- -6
- ],
- [
- 6,
- -6
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 12,
- -10
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -9,
- -1
- ],
- [
- -8,
- -1
- ],
- [
- -9,
- 2
- ],
- [
- -8,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -6,
- 0
- ],
- [
- -15,
- 4
- ],
- [
- -6,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -9,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -26,
- -3
- ],
- [
- -8,
- -4
- ],
- [
- -10,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -7,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 14,
- -2
- ],
- [
- 12,
- -2
- ],
- [
- 6,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -12,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 10,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -13,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 7,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -7,
- -1
- ],
- [
- -10,
- -8
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -11,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 15,
- -1
- ],
- [
- 25,
- 2
- ],
- [
- 7,
- 0
- ],
- [
- 8,
- -2
- ]
- ],
- [
- [
- 2256,
- 9791
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -7,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -6,
- 3
- ],
- [
- -9,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 9,
- -1
- ],
- [
- 8,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 2447,
- 9857
- ],
- [
- 4,
- -5
- ],
- [
- 13,
- -11
- ],
- [
- 6,
- -5
- ],
- [
- 11,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 9,
- -2
- ],
- [
- 10,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 9,
- -2
- ],
- [
- 6,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -7,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 8,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -7,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 9,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -8
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 9,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 8,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 9,
- -9
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -23,
- -6
- ],
- [
- -10,
- -4
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- -6,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -7,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -8,
- 6
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -11,
- 9
- ],
- [
- -5,
- 4
- ],
- [
- -7,
- 7
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 6,
- -7
- ],
- [
- 5,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -1
- ],
- [
- -9,
- 1
- ],
- [
- -13,
- 1
- ],
- [
- -14,
- 3
- ],
- [
- -13,
- 4
- ],
- [
- -9,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 12,
- 1
- ],
- [
- 12,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -22,
- 2
- ],
- [
- -7,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -16,
- 4
- ],
- [
- -6,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 18,
- 6
- ],
- [
- 7,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 19,
- 2
- ],
- [
- 14,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- -11,
- -1
- ],
- [
- -16,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -5,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -10,
- -4
- ],
- [
- -5,
- -1
- ],
- [
- -10,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -12,
- -4
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 4
- ],
- [
- -9,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- 7,
- 1
- ],
- [
- 22,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -11,
- -3
- ],
- [
- -9,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -13,
- 8
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 6
- ],
- [
- 27,
- -4
- ],
- [
- 11,
- 0
- ],
- [
- 21,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 8,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -9,
- 0
- ],
- [
- -16,
- -4
- ],
- [
- -6,
- 0
- ],
- [
- -7,
- 6
- ],
- [
- -7,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -8,
- 5
- ],
- [
- -7,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- 6,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 8,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 4,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 16,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 2
- ],
- [
- -11,
- 2
- ],
- [
- -5,
- 6
- ],
- [
- -12,
- 3
- ],
- [
- -8,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 6,
- 8
- ],
- [
- 8,
- 3
- ],
- [
- 13,
- -1
- ],
- [
- 9,
- 2
- ],
- [
- 10,
- 2
- ],
- [
- 11,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -13,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 13,
- 0
- ],
- [
- 7,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 18,
- -4
- ],
- [
- 5,
- -2
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 3069,
- 9965
- ],
- [
- 23,
- -1
- ],
- [
- 7,
- 1
- ],
- [
- 9,
- -3
- ],
- [
- 5,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 23,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -5,
- -3
- ],
- [
- -7,
- -2
- ],
- [
- -42,
- -8
- ],
- [
- -3,
- -1
- ],
- [
- 8,
- -1
- ],
- [
- 12,
- 0
- ],
- [
- 10,
- 1
- ],
- [
- 11,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 2
- ],
- [
- 14,
- 3
- ],
- [
- 11,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 8,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 10,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 8,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 21,
- 4
- ],
- [
- 22,
- -2
- ],
- [
- 6,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -10,
- -6
- ],
- [
- -10,
- -4
- ],
- [
- -5,
- -4
- ],
- [
- -9,
- -2
- ],
- [
- -31,
- -9
- ],
- [
- -15,
- -3
- ],
- [
- -8,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -18,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -9,
- 0
- ],
- [
- -17,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -49,
- -11
- ],
- [
- -1,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 72,
- 14
- ],
- [
- 13,
- 1
- ],
- [
- 13,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -18,
- -9
- ],
- [
- -23,
- -8
- ],
- [
- -12,
- -6
- ],
- [
- -29,
- -11
- ],
- [
- -24,
- -10
- ],
- [
- -9,
- -6
- ],
- [
- -12,
- -9
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -7,
- 3
- ],
- [
- -6,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 12,
- -13
- ],
- [
- -1,
- -3
- ],
- [
- -23,
- -3
- ],
- [
- -11,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 9,
- -1
- ],
- [
- 21,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -6,
- -4
- ],
- [
- -16,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -16,
- -4
- ],
- [
- -7,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -29,
- 8
- ],
- [
- -9,
- 1
- ],
- [
- -10,
- 2
- ],
- [
- -7,
- -1
- ],
- [
- -7,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 14,
- -2
- ],
- [
- 11,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- -1
- ],
- [
- -11,
- 0
- ],
- [
- -13,
- -2
- ],
- [
- -7,
- 0
- ],
- [
- -7,
- 1
- ],
- [
- -8,
- 2
- ],
- [
- -9,
- 2
- ],
- [
- -14,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 10,
- -4
- ],
- [
- 5,
- -5
- ],
- [
- 5,
- -1
- ],
- [
- 10,
- -4
- ],
- [
- 7,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 10,
- 2
- ],
- [
- 7,
- -1
- ],
- [
- -2,
- -10
- ],
- [
- -3,
- -1
- ],
- [
- -16,
- 0
- ],
- [
- -8,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -8,
- 2
- ],
- [
- -7,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -17,
- -2
- ],
- [
- -9,
- 0
- ],
- [
- -7,
- 1
- ],
- [
- -8,
- 1
- ],
- [
- -9,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 19,
- 2
- ],
- [
- 8,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 11,
- -1
- ],
- [
- 9,
- -1
- ],
- [
- 13,
- -6
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -9,
- -4
- ],
- [
- -15,
- -1
- ],
- [
- -15,
- 0
- ],
- [
- -12,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 8,
- -1
- ],
- [
- 18,
- -5
- ],
- [
- 7,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -10,
- -6
- ],
- [
- -9,
- -12
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -10,
- -3
- ],
- [
- -7,
- -1
- ],
- [
- -14,
- 1
- ],
- [
- -15,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -8
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -3
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -8,
- 0
- ],
- [
- -21,
- -2
- ],
- [
- -10,
- 0
- ],
- [
- -8,
- 1
- ],
- [
- -9,
- 3
- ],
- [
- -14,
- 7
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -7,
- -1
- ],
- [
- -8,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 9,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 11,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 9,
- 3
- ],
- [
- 11,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 7,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- -4,
- -7
- ],
- [
- -5,
- -4
- ],
- [
- -18,
- -7
- ],
- [
- -5,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- -6,
- -3
- ],
- [
- -12,
- -3
- ],
- [
- -7,
- -1
- ],
- [
- -14,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 7
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -32,
- -1
- ],
- [
- -13,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -7,
- 10
- ],
- [
- -1,
- -18
- ],
- [
- -24,
- -3
- ],
- [
- -6,
- 0
- ],
- [
- -9,
- 2
- ],
- [
- -12,
- 5
- ],
- [
- -5,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -8
- ],
- [
- -8,
- 2
- ],
- [
- -11,
- 2
- ],
- [
- -4,
- 8
- ],
- [
- 0,
- -11
- ],
- [
- -17,
- 1
- ],
- [
- -8,
- 0
- ],
- [
- -2,
- 10
- ],
- [
- 0,
- 11
- ],
- [
- -4,
- -7
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -7
- ],
- [
- -7,
- 2
- ],
- [
- -16,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- 0,
- 9
- ],
- [
- 2,
- 10
- ],
- [
- 20,
- 9
- ],
- [
- 6,
- 5
- ],
- [
- 4,
- 2
- ],
- [
- 7,
- 1
- ],
- [
- 9,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 7,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -7,
- 7
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 6
- ],
- [
- -4,
- 7
- ],
- [
- 2,
- 4
- ],
- [
- 7,
- 3
- ],
- [
- 7,
- 2
- ],
- [
- 8,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 10,
- -4
- ],
- [
- 6,
- -3
- ],
- [
- 7,
- -8
- ],
- [
- 5,
- -6
- ],
- [
- 4,
- -3
- ],
- [
- 18,
- -5
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 14,
- 1
- ],
- [
- 7,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 5
- ],
- [
- 10,
- 8
- ],
- [
- 5,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- -2
- ],
- [
- -16,
- -16
- ],
- [
- -4,
- -3
- ],
- [
- -9,
- -5
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -9,
- 2
- ],
- [
- -10,
- -3
- ],
- [
- -7,
- 1
- ],
- [
- -5,
- 2
- ],
- [
- 0,
- 12
- ],
- [
- -8,
- 9
- ],
- [
- 8,
- 5
- ],
- [
- 7,
- 3
- ],
- [
- 11,
- 8
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -10,
- -1
- ],
- [
- 4,
- 17
- ],
- [
- -7,
- -13
- ],
- [
- -7,
- -6
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -17,
- -2
- ],
- [
- 4,
- 6
- ],
- [
- 4,
- 9
- ],
- [
- -4,
- -3
- ],
- [
- -10,
- -5
- ],
- [
- -7,
- -3
- ],
- [
- -7,
- -1
- ],
- [
- -11,
- 0
- ],
- [
- -6,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 8
- ],
- [
- 4,
- 3
- ],
- [
- 6,
- 5
- ],
- [
- 5,
- 6
- ],
- [
- 4,
- 6
- ],
- [
- 16,
- 3
- ],
- [
- 15,
- 1
- ],
- [
- 13,
- 3
- ],
- [
- 7,
- 1
- ],
- [
- 6,
- -2
- ],
- [
- 24,
- -2
- ],
- [
- 10,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 16,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 6,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -11,
- 2
- ],
- [
- -20,
- 0
- ],
- [
- -11,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 6,
- -3
- ],
- [
- 7,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -9,
- 4
- ],
- [
- -6,
- 4
- ],
- [
- -5,
- 4
- ],
- [
- -4,
- 5
- ],
- [
- -9,
- 7
- ],
- [
- -7,
- 6
- ],
- [
- -5,
- 3
- ],
- [
- -5,
- 2
- ],
- [
- -16,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -8,
- 6
- ],
- [
- -2,
- 10
- ],
- [
- -3,
- 6
- ],
- [
- 3,
- 8
- ],
- [
- 5,
- 3
- ],
- [
- 32,
- -3
- ],
- [
- 14,
- 1
- ],
- [
- 17,
- -1
- ],
- [
- 9,
- -2
- ],
- [
- 11,
- -5
- ],
- [
- 9,
- -5
- ],
- [
- 9,
- -4
- ],
- [
- 8,
- -5
- ],
- [
- 10,
- -7
- ],
- [
- 5,
- -3
- ],
- [
- 5,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 12,
- -3
- ],
- [
- 10,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -9,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- -8,
- 6
- ],
- [
- -6,
- 4
- ],
- [
- -13,
- 6
- ],
- [
- -10,
- 7
- ],
- [
- -8,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 7,
- 1
- ],
- [
- 43,
- 4
- ],
- [
- 26,
- 5
- ],
- [
- 11,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 34,
- 8
- ],
- [
- 25,
- 3
- ],
- [
- 9,
- 0
- ],
- [
- 9,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -8,
- 1
- ],
- [
- -17,
- 0
- ],
- [
- -15,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 21,
- 9
- ],
- [
- 14,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- -30,
- -6
- ],
- [
- -11,
- -4
- ],
- [
- -10,
- -6
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -10,
- -4
- ],
- [
- -24,
- -7
- ],
- [
- -9,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -22,
- -4
- ],
- [
- -7,
- 0
- ],
- [
- -8,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 12,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- -8,
- 0
- ],
- [
- -8,
- -2
- ],
- [
- -17,
- -1
- ],
- [
- -7,
- -3
- ],
- [
- -6,
- -4
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -20,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -12,
- 3
- ],
- [
- -10,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -8,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 17,
- 8
- ],
- [
- 11,
- 4
- ],
- [
- 16,
- 3
- ],
- [
- 36,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- -37,
- -3
- ],
- [
- -32,
- -4
- ],
- [
- -5,
- -1
- ],
- [
- -8,
- -4
- ],
- [
- -23,
- -12
- ],
- [
- -7,
- -4
- ],
- [
- -11,
- -1
- ],
- [
- -8,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -11,
- 4
- ],
- [
- -8,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 21,
- 3
- ],
- [
- 28,
- 0
- ],
- [
- 13,
- 0
- ],
- [
- 13,
- 2
- ],
- [
- 18,
- 5
- ],
- [
- 20,
- 7
- ],
- [
- 4,
- 3
- ],
- [
- -7,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -13,
- -3
- ],
- [
- -20,
- -7
- ],
- [
- -19,
- -2
- ],
- [
- -44,
- -1
- ],
- [
- -15,
- -2
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -6,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 11,
- 3
- ],
- [
- 8,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- -12,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 7,
- 4
- ],
- [
- 15,
- 5
- ],
- [
- 7,
- 1
- ],
- [
- 14,
- 1
- ],
- [
- 14,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -14,
- 1
- ],
- [
- -10,
- 1
- ],
- [
- -14,
- -2
- ],
- [
- -37,
- -8
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 20,
- 9
- ],
- [
- 1,
- 1
- ],
- [
- -14,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -8,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -8,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 6,
- 3
- ],
- [
- 6,
- 3
- ],
- [
- 8,
- 2
- ],
- [
- 12,
- 3
- ],
- [
- 9,
- 1
- ],
- [
- 15,
- 0
- ],
- [
- 7,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 8,
- 4
- ],
- [
- 9,
- 2
- ],
- [
- 14,
- 2
- ],
- [
- 11,
- 0
- ],
- [
- 7,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 6,
- -3
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 7,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 8,
- -3
- ],
- [
- 7,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 10,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -35,
- 9
- ],
- [
- -1,
- 1
- ],
- [
- 12,
- 2
- ],
- [
- 7,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 8,
- 4
- ],
- [
- 6,
- 2
- ],
- [
- 10,
- 3
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 15,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 11,
- -8
- ],
- [
- 5,
- -3
- ],
- [
- 6,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 8,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -9,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- -2
- ],
- [
- 19,
- -5
- ],
- [
- 29,
- -7
- ],
- [
- 11,
- -1
- ],
- [
- 7,
- -3
- ],
- [
- 6,
- -3
- ],
- [
- 6,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- -5,
- 5
- ],
- [
- -14,
- 6
- ],
- [
- -37,
- 9
- ],
- [
- -15,
- 5
- ],
- [
- -7,
- 3
- ],
- [
- -5,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 7,
- 1
- ],
- [
- 9,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -8,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 9,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 10,
- -3
- ],
- [
- 10,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- -9,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 10,
- -1
- ],
- [
- 16,
- -3
- ],
- [
- 29,
- -2
- ],
- [
- 8,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -11,
- 2
- ],
- [
- -13,
- 3
- ],
- [
- -5,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 8,
- 2
- ],
- [
- 19,
- 0
- ],
- [
- 18,
- -3
- ],
- [
- 16,
- 1
- ],
- [
- 10,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- 22,
- -9
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 8,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -13,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- 3
- ],
- [
- -14,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- 39,
- 2
- ],
- [
- 37,
- -2
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 6,
- -3
- ],
- [
- 12,
- -5
- ],
- [
- 17,
- -3
- ],
- [
- -3,
- 2
- ],
- [
- -13,
- 5
- ],
- [
- -5,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 14,
- 5
- ],
- [
- 21,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 16,
- -7
- ],
- [
- 8,
- -3
- ],
- [
- 5,
- -1
- ],
- [
- -7,
- 4
- ],
- [
- -6,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 9,
- 3
- ],
- [
- 6,
- 1
- ],
- [
- 25,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -4
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 5264,
- 7907
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -1
- ]
- ],
- [
- [
- 5290,
- 7883
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 5195,
- 7829
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 6
- ],
- [
- 4,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 3
- ]
- ],
- [
- [
- 5211,
- 7925
- ],
- [
- 2,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 7,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -5
- ],
- [
- 5,
- -4
- ]
- ],
- [
- [
- 3123,
- 1965
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3131,
- 1971
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 3153,
- 2003
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3136,
- 2007
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -8,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -4,
- 5
- ],
- [
- 6,
- 3
- ],
- [
- 6,
- 0
- ],
- [
- 13,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 3064,
- 2021
- ],
- [
- 22,
- -6
- ],
- [
- 7,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- -5
- ],
- [
- -6,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 5,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 11
- ],
- [
- 6,
- -2
- ]
- ],
- [
- [
- 3028,
- 2023
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ]
- ],
- [
- [
- 3017,
- 2072
- ],
- [
- 6,
- -5
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- 3
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 8,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- -4
- ]
- ],
- [
- [
- 2974,
- 2103
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -6,
- 2
- ],
- [
- 5,
- 6
- ],
- [
- 7,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 7,
- -2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 2933,
- 2136
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -5,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 5
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 3093,
- 2024
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -11,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- -3
- ],
- [
- -6,
- 3
- ],
- [
- -5,
- 2
- ],
- [
- -9,
- 2
- ],
- [
- -6,
- 4
- ],
- [
- -11,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- 3
- ],
- [
- -5,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 6,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -15
- ],
- [
- 2,
- -6
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- 2,
- -7
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -22,
- 14
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 7,
- 4
- ],
- [
- 8,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- -4
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- -11
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 2940,
- 2193
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 2921,
- 2210
- ],
- [
- 1,
- -11
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -10
- ],
- [
- -1,
- -6
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- 7
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 7
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 1
- ]
- ],
- [
- [
- 2929,
- 2230
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 2908,
- 2265
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 2915,
- 2287
- ],
- [
- -6,
- -5
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 2913,
- 2371
- ],
- [
- 0,
- -5
- ],
- [
- -4,
- -8
- ],
- [
- -3,
- -6
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 2931,
- 2353
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -9
- ],
- [
- -1,
- -10
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -9
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- 8
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -19
- ]
- ],
- [
- [
- 2902,
- 2375
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 10
- ],
- [
- 4,
- 15
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -9
- ],
- [
- 3,
- -11
- ],
- [
- 0,
- -12
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- -2
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 2928,
- 2385
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 6,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -10
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -10
- ]
- ],
- [
- [
- 2913,
- 2428
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 2935,
- 2552
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -11
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 2915,
- 2598
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 2954,
- 2602
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 2972,
- 2605
- ],
- [
- -6,
- -5
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 2952,
- 2627
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- 1,
- 8
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 9
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 6
- ],
- [
- 4,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 2949,
- 2659
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 2926,
- 2672
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 2950,
- 2687
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 12
- ],
- [
- 2,
- 17
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 9,
- -4
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -8
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 2811,
- 3246
- ],
- [
- -5,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 1964,
- 3621
- ],
- [
- -4,
- -2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 3098,
- 2168
- ],
- [
- -15,
- 6
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- -4
- ],
- [
- -4,
- -9
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -14,
- -8
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -15
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -12
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -4
- ],
- [
- -4,
- 3
- ],
- [
- -7,
- 2
- ],
- [
- -5,
- 4
- ],
- [
- -6,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 15
- ],
- [
- 9,
- 7
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -14,
- -14
- ],
- [
- -7,
- -4
- ],
- [
- -4,
- -4
- ],
- [
- -5,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -4,
- 2
- ],
- [
- -8,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 11
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 9,
- 9
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 6,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -12,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- 8,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- -5
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -5
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 5
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -6,
- 7
- ],
- [
- -11,
- 8
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 9,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -9,
- -3
- ],
- [
- -7,
- -8
- ],
- [
- -6,
- -4
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- 16
- ],
- [
- -1,
- 4
- ],
- [
- -5,
- 4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 10
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- 7,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 4,
- -13
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 8,
- -7
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- 6
- ],
- [
- 2,
- 8
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -14
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 7
- ],
- [
- 7,
- -2
- ],
- [
- -3,
- 3
- ],
- [
- -7,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- 5,
- 7
- ],
- [
- 3,
- 5
- ],
- [
- 9,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 18
- ],
- [
- 0,
- 14
- ],
- [
- 1,
- 12
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 9
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 11,
- 1
- ],
- [
- 9,
- -9
- ],
- [
- 4,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 13
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- 2,
- 6
- ],
- [
- 5,
- 7
- ],
- [
- 2,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- 2,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -6,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 7
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -5
- ],
- [
- -5,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 6,
- 7
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 8
- ],
- [
- 4,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 8,
- 3
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -15
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -8,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 12
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- -3,
- -17
- ],
- [
- -3,
- -8
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 10
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 8
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 6
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 7,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- -6,
- 1
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 7
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 9,
- 11
- ],
- [
- 2,
- 8
- ],
- [
- 0,
- 9
- ],
- [
- -4,
- 3
- ],
- [
- -5,
- 6
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 9
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 14
- ],
- [
- -3,
- 10
- ],
- [
- 1,
- 7
- ],
- [
- 4,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 4,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- 10
- ],
- [
- 4,
- -1
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -10
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 11
- ],
- [
- -1,
- 13
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 9
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -8
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 7
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -12
- ],
- [
- -2,
- -2
- ],
- [
- -8,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- -3,
- 11
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 6
- ],
- [
- 4,
- 23
- ],
- [
- 1,
- 12
- ],
- [
- 2,
- 10
- ],
- [
- 0,
- 7
- ],
- [
- 6,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 21
- ],
- [
- 1,
- 12
- ],
- [
- -7,
- 34
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- 14
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- -4,
- 12
- ],
- [
- -1,
- 7
- ],
- [
- 2,
- 6
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 7,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 10
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 9
- ],
- [
- 3,
- 23
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 7
- ],
- [
- -1,
- 10
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 6
- ],
- [
- 4,
- 8
- ],
- [
- 2,
- 10
- ],
- [
- 3,
- 18
- ],
- [
- 1,
- 11
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 9
- ],
- [
- 2,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 5,
- 9
- ],
- [
- 1,
- 8
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 12
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 18
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 8
- ],
- [
- -3,
- 11
- ],
- [
- 0,
- 23
- ],
- [
- -2,
- 18
- ],
- [
- -2,
- 18
- ],
- [
- 0,
- 11
- ],
- [
- -1,
- 13
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 17
- ],
- [
- 7,
- 11
- ],
- [
- 2,
- 12
- ],
- [
- 1,
- 16
- ],
- [
- -1,
- 12
- ],
- [
- 0,
- 5
- ],
- [
- -4,
- 9
- ],
- [
- -1,
- 16
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 10
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 18
- ],
- [
- 2,
- 15
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 7
- ],
- [
- 3,
- 13
- ],
- [
- 0,
- 7
- ],
- [
- 3,
- 14
- ],
- [
- 0,
- 10
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 14
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- 3,
- 13
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 23
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 18
- ],
- [
- 1,
- 12
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 17
- ],
- [
- 1,
- 21
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 13
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 6
- ],
- [
- -3,
- 30
- ],
- [
- 0,
- 11
- ],
- [
- 1,
- 18
- ],
- [
- 0,
- 24
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 13
- ],
- [
- -2,
- 25
- ],
- [
- 0,
- 14
- ],
- [
- -1,
- 11
- ],
- [
- -1,
- 3
- ]
- ],
- [
- [
- 3044,
- 4127
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 3
- ]
- ],
- [
- [
- 8079,
- 6335
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -15
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -9
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -6,
- 6
- ],
- [
- -1,
- 13
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 20
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- 8
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- -5
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 8065,
- 6399
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ]
- ],
- [
- [
- 8128,
- 6430
- ],
- [
- -3,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 8132,
- 6428
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 8154,
- 6497
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 8282,
- 6595
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 8328,
- 6650
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 8367,
- 6802
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8393,
- 6893
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 8399,
- 6906
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8396,
- 6910
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 8384,
- 6998
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- 5
- ],
- [
- -5,
- 5
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 7,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 8625,
- 7634
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -6,
- -8
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 8454,
- 7488
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -4
- ],
- [
- -10,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -14,
- -14
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 11,
- 8
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 8,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 4,
- 6
- ],
- [
- 5,
- 12
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -8,
- 9
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -10,
- 2
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -8,
- -21
- ],
- [
- -3,
- -2
- ],
- [
- -15,
- -12
- ],
- [
- -7,
- -5
- ],
- [
- -5,
- -9
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -8
- ],
- [
- -5,
- -11
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- -4,
- 7
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -16
- ],
- [
- -1,
- -10
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -12
- ],
- [
- 3,
- -7
- ],
- [
- 7,
- -7
- ],
- [
- 15,
- -5
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- -5
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -9
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 5,
- -4
- ],
- [
- 4,
- -1
- ],
- [
- 9,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 8,
- 8
- ],
- [
- 4,
- 8
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 10,
- 8
- ],
- [
- 9,
- -6
- ],
- [
- 4,
- -7
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- -8
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- -7
- ],
- [
- -7,
- -6
- ],
- [
- -8,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -10
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -7
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -11
- ],
- [
- -4,
- -6
- ],
- [
- -2,
- -9
- ],
- [
- 1,
- -6
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -7
- ],
- [
- 5,
- -5
- ],
- [
- 5,
- -3
- ],
- [
- 7,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -18
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -5
- ],
- [
- 3,
- -8
- ],
- [
- 3,
- -15
- ],
- [
- 4,
- -13
- ],
- [
- 0,
- -9
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- 4,
- -5
- ],
- [
- 8,
- -7
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -9
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -9,
- 9
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- 10
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -9,
- -8
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 6,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 5,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 4,
- -9
- ],
- [
- 9,
- -9
- ],
- [
- 3,
- -9
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -8
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -9,
- -8
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- -10
- ],
- [
- 8,
- 2
- ],
- [
- 7,
- 8
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 7,
- -14
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -5,
- -5
- ],
- [
- -6,
- -11
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -20
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- 4,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -9
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -13
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 3,
- -8
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -5,
- -8
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- -11
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -10
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- -5
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 8173,
- 6482
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 8166,
- 6480
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -11
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 8153,
- 6465
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 8151,
- 6462
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 8
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- -11
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 6,
- -8
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -6,
- -2
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 4,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 8
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- -9
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ]
- ],
- [
- [
- 7998,
- 6423
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -8,
- 13
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 9
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 7836,
- 6473
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -10
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 3
- ]
- ],
- [
- [
- 7809,
- 6426
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- -5
- ],
- [
- -4,
- -9
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 8
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- -3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -5,
- -3
- ],
- [
- -5,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 4,
- 9
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 9
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 10
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 9
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 18
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 7703,
- 6809
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 5,
- 10
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -7
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 7
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -5
- ],
- [
- -6,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- -5
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -8,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -5,
- -5
- ],
- [
- -5,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 7468,
- 6757
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 14
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 7447,
- 6789
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 8
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -7,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- -4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 7
- ],
- [
- -3,
- 7
- ],
- [
- -4,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- -6,
- 8
- ],
- [
- -4,
- 6
- ],
- [
- -8,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -5,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -6,
- -3
- ],
- [
- -5,
- -14
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ]
- ],
- [
- [
- 7250,
- 6921
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 7224,
- 6957
- ],
- [
- -5,
- 6
- ]
- ],
- [
- [
- 7219,
- 6963
- ],
- [
- 0,
- 0
- ]
- ],
- [
- [
- 7219,
- 6963
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 1
- ]
- ],
- [
- [
- 7204,
- 6974
- ],
- [
- -1,
- 1
- ]
- ],
- [
- [
- 7203,
- 6975
- ],
- [
- -3,
- 8
- ],
- [
- -3,
- 10
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ]
- ],
- [
- [
- 7186,
- 7020
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 11
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 7200,
- 7056
- ],
- [
- 0,
- 3
- ]
- ],
- [
- [
- 7200,
- 7059
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ]
- ],
- [
- [
- 7197,
- 7094
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 7197,
- 7098
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 9
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- 11
- ],
- [
- -2,
- 11
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ]
- ],
- [
- [
- 7161,
- 7228
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 7160,
- 7228
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- -6,
- 3
- ],
- [
- -3,
- 3
- ]
- ],
- [
- [
- 7132,
- 7238
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 12
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 7080,
- 7328
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -7,
- 5
- ],
- [
- -6,
- 4
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 3
- ]
- ],
- [
- [
- 7045,
- 7456
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 6,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 8,
- 9
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -10
- ],
- [
- 0,
- -2
- ],
- [
- 6,
- 0
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 9
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 7,
- 12
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 6,
- 6
- ],
- [
- 11,
- 9
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 3
- ],
- [
- 7,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 9,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ]
- ],
- [
- [
- 7227,
- 7614
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 8
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 12
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 2
- ],
- [
- 9,
- 5
- ],
- [
- 7,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 12
- ],
- [
- 1,
- 8
- ],
- [
- 4,
- 14
- ],
- [
- 3,
- 13
- ],
- [
- 5,
- 20
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- -5
- ],
- [
- 5,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 11
- ],
- [
- -1,
- 10
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 9
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- -1
- ]
- ],
- [
- [
- 7425,
- 8011
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 7439,
- 8015
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 7,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 11,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 7,
- -2
- ],
- [
- 4,
- -7
- ],
- [
- 4,
- -3
- ],
- [
- 6,
- -7
- ],
- [
- 4,
- -2
- ],
- [
- 6,
- -3
- ],
- [
- 8,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -11
- ],
- [
- 5,
- -16
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 5,
- -6
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 6,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 10,
- 1
- ],
- [
- 15,
- -3
- ],
- [
- 14,
- -3
- ],
- [
- 13,
- -2
- ],
- [
- 7,
- -2
- ],
- [
- 14,
- -2
- ],
- [
- 8,
- 3
- ],
- [
- 7,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 12,
- -4
- ],
- [
- 7,
- -1
- ],
- [
- 9,
- -2
- ],
- [
- 6,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -10
- ],
- [
- 3,
- -5
- ],
- [
- 5,
- -3
- ],
- [
- 12,
- -4
- ],
- [
- 6,
- -2
- ],
- [
- 7,
- -3
- ],
- [
- 5,
- -4
- ],
- [
- 6,
- -4
- ],
- [
- 7,
- -6
- ],
- [
- 8,
- 2
- ],
- [
- 9,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 0,
- -13
- ],
- [
- 8,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- 7
- ],
- [
- 12,
- 8
- ],
- [
- 6,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 12,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 7,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 8,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 6
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 9
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 5
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 9,
- -4
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 7,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 8
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- -7,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 11
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- 4,
- 6
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 8
- ],
- [
- 5,
- 14
- ],
- [
- 5,
- 16
- ],
- [
- 2,
- 8
- ]
- ],
- [
- [
- 8240,
- 8054
- ],
- [
- 6,
- -5
- ],
- [
- 4,
- -3
- ],
- [
- 6,
- -4
- ],
- [
- 6,
- -1
- ],
- [
- 7,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 9,
- 10
- ],
- [
- 7,
- 9
- ],
- [
- 9,
- 7
- ],
- [
- 6,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 5,
- 9
- ],
- [
- 2,
- 10
- ],
- [
- 5,
- 7
- ],
- [
- 8,
- 7
- ],
- [
- 4,
- 7
- ],
- [
- 2,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 5,
- 8
- ],
- [
- 8,
- 11
- ],
- [
- 8,
- 7
- ],
- [
- 12,
- 2
- ],
- [
- 9,
- 4
- ],
- [
- 10,
- 4
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 7,
- -6
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- -5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 5,
- -5
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- 4,
- -9
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- 5,
- -10
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -5
- ],
- [
- -2,
- -8
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 6,
- -1
- ],
- [
- 8,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 7,
- -13
- ],
- [
- 5,
- -5
- ],
- [
- 4,
- -2
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 7,
- 0
- ],
- [
- 10,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 5,
- 4
- ],
- [
- 10,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -9
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -10
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- 3,
- -23
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -17
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 4914,
- 5479
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 4913,
- 5477
- ],
- [
- -4,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- -1
- ]
- ],
- [
- [
- 4925,
- 5730
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -16
- ],
- [
- 2,
- -16
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -13
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -9
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -15
- ],
- [
- 2,
- -9
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -9
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 4916,
- 5479
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- 1,
- 9
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -10
- ],
- [
- -1,
- -2
- ],
- [
- -15,
- 6
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 14,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -17,
- -3
- ],
- [
- -7,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -7,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- -14,
- -2
- ],
- [
- -10,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -13,
- -11
- ],
- [
- -9,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -4,
- -4
- ],
- [
- -6,
- -6
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 4790,
- 5434
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 15
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 11
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 11
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 20
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 4764,
- 5619
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 10
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 9
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 10
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ]
- ],
- [
- [
- 4778,
- 5769
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5449,
- 5315
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 6
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -6,
- 0
- ]
- ],
- [
- [
- 5369,
- 5308
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -10,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 5314,
- 5309
- ],
- [
- -6,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -8,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 5272,
- 5317
- ],
- [
- 0,
- 13
- ],
- [
- 2,
- 11
- ],
- [
- 0,
- 11
- ],
- [
- 2,
- 9
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 4
- ],
- [
- -6,
- 14
- ],
- [
- 3,
- 5
- ],
- [
- -4,
- -1
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 9
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 5237,
- 5458
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 9
- ],
- [
- 2,
- 16
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 5
- ],
- [
- 5,
- 10
- ],
- [
- 4,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -5
- ],
- [
- 3,
- -6
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -11
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 11
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 12
- ],
- [
- 2,
- 17
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 8
- ],
- [
- 3,
- 10
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 4,
- 8
- ],
- [
- 2,
- 12
- ],
- [
- 1,
- 13
- ],
- [
- 5,
- 15
- ],
- [
- 5,
- 15
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 8
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 27
- ]
- ],
- [
- [
- 5390,
- 5937
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -9
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -9
- ],
- [
- 1,
- -14
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -11
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- -2,
- -10
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -9
- ],
- [
- 1,
- -15
- ],
- [
- 2,
- -12
- ],
- [
- 2,
- -9
- ],
- [
- 2,
- -8
- ],
- [
- 3,
- -8
- ],
- [
- 4,
- -7
- ],
- [
- 3,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -7,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -7
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -5
- ],
- [
- 5,
- -10
- ],
- [
- 6,
- -10
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -6
- ],
- [
- 4,
- -8
- ],
- [
- 4,
- -14
- ],
- [
- 3,
- -14
- ],
- [
- 2,
- -13
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -5
- ]
- ],
- [
- [
- 5761,
- 5478
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 5,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 6
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -9
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 5,
- -11
- ],
- [
- 6,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 5856,
- 5385
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -10
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -7
- ],
- [
- -6,
- -14
- ],
- [
- -13,
- -26
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -7
- ],
- [
- -4,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -10
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -9
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -19
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5821,
- 5104
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 5816,
- 4928
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -10
- ],
- [
- -1,
- -10
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -11
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -9
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -11
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -9
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -5
- ],
- [
- 4,
- -12
- ],
- [
- 2,
- -5
- ],
- [
- 5,
- -6
- ],
- [
- 4,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -9
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -10
- ],
- [
- 2,
- -8
- ],
- [
- 3,
- -11
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 5854,
- 4712
- ],
- [
- -5,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -8,
- -2
- ],
- [
- -8,
- -3
- ],
- [
- -8,
- -2
- ],
- [
- -7,
- -3
- ],
- [
- -7,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 4,
- -14
- ],
- [
- 2,
- -10
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -10
- ],
- [
- -1,
- -12
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -9
- ],
- [
- 0,
- -7
- ],
- [
- -3,
- -7
- ],
- [
- 0,
- -8
- ],
- [
- -2,
- -10
- ],
- [
- -2,
- -14
- ],
- [
- -1,
- -8
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 6,
- -8
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -8
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 8
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- 3
- ],
- [
- -6,
- 5
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 8
- ],
- [
- -5,
- 9
- ],
- [
- -1,
- 10
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -9
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -7,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ]
- ],
- [
- [
- 5362,
- 4846
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- 3
- ]
- ],
- [
- [
- 5363,
- 4917
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 8
- ],
- [
- 5,
- 14
- ],
- [
- 5,
- 9
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 10
- ],
- [
- 4,
- 17
- ],
- [
- 1,
- 16
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 33
- ],
- [
- -1,
- 11
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 9
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 8
- ],
- [
- 5,
- 19
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 4
- ],
- [
- 4,
- 4
- ],
- [
- 8,
- 13
- ],
- [
- 6,
- 13
- ],
- [
- -1,
- 16
- ],
- [
- 1,
- 13
- ],
- [
- 3,
- 16
- ],
- [
- 1,
- 18
- ],
- [
- -1,
- 18
- ],
- [
- 1,
- 15
- ],
- [
- 3,
- 18
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 17
- ],
- [
- 4,
- 23
- ],
- [
- 4,
- 14
- ],
- [
- 4,
- 15
- ],
- [
- 2,
- 10
- ],
- [
- 2,
- 12
- ],
- [
- -1,
- 10
- ]
- ],
- [
- [
- 5333,
- 4896
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 7
- ],
- [
- -3,
- 7
- ],
- [
- -8,
- 14
- ],
- [
- -1,
- 4
- ],
- [
- -6,
- 12
- ]
- ],
- [
- [
- 5309,
- 4958
- ],
- [
- 1,
- 9
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 6,
- 7
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -9
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 12
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 10,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -7
- ],
- [
- 5,
- -4
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 10
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 11
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 10
- ],
- [
- 1,
- 10
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 12
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -3,
- -3
- ],
- [
- -6,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 7
- ],
- [
- 3,
- 10
- ],
- [
- 0,
- 4
- ]
- ],
- [
- [
- 563,
- 3960
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 2830,
- 5330
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 3019,
- 5867
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -6,
- -3
- ],
- [
- -6,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -6,
- -23
- ],
- [
- -6,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -8
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -14
- ],
- [
- -2,
- -17
- ],
- [
- -1,
- -10
- ],
- [
- -1,
- -13
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -15
- ],
- [
- 1,
- -12
- ],
- [
- 4,
- -8
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -9
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -8
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -13
- ],
- [
- 5,
- -12
- ],
- [
- 4,
- -10
- ],
- [
- 4,
- -11
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 8,
- 0
- ],
- [
- 9,
- 3
- ],
- [
- 6,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -9
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -11
- ],
- [
- -1,
- -15
- ],
- [
- 0,
- -10
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -13
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -13
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -5,
- -8
- ],
- [
- -9,
- -17
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 3056,
- 4940
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- 3,
- 10
- ],
- [
- 6,
- 18
- ],
- [
- 3,
- 12
- ],
- [
- 4,
- 13
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -6,
- 7
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 2908,
- 5178
- ],
- [
- -5,
- 4
- ],
- [
- -4,
- 5
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 12
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- 5
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- -5,
- 9
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ]
- ],
- [
- [
- 2809,
- 5268
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- 1,
- 8
- ],
- [
- 5,
- 5
- ],
- [
- 6,
- -4
- ],
- [
- 1,
- 9
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 15
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 6
- ],
- [
- 5,
- 19
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 9
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- -2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 14
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- -4,
- 7
- ],
- [
- 6,
- 8
- ],
- [
- 2,
- 6
- ],
- [
- -3,
- 12
- ],
- [
- -3,
- 11
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 13
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 9
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- 10
- ],
- [
- -3,
- 5
- ]
- ],
- [
- [
- 2836,
- 5600
- ],
- [
- 2,
- 12
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 8
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 2850,
- 5683
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -8
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -9
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 17
- ],
- [
- -1,
- 9
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 12,
- 17
- ],
- [
- 4,
- 15
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 8
- ],
- [
- 2,
- 11
- ],
- [
- 1,
- 5
- ],
- [
- 5,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 5
- ],
- [
- 6,
- 11
- ],
- [
- 2,
- 3
- ],
- [
- 11,
- -7
- ],
- [
- 3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 10
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 10,
- 1
- ],
- [
- 17,
- 24
- ],
- [
- 7,
- 6
- ],
- [
- 5,
- 5
- ],
- [
- 3,
- 9
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 6,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -6
- ],
- [
- 3,
- -10
- ],
- [
- 1,
- -6
- ],
- [
- -4,
- -8
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 6216,
- 4475
- ],
- [
- 2,
- -4
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 6235,
- 4488
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 6207,
- 4498
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 18
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -12
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 4324,
- 6039
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 4356,
- 6056
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 4348,
- 6048
- ],
- [
- -1,
- -5
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 4,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -8
- ]
- ],
- [
- [
- 4363,
- 6119
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 5
- ]
- ],
- [
- [
- 4330,
- 6141
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -2
- ]
- ],
- [
- [
- 4364,
- 6143
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 4308,
- 6152
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 4300,
- 6160
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 6,
- 6
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -6
- ]
- ],
- [
- [
- 2676,
- 5813
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 4,
- -15
- ],
- [
- 3,
- -9
- ],
- [
- 6,
- -16
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -12
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 2706,
- 5735
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -11
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 2698,
- 5649
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 9
- ],
- [
- -1,
- 4
- ],
- [
- -4,
- 5
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 4,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 8
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 9
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- -5,
- 7
- ],
- [
- -6,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- -7,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -9,
- 12
- ],
- [
- -5,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- -9
- ],
- [
- 2,
- -5
- ],
- [
- 6,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 11
- ],
- [
- -9,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 10
- ],
- [
- -2,
- 10
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 9
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 2618,
- 5821
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 6,
- -4
- ],
- [
- 7,
- -6
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 5
- ]
- ],
- [
- [
- 2706,
- 6426
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- 12
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 7
- ],
- [
- 7,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -9
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 2842,
- 6448
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 2836,
- 6458
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 2832,
- 6467
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 2816,
- 6483
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ]
- ],
- [
- [
- 2796,
- 6489
- ],
- [
- 0,
- -1
- ],
- [
- -5,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- -7
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 2726,
- 6518
- ],
- [
- 8,
- -3
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 9,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- 4,
- -10
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 8,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 15,
- -15
- ],
- [
- 5,
- -8
- ],
- [
- 3,
- -4
- ],
- [
- 6,
- -6
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- -7
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -3
- ],
- [
- 6,
- -5
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -8
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -6,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -11,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -8,
- -2
- ],
- [
- -7,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -7,
- -2
- ],
- [
- -7,
- -1
- ],
- [
- 4,
- 13
- ],
- [
- 10,
- 13
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -6,
- 9
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -10,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -15,
- 9
- ],
- [
- -6,
- 5
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -13,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 5
- ],
- [
- -10,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -24,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 10,
- 8
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 11
- ],
- [
- 0,
- 7
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 9
- ],
- [
- 2,
- 2
- ],
- [
- 22,
- 18
- ],
- [
- 2,
- 1
- ],
- [
- 14,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 5
- ],
- [
- 7,
- 3
- ],
- [
- 7,
- -2
- ]
- ],
- [
- [
- 3090,
- 5878
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 5
- ],
- [
- -4,
- 9
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -7
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -6
- ]
- ],
- [
- [
- 2739,
- 6298
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 2778,
- 6319
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 2782,
- 6319
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 5944,
- 7204
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ]
- ],
- [
- [
- 5908,
- 7210
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 13,
- 7
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- -2,
- -4
- ],
- [
- -15,
- -17
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -4
- ]
- ],
- [
- [
- 5944,
- 7204
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- -9
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 10
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 5411,
- 8113
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -6
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 7,
- -8
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 6,
- -9
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5523,
- 8036
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -6,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 5383,
- 7993
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 5
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 5394,
- 8287
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- -5
- ],
- [
- 5,
- -5
- ]
- ],
- [
- [
- 5394,
- 8291
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5313,
- 8318
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5380,
- 8316
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 5238,
- 8335
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5270,
- 8342
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- 7,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- 1
- ],
- [
- 11,
- -7
- ],
- [
- 6,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -5,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 8,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 9
- ],
- [
- 3,
- 1
- ],
- [
- 9,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 6,
- 7
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -8
- ],
- [
- 8,
- -8
- ],
- [
- 8,
- 1
- ],
- [
- 2,
- -8
- ],
- [
- 2,
- -9
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 5396,
- 8279
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -16
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -6
- ],
- [
- 8,
- -8
- ],
- [
- 3,
- -7
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 6,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -7
- ],
- [
- -2,
- -9
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -8
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5211,
- 7925
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- 10
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 8
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 5176,
- 8032
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ]
- ],
- [
- [
- 5166,
- 8107
- ],
- [
- 2,
- 9
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 6
- ]
- ],
- [
- [
- 5199,
- 8253
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 9,
- 1
- ],
- [
- 11,
- -1
- ],
- [
- 4,
- -8
- ],
- [
- -1,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- 2,
- 10
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 8,
- -2
- ],
- [
- 8,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 8,
- -12
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- -4,
- 3
- ],
- [
- -9,
- 15
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 15
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 6
- ]
- ],
- [
- [
- 5240,
- 8346
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 8,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 5230,
- 8339
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- 8
- ],
- [
- 3,
- 9
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 7,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- -1
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 6201,
- 5846
- ],
- [
- -3,
- -8
- ],
- [
- -3,
- -9
- ],
- [
- -3,
- -12
- ]
- ],
- [
- [
- 6192,
- 5817
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 13
- ],
- [
- 4,
- 11
- ],
- [
- 3,
- 8
- ]
- ],
- [
- [
- 6177,
- 5902
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- -8
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 9
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 3
- ]
- ],
- [
- [
- 6197,
- 5916
- ],
- [
- 0,
- -3
- ],
- [
- 5,
- -11
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -10
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -6,
- -8
- ],
- [
- -7,
- -5
- ],
- [
- -4,
- -10
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -4
- ]
- ],
- [
- [
- 3297,
- 6062
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 10
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -9
- ],
- [
- -1,
- -7
- ]
- ],
- [
- [
- 5315,
- 8345
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -12,
- 9
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- -4
- ]
- ],
- [
- [
- 5291,
- 8343
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5348,
- 8350
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 5279,
- 8345
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5298,
- 8337
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -6
- ],
- [
- -4,
- -15
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5419,
- 8353
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- -6,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 4
- ],
- [
- 10,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 5295,
- 8387
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -4
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -7,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 9
- ],
- [
- 4,
- 2
- ],
- [
- 8,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 3
- ]
- ],
- [
- [
- 5351,
- 8386
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 5294,
- 8397
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5349,
- 8397
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -7,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 8
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 5,
- 5
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -8
- ]
- ],
- [
- [
- 5306,
- 8481
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 5240,
- 8346
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 10
- ],
- [
- -1,
- 5
- ],
- [
- -8,
- 5
- ],
- [
- -6,
- 5
- ],
- [
- 2,
- 18
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 11
- ],
- [
- 1,
- 16
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 4,
- 7
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 12
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -8
- ],
- [
- -3,
- -9
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 8
- ],
- [
- 5,
- 7
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 8,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 7,
- 14
- ],
- [
- 4,
- 6
- ],
- [
- 8,
- 2
- ],
- [
- 8,
- 7
- ],
- [
- 2,
- 0
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -8
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -9
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -9
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 10,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -12
- ],
- [
- -2,
- -8
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -6
- ]
- ],
- [
- [
- 3006,
- 6223
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 12
- ],
- [
- 0,
- 2
- ]
- ],
- [
- [
- 3006,
- 6320
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -6
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 12,
- 2
- ],
- [
- 3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 6,
- -5
- ],
- [
- 6,
- -11
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -8,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -5,
- -13
- ],
- [
- -2,
- -9
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ]
- ],
- [
- [
- 5238,
- 7311
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -7
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -11
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -10
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- -3,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -9
- ],
- [
- -6,
- -8
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -9
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -10
- ],
- [
- 3,
- -11
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 6,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -8
- ],
- [
- 2,
- -13
- ],
- [
- 1,
- -9
- ],
- [
- 5,
- -7
- ],
- [
- 5,
- -6
- ],
- [
- 4,
- -6
- ],
- [
- 5,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -13
- ],
- [
- 2,
- -13
- ],
- [
- 2,
- -14
- ],
- [
- 1,
- -14
- ],
- [
- 3,
- -17
- ],
- [
- 1,
- -10
- ],
- [
- 1,
- -11
- ],
- [
- 2,
- -14
- ]
- ],
- [
- [
- 5264,
- 6925
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- 5,
- -11
- ],
- [
- 2,
- -9
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -12
- ],
- [
- 2,
- -11
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -9
- ],
- [
- -1,
- -23
- ],
- [
- 1,
- -30
- ],
- [
- 2,
- -15
- ],
- [
- -3,
- -13
- ],
- [
- -2,
- -13
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -10
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -12
- ],
- [
- -1,
- -5
- ],
- [
- -4,
- -6
- ],
- [
- -6,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 4,
- -10
- ],
- [
- 5,
- -15
- ],
- [
- 6,
- -17
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -12
- ],
- [
- 3,
- -15
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 7,
- 4
- ],
- [
- 12,
- -7
- ],
- [
- 11,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -9
- ],
- [
- 4,
- -14
- ],
- [
- 3,
- -11
- ],
- [
- 3,
- -11
- ]
- ],
- [
- [
- 5332,
- 6538
- ],
- [
- -14,
- -17
- ],
- [
- -15,
- -18
- ],
- [
- -14,
- -17
- ],
- [
- -15,
- -18
- ],
- [
- -14,
- -18
- ],
- [
- -14,
- -17
- ],
- [
- -15,
- -18
- ],
- [
- -14,
- -17
- ],
- [
- -10,
- -12
- ],
- [
- -6,
- -10
- ],
- [
- -7,
- -13
- ],
- [
- -8,
- -13
- ],
- [
- -5,
- -10
- ],
- [
- -8,
- -13
- ],
- [
- -3,
- -7
- ],
- [
- -8,
- -14
- ],
- [
- -3,
- -3
- ],
- [
- -11,
- -4
- ],
- [
- -10,
- -4
- ],
- [
- -9,
- -4
- ],
- [
- -6,
- -2
- ],
- [
- -6,
- -3
- ]
- ],
- [
- [
- 5117,
- 6286
- ],
- [
- -9,
- -3
- ],
- [
- -6,
- -2
- ],
- [
- -7,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 9
- ],
- [
- -2,
- 2
- ],
- [
- -8,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -9,
- 9
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- -9,
- 12
- ],
- [
- -9,
- 12
- ],
- [
- -9,
- 13
- ],
- [
- -9,
- 12
- ],
- [
- -9,
- 12
- ],
- [
- -9,
- 13
- ],
- [
- -9,
- 12
- ],
- [
- -10,
- 12
- ],
- [
- -9,
- 13
- ],
- [
- -9,
- 12
- ],
- [
- -9,
- 12
- ],
- [
- -9,
- 13
- ],
- [
- -9,
- 12
- ],
- [
- -9,
- 12
- ],
- [
- -9,
- 13
- ],
- [
- -9,
- 12
- ],
- [
- -8,
- 10
- ],
- [
- -8,
- 12
- ]
- ],
- [
- [
- 4866,
- 6624
- ],
- [
- -7,
- 8
- ],
- [
- -6,
- 8
- ],
- [
- -7,
- 8
- ],
- [
- -4,
- 6
- ],
- [
- -5,
- 6
- ],
- [
- -6,
- 6
- ],
- [
- -5,
- 7
- ],
- [
- -5,
- 6
- ],
- [
- -5,
- 6
- ],
- [
- -5,
- 7
- ],
- [
- -6,
- 6
- ],
- [
- -5,
- 6
- ],
- [
- -5,
- 7
- ],
- [
- -5,
- 6
- ],
- [
- -6,
- 7
- ],
- [
- -5,
- 6
- ],
- [
- -5,
- 6
- ],
- [
- -5,
- 7
- ],
- [
- -5,
- 6
- ],
- [
- -6,
- 6
- ]
- ],
- [
- [
- 4758,
- 6755
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 10
- ]
- ],
- [
- [
- 4758,
- 6777
- ],
- [
- 0,
- 14
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 7,
- 9
- ],
- [
- 2,
- 2
- ],
- [
- 7,
- 10
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 6
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 10
- ],
- [
- 3,
- 8
- ],
- [
- 5,
- 5
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 5,
- 6
- ],
- [
- 5,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 12,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 12
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 8
- ],
- [
- 1,
- 14
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 10
- ],
- [
- -2,
- 11
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -6,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 5
- ]
- ],
- [
- [
- 4938,
- 7206
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 5
- ],
- [
- 5,
- 7
- ],
- [
- 4,
- 4
- ],
- [
- 4,
- 7
- ],
- [
- 3,
- 5
- ],
- [
- 5,
- 5
- ],
- [
- 14,
- 11
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 9
- ],
- [
- 4,
- 6
- ],
- [
- 6,
- 5
- ],
- [
- 7,
- 6
- ],
- [
- 5,
- 5
- ],
- [
- 8,
- 4
- ],
- [
- 20,
- 3
- ],
- [
- 11,
- 2
- ],
- [
- 7,
- 0
- ],
- [
- 7,
- 8
- ],
- [
- 3,
- 3
- ],
- [
- 15,
- 0
- ],
- [
- 7,
- 6
- ],
- [
- 28,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 6,
- -8
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 9,
- 7
- ],
- [
- 9,
- 4
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 7
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- -5
- ],
- [
- 10,
- -5
- ],
- [
- 6,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- -1,
- 7
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 5,
- -7
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- 3
- ],
- [
- 13,
- 1
- ]
- ],
- [
- [
- 2774,
- 5013
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -7
- ]
- ],
- [
- [
- 2488,
- 5107
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 2516,
- 5131
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -5
- ]
- ],
- [
- [
- 2490,
- 5139
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 2460,
- 5157
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 2484,
- 5165
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 2464,
- 5185
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -11
- ],
- [
- 6,
- -11
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- -3,
- -10
- ],
- [
- -7,
- -5
- ],
- [
- -6,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 5
- ],
- [
- 5,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 15
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 2808,
- 5256
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 2908,
- 5178
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -14
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -14
- ],
- [
- -1,
- -12
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -7
- ],
- [
- -4,
- -9
- ],
- [
- -6,
- -14
- ],
- [
- -4,
- -6
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -6
- ],
- [
- -5,
- -8
- ],
- [
- -6,
- -4
- ],
- [
- -8,
- -6
- ],
- [
- -5,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -6,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -9
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 7
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ]
- ],
- [
- [
- 2768,
- 4989
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 18
- ],
- [
- 3,
- 11
- ],
- [
- 0,
- 6
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- -5
- ],
- [
- 1,
- -16
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 11
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -8
- ],
- [
- -3,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -7,
- 13
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- 11
- ],
- [
- 1,
- 14
- ],
- [
- 0,
- 6
- ],
- [
- -3,
- 12
- ],
- [
- 2,
- 6
- ],
- [
- 6,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 9
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 9
- ],
- [
- 0,
- 4
- ],
- [
- 5,
- 11
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 10
- ],
- [
- 1,
- 14
- ],
- [
- -1,
- 11
- ],
- [
- -1,
- 11
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 5
- ],
- [
- 7,
- 2
- ],
- [
- 9,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- -1,
- 10
- ]
- ],
- [
- [
- 5949,
- 6988
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 5951,
- 6981
- ],
- [
- 2,
- -12
- ],
- [
- 2,
- -10
- ],
- [
- 2,
- -13
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -14
- ],
- [
- 2,
- -12
- ],
- [
- 2,
- -10
- ],
- [
- 2,
- -14
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 5969,
- 6882
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -9
- ],
- [
- -3,
- -30
- ],
- [
- -5,
- -23
- ],
- [
- 0,
- -14
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -7
- ],
- [
- -3,
- -7
- ],
- [
- -5,
- 4
- ],
- [
- -8,
- 12
- ],
- [
- -4,
- 12
- ],
- [
- -5,
- 8
- ],
- [
- -5,
- 10
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 12
- ],
- [
- -2,
- 5
- ],
- [
- -6,
- 13
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 16
- ],
- [
- -2,
- 10
- ],
- [
- -3,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 5,
- -9
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -11
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -8
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 4,
- -7
- ],
- [
- 5,
- -13
- ],
- [
- 4,
- -10
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -12
- ],
- [
- -1,
- -5
- ],
- [
- 3,
- -10
- ],
- [
- 1,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -8
- ],
- [
- 2,
- -23
- ],
- [
- 2,
- -6
- ],
- [
- 8,
- -30
- ],
- [
- 7,
- -19
- ],
- [
- 3,
- -15
- ],
- [
- 5,
- -17
- ],
- [
- 9,
- -38
- ],
- [
- 6,
- -12
- ],
- [
- 2,
- -7
- ],
- [
- 4,
- -5
- ],
- [
- 4,
- -7
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -19
- ],
- [
- 1,
- -10
- ],
- [
- 4,
- -19
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 9,
- -7
- ],
- [
- 5,
- -13
- ],
- [
- 11,
- -17
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 6024,
- 6451
- ],
- [
- -10,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -10,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -11
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -10,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -10,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -10,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -10,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -10,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -10,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -11,
- 0
- ]
- ],
- [
- [
- 5693,
- 6451
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 9
- ],
- [
- -2,
- 11
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 14
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 12
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 9
- ],
- [
- -2,
- 8
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ]
- ],
- [
- [
- 5698,
- 7007
- ],
- [
- 2,
- -7
- ],
- [
- 4,
- -1
- ],
- [
- 15,
- 6
- ],
- [
- 15,
- -6
- ],
- [
- 9,
- -3
- ],
- [
- 13,
- -5
- ],
- [
- 8,
- -9
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- -6
- ],
- [
- 16,
- -3
- ],
- [
- 8,
- -6
- ],
- [
- 4,
- -5
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 5
- ],
- [
- 10,
- 12
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 9,
- 5
- ],
- [
- -1,
- -3
- ],
- [
- -9,
- -6
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 9,
- -7
- ],
- [
- 2,
- 0
- ],
- [
- 7,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -9
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 8
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -7
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- -9
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 7,
- 3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 6,
- 3
- ],
- [
- 8,
- 0
- ],
- [
- 6,
- 3
- ],
- [
- 8,
- 7
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 6114,
- 6088
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 6113,
- 6110
- ],
- [
- 1,
- -5
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 6072,
- 6221
- ],
- [
- 8,
- -33
- ],
- [
- 4,
- -20
- ],
- [
- 3,
- -21
- ],
- [
- 2,
- -30
- ],
- [
- 2,
- -16
- ],
- [
- 3,
- -8
- ],
- [
- 3,
- -15
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -14
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -8
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -8
- ],
- [
- 10,
- -7
- ],
- [
- 9,
- -22
- ],
- [
- 5,
- -15
- ],
- [
- 16,
- -23
- ],
- [
- 3,
- -10
- ],
- [
- 1,
- -11
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- -11
- ],
- [
- 2,
- -9
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -6
- ]
- ],
- [
- [
- 6177,
- 5902
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 8
- ],
- [
- -2,
- 9
- ],
- [
- -4,
- 8
- ],
- [
- -8,
- 10
- ],
- [
- -6,
- 14
- ],
- [
- -5,
- 14
- ],
- [
- -4,
- 8
- ],
- [
- -1,
- 1
- ],
- [
- -7,
- 5
- ],
- [
- -5,
- 7
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -5,
- -6
- ],
- [
- -9,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 11
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -8
- ],
- [
- -3,
- -14
- ],
- [
- -2,
- -8
- ],
- [
- -2,
- -10
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 13
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- -3
- ]
- ],
- [
- [
- 6014,
- 6005
- ],
- [
- -1,
- 17
- ],
- [
- -1,
- 11
- ],
- [
- 0,
- 11
- ],
- [
- -1,
- 11
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 3,
- 21
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 11
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 14
- ],
- [
- 0,
- 10
- ],
- [
- -1,
- 9
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 11
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 7
- ],
- [
- 3,
- 4
- ]
- ],
- [
- [
- 4503,
- 6786
- ],
- [
- -3,
- -10
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 5
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 4572,
- 6805
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 6,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 4522,
- 6798
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 4546,
- 6818
- ],
- [
- -3,
- -13
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 8
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 9
- ],
- [
- 6,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- -6,
- -9
- ]
- ],
- [
- [
- 4605,
- 6806
- ],
- [
- -4,
- -6
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 11
- ],
- [
- 4,
- 12
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -10
- ],
- [
- -1,
- -9
- ],
- [
- -8,
- -5
- ]
- ],
- [
- [
- 4504,
- 6825
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- -3,
- 11
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 4619,
- 6849
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -8
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -3
- ]
- ],
- [
- [
- 5044,
- 7411
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5040,
- 7425
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 6,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -4,
- -6
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 5087,
- 7476
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 12,
- 14
- ],
- [
- 3,
- 3
- ],
- [
- 7,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5119,
- 7479
- ],
- [
- -1,
- -1
- ],
- [
- -8,
- 7
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 4950,
- 7684
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 7,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -6
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 7,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 7,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -6
- ]
- ],
- [
- [
- 5047,
- 7632
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 5089,
- 7628
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -8
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -5
- ],
- [
- -19,
- -18
- ],
- [
- -5,
- -8
- ],
- [
- -2,
- -2
- ],
- [
- -14,
- -5
- ],
- [
- -10,
- -6
- ],
- [
- -5,
- -2
- ],
- [
- -6,
- -10
- ],
- [
- -3,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- -17
- ],
- [
- -6,
- -12
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -8
- ],
- [
- -7,
- -21
- ],
- [
- 0,
- -6
- ],
- [
- 4,
- -20
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 5,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -7
- ],
- [
- -9,
- -8
- ],
- [
- -4,
- -7
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -9
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -10,
- -1
- ],
- [
- -9,
- -10
- ],
- [
- -4,
- -9
- ],
- [
- -4,
- -16
- ],
- [
- -5,
- -10
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- 5
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- -3
- ],
- [
- -4,
- 2
- ],
- [
- -7,
- 1
- ],
- [
- -15,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -7
- ],
- [
- -8,
- -1
- ],
- [
- -6,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -8
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- 6
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 9
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- 7
- ],
- [
- -11,
- 14
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -6,
- -2
- ]
- ],
- [
- [
- 4794,
- 7325
- ],
- [
- -2,
- 15
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 7
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- 16
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 12
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 10,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 8
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 5
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- -2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 4756,
- 7600
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 9
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -5,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 6
- ],
- [
- 6,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -6
- ],
- [
- 5,
- -3
- ],
- [
- 5,
- 2
- ],
- [
- 8,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 7,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- 3
- ],
- [
- 5,
- -4
- ],
- [
- 10,
- -2
- ],
- [
- 6,
- -3
- ],
- [
- 16,
- -5
- ],
- [
- 6,
- 0
- ],
- [
- 8,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 10,
- -5
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- -3
- ],
- [
- 8,
- -5
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 5628,
- 8560
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 9,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -7,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -5,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 5648,
- 8556
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5636,
- 8572
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- -7
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- 11,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- -3,
- -1
- ]
- ],
- [
- [
- 5778,
- 8610
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -8
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -17
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5759,
- 8497
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -8,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -6,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -7,
- 6
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -9,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 5675,
- 8517
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 12
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 8,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- 5
- ],
- [
- 5,
- -1
- ],
- [
- 8,
- 4
- ],
- [
- 16,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 18,
- -5
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- -5
- ],
- [
- 4,
- -1
- ],
- [
- 10,
- 0
- ],
- [
- 15,
- -2
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 6192,
- 5817
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -9
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -10
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- -11
- ],
- [
- 4,
- -8
- ],
- [
- 1,
- -2
- ],
- [
- 8,
- -5
- ],
- [
- 9,
- -6
- ],
- [
- 7,
- -5
- ],
- [
- 10,
- -6
- ],
- [
- 9,
- -7
- ],
- [
- 8,
- -6
- ],
- [
- 12,
- -8
- ],
- [
- 10,
- -7
- ],
- [
- 8,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 9,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 9,
- 0
- ]
- ],
- [
- [
- 6332,
- 5644
- ],
- [
- -7,
- -13
- ],
- [
- -7,
- -16
- ],
- [
- -9,
- -16
- ],
- [
- -5,
- -11
- ],
- [
- -8,
- -16
- ],
- [
- -7,
- -14
- ],
- [
- -7,
- -15
- ],
- [
- -7,
- -14
- ],
- [
- -8,
- -19
- ],
- [
- -5,
- -12
- ],
- [
- -9,
- -19
- ],
- [
- -5,
- -12
- ],
- [
- -1,
- -1
- ],
- [
- -8,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -10,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- -6
- ],
- [
- -6,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -12,
- -5
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- -4
- ],
- [
- -3,
- -6
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 6163,
- 5413
- ],
- [
- -4,
- 0
- ],
- [
- -7,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- 7
- ],
- [
- -3,
- 5
- ],
- [
- -7,
- -6
- ],
- [
- -6,
- -5
- ],
- [
- -8,
- -8
- ],
- [
- -5,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -4,
- -10
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- -5,
- 6
- ],
- [
- -5,
- 7
- ],
- [
- -5,
- 8
- ],
- [
- -7,
- 8
- ],
- [
- -6,
- 9
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -8,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -7,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ]
- ],
- [
- [
- 5979,
- 5500
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 11
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 8
- ],
- [
- -2,
- 15
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- -5,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -6,
- 10
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 12
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 17
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 3
- ]
- ],
- [
- [
- 5946,
- 5729
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 12
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 16
- ],
- [
- 1,
- 8
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 12
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 11
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 9
- ],
- [
- 3,
- 11
- ],
- [
- 2,
- 8
- ],
- [
- 4,
- 14
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 11
- ],
- [
- 1,
- 10
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 12
- ],
- [
- 0,
- 9
- ],
- [
- 2,
- 15
- ]
- ],
- [
- [
- 5600,
- 8646
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 5606,
- 8648
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5615,
- 8661
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 5610,
- 8659
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5595,
- 8670
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -4
- ]
- ],
- [
- [
- 5589,
- 8826
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5690,
- 8927
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 5804,
- 9159
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 7,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -7,
- -14
- ],
- [
- -1,
- -2
- ],
- [
- 3,
- -8
- ],
- [
- 3,
- -10
- ],
- [
- 11,
- -4
- ],
- [
- 8,
- -3
- ],
- [
- 5,
- -8
- ],
- [
- 8,
- -10
- ],
- [
- 4,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -7
- ],
- [
- -5,
- -7
- ],
- [
- -5,
- -5
- ],
- [
- -5,
- -8
- ],
- [
- -4,
- -6
- ],
- [
- -5,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 5,
- -9
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 4,
- -14
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- -8
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 8,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 8,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- -8
- ],
- [
- -6,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 10,
- -10
- ],
- [
- 7,
- -5
- ],
- [
- 9,
- -7
- ],
- [
- 6,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -5
- ],
- [
- -7,
- -9
- ],
- [
- -11,
- -12
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -6
- ],
- [
- -8,
- -12
- ],
- [
- -2,
- -3
- ],
- [
- -7,
- -9
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -7,
- -9
- ],
- [
- -7,
- -7
- ],
- [
- -7,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -8,
- -8
- ],
- [
- -9,
- -12
- ]
- ],
- [
- [
- 5772,
- 8671
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -9,
- -2
- ],
- [
- -9,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- 2
- ],
- [
- -9,
- 6
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -5,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 7,
- 10
- ],
- [
- 1,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 7,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 7,
- 2
- ],
- [
- 7,
- 8
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 7,
- 8
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 6
- ],
- [
- 6,
- 7
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 6
- ],
- [
- 7,
- 8
- ],
- [
- 4,
- 9
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 7
- ],
- [
- -3,
- 4
- ],
- [
- -12,
- 7
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 0
- ]
- ],
- [
- [
- 5670,
- 8974
- ],
- [
- -3,
- 11
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 4,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -11,
- 4
- ],
- [
- -5,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -7,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -8,
- 3
- ]
- ],
- [
- [
- 5572,
- 9160
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- -7
- ],
- [
- 4,
- -7
- ],
- [
- 3,
- -2
- ],
- [
- 6,
- -8
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 9,
- -1
- ],
- [
- 7,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 7,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 4,
- 13
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- 6,
- 8
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 7,
- 5
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- -5
- ],
- [
- 6,
- -6
- ],
- [
- 4,
- -3
- ],
- [
- 10,
- -5
- ],
- [
- 10,
- -3
- ],
- [
- 5,
- -12
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -5,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 9850,
- 3934
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 36,
- 3993
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 41,
- 4080
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 9957,
- 4091
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 6,
- 4093
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 34,
- 4134
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 9981,
- 4141
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 28,
- 4148
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 49,
- 4150
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 9966,
- 4163
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 9951,
- 4183
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -9
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- 4
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 9983,
- 4184
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 29,
- 4189
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 9922,
- 4196
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 9999,
- 4207
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- -9997,
- 5
- ],
- [
- 9999,
- -10
- ]
- ],
- [
- [
- 0,
- 4217
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- 10
- ]
- ],
- [
- [
- 9999,
- 4231
- ],
- [
- 0,
- 1
- ],
- [
- -9999,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 9999,
- 0
- ]
- ],
- [
- [
- 9999,
- 4253
- ],
- [
- -4,
- -8
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -7
- ],
- [
- 4,
- 7
- ],
- [
- 4,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- -9995,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 9999,
- 0
- ]
- ],
- [
- [
- 9919,
- 4464
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 3342,
- 2175
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 3376,
- 2188
- ],
- [
- 1,
- -5
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 3305,
- 2201
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ]
- ],
- [
- [
- 3325,
- 2220
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -7
- ],
- [
- -6,
- -10
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 5
- ],
- [
- 6,
- 7
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -3
- ]
- ],
- [
- [
- 3330,
- 2223
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 3365,
- 2231
- ],
- [
- 4,
- -4
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -7
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -9,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -13,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- 4,
- -9
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -6
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 7,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 6,
- 8
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 6549,
- 3955
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -8
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 6254,
- 4436
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 3483,
- 5318
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 14
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 10
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 9
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 10
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 4
- ]
- ],
- [
- [
- 3495,
- 5492
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 15
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 11,
- -13
- ],
- [
- 5,
- -1
- ],
- [
- 10,
- -7
- ],
- [
- 4,
- -8
- ],
- [
- 9,
- -15
- ],
- [
- 4,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 3,
- 5
- ],
- [
- 5,
- -8
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -16
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 3310,
- 6019
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -7
- ]
- ],
- [
- [
- 3299,
- 6099
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3289,
- 6106
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 14
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -10
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3296,
- 6119
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 5,
- -6
- ],
- [
- -4,
- -1
- ]
- ],
- [
- [
- 5263,
- 7649
- ],
- [
- -1,
- -8
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -23
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -9
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -12
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -9
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 4967,
- 7828
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -5
- ]
- ],
- [
- [
- 5160,
- 8037
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 5195,
- 7829
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -4
- ],
- [
- 5,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 7,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 5208,
- 7705
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 5206,
- 7704
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5204,
- 7703
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -9,
- -12
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- 5
- ],
- [
- -7,
- 3
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -15,
- -15
- ],
- [
- -3,
- -7
- ],
- [
- -3,
- -9
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -14
- ],
- [
- 3,
- -8
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 4950,
- 7684
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 7
- ],
- [
- 4,
- 26
- ],
- [
- 3,
- 31
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- 28
- ],
- [
- 2,
- 10
- ],
- [
- 1,
- 11
- ],
- [
- 4,
- -4
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -13
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 17
- ],
- [
- -1,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- -8,
- 8
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 16
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -11,
- 10
- ],
- [
- -4,
- 10
- ],
- [
- -4,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- -6,
- 6
- ],
- [
- -11,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -11,
- 5
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -7,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 6,
- 4
- ],
- [
- 13,
- 5
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 7,
- 2
- ],
- [
- 6,
- -3
- ],
- [
- 6,
- -11
- ],
- [
- 3,
- -4
- ],
- [
- 7,
- 7
- ],
- [
- 10,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 11,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 23
- ],
- [
- -3,
- 6
- ],
- [
- -4,
- 10
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 7,
- 0
- ],
- [
- 10,
- -4
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 8,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 12,
- 9
- ],
- [
- 8,
- 3
- ],
- [
- 9,
- 5
- ],
- [
- 5,
- 5
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 25
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 14,
- 4
- ],
- [
- 3,
- 2
- ]
- ],
- [
- [
- 4813,
- 8723
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 4816,
- 8744
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 4800,
- 8763
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 4815,
- 8768
- ],
- [
- 0,
- -8
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 6
- ],
- [
- -5,
- 11
- ],
- [
- 6,
- 2
- ],
- [
- 5,
- -3
- ],
- [
- 4,
- -2
- ]
- ],
- [
- [
- 4822,
- 8770
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 9526,
- 5491
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 9397,
- 5576
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 9212,
- 5607
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 9218,
- 5612
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 8836,
- 5731
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 5309,
- 4958
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 10
- ],
- [
- -3,
- 6
- ],
- [
- -6,
- 9
- ],
- [
- -1,
- 7
- ],
- [
- -7,
- 15
- ],
- [
- -10,
- 16
- ],
- [
- -6,
- 13
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- -6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -3,
- 12
- ],
- [
- -3,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- 8,
- -18
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 9
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 5
- ],
- [
- -3,
- 13
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 19
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 13
- ],
- [
- 1,
- 16
- ],
- [
- 0,
- 10
- ],
- [
- -1,
- 10
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- 5
- ],
- [
- 5,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 9
- ],
- [
- -2,
- 12
- ],
- [
- 1,
- 2
- ]
- ],
- [
- [
- 5266,
- 5243
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 8,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 14
- ]
- ],
- [
- [
- 4970,
- 8103
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 4883,
- 8255
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -6
- ]
- ],
- [
- [
- 4827,
- 8299
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -5,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 7,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 4
- ]
- ],
- [
- [
- 4799,
- 8357
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -7
- ],
- [
- 3,
- -6
- ],
- [
- 5,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ]
- ],
- [
- [
- 4858,
- 8378
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 4829,
- 8405
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ]
- ],
- [
- [
- 4834,
- 8399
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- -6
- ],
- [
- -4,
- -11
- ]
- ],
- [
- [
- 4839,
- 8429
- ],
- [
- -11,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 8
- ],
- [
- -5,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -9
- ]
- ],
- [
- [
- 4816,
- 8443
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 4794,
- 8465
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 4825,
- 8465
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 4798,
- 8474
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -14
- ]
- ],
- [
- [
- 4829,
- 8496
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 8
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -7,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 6,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 4799,
- 8506
- ],
- [
- 4,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 4827,
- 8545
- ],
- [
- -3,
- -10
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- 4
- ],
- [
- 7,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 4913,
- 8554
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -5
- ],
- [
- -10,
- -10
- ],
- [
- -6,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -6,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- 4
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 17,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -14
- ],
- [
- -5,
- -8
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 7,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- -1
- ],
- [
- -6,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 16,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 4
- ],
- [
- 6,
- 0
- ],
- [
- 13,
- -7
- ],
- [
- 3,
- -6
- ],
- [
- 6,
- -8
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -13
- ],
- [
- 3,
- -14
- ],
- [
- 4,
- -14
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 11,
- -7
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -6
- ],
- [
- 4,
- -7
- ],
- [
- 4,
- -5
- ],
- [
- 4,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 4,
- -7
- ],
- [
- 3,
- -7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 12,
- -13
- ],
- [
- 4,
- -7
- ],
- [
- 2,
- -10
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- 6,
- -6
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 8,
- -8
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- -5
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -8,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -11,
- 3
- ],
- [
- -7,
- -1
- ],
- [
- -9,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- 2,
- -4
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -9,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -11,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 6,
- 3
- ],
- [
- 6,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 8,
- 11
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- 9
- ],
- [
- 1,
- 1
- ],
- [
- 9,
- 2
- ],
- [
- 6,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 9
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 8
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -6
- ],
- [
- -1,
- 0
- ],
- [
- -7,
- 1
- ],
- [
- -6,
- 7
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -4
- ],
- [
- -6,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 6,
- 2
- ],
- [
- 9,
- 7
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 9,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- -5
- ],
- [
- -1,
- 7
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- -7
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -5,
- 9
- ],
- [
- 0,
- 6
- ],
- [
- 3,
- 12
- ],
- [
- 6,
- 7
- ],
- [
- 6,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -10,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 9
- ],
- [
- 5,
- 12
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 7
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -7
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- -5,
- -22
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 11
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 13
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -10,
- -11
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 8
- ],
- [
- 1,
- 7
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 7,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -6,
- 8
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 7,
- 3
- ],
- [
- 9,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 6,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 4918,
- 8567
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 4912,
- 8570
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 4915,
- 8584
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 4929,
- 8595
- ],
- [
- -3,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 4924,
- 8593
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 4963,
- 8671
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -10
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- -2,
- 8
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 4971,
- 8669
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 5
- ],
- [
- 2,
- 7
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 4978,
- 8686
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 6206,
- 7552
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 1
- ]
- ],
- [
- [
- 6152,
- 7575
- ],
- [
- 6,
- 11
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 10
- ],
- [
- -3,
- 15
- ],
- [
- -2,
- 15
- ],
- [
- -2,
- 4
- ],
- [
- -8,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- -6,
- 7
- ],
- [
- -9,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -7,
- 10
- ],
- [
- -6,
- 6
- ]
- ],
- [
- [
- 6110,
- 7685
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 7,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 13,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 7,
- -5
- ],
- [
- 6,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -7
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -4
- ]
- ],
- [
- [
- 4930,
- 8035
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 4998,
- 5824
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -18
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -8
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -24
- ],
- [
- -3,
- -11
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 5032,
- 5535
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- -6,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -11,
- -1
- ],
- [
- -11,
- -10
- ],
- [
- -6,
- -4
- ],
- [
- -4,
- -7
- ],
- [
- -5,
- -4
- ],
- [
- -4,
- -5
- ],
- [
- -7,
- -3
- ],
- [
- -12,
- -8
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -6
- ],
- [
- -6,
- -7
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 7
- ],
- [
- -4,
- 3
- ],
- [
- -9,
- 5
- ],
- [
- -7,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 4914,
- 5479
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 4683,
- 5898
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 9
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 6,
- -5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -7
- ],
- [
- 3,
- -10
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -8
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -9
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 6,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 4764,
- 5619
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -7,
- -5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 4714,
- 5673
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 4,
- 8
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 8
- ],
- [
- -3,
- 8
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -7,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 4630,
- 5705
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 7
- ],
- [
- -4,
- 0
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -7,
- 7
- ],
- [
- -5,
- 17
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 6
- ]
- ],
- [
- [
- 4582,
- 5814
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 5,
- 19
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 6,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 5
- ]
- ],
- [
- [
- 4618,
- 5914
- ],
- [
- 9,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 4534,
- 5936
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 11
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -8,
- -2
- ],
- [
- -8,
- -1
- ],
- [
- -6,
- -6
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 7
- ]
- ],
- [
- [
- 4539,
- 5966
- ],
- [
- 8,
- 1
- ],
- [
- 8,
- 0
- ],
- [
- 9,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 8
- ],
- [
- 4,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -7
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -5,
- -2
- ],
- [
- -6,
- -4
- ],
- [
- -6,
- 2
- ],
- [
- -6,
- 5
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -9
- ],
- [
- -6,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 4558,
- 5822
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 4552,
- 5821
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 4563,
- 5830
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 4558,
- 5844
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -7
- ]
- ],
- [
- [
- 4568,
- 5848
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 4555,
- 5868
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 4582,
- 5814
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 8
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -5,
- -4
- ],
- [
- -3,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- -3
- ],
- [
- -4,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -8,
- 8
- ]
- ],
- [
- [
- 4535,
- 5895
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 9,
- -1
- ],
- [
- 7,
- 3
- ],
- [
- 5,
- 6
- ],
- [
- 5,
- 5
- ],
- [
- 7,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- 9,
- 0
- ]
- ],
- [
- [
- 5266,
- 5243
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 9
- ],
- [
- 1,
- 8
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 10
- ],
- [
- 3,
- 8
- ],
- [
- -1,
- 8
- ],
- [
- 1,
- 14
- ]
- ],
- [
- [
- 5242,
- 5400
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -4,
- -13
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 1
- ]
- ],
- [
- [
- 5662,
- 7231
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -9
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -11,
- -3
- ],
- [
- -12,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -13,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 5754,
- 7227
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- 3,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 5640,
- 7268
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 5773,
- 7253
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 7,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -10
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -7
- ]
- ],
- [
- [
- 5707,
- 7280
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5734,
- 7291
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 5773,
- 7289
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 5681,
- 7301
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ]
- ],
- [
- [
- 5704,
- 7296
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -4
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5748,
- 7299
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 5718,
- 7303
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -5
- ]
- ],
- [
- [
- 5686,
- 7310
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 5750,
- 7313
- ],
- [
- -3,
- -1
- ],
- [
- 1,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5702,
- 7319
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5709,
- 7313
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 4,
- 7
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 5681,
- 7322
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 5678,
- 7335
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5692,
- 7343
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5705,
- 7339
- ],
- [
- -3,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 5722,
- 7345
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- -3
- ]
- ],
- [
- [
- 5701,
- 7349
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 5676,
- 7348
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 5745,
- 7362
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ]
- ],
- [
- [
- 5580,
- 7361
- ],
- [
- 3,
- -5
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 5694,
- 7359
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 5654,
- 7368
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 5572,
- 7395
- ],
- [
- 0,
- -7
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 5576,
- 7392
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5724,
- 7385
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -10
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 5574,
- 7408
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -10
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 5685,
- 7419
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -4
- ]
- ],
- [
- [
- 5650,
- 7428
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- -5
- ],
- [
- 6,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -4
- ]
- ],
- [
- [
- 5660,
- 7437
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- 5,
- -5
- ]
- ],
- [
- [
- 5663,
- 7439
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5733,
- 7449
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 5557,
- 7455
- ],
- [
- 1,
- -3
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- -5,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5706,
- 7487
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 5713,
- 7512
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 5
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 5688,
- 7523
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 5723,
- 7530
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- -10,
- 3
- ],
- [
- -5,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -6
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -7
- ],
- [
- -5,
- -4
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- 12
- ],
- [
- -7,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 6,
- -7
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- 4
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- -6,
- 5
- ],
- [
- -6,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -9
- ],
- [
- 1,
- -5
- ],
- [
- 7,
- -14
- ],
- [
- 2,
- -10
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -7
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -5,
- 4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 3,
- 0
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 7,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -8
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -8
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -11
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 6
- ],
- [
- -4,
- 6
- ],
- [
- -5,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -7,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -8
- ],
- [
- 2,
- -6
- ],
- [
- 4,
- -16
- ],
- [
- 2,
- -9
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -8
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 9
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -12
- ],
- [
- 0,
- -7
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- -4,
- 10
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -5,
- 7
- ],
- [
- -4,
- 13
- ],
- [
- 0,
- 6
- ],
- [
- 3,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- -3,
- 9
- ],
- [
- -5,
- 6
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 7
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 10
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- -8
- ],
- [
- 9,
- -4
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -5,
- 6
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -7,
- 3
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 8
- ],
- [
- -4,
- 7
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 6
- ],
- [
- -5,
- 4
- ],
- [
- -3,
- 13
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 4
- ]
- ],
- [
- [
- 5582,
- 7537
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 5,
- 10
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 5731,
- 7587
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 3285,
- 5876
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -10
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 3714,
- 8685
- ],
- [
- -3,
- -7
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- 11,
- 7
- ],
- [
- 5,
- 2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 3971,
- 8958
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 3583,
- 9190
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 7,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3535,
- 9213
- ],
- [
- 9,
- -5
- ],
- [
- 10,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -18,
- -7
- ],
- [
- -7,
- -1
- ],
- [
- -16,
- -5
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -10,
- 0
- ],
- [
- -7,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- 11
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 9,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- -9,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 9,
- 4
- ],
- [
- 10,
- -1
- ],
- [
- 18,
- -5
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- -4
- ],
- [
- 10,
- -11
- ]
- ],
- [
- [
- 3564,
- 9265
- ],
- [
- -3,
- 0
- ],
- [
- -9,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 4293,
- 9269
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -11,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -5,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -7,
- 3
- ],
- [
- -14,
- -2
- ],
- [
- -17,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 10,
- 1
- ],
- [
- 8,
- 3
- ],
- [
- 14,
- 7
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 3513,
- 9276
- ],
- [
- -3,
- -1
- ],
- [
- -7,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 5
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 3471,
- 9376
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -7,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 9,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 4500,
- 9527
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -3
- ],
- [
- 8,
- 0
- ],
- [
- 2,
- -6
- ],
- [
- -5,
- -3
- ],
- [
- -21,
- 1
- ],
- [
- -9,
- 0
- ],
- [
- -6,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 6,
- 4
- ],
- [
- 5,
- -3
- ],
- [
- 6,
- 2
- ],
- [
- 7,
- 2
- ]
- ],
- [
- [
- 4483,
- 9564
- ],
- [
- -3,
- -2
- ],
- [
- -11,
- 24
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 6
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- -13
- ],
- [
- 2,
- -21
- ]
- ],
- [
- [
- 3009,
- 9638
- ],
- [
- -10,
- -1
- ],
- [
- -10,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- -6,
- -1
- ]
- ],
- [
- [
- 4501,
- 9656
- ],
- [
- -6,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 7,
- 9
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -6,
- -4
- ]
- ],
- [
- [
- 4472,
- 9675
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 9
- ],
- [
- 6,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -8
- ],
- [
- 2,
- -6
- ],
- [
- -3,
- -8
- ]
- ],
- [
- [
- 4510,
- 9782
- ],
- [
- -11,
- -7
- ],
- [
- -18,
- 1
- ],
- [
- -10,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- 4,
- 5
- ],
- [
- 12,
- 4
- ],
- [
- 16,
- 3
- ],
- [
- 14,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- -6,
- -6
- ]
- ],
- [
- [
- 4481,
- 9898
- ],
- [
- -3,
- -2
- ],
- [
- -7,
- 1
- ],
- [
- -9,
- 5
- ],
- [
- -7,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- 7,
- -4
- ],
- [
- 7,
- -6
- ],
- [
- 4,
- -6
- ]
- ],
- [
- [
- 3753,
- 9912
- ],
- [
- -5,
- -1
- ],
- [
- -12,
- 6
- ],
- [
- -19,
- 6
- ],
- [
- -16,
- 4
- ],
- [
- -15,
- 11
- ],
- [
- -2,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 13,
- 0
- ],
- [
- 11,
- 2
- ],
- [
- 27,
- -7
- ],
- [
- 14,
- -5
- ],
- [
- 5,
- -5
- ],
- [
- -1,
- -9
- ],
- [
- -3,
- -9
- ]
- ],
- [
- [
- 4168,
- 9997
- ],
- [
- 26,
- -3
- ],
- [
- 14,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 19,
- -2
- ],
- [
- 19,
- -2
- ],
- [
- 30,
- -5
- ],
- [
- 4,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -8,
- -1
- ],
- [
- -38,
- -1
- ],
- [
- -70,
- -2
- ],
- [
- -40,
- -4
- ],
- [
- -13,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- 5,
- -1
- ],
- [
- 9,
- 1
- ],
- [
- 32,
- 6
- ],
- [
- 11,
- 1
- ],
- [
- 22,
- -1
- ],
- [
- 29,
- -2
- ],
- [
- 11,
- 1
- ],
- [
- 21,
- -1
- ],
- [
- 23,
- 2
- ],
- [
- 29,
- 4
- ],
- [
- 7,
- -8
- ],
- [
- 11,
- -9
- ],
- [
- 8,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 8,
- 1
- ],
- [
- 25,
- -3
- ],
- [
- 17,
- -4
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -10,
- -4
- ],
- [
- -14,
- -5
- ],
- [
- -18,
- -3
- ],
- [
- -20,
- -3
- ],
- [
- -159,
- -7
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- 3,
- -6
- ],
- [
- 7,
- -1
- ],
- [
- 17,
- 4
- ],
- [
- 30,
- 3
- ],
- [
- 22,
- 0
- ],
- [
- 53,
- -3
- ],
- [
- 16,
- -7
- ],
- [
- 8,
- -10
- ],
- [
- 18,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 11,
- 1
- ],
- [
- 27,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 5,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -8,
- -10
- ],
- [
- -6,
- -5
- ],
- [
- -6,
- -3
- ],
- [
- -13,
- -9
- ],
- [
- -4,
- -2
- ],
- [
- -14,
- -10
- ],
- [
- -4,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 20,
- 6
- ],
- [
- 4,
- 2
- ],
- [
- 14,
- 8
- ],
- [
- 8,
- 2
- ],
- [
- 7,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 21,
- 15
- ],
- [
- 10,
- 4
- ],
- [
- 12,
- 0
- ],
- [
- 2,
- -7
- ],
- [
- 13,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- 9,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 8,
- -2
- ],
- [
- 6,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 6
- ],
- [
- 8,
- 4
- ],
- [
- 8,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 11,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 27,
- -1
- ],
- [
- 15,
- -1
- ],
- [
- 21,
- -4
- ],
- [
- 14,
- -2
- ],
- [
- 7,
- -2
- ],
- [
- 10,
- -4
- ],
- [
- 7,
- -5
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -19,
- -7
- ],
- [
- -7,
- -4
- ],
- [
- -18,
- -9
- ],
- [
- -9,
- -3
- ],
- [
- -10,
- -1
- ],
- [
- -11,
- 0
- ],
- [
- -7,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -20,
- -3
- ],
- [
- -9,
- -4
- ],
- [
- -13,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -12,
- -4
- ],
- [
- 5,
- -4
- ],
- [
- 4,
- -1
- ],
- [
- 14,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -7,
- -3
- ],
- [
- -8,
- -5
- ],
- [
- -11,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -10,
- -1
- ],
- [
- -9,
- 0
- ],
- [
- -18,
- 2
- ],
- [
- -9,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -9,
- -6
- ],
- [
- -5,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 9,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -12,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -14,
- -9
- ],
- [
- -1,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -6,
- -10
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -7
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 4,
- -4
- ],
- [
- 6,
- 3
- ],
- [
- 7,
- 9
- ],
- [
- 7,
- 3
- ],
- [
- 8,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 9,
- -4
- ],
- [
- 8,
- -2
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -12,
- 5
- ],
- [
- -5,
- 2
- ],
- [
- -8,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- 6,
- -10
- ],
- [
- 7,
- -5
- ],
- [
- 11,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 3
- ],
- [
- 9,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -9,
- 2
- ],
- [
- -10,
- 3
- ],
- [
- -6,
- 1
- ],
- [
- -12,
- -1
- ],
- [
- -12,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -18,
- -9
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 3
- ],
- [
- -7,
- 3
- ],
- [
- -4,
- 0
- ],
- [
- -6,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 8,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -10
- ],
- [
- 5,
- -6
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- 1
- ],
- [
- 8,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 7,
- -6
- ],
- [
- -3,
- -7
- ],
- [
- 4,
- -6
- ],
- [
- 7,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -5,
- 3
- ],
- [
- -7,
- 1
- ],
- [
- -12,
- -9
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -7,
- -2
- ],
- [
- -6,
- 1
- ],
- [
- -10,
- 5
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 8,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 7,
- 5
- ],
- [
- 2,
- 7
- ],
- [
- 3,
- 7
- ],
- [
- 6,
- 3
- ],
- [
- 6,
- -3
- ],
- [
- 6,
- -7
- ],
- [
- 7,
- -13
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -11,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- -12,
- -4
- ],
- [
- -13,
- -2
- ],
- [
- -13,
- 3
- ],
- [
- -10,
- 5
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 7
- ],
- [
- -5,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- 2,
- -8
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -4
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 19,
- 0
- ],
- [
- 8,
- -1
- ],
- [
- 18,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- -10
- ],
- [
- -2,
- -9
- ],
- [
- -4,
- -2
- ],
- [
- -19,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -9,
- -4
- ],
- [
- -9,
- -5
- ],
- [
- -4,
- 0
- ],
- [
- -18,
- 4
- ],
- [
- -7,
- 3
- ],
- [
- -14,
- 9
- ],
- [
- -11,
- 13
- ],
- [
- -6,
- -6
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- 5
- ],
- [
- -7,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 11,
- -9
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -8,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -9,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- 4
- ],
- [
- -10,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -8,
- 4
- ],
- [
- 3,
- -4
- ],
- [
- 16,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 4
- ],
- [
- 4,
- 0
- ],
- [
- 8,
- -1
- ],
- [
- 9,
- 3
- ],
- [
- 7,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 17,
- 4
- ],
- [
- 4,
- 5
- ],
- [
- 6,
- 2
- ],
- [
- 13,
- 2
- ],
- [
- 12,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 7,
- -4
- ],
- [
- 6,
- -3
- ],
- [
- 7,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 11,
- -5
- ],
- [
- 7,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -12
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -13
- ],
- [
- -5,
- -3
- ],
- [
- 1,
- -7
- ],
- [
- -2,
- -6
- ],
- [
- -5,
- 2
- ],
- [
- -6,
- 4
- ],
- [
- -14,
- 6
- ],
- [
- -13,
- 3
- ],
- [
- -5,
- 4
- ],
- [
- -6,
- 3
- ],
- [
- -8,
- 10
- ],
- [
- -5,
- 14
- ],
- [
- -3,
- 7
- ],
- [
- -4,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -17,
- -4
- ],
- [
- -6,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -13,
- -5
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 11,
- 5
- ],
- [
- 9,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 7,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- -17
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -8,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 7,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 5,
- -2
- ],
- [
- 13,
- -7
- ],
- [
- 5,
- -3
- ],
- [
- 9,
- -3
- ],
- [
- 9,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 9,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -8
- ],
- [
- 3,
- -1
- ],
- [
- 9,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -8,
- -7
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 4
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -8
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -11
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -12
- ],
- [
- 2,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -9,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -9,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 12
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -13
- ],
- [
- -3,
- -3
- ],
- [
- -7,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -13,
- 6
- ],
- [
- -5,
- 5
- ],
- [
- -5,
- 8
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 7
- ],
- [
- -4,
- 6
- ],
- [
- -5,
- 4
- ],
- [
- -6,
- 4
- ],
- [
- -7,
- 3
- ],
- [
- -6,
- 3
- ],
- [
- -5,
- 4
- ],
- [
- -6,
- 4
- ],
- [
- -6,
- 2
- ],
- [
- -10,
- 1
- ],
- [
- -13,
- 0
- ],
- [
- -9,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 10,
- -2
- ],
- [
- 8,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -8,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -12,
- -5
- ],
- [
- -4,
- -1
- ],
- [
- -9,
- 0
- ],
- [
- -8,
- 1
- ],
- [
- -10,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -12,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -8,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -14,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 9,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 14,
- -4
- ],
- [
- 12,
- 0
- ],
- [
- 24,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -8,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -6,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- 7,
- -2
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 3
- ],
- [
- 7,
- 3
- ],
- [
- 10,
- -2
- ],
- [
- 7,
- 2
- ],
- [
- 15,
- 6
- ],
- [
- 2,
- 0
- ],
- [
- 22,
- -3
- ],
- [
- 20,
- -7
- ],
- [
- 10,
- -2
- ],
- [
- 14,
- -2
- ],
- [
- 25,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -9,
- -3
- ],
- [
- -7,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -8,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -8,
- -6
- ],
- [
- -3,
- -1
- ],
- [
- -8,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -5,
- -5
- ],
- [
- -8,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- -4
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -8,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -16,
- -5
- ],
- [
- -8,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -14,
- -5
- ],
- [
- -6,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -8,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- 0
- ],
- [
- -11,
- 3
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- -7,
- 3
- ],
- [
- -9,
- 6
- ],
- [
- -11,
- 9
- ],
- [
- -5,
- 3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -13,
- -10
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -8
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -8,
- -13
- ],
- [
- -6,
- -13
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -13,
- -9
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -7,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -11
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- -4
- ],
- [
- -6,
- -7
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -8
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 4,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 8,
- 13
- ],
- [
- 6,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- -8,
- 1
- ],
- [
- -7,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- 4,
- -4
- ],
- [
- 7,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -9
- ],
- [
- -2,
- -4
- ],
- [
- -7,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- 2,
- -5
- ],
- [
- 6,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- -12,
- -5
- ],
- [
- -12,
- -1
- ],
- [
- -9,
- -2
- ],
- [
- -15,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 15,
- -9
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- -3
- ],
- [
- -11,
- 3
- ],
- [
- -6,
- -2
- ],
- [
- -6,
- 2
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -7
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- -5
- ],
- [
- 2,
- -9
- ],
- [
- 5,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- -5
- ],
- [
- -6,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -11,
- 1
- ],
- [
- 11,
- -7
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- -1,
- -12
- ],
- [
- 3,
- -10
- ],
- [
- 0,
- -2
- ],
- [
- -6,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 8,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- -9
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -7,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -9,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 6,
- -3
- ],
- [
- 9,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -8
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 7,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -10
- ],
- [
- -4,
- -17
- ],
- [
- -2,
- -17
- ],
- [
- -9,
- -14
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -7,
- 3
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 7,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -12
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -8,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -8,
- 4
- ],
- [
- 0,
- -2
- ],
- [
- 6,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 7
- ],
- [
- 2,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -7
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -16,
- 8
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -9,
- -9
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 9
- ],
- [
- 3,
- 12
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -8,
- -4
- ],
- [
- -8,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 8,
- 5
- ],
- [
- 4,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -8,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -9,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -8,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 6
- ],
- [
- 8,
- 8
- ],
- [
- -9,
- -4
- ],
- [
- -7,
- -8
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -5,
- 11
- ],
- [
- -8,
- 11
- ],
- [
- -2,
- 7
- ],
- [
- 2,
- 9
- ],
- [
- -2,
- 5
- ],
- [
- 7,
- 3
- ],
- [
- 11,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -5
- ],
- [
- -10,
- -4
- ],
- [
- -8,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 5,
- 6
- ],
- [
- 4,
- 9
- ],
- [
- 5,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -8
- ],
- [
- 5,
- -2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -4,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -9
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -6,
- -10
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- -3,
- 15
- ],
- [
- -1,
- 6
- ],
- [
- -5,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 8,
- 4
- ],
- [
- 6,
- 5
- ],
- [
- 7,
- 8
- ],
- [
- 3,
- 3
- ],
- [
- 10,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -7,
- 0
- ],
- [
- -9,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -8,
- -6
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- 8
- ],
- [
- -6,
- -2
- ],
- [
- -5,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 10
- ],
- [
- 3,
- 12
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 9,
- 5
- ],
- [
- 14,
- 11
- ],
- [
- 6,
- 5
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 7,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -3
- ],
- [
- -7,
- -5
- ],
- [
- -5,
- -4
- ],
- [
- -16,
- -14
- ],
- [
- -8,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -7,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 12,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -10,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 9
- ],
- [
- 2,
- 11
- ],
- [
- 0,
- 5
- ],
- [
- 7,
- 5
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 7,
- 5
- ],
- [
- 9,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 13,
- -5
- ],
- [
- 7,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 13,
- -8
- ],
- [
- 3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -15,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -10,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -9,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -7,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -12,
- -11
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- 3,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 7,
- 8
- ],
- [
- 4,
- 8
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 13,
- -3
- ],
- [
- 11,
- -4
- ],
- [
- 7,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -5,
- -6
- ],
- [
- -4,
- -1
- ],
- [
- -11,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -9,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -11,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 12
- ],
- [
- 4,
- 3
- ],
- [
- 8,
- 2
- ],
- [
- 9,
- 0
- ],
- [
- 14,
- -9
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 9,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- 3,
- 12
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 8,
- 0
- ],
- [
- 11,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- -6,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 5,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 7,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -7,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -18,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -7,
- 6
- ],
- [
- -5,
- 3
- ],
- [
- -7,
- 4
- ],
- [
- -10,
- 3
- ],
- [
- -11,
- 2
- ],
- [
- -7,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -6,
- 6
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 9,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- 8,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- -3
- ],
- [
- 17,
- -10
- ],
- [
- 7,
- -4
- ],
- [
- 4,
- 0
- ],
- [
- 12,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 1
- ],
- [
- -7,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -7,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -5,
- 4
- ],
- [
- -12,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 22,
- 6
- ],
- [
- 6,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -13,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- -3
- ],
- [
- -7,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -5,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -10,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -7,
- 2
- ],
- [
- -7,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 10
- ],
- [
- 4,
- 9
- ],
- [
- 10,
- 9
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -12,
- -12
- ],
- [
- -7,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 9,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -6,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -8,
- -1
- ],
- [
- -7,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- -7,
- 5
- ],
- [
- -8,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -5,
- 3
- ],
- [
- -12,
- 5
- ],
- [
- -5,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -9,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 9,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -5,
- 2
- ],
- [
- -6,
- 3
- ],
- [
- -5,
- 2
- ],
- [
- -7,
- 2
- ],
- [
- -13,
- 6
- ],
- [
- -19,
- 6
- ],
- [
- -9,
- 3
- ],
- [
- -5,
- 2
- ],
- [
- -7,
- 0
- ],
- [
- -13,
- 3
- ],
- [
- -11,
- 1
- ],
- [
- -7,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 4
- ],
- [
- -8,
- 2
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- -4
- ],
- [
- -6,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -6,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -7,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 6,
- -6
- ],
- [
- 5,
- -4
- ],
- [
- -5,
- -1
- ],
- [
- -36,
- 6
- ],
- [
- -5,
- 2
- ],
- [
- -7,
- 3
- ],
- [
- -5,
- 2
- ],
- [
- -10,
- 5
- ],
- [
- -7,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 15,
- 8
- ],
- [
- 5,
- 1
- ],
- [
- 12,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -16,
- 0
- ],
- [
- -13,
- 1
- ],
- [
- -12,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -15,
- -7
- ],
- [
- -6,
- -3
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -8,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- 1
- ],
- [
- 27,
- 2
- ],
- [
- 19,
- -2
- ],
- [
- 6,
- 7
- ],
- [
- 4,
- 2
- ],
- [
- 13,
- 2
- ],
- [
- 20,
- 0
- ],
- [
- 13,
- -1
- ],
- [
- 7,
- -2
- ],
- [
- 9,
- -3
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -7,
- 4
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- -3
- ],
- [
- -10,
- -5
- ],
- [
- -5,
- -1
- ],
- [
- -8,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -7,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -17,
- 4
- ],
- [
- -4,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -6,
- 3
- ],
- [
- -6,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 7,
- 5
- ],
- [
- 6,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -8,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- -1
- ],
- [
- -8,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -11,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -10,
- 5
- ],
- [
- -5,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 7,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 6,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 10,
- 2
- ],
- [
- 10,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 13,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 12,
- 3
- ],
- [
- 27,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 12,
- 3
- ],
- [
- 9,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 21,
- 1
- ],
- [
- 10,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 8,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 5
- ],
- [
- 5,
- 9
- ],
- [
- 3,
- 9
- ],
- [
- 3,
- 8
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 8,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -6,
- -2
- ],
- [
- -7,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -7,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -9,
- 3
- ],
- [
- -4,
- 0
- ],
- [
- -11,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 4,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 10,
- 7
- ],
- [
- 7,
- 3
- ],
- [
- 7,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 8,
- 5
- ],
- [
- 8,
- 4
- ],
- [
- 11,
- 7
- ],
- [
- 5,
- 2
- ],
- [
- 17,
- 4
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 11,
- -7
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 8
- ],
- [
- 1,
- 4
- ],
- [
- 6,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 10,
- -2
- ],
- [
- 7,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 7,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 11,
- 3
- ],
- [
- 9,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- -2
- ],
- [
- 10,
- -1
- ],
- [
- 9,
- -3
- ],
- [
- 15,
- -8
- ],
- [
- 9,
- -4
- ],
- [
- 8,
- -2
- ],
- [
- 8,
- -3
- ],
- [
- 12,
- -6
- ],
- [
- 6,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 4
- ],
- [
- -8,
- 4
- ],
- [
- -19,
- 7
- ],
- [
- -11,
- 6
- ],
- [
- -9,
- 6
- ],
- [
- -7,
- 3
- ],
- [
- -13,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 15,
- 5
- ],
- [
- 27,
- 5
- ],
- [
- 32,
- 3
- ],
- [
- 10,
- 0
- ],
- [
- 19,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 17,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- 8,
- -1
- ],
- [
- 8,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -18
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- 3,
- 4
- ],
- [
- 7,
- 0
- ],
- [
- 28,
- -14
- ],
- [
- 11,
- -3
- ],
- [
- 13,
- -7
- ],
- [
- 15,
- 1
- ],
- [
- 13,
- -1
- ],
- [
- 7,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -19,
- 9
- ],
- [
- -9,
- 7
- ],
- [
- -6,
- 8
- ],
- [
- -2,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- 22,
- 0
- ],
- [
- 32,
- -4
- ],
- [
- 42,
- -13
- ],
- [
- 21,
- -5
- ],
- [
- 37,
- -15
- ],
- [
- 11,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 9
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- -3,
- 6
- ],
- [
- -7,
- 4
- ],
- [
- -27,
- 11
- ],
- [
- 0,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 67,
- -2
- ],
- [
- 11,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 15,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -78,
- 4
- ],
- [
- -15,
- 2
- ],
- [
- -7,
- 0
- ],
- [
- -8,
- -1
- ],
- [
- -16,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -9,
- 6
- ],
- [
- 8,
- 6
- ],
- [
- 7,
- 0
- ],
- [
- 14,
- -3
- ],
- [
- 8,
- 4
- ],
- [
- 13,
- 3
- ],
- [
- 13,
- 1
- ],
- [
- 28,
- 6
- ],
- [
- 5,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 15,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 7,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 9,
- 5
- ],
- [
- 8,
- 5
- ],
- [
- 10,
- 4
- ],
- [
- 13,
- -2
- ],
- [
- 8,
- -3
- ],
- [
- 8,
- -3
- ],
- [
- 10,
- -1
- ],
- [
- 18,
- -11
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -15,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 10,
- -2
- ],
- [
- 9,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 32,
- 0
- ],
- [
- 8,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 8,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 8,
- -2
- ],
- [
- 9,
- 0
- ],
- [
- 12,
- 3
- ],
- [
- 11,
- 1
- ],
- [
- 64,
- 0
- ],
- [
- 21,
- -2
- ]
- ],
- [
- [
- 2530,
- 6099
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 10,
- -13
- ]
- ],
- [
- [
- 2549,
- 6090
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -5,
- -8
- ],
- [
- -4,
- -6
- ],
- [
- -4,
- -7
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 2517,
- 6014
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 2497,
- 5975
- ],
- [
- -11,
- 9
- ],
- [
- -3,
- 2
- ],
- [
- -15,
- 0
- ],
- [
- -7,
- 4
- ],
- [
- -7,
- 7
- ],
- [
- -5,
- 6
- ],
- [
- -11,
- 19
- ]
- ],
- [
- [
- 2438,
- 6022
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -3,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 10
- ],
- [
- 3,
- 12
- ],
- [
- 4,
- 13
- ],
- [
- 3,
- 8
- ],
- [
- 8,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 7
- ],
- [
- -3,
- 7
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 11
- ],
- [
- 10,
- 0
- ],
- [
- 13,
- 0
- ],
- [
- 12,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 6,
- 0
- ]
- ],
- [
- [
- 9020,
- 5948
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- 4,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -4,
- -9
- ],
- [
- -1,
- -8
- ]
- ],
- [
- [
- 3411,
- 5503
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -8
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -8
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 3312,
- 5483
- ],
- [
- -5,
- 14
- ],
- [
- -6,
- 14
- ],
- [
- -6,
- 13
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 10
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -5,
- 14
- ]
- ],
- [
- [
- 3333,
- 5676
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -9
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -6
- ],
- [
- 7,
- -10
- ],
- [
- 11,
- -20
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -8
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -17
- ],
- [
- -3,
- -11
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -12
- ],
- [
- -2,
- -6
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 11
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -11
- ],
- [
- 5,
- -9
- ],
- [
- 2,
- -7
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -12
- ],
- [
- -1,
- -19
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 8172,
- 6463
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 8166,
- 6463
- ],
- [
- -4,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 8173,
- 6482
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 7047,
- 2123
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 2690,
- 6047
- ],
- [
- -7,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -13
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- -1
- ]
- ],
- [
- [
- 2574,
- 5931
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ]
- ],
- [
- [
- 2560,
- 5956
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- 3
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 2549,
- 6090
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 11,
- -4
- ],
- [
- 4,
- 2
- ],
- [
- 8,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 8,
- -6
- ],
- [
- 9,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 9,
- -6
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 7,
- -3
- ],
- [
- 14,
- -22
- ],
- [
- 0,
- -2
- ],
- [
- -6,
- 7
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 8,
- -7
- ],
- [
- 2,
- -10
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 2599,
- 6127
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- -5,
- -3
- ]
- ],
- [
- [
- 2614,
- 6132
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 5489,
- 7647
- ],
- [
- 3,
- -4
- ],
- [
- -11,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -2
- ]
- ],
- [
- [
- 5462,
- 7660
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ]
- ],
- [
- [
- 5512,
- 7635
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 5514,
- 7628
- ],
- [
- -5,
- 5
- ],
- [
- -5,
- 6
- ],
- [
- -9,
- 10
- ],
- [
- -7,
- 2
- ],
- [
- -9,
- 8
- ],
- [
- -6,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 14,
- -10
- ],
- [
- -2,
- 3
- ]
- ],
- [
- [
- 5477,
- 7668
- ],
- [
- -2,
- -1
- ],
- [
- -12,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 10,
- -2
- ],
- [
- 4,
- -1
- ]
- ],
- [
- [
- 5466,
- 7676
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 5426,
- 7717
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 5423,
- 7722
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- -5
- ]
- ],
- [
- [
- 5421,
- 7714
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -7,
- 12
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- -3
- ],
- [
- 6,
- -11
- ]
- ],
- [
- [
- 5421,
- 7737
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -4,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -6
- ],
- [
- 4,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 5411,
- 7762
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 5402,
- 7756
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -8
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5411,
- 7774
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -6
- ]
- ],
- [
- [
- 5525,
- 7829
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- -10
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5488,
- 7657
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 9
- ],
- [
- -6,
- 6
- ],
- [
- -6,
- 10
- ],
- [
- -8,
- 4
- ],
- [
- -6,
- 5
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -5,
- 4
- ],
- [
- -4,
- 6
- ],
- [
- -9,
- 15
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -8,
- 13
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 9
- ],
- [
- -2,
- 6
- ],
- [
- -6,
- 9
- ],
- [
- -2,
- 4
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- -4,
- -9
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -6
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 9
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 14
- ],
- [
- 2,
- 3
- ]
- ],
- [
- [
- 5377,
- 7806
- ],
- [
- 1,
- -3
- ],
- [
- 7,
- -3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 5458,
- 7862
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 9,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 2977,
- 6265
- ],
- [
- 0,
- -4
- ],
- [
- -7,
- 5
- ],
- [
- -6,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -5
- ]
- ],
- [
- [
- 3006,
- 6223
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -12,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -8,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -6,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 11
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 19,
- -4
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -5,
- 9
- ],
- [
- -5,
- 10
- ],
- [
- 2,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- -4,
- 4
- ],
- [
- -6,
- 5
- ],
- [
- -7,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 7,
- -2
- ],
- [
- 6,
- -5
- ],
- [
- 6,
- -4
- ],
- [
- 7,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 2
- ]
- ],
- [
- [
- 2981,
- 6338
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 5614,
- 7972
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5635,
- 7945
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -7
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -9
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 5562,
- 7840
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 5458,
- 7862
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -6,
- 0
- ]
- ],
- [
- [
- 5476,
- 7949
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -6
- ],
- [
- 4,
- -4
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 10,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 10,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 5,
- 5
- ],
- [
- 4,
- 11
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 10,
- 3
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 8414,
- 4555
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 6,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -7
- ],
- [
- -6,
- -4
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 8385,
- 4574
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 8427,
- 4590
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 8333,
- 4644
- ],
- [
- 1,
- -3
- ],
- [
- 5,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- -6,
- 8
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -8,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 8473,
- 4636
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -9
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 5
- ],
- [
- 4,
- 9
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 2
- ]
- ],
- [
- [
- 8445,
- 4646
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ]
- ],
- [
- [
- 8456,
- 4654
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 5
- ],
- [
- 1,
- 2
- ]
- ],
- [
- [
- 8469,
- 4669
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -7
- ]
- ],
- [
- [
- 8211,
- 4679
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8415,
- 4692
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 8318,
- 4680
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 8425,
- 4703
- ],
- [
- -1,
- -3
- ],
- [
- -7,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 8239,
- 4688
- ],
- [
- -3,
- -12
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -6,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 10
- ],
- [
- 5,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -3,
- -13
- ]
- ],
- [
- [
- 8452,
- 4704
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 9
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 8442,
- 4707
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 6
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 8857,
- 4701
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -9
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8265,
- 4702
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -10
- ]
- ],
- [
- [
- 8307,
- 4709
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 8460,
- 4715
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -18,
- -6
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 8550,
- 4717
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -5,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 8410,
- 4688
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- -7
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 4
- ],
- [
- -6,
- 3
- ],
- [
- -7,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- -7
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- -5,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -10
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 8634,
- 4705
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- 4
- ],
- [
- 6,
- 11
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 8284,
- 4705
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- -8
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -5
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -7,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 9
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 8206,
- 4714
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -9
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -6,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -2
- ]
- ],
- [
- [
- 8606,
- 4726
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8521,
- 4742
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 8
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 8539,
- 4745
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 8847,
- 4707
- ],
- [
- -6,
- -7
- ],
- [
- -9,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 4,
- 19
- ],
- [
- 5,
- 17
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 7,
- 4
- ],
- [
- 6,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- -3,
- -11
- ],
- [
- -3,
- -10
- ],
- [
- -5,
- -8
- ],
- [
- -2,
- -5
- ]
- ],
- [
- [
- 8647,
- 4723
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -10
- ],
- [
- -2,
- -10
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 8665,
- 4769
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- -6
- ]
- ],
- [
- [
- 8177,
- 4773
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8573,
- 4770
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8354,
- 4774
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8162,
- 4775
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 6,
- 2
- ],
- [
- 25,
- 0
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 8204,
- 4782
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 8740,
- 4795
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -5
- ]
- ],
- [
- [
- 7923,
- 4801
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 8741,
- 4807
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 8744,
- 4813
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- -7
- ]
- ],
- [
- [
- 8736,
- 4813
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 17
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 10
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 7982,
- 4838
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -6
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -12
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 8,
- -3
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- -2
- ],
- [
- 7,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -11
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 7,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -7
- ],
- [
- 6,
- -6
- ],
- [
- 7,
- -4
- ],
- [
- 7,
- 0
- ],
- [
- 7,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 8,
- -8
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -15
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -9
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- 3
- ],
- [
- -7,
- 5
- ],
- [
- -12,
- 11
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -7,
- 3
- ],
- [
- -6,
- 1
- ],
- [
- -17,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -8,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -6,
- 3
- ],
- [
- -16,
- 15
- ],
- [
- -5,
- 4
- ],
- [
- -16,
- 7
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -8,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -8,
- 4
- ],
- [
- -6,
- 2
- ],
- [
- -12,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -9,
- 7
- ],
- [
- -7,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 20
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 8445,
- 4840
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 8347,
- 4821
- ],
- [
- -1,
- -10
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 12
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -19
- ]
- ],
- [
- [
- 8130,
- 4849
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 8688,
- 4847
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- -2,
- 8
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8742,
- 4855
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 8
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -6
- ]
- ],
- [
- [
- 8692,
- 4844
- ],
- [
- -3,
- -5
- ],
- [
- 2,
- 12
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 18
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -13
- ],
- [
- -4,
- -10
- ],
- [
- -1,
- -9
- ]
- ],
- [
- [
- 7843,
- 4868
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 8433,
- 4880
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 8389,
- 4871
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -12
- ]
- ],
- [
- [
- 8406,
- 4880
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 11
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 9
- ],
- [
- 1,
- 4
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -15
- ],
- [
- -4,
- -12
- ],
- [
- 1,
- -8
- ]
- ],
- [
- [
- 8421,
- 4922
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 12
- ],
- [
- 2,
- 10
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -6
- ]
- ],
- [
- [
- 8709,
- 4939
- ],
- [
- 2,
- -3
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 4,
- -5
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 8423,
- 4947
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 8570,
- 4977
- ],
- [
- -4,
- -3
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8562,
- 4972
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8575,
- 4980
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 8233,
- 4984
- ],
- [
- -1,
- -10
- ],
- [
- -2,
- 6
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 8544,
- 4993
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 8230,
- 4961
- ],
- [
- -6,
- -11
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 11
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 9
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -10
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 8523,
- 5006
- ],
- [
- 5,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -9
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -6,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 10
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- 3
- ],
- [
- 7,
- 2
- ],
- [
- 7,
- 0
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 8554,
- 5015
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 7968,
- 5011
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 7985,
- 5017
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8603,
- 5019
- ],
- [
- 7,
- -7
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -9
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -16
- ],
- [
- -7,
- 6
- ],
- [
- -6,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- -7,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -6,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 10
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 7,
- 17
- ],
- [
- 2,
- 4
- ],
- [
- 11,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -3
- ]
- ],
- [
- [
- 7789,
- 5000
- ],
- [
- 1,
- -8
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- -12
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8005,
- 5011
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 10
- ],
- [
- 5,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -7
- ],
- [
- -2,
- -10
- ]
- ],
- [
- [
- 7783,
- 5026
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 6,
- -10
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8732,
- 5061
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 7773,
- 5049
- ],
- [
- 0,
- -2
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 8501,
- 5043
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -9
- ],
- [
- 3,
- -11
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 8439,
- 5071
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 8500,
- 5081
- ],
- [
- 8,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -9,
- -4
- ],
- [
- -3,
- 1
- ],
- [
- -10,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 9,
- 2
- ]
- ],
- [
- [
- 8420,
- 5079
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8620,
- 5086
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- 7,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 8471,
- 5086
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- 3
- ],
- [
- -6,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 9
- ],
- [
- 1,
- 10
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 9,
- -4
- ]
- ],
- [
- [
- 8762,
- 5092
- ],
- [
- 11,
- -3
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 9,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 4
- ],
- [
- -10,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 8026,
- 5091
- ],
- [
- -4,
- -3
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 7945,
- 5088
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -18
- ],
- [
- 5,
- -16
- ],
- [
- 12,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -11
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 8432,
- 5086
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 8559,
- 5088
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 8
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 4,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8422,
- 5116
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- 8
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- -1,
- 11
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -10
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 9
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 8047,
- 5116
- ],
- [
- -6,
- -6
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 12
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 8748,
- 5120
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 7754,
- 5081
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -5,
- 16
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 13
- ],
- [
- 6,
- 3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -11
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 8638,
- 5108
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 6,
- 4
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -13
- ],
- [
- -1,
- -7
- ]
- ],
- [
- [
- 8635,
- 5139
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -12,
- -3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 8760,
- 5146
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -9
- ],
- [
- 2,
- -6
- ],
- [
- 4,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 11
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ]
- ],
- [
- [
- 8535,
- 5139
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 8628,
- 5153
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 8384,
- 5160
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 8915,
- 5033
- ],
- [
- 0,
- -11
- ]
- ],
- [
- [
- 8915,
- 5022
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -9
- ],
- [
- 0,
- -7
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -12
- ]
- ],
- [
- [
- 8915,
- 4659
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- -4,
- 7
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- -11,
- 19
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 9
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- -7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 13
- ],
- [
- -2,
- 10
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -13,
- 14
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -7,
- 4
- ],
- [
- -6,
- 7
- ],
- [
- -5,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- -7,
- 3
- ],
- [
- -7,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -13,
- 15
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 10
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -10
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -5,
- -9
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- 3,
- 9
- ],
- [
- -1,
- 8
- ],
- [
- -2,
- 7
- ],
- [
- -6,
- 9
- ],
- [
- -6,
- 9
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 8
- ],
- [
- 4,
- 10
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -6,
- -5
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 13
- ],
- [
- 0,
- 9
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -12,
- 9
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 9,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 8,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- -3
- ],
- [
- 6,
- -6
- ],
- [
- 5,
- -7
- ],
- [
- 6,
- -5
- ],
- [
- 7,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 4,
- -18
- ],
- [
- 3,
- -12
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- 2,
- -13
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 6,
- 11
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 8
- ],
- [
- 0,
- 1
- ],
- [
- 7,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 6,
- 3
- ],
- [
- 6,
- 1
- ],
- [
- 7,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 7
- ],
- [
- 7,
- 7
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 15,
- -10
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 7,
- -7
- ],
- [
- 8,
- -7
- ],
- [
- 2,
- -1
- ],
- [
- 8,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 9,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 6,
- -1
- ]
- ],
- [
- [
- 7901,
- 5165
- ],
- [
- 3,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- 4
- ]
- ],
- [
- [
- 8543,
- 5165
- ],
- [
- 3,
- -8
- ],
- [
- -2,
- -8
- ],
- [
- 1,
- -5
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 8534,
- 5155
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -6
- ]
- ],
- [
- [
- 7881,
- 5164
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 8633,
- 5184
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 7,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 8
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 2
- ]
- ],
- [
- [
- 7734,
- 5153
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 13
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -9
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -9
- ]
- ],
- [
- [
- 7910,
- 5174
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- 7
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 8
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -4
- ]
- ],
- [
- [
- 8598,
- 5173
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 6
- ],
- [
- 7,
- -10
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8540,
- 5183
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 7907,
- 5187
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 8
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -7
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 7868,
- 5215
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 8539,
- 5221
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 8537,
- 5229
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 7873,
- 5222
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 8
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 7883,
- 5230
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 7895,
- 5232
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 7861,
- 5227
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -6
- ]
- ],
- [
- [
- 7872,
- 5244
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 7865,
- 5234
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -8
- ]
- ],
- [
- [
- 7889,
- 5252
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ]
- ],
- [
- [
- 7904,
- 5254
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 2
- ]
- ],
- [
- [
- 7844,
- 5241
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 7707,
- 5268
- ],
- [
- 6,
- -16
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -8
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -15
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 11
- ],
- [
- -4,
- 6
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 7
- ],
- [
- -6,
- 14
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -4
- ]
- ],
- [
- [
- 7846,
- 5268
- ],
- [
- 0,
- -8
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 12,
- -6
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8468,
- 5241
- ],
- [
- -5,
- -10
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -9,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -17,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -11,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -8
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 4,
- -12
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -13
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 4,
- 11
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 7,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -11
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -7
- ],
- [
- -4,
- -10
- ],
- [
- -5,
- -8
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -8,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -13
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 6,
- -9
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -7,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 17
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -11,
- 21
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 11
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -6,
- -7
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -21
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -14
- ],
- [
- 0,
- -19
- ],
- [
- 1,
- -11
- ],
- [
- 0,
- -6
- ],
- [
- -3,
- -14
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -14
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 12
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 22
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 14
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- -4
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 9
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 9
- ],
- [
- 4,
- 20
- ],
- [
- 4,
- 10
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 12
- ],
- [
- -1,
- 23
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 11
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 7,
- 1
- ],
- [
- 7,
- -3
- ],
- [
- 9,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 15,
- -5
- ],
- [
- 3,
- 1
- ],
- [
- 9,
- 10
- ],
- [
- 4,
- 9
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -11
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -5
- ]
- ],
- [
- [
- 7824,
- 5304
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 8547,
- 5233
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 5,
- 7
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -15
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- -5,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 4,
- -5
- ],
- [
- 6,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -10,
- 7
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -18
- ],
- [
- 3,
- -13
- ],
- [
- 5,
- -14
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -5,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 13
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 12
- ],
- [
- 0,
- 7
- ],
- [
- 3,
- 12
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 8
- ],
- [
- 3,
- 7
- ],
- [
- 5,
- 10
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -10
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -7
- ],
- [
- -7,
- -9
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 7703,
- 5303
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 8567,
- 5302
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 12
- ],
- [
- 3,
- 10
- ],
- [
- 4,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -7
- ],
- [
- -2,
- -14
- ],
- [
- -2,
- -7
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 8483,
- 5337
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 7679,
- 5320
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -7,
- 9
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 6,
- -8
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8024,
- 5351
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 7937,
- 5349
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 7952,
- 5366
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 8267,
- 5373
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -7
- ]
- ],
- [
- [
- 8490,
- 5382
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 8523,
- 5401
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 8519,
- 5407
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 8274,
- 5425
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 3
- ]
- ],
- [
- [
- 8267,
- 5424
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 1
- ]
- ],
- [
- [
- 8008,
- 5396
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 6,
- 9
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- 4,
- -10
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -9
- ]
- ],
- [
- [
- 8265,
- 5424
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -10
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- 4,
- -9
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -6
- ],
- [
- 4,
- -9
- ],
- [
- 2,
- -4
- ],
- [
- 9,
- -13
- ],
- [
- 5,
- -5
- ],
- [
- 6,
- -13
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -6,
- -1
- ],
- [
- -6,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -23
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -25
- ],
- [
- 0,
- -7
- ],
- [
- 2,
- -13
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- -3,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -19,
- -18
- ],
- [
- -16,
- -15
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 23
- ],
- [
- -2,
- 13
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -7
- ],
- [
- -5,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -9,
- 18
- ],
- [
- -2,
- -15
- ],
- [
- -6,
- -8
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- -4
- ],
- [
- -5,
- -9
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 15
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- -6
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- -6,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 14
- ],
- [
- -3,
- 26
- ],
- [
- -1,
- 14
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -6,
- 5
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 6
- ],
- [
- 0,
- 10
- ],
- [
- -1,
- 16
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 13
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 2,
- 12
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 7,
- 6
- ]
- ],
- [
- [
- 8044,
- 5301
- ],
- [
- -2,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -9
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 6,
- -11
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 9,
- 8
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 6
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 12,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -5
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 12
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 7,
- 0
- ],
- [
- 5,
- -3
- ],
- [
- 5,
- -6
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 8522,
- 5416
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -9
- ]
- ],
- [
- [
- 7680,
- 5485
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- 4
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -8
- ],
- [
- 6,
- -9
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- -13
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -8
- ],
- [
- 2,
- -5
- ],
- [
- 6,
- -6
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 7,
- -8
- ],
- [
- 11,
- -15
- ],
- [
- 6,
- -8
- ],
- [
- 4,
- -11
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -9
- ],
- [
- 5,
- -10
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -8
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -9
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 6,
- -10
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- -9
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 8,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -7,
- -7
- ],
- [
- -6,
- -5
- ],
- [
- 6,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -11
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 6,
- -6
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -10
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -13
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -7
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 9,
- -23
- ],
- [
- 4,
- -12
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -9
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -9
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -14
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -22
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -7
- ],
- [
- 1,
- -13
- ],
- [
- -2,
- -38
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 7
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- -9
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -8,
- 9
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -10
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 6
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 9
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -7,
- 17
- ],
- [
- -1,
- 3
- ],
- [
- -10,
- 12
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- -6,
- 7
- ],
- [
- -11,
- 19
- ],
- [
- -4,
- 10
- ],
- [
- -5,
- 17
- ],
- [
- -2,
- 4
- ],
- [
- -9,
- 13
- ],
- [
- -4,
- 8
- ],
- [
- -2,
- 4
- ],
- [
- -5,
- 16
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -5,
- 14
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 12
- ],
- [
- -10,
- 37
- ],
- [
- -3,
- 11
- ],
- [
- -2,
- 16
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 14
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 16
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -7,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 13
- ],
- [
- -4,
- 20
- ],
- [
- -3,
- 27
- ],
- [
- -3,
- 12
- ],
- [
- -3,
- 9
- ],
- [
- -1,
- 2
- ],
- [
- -13,
- 17
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 11
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- -5,
- 7
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -6,
- 18
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -8,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 9
- ],
- [
- -3,
- 5
- ],
- [
- -6,
- 11
- ],
- [
- -12,
- 23
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -5,
- 18
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 6,
- -9
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 7,
- -2
- ]
- ],
- [
- [
- 7648,
- 5519
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 4877,
- 8305
- ],
- [
- -6,
- -8
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 7
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 7607,
- 5577
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- 14
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -14
- ],
- [
- -1,
- -8
- ]
- ],
- [
- [
- 7603,
- 5608
- ],
- [
- -3,
- -6
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 7595,
- 5638
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 7597,
- 5648
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 7029,
- 5660
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 7586,
- 5659
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- -6
- ]
- ],
- [
- [
- 7577,
- 5710
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 7569,
- 5792
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- -2,
- -8
- ]
- ],
- [
- [
- 7574,
- 5839
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 7583,
- 5877
- ],
- [
- 1,
- -8
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 7575,
- 5925
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 7575,
- 5848
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 11
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 11
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 8
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -18
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -6
- ]
- ],
- [
- [
- 7186,
- 7020
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 2,
- -5
- ]
- ],
- [
- [
- 7203,
- 6975
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 7219,
- 6963
- ],
- [
- 0,
- 0
- ]
- ],
- [
- [
- 7219,
- 6963
- ],
- [
- 5,
- -6
- ]
- ],
- [
- [
- 7250,
- 6921
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -8
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -10
- ],
- [
- -3,
- -9
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- 4,
- -4
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -7
- ],
- [
- 4,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -6
- ],
- [
- 5,
- -5
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 6,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -3
- ],
- [
- 7,
- -5
- ],
- [
- 4,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 7,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -4
- ],
- [
- 1,
- 1
- ],
- [
- 7,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -7
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- -4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 9
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- -3,
- 9
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 16
- ],
- [
- 2,
- 9
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ]
- ],
- [
- [
- 7703,
- 6809
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 6,
- -16
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -10,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -8,
- -11
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -9
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -10
- ],
- [
- -3,
- -7
- ],
- [
- -3,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -8
- ],
- [
- -2,
- -12
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -14
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -9
- ],
- [
- -1,
- -11
- ],
- [
- 0,
- -12
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -10
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -8
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 7473,
- 6456
- ],
- [
- -1,
- -9
- ],
- [
- -2,
- 0
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 15
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- -17
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 14
- ],
- [
- 0,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -10
- ],
- [
- -3,
- -6
- ],
- [
- -4,
- -4
- ],
- [
- -13,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -8
- ],
- [
- -3,
- -7
- ],
- [
- 0,
- -8
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -12
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -7,
- -8
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -10,
- -6
- ],
- [
- -8,
- -6
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- -8
- ],
- [
- -2,
- -8
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -6,
- -7
- ],
- [
- -13,
- -22
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- -12
- ],
- [
- -7,
- -16
- ],
- [
- -3,
- -7
- ],
- [
- -12,
- -12
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- -13
- ],
- [
- -6,
- -10
- ],
- [
- -6,
- -8
- ],
- [
- -10,
- -11
- ],
- [
- -7,
- -10
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -5
- ],
- [
- -11,
- -9
- ],
- [
- -1,
- 1
- ],
- [
- -9,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -18
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -7,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -6,
- -23
- ],
- [
- -1,
- -14
- ],
- [
- 1,
- -16
- ],
- [
- 2,
- -13
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -8
- ],
- [
- 3,
- -12
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -11
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- -7
- ],
- [
- 2,
- -4
- ],
- [
- 5,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- -3,
- -38
- ],
- [
- -3,
- -14
- ],
- [
- -2,
- -9
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -15
- ],
- [
- -3,
- -17
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -8
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -25
- ],
- [
- 0,
- -26
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -8
- ],
- [
- -7,
- -20
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -5,
- 4
- ],
- [
- -7,
- 1
- ],
- [
- -15,
- -10
- ],
- [
- -4,
- -6
- ],
- [
- -3,
- -6
- ],
- [
- -1,
- -13
- ],
- [
- -1,
- -9
- ],
- [
- -1,
- -7
- ],
- [
- -8,
- -11
- ],
- [
- -6,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -6,
- 4
- ],
- [
- -7,
- 10
- ],
- [
- -3,
- 5
- ],
- [
- -9,
- 25
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 10
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 12
- ],
- [
- 0,
- 13
- ],
- [
- -2,
- 15
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -10
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- 22
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- -5,
- 22
- ],
- [
- -2,
- 16
- ],
- [
- -3,
- 17
- ],
- [
- -2,
- 6
- ],
- [
- -4,
- 14
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 9
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -7,
- 29
- ],
- [
- -2,
- 17
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 25
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 11
- ],
- [
- -3,
- 11
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 11
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 11
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 13
- ],
- [
- -3,
- 6
- ],
- [
- 4,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 9
- ],
- [
- -4,
- 10
- ],
- [
- 0,
- 6
- ],
- [
- -4,
- 18
- ],
- [
- -2,
- 42
- ],
- [
- -3,
- 19
- ],
- [
- 0,
- 6
- ],
- [
- -3,
- 16
- ],
- [
- -1,
- 11
- ],
- [
- -1,
- 10
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 12
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 9
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 8
- ],
- [
- -2,
- -8
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- -1
- ],
- [
- -6,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 11
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 14
- ],
- [
- 5,
- 28
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 11
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 4
- ],
- [
- 6,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -9,
- 0
- ],
- [
- 2,
- 11
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 10
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- -5,
- -18
- ],
- [
- -1,
- -4
- ],
- [
- -13,
- -10
- ],
- [
- -4,
- -6
- ],
- [
- -11,
- -8
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -7,
- 6
- ],
- [
- -10,
- 15
- ],
- [
- -2,
- 5
- ],
- [
- -8,
- 18
- ],
- [
- -6,
- 10
- ],
- [
- -4,
- 10
- ],
- [
- -6,
- 8
- ],
- [
- -5,
- 12
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 7,
- 7
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- 6
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 14
- ],
- [
- 3,
- 9
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -11,
- 5
- ],
- [
- -12,
- 12
- ],
- [
- -5,
- 8
- ],
- [
- -3,
- 10
- ],
- [
- -3,
- 11
- ],
- [
- 1,
- 4
- ],
- [
- 5,
- 7
- ],
- [
- 4,
- 6
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 7
- ]
- ],
- [
- [
- 6893,
- 6558
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- 17
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 6,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 8
- ],
- [
- -2,
- 9
- ],
- [
- -2,
- 9
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 12
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 10
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 9
- ],
- [
- 4,
- 13
- ],
- [
- 3,
- 9
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 9,
- 7
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 8
- ],
- [
- 5,
- 10
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- 8,
- 8
- ],
- [
- 7,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 16
- ],
- [
- 3,
- 11
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 10
- ],
- [
- 2,
- 9
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 6,
- 14
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 12
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 10
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 10,
- 8
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 9
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- 5
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ]
- ],
- [
- [
- 7140,
- 7206
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 4,
- 5
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 3
- ]
- ],
- [
- [
- 7160,
- 7228
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 7197,
- 7098
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 7200,
- 7059
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 7691,
- 4481
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 7689,
- 4482
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 7936,
- 4579
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 7013,
- 4759
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 4723,
- 8289
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 4827,
- 8299
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -10
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- -4,
- -8
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 4,
- -6
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -14,
- -5
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- 4,
- 7
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -8,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- -14,
- -6
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -8,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 7,
- 1
- ],
- [
- 8,
- 3
- ],
- [
- 8,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- 5,
- 4
- ],
- [
- 6,
- 8
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 4,
- 9
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -10,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- -2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 7,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 8,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- -9,
- -2
- ],
- [
- -9,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 6560,
- 6734
- ],
- [
- -2,
- -6
- ],
- [
- -4,
- -6
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 3
- ],
- [
- 6,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 6357,
- 7398
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -14
- ],
- [
- 0,
- -8
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 6,
- -5
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 7,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -11
- ],
- [
- 5,
- -8
- ],
- [
- 11,
- -12
- ],
- [
- 5,
- -4
- ],
- [
- 18,
- -7
- ],
- [
- 12,
- 0
- ],
- [
- 33,
- 14
- ],
- [
- 11,
- 4
- ],
- [
- 4,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 13
- ],
- [
- -1,
- 10
- ]
- ],
- [
- [
- 6497,
- 7335
- ],
- [
- 8,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 13
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 7
- ],
- [
- 4,
- 4
- ],
- [
- 5,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 9,
- -7
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 8,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -8
- ],
- [
- 4,
- -10
- ],
- [
- 0,
- -1
- ],
- [
- 11,
- 0
- ],
- [
- 11,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -8
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 6697,
- 6919
- ],
- [
- -7,
- -14
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 6689,
- 6904
- ],
- [
- 6,
- -12
- ],
- [
- 3,
- -7
- ],
- [
- 5,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 5,
- -14
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -5
- ],
- [
- 4,
- -7
- ],
- [
- 3,
- -7
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -8
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -11
- ],
- [
- 1,
- -12
- ],
- [
- 1,
- -17
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -9,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- -6,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -10
- ],
- [
- 0,
- -9
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -17
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 6710,
- 6635
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -13,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -7
- ],
- [
- -10,
- 4
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- 4
- ],
- [
- -6,
- -3
- ],
- [
- -5,
- 0
- ],
- [
- -7,
- 8
- ],
- [
- -8,
- 2
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- 5
- ],
- [
- -11,
- 3
- ],
- [
- -2,
- 8
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- 12
- ],
- [
- -1,
- 18
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -10,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -3
- ],
- [
- -5,
- -6
- ],
- [
- -8,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- -4
- ],
- [
- -7,
- -10
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -8,
- 6
- ],
- [
- -5,
- 3
- ],
- [
- -7,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -10,
- 8
- ],
- [
- -8,
- 11
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -4,
- 7
- ],
- [
- -8,
- 6
- ],
- [
- -4,
- 6
- ],
- [
- -6,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- 13
- ],
- [
- 0,
- 5
- ],
- [
- -4,
- 13
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 12
- ],
- [
- -1,
- 4
- ],
- [
- -5,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 8
- ],
- [
- -4,
- 7
- ],
- [
- -4,
- 11
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 8
- ],
- [
- -2,
- 8
- ],
- [
- -2,
- 1
- ],
- [
- -12,
- -11
- ],
- [
- -4,
- 6
- ],
- [
- -10,
- 10
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 6348,
- 6910
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 10
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 14
- ],
- [
- 2,
- 12
- ],
- [
- 2,
- 11
- ],
- [
- -3,
- 8
- ],
- [
- -4,
- 9
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 11
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 6
- ],
- [
- -5,
- 7
- ],
- [
- -6,
- 8
- ],
- [
- -5,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 10
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 5
- ],
- [
- -5,
- 14
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- 7,
- 13
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -6,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 18
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 16
- ],
- [
- -1,
- 4
- ]
- ],
- [
- [
- 6243,
- 7323
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 15
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 6348,
- 6910
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 6332,
- 6911
- ],
- [
- -6,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -9
- ],
- [
- -2,
- -8
- ],
- [
- -3,
- -11
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -9
- ]
- ],
- [
- [
- 6292,
- 6860
- ],
- [
- -5,
- -2
- ],
- [
- -11,
- 2
- ],
- [
- -13,
- 2
- ],
- [
- -12,
- 2
- ],
- [
- -9,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -9,
- 13
- ],
- [
- -8,
- 11
- ],
- [
- -9,
- 13
- ],
- [
- -9,
- 14
- ],
- [
- -9,
- 13
- ],
- [
- -7,
- 10
- ],
- [
- -8,
- 13
- ],
- [
- -8,
- 12
- ],
- [
- -6,
- 9
- ],
- [
- -8,
- 8
- ],
- [
- -5,
- 6
- ],
- [
- -9,
- 10
- ],
- [
- -7,
- 7
- ],
- [
- -6,
- 6
- ],
- [
- -9,
- 10
- ],
- [
- -3,
- 2
- ],
- [
- -10,
- 4
- ],
- [
- -9,
- 2
- ],
- [
- -9,
- 3
- ],
- [
- -6,
- 2
- ]
- ],
- [
- [
- 6087,
- 7034
- ],
- [
- 4,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 9
- ],
- [
- 2,
- 1
- ],
- [
- -2,
- 13
- ],
- [
- -2,
- 13
- ],
- [
- -2,
- 12
- ],
- [
- -2,
- 13
- ]
- ],
- [
- [
- 6076,
- 7106
- ],
- [
- 8,
- 8
- ],
- [
- 6,
- 6
- ],
- [
- 8,
- 9
- ],
- [
- 8,
- 8
- ],
- [
- 8,
- 8
- ],
- [
- 8,
- 9
- ],
- [
- 8,
- 7
- ],
- [
- 6,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 10
- ],
- [
- 3,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 15
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 8
- ],
- [
- -2,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 6,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 8
- ],
- [
- 3,
- 5
- ],
- [
- 5,
- 8
- ],
- [
- 3,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 6176,
- 7321
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 7
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -9
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 4568,
- 8998
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 9,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- 0
- ],
- [
- -7,
- -2
- ],
- [
- -9,
- -5
- ],
- [
- -7,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- -7,
- -7
- ],
- [
- -5,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -15,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -10,
- -3
- ],
- [
- -16,
- 2
- ],
- [
- -7,
- 2
- ],
- [
- -8,
- 3
- ],
- [
- -5,
- 1
- ],
- [
- -6,
- 1
- ],
- [
- -6,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -26,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 9,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -8,
- -5
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 7,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -4
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 4
- ],
- [
- -7,
- 0
- ],
- [
- -17,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 11,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -8,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -9,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 7,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -8,
- -1
- ],
- [
- -2,
- 4
- ],
- [
- -7,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- -3
- ],
- [
- -13,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- -7,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 9,
- -5
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -7,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- -4,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 7,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 7,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -10,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 6,
- -7
- ],
- [
- 6,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -7
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 9
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- -6
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- 11
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 7,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 7
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 10
- ],
- [
- 1,
- 2
- ],
- [
- 7,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -2
- ]
- ],
- [
- [
- 5993,
- 7069
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -13
- ]
- ],
- [
- [
- 5987,
- 7050
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -8
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 5984,
- 6997
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -9
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -9
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -11
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -10
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -13
- ]
- ],
- [
- [
- 5971,
- 6886
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 5951,
- 6981
- ],
- [
- 3,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 4,
- 10
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ]
- ],
- [
- [
- 5957,
- 7003
- ],
- [
- 6,
- 18
- ],
- [
- 3,
- 17
- ],
- [
- 3,
- 24
- ],
- [
- 3,
- 13
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 6
- ]
- ],
- [
- [
- 5975,
- 7089
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 5996,
- 7109
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5334,
- 7301
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5432,
- 7385
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -6,
- -16
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 10
- ],
- [
- -3,
- 5
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- 7
- ],
- [
- -6,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 5235,
- 7434
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5387,
- 7528
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5230,
- 7548
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 5267,
- 7539
- ],
- [
- 1,
- -4
- ],
- [
- 4,
- -15
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -8
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -32
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -11
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 10
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 10
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 5288,
- 7652
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 2
- ]
- ],
- [
- [
- 5380,
- 7863
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ]
- ],
- [
- [
- 5381,
- 7810
- ],
- [
- 1,
- 2
- ],
- [
- -4,
- 8
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -7,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -10
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -17
- ],
- [
- 3,
- -12
- ],
- [
- 2,
- -5
- ],
- [
- 6,
- -8
- ],
- [
- 6,
- -4
- ],
- [
- 11,
- -14
- ],
- [
- 6,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -10
- ],
- [
- 3,
- -12
- ],
- [
- 3,
- -19
- ],
- [
- 3,
- -9
- ],
- [
- 4,
- -11
- ],
- [
- 10,
- -15
- ],
- [
- 9,
- -11
- ],
- [
- 9,
- -7
- ],
- [
- 6,
- -1
- ],
- [
- 16,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- 3,
- -5
- ],
- [
- 15,
- -11
- ],
- [
- 16,
- -10
- ],
- [
- 4,
- -5
- ],
- [
- 6,
- -8
- ],
- [
- 13,
- -11
- ],
- [
- 2,
- -5
- ],
- [
- 9,
- -11
- ],
- [
- 3,
- -9
- ],
- [
- 1,
- -6
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 5
- ],
- [
- -6,
- 20
- ],
- [
- -11,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -7
- ],
- [
- -3,
- -11
- ],
- [
- -4,
- -16
- ],
- [
- -1,
- -7
- ],
- [
- 3,
- -6
- ],
- [
- 6,
- -4
- ],
- [
- 5,
- -5
- ],
- [
- 3,
- -6
- ],
- [
- 0,
- -14
- ],
- [
- 2,
- -8
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- 1,
- -13
- ],
- [
- -1,
- -5
- ],
- [
- -7,
- -9
- ],
- [
- -4,
- -9
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -9,
- 0
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 10
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 11
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 13
- ],
- [
- -5,
- 15
- ],
- [
- -3,
- 14
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 4
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -9,
- 10
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 3,
- 8
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -6,
- 15
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 6
- ],
- [
- -6,
- 3
- ],
- [
- -11,
- 20
- ],
- [
- -4,
- 8
- ],
- [
- -8,
- 8
- ],
- [
- -4,
- 11
- ],
- [
- -4,
- 5
- ],
- [
- -6,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 5
- ],
- [
- -7,
- 11
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 10
- ],
- [
- -4,
- 8
- ],
- [
- -2,
- 20
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- -9,
- 5
- ],
- [
- -12,
- 13
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- 5
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- -4
- ],
- [
- -7,
- -12
- ],
- [
- -6,
- -13
- ],
- [
- -2,
- -2
- ],
- [
- -8,
- -4
- ],
- [
- -6,
- -2
- ]
- ],
- [
- [
- 5344,
- 7714
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 2854,
- 6247
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 10,
- -6
- ],
- [
- 3,
- -10
- ],
- [
- 1,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -8
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 11,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ]
- ],
- [
- [
- 4943,
- 8019
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- 5
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 6087,
- 7034
- ],
- [
- -4,
- -7
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- -3
- ],
- [
- -11,
- -6
- ],
- [
- -7,
- -4
- ],
- [
- -9,
- -5
- ],
- [
- -8,
- -4
- ],
- [
- -8,
- -4
- ],
- [
- -7,
- -3
- ],
- [
- 4,
- -8
- ],
- [
- 6,
- -12
- ],
- [
- 4,
- -8
- ],
- [
- 5,
- -11
- ],
- [
- 5,
- -9
- ],
- [
- 4,
- -9
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -10
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- -2
- ],
- [
- -8,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -9
- ],
- [
- -3,
- -10
- ],
- [
- -6,
- -8
- ],
- [
- -6,
- -9
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -8,
- 3
- ],
- [
- -7,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -6,
- 2
- ]
- ],
- [
- [
- 5970,
- 6875
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 4
- ]
- ],
- [
- [
- 5984,
- 6997
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 13
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 8
- ],
- [
- -1,
- 9
- ]
- ],
- [
- [
- 5993,
- 7069
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -7
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 9,
- -3
- ],
- [
- 8,
- 9
- ],
- [
- 6,
- 7
- ],
- [
- 7,
- 8
- ],
- [
- 5,
- 6
- ],
- [
- 9,
- 9
- ],
- [
- 5,
- 6
- ],
- [
- 7,
- 8
- ],
- [
- 7,
- 8
- ]
- ],
- [
- [
- 8441,
- 6582
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 8452,
- 6596
- ],
- [
- -2,
- -9
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 8484,
- 6609
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 8949,
- 6717
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 8562,
- 6719
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 8582,
- 6780
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 8591,
- 6803
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 6
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 8595,
- 6809
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 8628,
- 6927
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 7
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -6
- ]
- ],
- [
- [
- 8637,
- 6935
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -8
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -7
- ]
- ],
- [
- [
- 8602,
- 7007
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- -3
- ],
- [
- -3,
- -5
- ]
- ],
- [
- [
- 8621,
- 7051
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 8613,
- 7040
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -8
- ],
- [
- -3,
- -7
- ]
- ],
- [
- [
- 8573,
- 7072
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 7
- ]
- ],
- [
- [
- 8884,
- 7088
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 8585,
- 7075
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 9
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 8596,
- 7097
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 8605,
- 7128
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 8643,
- 7119
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -7
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -7,
- -15
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- -4,
- -15
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- -6,
- -8
- ],
- [
- -6,
- -6
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -8,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 7
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 8
- ],
- [
- 2,
- 10
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 8
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -4
- ]
- ],
- [
- [
- 8673,
- 7139
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 8682,
- 7149
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 8590,
- 7149
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 11
- ],
- [
- 4,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -6
- ]
- ],
- [
- [
- 8731,
- 7157
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- -10
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- -5,
- -5
- ],
- [
- -5,
- -7
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 9
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -9,
- -9
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -10
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -9
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- 8
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 7
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -4
- ]
- ],
- [
- [
- 8731,
- 7170
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 8747,
- 7159
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -8
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 8593,
- 7163
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 9
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -7
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8873,
- 7184
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 8704,
- 7269
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8842,
- 7362
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 4,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- -2,
- -9
- ],
- [
- -4,
- -5
- ]
- ],
- [
- [
- 8922,
- 7567
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 3
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -15
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -10
- ],
- [
- 2,
- -13
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -10
- ],
- [
- -2,
- -12
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -8
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -10
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -13
- ],
- [
- -1,
- -20
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -7
- ],
- [
- -3,
- -13
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 4,
- -13
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -6,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -7
- ],
- [
- -2,
- -7
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 9
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -8
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 11
- ],
- [
- 0,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- -8
- ],
- [
- -6,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -8,
- -3
- ],
- [
- 1,
- 2
- ],
- [
- 6,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -11
- ],
- [
- -1,
- -7
- ],
- [
- 2,
- -5
- ],
- [
- 6,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -6,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- -19
- ],
- [
- -4,
- -12
- ],
- [
- -7,
- -4
- ],
- [
- -6,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 10
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -7,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -11
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- 1
- ],
- [
- -9,
- 11
- ],
- [
- -8,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 16
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 8
- ],
- [
- 6,
- 8
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 7,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 12,
- 2
- ],
- [
- 8,
- 5
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 8,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- 12
- ],
- [
- 4,
- 10
- ],
- [
- 2,
- 12
- ],
- [
- -1,
- 14
- ],
- [
- 3,
- 11
- ],
- [
- 4,
- 2
- ],
- [
- 6,
- 5
- ],
- [
- 4,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -5,
- -9
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 3,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 9
- ],
- [
- 1,
- 1
- ],
- [
- 11,
- 7
- ],
- [
- 5,
- 5
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 7,
- 10
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 4
- ],
- [
- 10,
- 9
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 13
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -15
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -8,
- -3
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 10
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -5
- ]
- ],
- [
- [
- 8874,
- 7608
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- -2,
- -8
- ]
- ],
- [
- [
- 8924,
- 7783
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 8918,
- 7795
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 8994,
- 7725
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 10,
- -9
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 7,
- 11
- ],
- [
- 6,
- 9
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -8
- ],
- [
- -4,
- -12
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -9
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -6,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- -5
- ],
- [
- -6,
- -8
- ],
- [
- -5,
- -9
- ],
- [
- -4,
- -10
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- 6
- ],
- [
- -11,
- 8
- ],
- [
- -12,
- 12
- ],
- [
- -7,
- 6
- ],
- [
- -12,
- -2
- ],
- [
- -12,
- -11
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 8
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- -8
- ],
- [
- 6,
- -8
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 6
- ],
- [
- 4,
- 9
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 14
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 13
- ],
- [
- -2,
- 13
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -7
- ],
- [
- 7,
- -11
- ],
- [
- 8,
- -18
- ],
- [
- 5,
- -8
- ],
- [
- 5,
- -8
- ],
- [
- 6,
- -8
- ],
- [
- 7,
- -7
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 7140,
- 7206
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 5
- ]
- ],
- [
- [
- 6393,
- 7767
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 6397,
- 7774
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 6463,
- 7799
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 7227,
- 7614
- ],
- [
- -4,
- 6
- ],
- [
- -4,
- 7
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -7,
- -1
- ],
- [
- -7,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -9,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -9,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- 1
- ],
- [
- -9,
- 4
- ],
- [
- -6,
- 4
- ],
- [
- -6,
- 5
- ],
- [
- -7,
- 7
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- -4
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -18
- ],
- [
- -1,
- -6
- ],
- [
- 2,
- -11
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -9,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -7,
- 5
- ],
- [
- -3,
- 0
- ],
- [
- -10,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 6970,
- 7617
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -7
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- -4
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 6
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 8
- ],
- [
- -2,
- 6
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -6,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 5
- ],
- [
- -4,
- 8
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -4,
- 7
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -8,
- -4
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -6,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -14
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -14
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -14
- ],
- [
- 0,
- -13
- ],
- [
- 0,
- -13
- ]
- ],
- [
- [
- 6554,
- 7564
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- 10
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -5,
- 6
- ],
- [
- -6,
- 6
- ],
- [
- -5,
- 6
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -6,
- -2
- ],
- [
- -6,
- -3
- ],
- [
- -6,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -5,
- -6
- ],
- [
- -5,
- -10
- ]
- ],
- [
- [
- 6458,
- 7590
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- -2,
- 12
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 6
- ],
- [
- -4,
- 12
- ],
- [
- -3,
- 13
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 5,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- -4,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- 4
- ],
- [
- 9,
- -1
- ],
- [
- 11,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -7,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- 3,
- 12
- ],
- [
- 5,
- 10
- ],
- [
- 2,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -9,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- -4
- ],
- [
- -5,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -5
- ],
- [
- -6,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 6367,
- 7853
- ],
- [
- -1,
- 0
- ],
- [
- -7,
- 6
- ],
- [
- -5,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 10
- ],
- [
- -3,
- 9
- ],
- [
- -4,
- 9
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 8
- ],
- [
- -4,
- 8
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -9,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- 10
- ],
- [
- 3,
- 13
- ],
- [
- 4,
- 9
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 11
- ],
- [
- 3,
- 9
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- 5,
- -11
- ],
- [
- 4,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 11
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 5
- ],
- [
- 7,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 7
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 4
- ],
- [
- 6,
- 7
- ],
- [
- 6,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -8
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -4
- ],
- [
- 5,
- -7
- ],
- [
- 4,
- -5
- ],
- [
- 5,
- -4
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 5,
- 6
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 6,
- -5
- ],
- [
- 3,
- -6
- ],
- [
- 4,
- -8
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 8,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 8,
- 2
- ],
- [
- 8,
- 4
- ],
- [
- 5,
- 5
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -10,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -9,
- 5
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -6,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 6,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -4,
- 10
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -7,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 7,
- -3
- ],
- [
- 10,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 12,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 12,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 7,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 7,
- 0
- ],
- [
- 5,
- 4
- ],
- [
- 1,
- -2
- ],
- [
- 8,
- 1
- ],
- [
- 9,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 9,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 5
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 8,
- -1
- ],
- [
- 7,
- -1
- ],
- [
- 7,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 7,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -8
- ],
- [
- 2,
- -10
- ],
- [
- 4,
- -14
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 7,
- -3
- ],
- [
- 9,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- -7
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 7,
- 6
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 4
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 7,
- 5
- ],
- [
- 4,
- 3
- ],
- [
- 6,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- -7,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 7,
- -7
- ],
- [
- 9,
- -9
- ],
- [
- 9,
- -10
- ],
- [
- 7,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -10
- ],
- [
- 4,
- -10
- ],
- [
- 8,
- -16
- ],
- [
- 7,
- -17
- ],
- [
- 8,
- -17
- ],
- [
- 4,
- -11
- ],
- [
- 9,
- -21
- ],
- [
- 2,
- -7
- ],
- [
- 5,
- -12
- ],
- [
- 4,
- -12
- ],
- [
- 3,
- -11
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -9
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- -6
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 11,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- -9
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 6138,
- 5059
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -4
- ]
- ],
- [
- [
- 6163,
- 5413
- ],
- [
- -4,
- -10
- ],
- [
- -4,
- -12
- ],
- [
- -7,
- -23
- ],
- [
- -6,
- -12
- ],
- [
- -4,
- -8
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -24
- ],
- [
- 0,
- -49
- ],
- [
- 1,
- -48
- ],
- [
- 0,
- -49
- ],
- [
- 0,
- -24
- ],
- [
- 0,
- -8
- ],
- [
- 3,
- -11
- ],
- [
- 4,
- -9
- ],
- [
- 5,
- -14
- ],
- [
- 3,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 6153,
- 5086
- ],
- [
- -4,
- -10
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -5,
- -8
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -8
- ],
- [
- 1,
- -11
- ],
- [
- -2,
- -9
- ],
- [
- 0,
- -4
- ],
- [
- -4,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -12
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -19
- ],
- [
- -3,
- -9
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 6089,
- 4914
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 7
- ],
- [
- -5,
- 6
- ],
- [
- -4,
- 7
- ],
- [
- -4,
- 6
- ],
- [
- -4,
- 6
- ],
- [
- -5,
- 7
- ],
- [
- -4,
- 6
- ],
- [
- -4,
- 6
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -6,
- 7
- ],
- [
- -6,
- 6
- ],
- [
- -6,
- 7
- ],
- [
- -5,
- 7
- ],
- [
- -6,
- 7
- ],
- [
- -6,
- 7
- ],
- [
- -6,
- 7
- ],
- [
- -6,
- 6
- ],
- [
- -6,
- 7
- ],
- [
- -6,
- 7
- ],
- [
- -6,
- 7
- ],
- [
- -6,
- 7
- ],
- [
- -6,
- 7
- ],
- [
- -6,
- 7
- ],
- [
- -6,
- 6
- ],
- [
- -5,
- 7
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 5941,
- 5126
- ],
- [
- 0,
- 10
- ],
- [
- 1,
- 25
- ],
- [
- 0,
- 22
- ],
- [
- 0,
- 11
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 8
- ],
- [
- 2,
- 10
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 12
- ],
- [
- -2,
- 9
- ],
- [
- -1,
- 11
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 12
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 11
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 12
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- 19
- ]
- ],
- [
- [
- 5943,
- 5427
- ],
- [
- 6,
- 11
- ],
- [
- 5,
- 12
- ],
- [
- 8,
- 15
- ],
- [
- 6,
- 13
- ],
- [
- 6,
- 12
- ],
- [
- 5,
- 10
- ]
- ],
- [
- [
- 7045,
- 7456
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -7,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 8
- ],
- [
- -2,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 6,
- 4
- ],
- [
- 6,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 6970,
- 7501
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 9,
- 8
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- -12
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 7,
- 9
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 6963,
- 7478
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 3
- ]
- ],
- [
- [
- 6993,
- 7485
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 3
- ]
- ],
- [
- [
- 6977,
- 7482
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 7869,
- 5801
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -4
- ]
- ],
- [
- [
- 7862,
- 5834
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -6
- ]
- ],
- [
- [
- 7900,
- 5783
- ],
- [
- -5,
- 8
- ],
- [
- -9,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- -5
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 8
- ],
- [
- -1,
- 10
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 10
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 5
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 7858,
- 5858
- ],
- [
- 0,
- 2
- ],
- [
- -5,
- 20
- ],
- [
- -1,
- 10
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 6
- ],
- [
- 0,
- 9
- ],
- [
- -1,
- 10
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 15
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 7
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 6,
- -2
- ],
- [
- 4,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ]
- ],
- [
- [
- 7921,
- 6010
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 3
- ],
- [
- 5,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ]
- ],
- [
- [
- 7986,
- 6031
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -10
- ],
- [
- 2,
- -10
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -12
- ],
- [
- -2,
- -12
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -10
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- -6
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 5,
- -9
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 784,
- 4525
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 670,
- 4860
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 152,
- 4915
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 216,
- 4924
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 244,
- 4927
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 696,
- 4948
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 248,
- 5003
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 231,
- 5024
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 9854,
- 5114
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 9709,
- 5133
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 9846,
- 5138
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 9805,
- 5242
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 9806,
- 5261
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 9805,
- 5283
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 9805,
- 5290
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 629,
- 5291
- ],
- [
- 5,
- -7
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- -1,
- -6
- ]
- ],
- [
- [
- 9800,
- 5360
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 9804,
- 5364
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 574,
- 5410
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 3263,
- 6170
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 3260,
- 6177
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 8508,
- 7097
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 5
- ],
- [
- 9,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -7,
- -1
- ]
- ],
- [
- [
- 8520,
- 7162
- ],
- [
- 1,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 8506,
- 7163
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 8549,
- 7178
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8504,
- 7184
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 8557,
- 7189
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 8575,
- 7188
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -13
- ]
- ],
- [
- [
- 8511,
- 7286
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 9
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 8636,
- 7343
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 8514,
- 7357
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 8565,
- 7408
- ],
- [
- 7,
- -25
- ],
- [
- 6,
- -17
- ],
- [
- 6,
- -12
- ],
- [
- 8,
- -23
- ],
- [
- 2,
- -13
- ],
- [
- 0,
- -7
- ],
- [
- 2,
- -11
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -10
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -15
- ],
- [
- -2,
- -11
- ],
- [
- -2,
- -9
- ],
- [
- -4,
- -9
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -6,
- -9
- ],
- [
- -4,
- -10
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -5,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 4,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ]
- ],
- [
- [
- 8517,
- 7360
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 8
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 5598,
- 7617
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 5557,
- 7634
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 2
- ]
- ],
- [
- [
- 5565,
- 7651
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 7,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -10
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 6340,
- 6890
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 6345,
- 6828
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 9
- ],
- [
- -8,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -5,
- 2
- ]
- ],
- [
- [
- 6332,
- 6911
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -8
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -13
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 7836,
- 6473
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -6
- ],
- [
- 4,
- -8
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 6,
- -18
- ],
- [
- 3,
- -3
- ],
- [
- 7,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -5,
- -8
- ],
- [
- -1,
- -1
- ],
- [
- -8,
- 5
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 9,
- -12
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 8,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 7925,
- 6231
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 7929,
- 6229
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 7,
- -12
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -10
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -8
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 7921,
- 6010
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 11
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -5,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 7
- ],
- [
- -2,
- 11
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 11
- ],
- [
- 2,
- 13
- ],
- [
- -2,
- 10
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 7
- ],
- [
- -3,
- 10
- ],
- [
- -5,
- 13
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -6
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 3,
- 12
- ],
- [
- 3,
- 14
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 10
- ],
- [
- 2,
- 11
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ]
- ],
- [
- [
- 7780,
- 6354
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 13
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 6
- ],
- [
- 2,
- 6
- ]
- ],
- [
- [
- 5975,
- 7089
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 7
- ],
- [
- 5,
- 21
- ],
- [
- 3,
- 9
- ],
- [
- 1,
- 12
- ],
- [
- 4,
- 11
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 4
- ]
- ],
- [
- [
- 5999,
- 7178
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -12
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 4790,
- 5434
- ],
- [
- -3,
- 1
- ],
- [
- -10,
- 8
- ],
- [
- -7,
- 5
- ],
- [
- -24,
- 27
- ],
- [
- -7,
- 11
- ],
- [
- -8,
- 16
- ],
- [
- -17,
- 32
- ],
- [
- -4,
- 5
- ],
- [
- -5,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 9
- ],
- [
- -4,
- 5
- ],
- [
- -8,
- 8
- ],
- [
- -6,
- 13
- ]
- ],
- [
- [
- 4680,
- 5582
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 8
- ],
- [
- 3,
- 8
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 6,
- 11
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 10
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 2
- ]
- ],
- [
- [
- 5693,
- 6451
- ],
- [
- 0,
- -29
- ],
- [
- 0,
- -29
- ],
- [
- 0,
- -28
- ],
- [
- 0,
- -29
- ],
- [
- -7,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -7
- ]
- ],
- [
- [
- 5666,
- 6307
- ],
- [
- -14,
- 13
- ],
- [
- -13,
- 14
- ],
- [
- -13,
- 14
- ],
- [
- -14,
- 13
- ],
- [
- -13,
- 14
- ],
- [
- -13,
- 14
- ],
- [
- -14,
- 13
- ],
- [
- -13,
- 14
- ],
- [
- -13,
- 13
- ],
- [
- -14,
- 14
- ],
- [
- -13,
- 14
- ],
- [
- -13,
- 13
- ],
- [
- -13,
- 14
- ],
- [
- -14,
- 14
- ],
- [
- -13,
- 13
- ],
- [
- -13,
- 14
- ],
- [
- -10,
- 9
- ],
- [
- -9,
- -9
- ],
- [
- -8,
- -7
- ],
- [
- -10,
- -10
- ]
- ],
- [
- [
- 5416,
- 6508
- ],
- [
- -12,
- -12
- ],
- [
- -9,
- -9
- ],
- [
- -1,
- 0
- ],
- [
- -9,
- 16
- ],
- [
- -8,
- 12
- ],
- [
- -3,
- 4
- ],
- [
- -14,
- 6
- ],
- [
- -14,
- 7
- ],
- [
- -14,
- 6
- ]
- ],
- [
- [
- 5264,
- 6925
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 9
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 13
- ],
- [
- -2,
- 12
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 5,
- 5
- ],
- [
- 5,
- 5
- ],
- [
- 5,
- 5
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 11
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 5319,
- 7095
- ],
- [
- 4,
- -4
- ],
- [
- 5,
- -1
- ],
- [
- 13,
- -14
- ],
- [
- 4,
- -1
- ],
- [
- 9,
- -2
- ],
- [
- 10,
- 6
- ],
- [
- 4,
- 1
- ],
- [
- 7,
- -6
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 9,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -7
- ],
- [
- 3,
- -3
- ],
- [
- 18,
- -7
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -9
- ],
- [
- 0,
- -11
- ],
- [
- 2,
- -8
- ],
- [
- 2,
- -10
- ],
- [
- 3,
- -7
- ],
- [
- 3,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 8,
- -5
- ],
- [
- 9,
- -3
- ],
- [
- 10,
- 0
- ],
- [
- 15,
- -8
- ],
- [
- 14,
- -9
- ],
- [
- 3,
- -4
- ],
- [
- 7,
- -4
- ],
- [
- 13,
- -21
- ],
- [
- 7,
- -8
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 9,
- 8
- ],
- [
- 3,
- 4
- ],
- [
- 8,
- 18
- ],
- [
- 3,
- 9
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 15
- ],
- [
- 1,
- 11
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 7
- ],
- [
- 7,
- 12
- ],
- [
- 7,
- 8
- ],
- [
- 13,
- 12
- ],
- [
- 7,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 8
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 10,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- -5
- ],
- [
- 7,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- -4
- ],
- [
- 1,
- -10
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 5,
- -7
- ],
- [
- 14,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 9,
- 0
- ],
- [
- 6,
- 1
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -10
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 3308,
- 5980
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -11
- ]
- ],
- [
- [
- 7218,
- 5705
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 4,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 7221,
- 5739
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 7221,
- 5749
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -9
- ],
- [
- 9,
- -16
- ],
- [
- 5,
- -16
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- -15
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -12
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 7,
- -19
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -9
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -16
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -8
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -7,
- -11
- ],
- [
- -2,
- -2
- ],
- [
- -10,
- -7
- ],
- [
- -6,
- -6
- ],
- [
- -7,
- -2
- ],
- [
- -6,
- 4
- ],
- [
- -5,
- 8
- ],
- [
- -2,
- 12
- ],
- [
- -2,
- 13
- ],
- [
- -2,
- 14
- ],
- [
- -2,
- 44
- ],
- [
- -1,
- 12
- ],
- [
- -2,
- 15
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- -15
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 15
- ],
- [
- 0,
- 6
- ],
- [
- 3,
- 16
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 12
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -6,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 5798,
- 3450
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -11
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 4,
- 5
- ],
- [
- 6,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -4
- ]
- ],
- [
- [
- 5582,
- 8368
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 5580,
- 8368
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -8
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 5652,
- 8291
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 5632,
- 8315
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 4,
- 11
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- 3
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 5589,
- 8367
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 9
- ],
- [
- -4,
- 12
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 2
- ]
- ],
- [
- [
- 5584,
- 8413
- ],
- [
- 8,
- 7
- ],
- [
- 9,
- 7
- ],
- [
- 2,
- 1
- ],
- [
- 9,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 11,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 4,
- -7
- ],
- [
- 4,
- -1
- ],
- [
- 10,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- -6
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 5759,
- 8497
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 4,
- -4
- ],
- [
- 4,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -8
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 5584,
- 8413
- ],
- [
- -1,
- 11
- ],
- [
- 1,
- 22
- ],
- [
- 1,
- 11
- ],
- [
- 5,
- 6
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 7,
- 15
- ],
- [
- 6,
- 1
- ],
- [
- 8,
- 4
- ],
- [
- 9,
- 4
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 10,
- -12
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -14
- ],
- [
- 10,
- -7
- ],
- [
- 8,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 6,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 18
- ],
- [
- -2,
- 8
- ],
- [
- 1,
- 5
- ]
- ],
- [
- [
- 8153,
- 6465
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 3249,
- 6225
- ],
- [
- -3,
- 0
- ]
- ],
- [
- [
- 3246,
- 6225
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 4758,
- 6777
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -9
- ],
- [
- -1,
- -9
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -14
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -10
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -11,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 4527,
- 6418
- ],
- [
- 2,
- 27
- ],
- [
- 4,
- 15
- ],
- [
- 3,
- 7
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 15
- ],
- [
- 2,
- 14
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 3,
- 8
- ],
- [
- 3,
- 11
- ],
- [
- 2,
- 7
- ],
- [
- 3,
- 12
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 6
- ],
- [
- 6,
- 7
- ],
- [
- 11,
- 24
- ],
- [
- 4,
- 4
- ],
- [
- 4,
- 10
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 20
- ],
- [
- 2,
- 11
- ],
- [
- 2,
- 8
- ],
- [
- 3,
- 15
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 14
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 7
- ],
- [
- 6,
- 5
- ],
- [
- 7,
- 8
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 8
- ],
- [
- 2,
- 15
- ],
- [
- 4,
- 17
- ],
- [
- 3,
- 13
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 9
- ],
- [
- 4,
- 3
- ],
- [
- 9,
- 2
- ],
- [
- 14,
- 7
- ],
- [
- 12,
- 10
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 8
- ],
- [
- 6,
- 11
- ],
- [
- 11,
- 13
- ],
- [
- 5,
- 7
- ],
- [
- 8,
- 18
- ],
- [
- 5,
- 15
- ],
- [
- 5,
- 10
- ],
- [
- 3,
- 8
- ],
- [
- 2,
- 9
- ],
- [
- 1,
- 14
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- 8
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 12
- ],
- [
- 1,
- 21
- ],
- [
- 4,
- 16
- ],
- [
- 9,
- 22
- ],
- [
- 2,
- 9
- ],
- [
- 1,
- 14
- ],
- [
- 0,
- 5
- ],
- [
- 11,
- 20
- ],
- [
- 7,
- 15
- ],
- [
- 2,
- 4
- ],
- [
- 6,
- 7
- ],
- [
- 20,
- 15
- ],
- [
- 12,
- 11
- ],
- [
- 7,
- 8
- ],
- [
- 4,
- 10
- ],
- [
- 11,
- 37
- ],
- [
- 11,
- 52
- ],
- [
- 1,
- 6
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 3,
- -8
- ],
- [
- 4,
- -8
- ],
- [
- 7,
- -11
- ],
- [
- 6,
- -4
- ],
- [
- 8,
- -3
- ],
- [
- 10,
- 5
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- 1
- ],
- [
- 6,
- -1
- ]
- ],
- [
- [
- 5206,
- 7704
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 5783,
- 7802
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 9
- ],
- [
- 2,
- 12
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 11
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 5739,
- 7963
- ],
- [
- 0,
- 2
- ],
- [
- 6,
- 6
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 5,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 6386,
- 4210
- ],
- [
- -3,
- -10
- ],
- [
- 1,
- 8
- ],
- [
- 4,
- 13
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- -12
- ]
- ],
- [
- [
- 6342,
- 4414
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 7
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 6375,
- 4468
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 5,
- -14
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -12
- ],
- [
- 3,
- -17
- ],
- [
- 3,
- -27
- ],
- [
- 1,
- -27
- ],
- [
- 1,
- -13
- ],
- [
- 2,
- -12
- ],
- [
- 4,
- -12
- ],
- [
- 1,
- -13
- ],
- [
- -3,
- -14
- ],
- [
- -3,
- -14
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 13
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -8
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -13
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -12
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -19
- ],
- [
- 0,
- -13
- ],
- [
- -3,
- -25
- ],
- [
- -2,
- -12
- ],
- [
- -3,
- -15
- ],
- [
- -4,
- -18
- ],
- [
- -4,
- -24
- ],
- [
- -3,
- -24
- ],
- [
- -3,
- -15
- ],
- [
- -2,
- -15
- ],
- [
- -4,
- -25
- ],
- [
- -4,
- -26
- ],
- [
- -4,
- -28
- ],
- [
- -7,
- -32
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -16
- ],
- [
- -2,
- -14
- ],
- [
- -2,
- -14
- ],
- [
- -3,
- -23
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -15
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -7
- ],
- [
- -3,
- -13
- ],
- [
- -4,
- -11
- ],
- [
- -3,
- -4
- ],
- [
- -6,
- -6
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- -3
- ],
- [
- -7,
- -7
- ],
- [
- -6,
- -7
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -8,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -9,
- 12
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- -5,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 9
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 11
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- -5,
- 12
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 18
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 13
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 17
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 12
- ],
- [
- 4,
- 12
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 10
- ],
- [
- 3,
- 13
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 15
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- 7
- ],
- [
- -4,
- 13
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 12
- ],
- [
- -1,
- 21
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 11
- ],
- [
- 12,
- 40
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 13
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 10,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- -9
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 6,
- 8
- ],
- [
- 6,
- 9
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -11
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 8
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- -5,
- 7
- ],
- [
- -1,
- 10
- ],
- [
- 5,
- 18
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 10
- ],
- [
- 3,
- 19
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 7
- ],
- [
- 5,
- 14
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 7039,
- 5370
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 7041,
- 5424
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 2453,
- 6260
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 7,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 1919,
- 6263
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 2585,
- 6353
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -10
- ]
- ],
- [
- [
- 2591,
- 6407
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 2041,
- 6429
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 1950,
- 6575
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- -9
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 1897,
- 6589
- ],
- [
- 0,
- -3
- ],
- [
- -9,
- 11
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -8
- ]
- ],
- [
- [
- 1928,
- 6624
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 1887,
- 6598
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- 3,
- 9
- ],
- [
- 1,
- 19
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -20
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 1914,
- 6683
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- 12
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 1801,
- 6801
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -9
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 1715,
- 6851
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 12
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 1883,
- 6854
- ],
- [
- -2,
- -13
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 16
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -7
- ]
- ],
- [
- [
- 1857,
- 6857
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 4
- ],
- [
- -7,
- 12
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -10
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 1814,
- 7010
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 2301,
- 6679
- ],
- [
- 0,
- -12
- ],
- [
- -2,
- -10
- ],
- [
- -5,
- -20
- ],
- [
- -3,
- -12
- ],
- [
- -4,
- -36
- ],
- [
- -2,
- -24
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -25
- ],
- [
- 1,
- -21
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -13
- ],
- [
- 0,
- -10
- ],
- [
- 5,
- -17
- ],
- [
- 3,
- -6
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 8
- ],
- [
- -5,
- 16
- ],
- [
- 4,
- -25
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 4,
- -17
- ],
- [
- 5,
- -17
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- 11,
- -24
- ],
- [
- 7,
- -19
- ],
- [
- 3,
- -17
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -7
- ],
- [
- 5,
- -8
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -9
- ],
- [
- 3,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 11,
- -1
- ],
- [
- 4,
- -8
- ],
- [
- 6,
- -3
- ],
- [
- 4,
- -9
- ],
- [
- 3,
- -10
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 9,
- 6
- ],
- [
- 3,
- 3
- ],
- [
- 6,
- 4
- ],
- [
- 9,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 7,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 8,
- 8
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 6,
- 11
- ],
- [
- 2,
- 22
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 10
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 15
- ],
- [
- 5,
- 6
- ],
- [
- 8,
- 8
- ],
- [
- 2,
- 1
- ],
- [
- 26,
- 8
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -3
- ],
- [
- 6,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -7
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -11
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -6
- ],
- [
- -4,
- -9
- ],
- [
- -4,
- -7
- ],
- [
- -6,
- -16
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -14
- ],
- [
- -2,
- -14
- ],
- [
- -2,
- -9
- ],
- [
- -1,
- -12
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- 10
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 11
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 2438,
- 6022
- ],
- [
- -1,
- 1
- ],
- [
- -8,
- 16
- ],
- [
- -7,
- 17
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- -4,
- 8
- ],
- [
- -11,
- 17
- ],
- [
- -5,
- 8
- ],
- [
- -5,
- 9
- ],
- [
- -5,
- 6
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- -13,
- 10
- ],
- [
- -6,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -9,
- -12
- ],
- [
- -9,
- -5
- ],
- [
- -12,
- -11
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -8,
- 5
- ],
- [
- -11,
- 10
- ],
- [
- -16,
- 3
- ],
- [
- -10,
- 14
- ],
- [
- -11,
- 6
- ],
- [
- -7,
- 13
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -10,
- 5
- ],
- [
- -9,
- 3
- ],
- [
- -10,
- 11
- ],
- [
- -6,
- 4
- ],
- [
- -5,
- 5
- ],
- [
- -12,
- 8
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 7
- ],
- [
- -6,
- 7
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- 10
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- -9,
- 5
- ],
- [
- -4,
- 1
- ],
- [
- -9,
- 7
- ],
- [
- -12,
- 8
- ],
- [
- -3,
- 9
- ],
- [
- -4,
- 9
- ],
- [
- -6,
- 11
- ],
- [
- -3,
- 5
- ],
- [
- -7,
- 6
- ],
- [
- -3,
- 4
- ],
- [
- -6,
- 4
- ],
- [
- -9,
- 9
- ],
- [
- -3,
- 8
- ],
- [
- -2,
- 7
- ],
- [
- -5,
- 8
- ],
- [
- -5,
- 15
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- -6,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 9
- ],
- [
- -3,
- 9
- ],
- [
- 0,
- 20
- ],
- [
- -4,
- 17
- ],
- [
- -4,
- 9
- ],
- [
- -2,
- 3
- ],
- [
- -6,
- 13
- ],
- [
- -5,
- 8
- ],
- [
- -4,
- 14
- ],
- [
- -5,
- 10
- ],
- [
- -6,
- 15
- ],
- [
- -4,
- 8
- ],
- [
- -19,
- 26
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- -6
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -5,
- 11
- ],
- [
- -2,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -8,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- -7,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 17
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -5,
- 10
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -9,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 4
- ],
- [
- -7,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 8
- ],
- [
- -6,
- 16
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 9
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -4,
- 11
- ],
- [
- -2,
- 8
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 8
- ],
- [
- -2,
- 10
- ],
- [
- -4,
- 12
- ],
- [
- -3,
- 8
- ],
- [
- -1,
- 8
- ],
- [
- 1,
- 9
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -7,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -8,
- 11
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 5
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -8
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -22
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -11
- ],
- [
- 0,
- -8
- ],
- [
- 2,
- -7
- ],
- [
- -1,
- -16
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- 4,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 5,
- -6
- ],
- [
- 3,
- -7
- ],
- [
- 7,
- -10
- ],
- [
- 2,
- -4
- ],
- [
- 6,
- -15
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -17
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 5,
- -10
- ],
- [
- 7,
- -8
- ],
- [
- 1,
- -10
- ],
- [
- 2,
- -9
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 4,
- -7
- ],
- [
- 1,
- -10
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- 7,
- -10
- ],
- [
- 0,
- -7
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -12
- ],
- [
- 1,
- -8
- ],
- [
- 4,
- -12
- ],
- [
- 4,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 3,
- -16
- ],
- [
- 4,
- -9
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -14
- ],
- [
- 3,
- -8
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 7,
- -10
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -8
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -11
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 19
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -7,
- 8
- ],
- [
- -4,
- 8
- ],
- [
- -4,
- 5
- ],
- [
- -4,
- 8
- ],
- [
- -10,
- 13
- ],
- [
- -5,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 10
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 16
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 8
- ],
- [
- -6,
- 18
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -10,
- 15
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 9
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- -4
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 7
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -5,
- 6
- ],
- [
- -4,
- 7
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 12
- ],
- [
- 1,
- 12
- ],
- [
- -3,
- 10
- ],
- [
- -4,
- 8
- ],
- [
- -10,
- 21
- ],
- [
- -6,
- 10
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- 6
- ],
- [
- -7,
- 8
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 10
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 12
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 4
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 6
- ],
- [
- -7,
- 10
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 9
- ],
- [
- -4,
- 8
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- -6,
- 9
- ],
- [
- -2,
- 11
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 11
- ]
- ],
- [
- [
- 1746,
- 7058
- ],
- [
- 8,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 8,
- 2
- ],
- [
- 8,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 8,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- -2,
- -9
- ],
- [
- -1,
- -3
- ],
- [
- 13,
- -8
- ],
- [
- 13,
- -9
- ],
- [
- 13,
- -8
- ],
- [
- 14,
- -9
- ],
- [
- 13,
- -8
- ],
- [
- 13,
- -9
- ],
- [
- 13,
- -8
- ],
- [
- 13,
- -9
- ],
- [
- 10,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 9,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -7
- ],
- [
- 3,
- -6
- ],
- [
- 4,
- -3
- ],
- [
- 6,
- -9
- ],
- [
- 8,
- -15
- ],
- [
- 6,
- -10
- ],
- [
- 5,
- -5
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -7
- ],
- [
- 4,
- -19
- ],
- [
- 0,
- -8
- ],
- [
- 2,
- -8
- ],
- [
- 3,
- -10
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -6
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- -5
- ],
- [
- 7,
- -8
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 8
- ],
- [
- 3,
- 11
- ],
- [
- 3,
- 6
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -6
- ],
- [
- 7,
- -10
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 5,
- -7
- ],
- [
- 3,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- 3,
- -9
- ],
- [
- 4,
- -12
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -8
- ],
- [
- 3,
- -10
- ],
- [
- 4,
- -8
- ],
- [
- 4,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- -9
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -11
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 5,
- -3
- ],
- [
- 8,
- -1
- ],
- [
- 6,
- -4
- ],
- [
- 4,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ]
- ],
- [
- [
- 9711,
- 5520
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -6
- ]
- ],
- [
- [
- 9765,
- 5590
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ]
- ],
- [
- [
- 9752,
- 5595
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 9689,
- 5605
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 9635,
- 5826
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5598,
- 7617
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 5117,
- 6286
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -15
- ],
- [
- 0,
- -17
- ],
- [
- 0,
- -15
- ],
- [
- 0,
- -18
- ],
- [
- 0,
- -14
- ],
- [
- 0,
- -17
- ],
- [
- 0,
- -17
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -12
- ],
- [
- -2,
- -13
- ],
- [
- -3,
- -10
- ],
- [
- -1,
- -9
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -9
- ],
- [
- 0,
- -8
- ],
- [
- -6,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -9,
- 0
- ],
- [
- -7,
- -1
- ],
- [
- -9,
- 0
- ],
- [
- -7,
- -1
- ],
- [
- -8,
- -1
- ],
- [
- -7,
- -1
- ],
- [
- -5,
- -8
- ],
- [
- -5,
- -8
- ],
- [
- -7,
- -2
- ],
- [
- -7,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 4683,
- 5898
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 8
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- -3,
- 9
- ]
- ],
- [
- [
- 4658,
- 6037
- ],
- [
- 5,
- -4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -5
- ],
- [
- 5,
- -11
- ],
- [
- 5,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -9
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 17
- ],
- [
- 1,
- 16
- ],
- [
- 2,
- 13
- ],
- [
- -5,
- 9
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 14
- ],
- [
- 0,
- 14
- ],
- [
- -1,
- 15
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 15
- ],
- [
- 0,
- 14
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 15
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 14
- ],
- [
- 0,
- 15
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 15
- ],
- [
- 0,
- 14
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 15
- ],
- [
- -1,
- 14
- ],
- [
- 0,
- 14
- ],
- [
- -1,
- 15
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 15
- ],
- [
- 0,
- 14
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 15
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 14
- ],
- [
- 0,
- 15
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 13
- ],
- [
- 9,
- 0
- ],
- [
- 9,
- 0
- ],
- [
- 9,
- 0
- ],
- [
- 13,
- 0
- ],
- [
- 10,
- 1
- ]
- ],
- [
- [
- 5404,
- 7249
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 5397,
- 7259
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 7727,
- 5756
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- 5
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 7727,
- 5815
- ],
- [
- 3,
- -10
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 7737,
- 5815
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- -7
- ]
- ],
- [
- [
- 7728,
- 5845
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 7737,
- 5860
- ],
- [
- -1,
- -12
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 7724,
- 5857
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 10
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 7736,
- 5870
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 10
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 7725,
- 5884
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 7723,
- 5897
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 7733,
- 5909
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 10
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 7730,
- 5938
- ],
- [
- 0,
- -9
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 7633,
- 6095
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 7624,
- 6102
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- 8
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -8
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 7710,
- 6120
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -8
- ]
- ],
- [
- [
- 7602,
- 6260
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 7
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 7602,
- 6310
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ]
- ],
- [
- [
- 7596,
- 6330
- ],
- [
- 1,
- -8
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 7583,
- 6331
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 8
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -7
- ]
- ],
- [
- [
- 7780,
- 6354
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -10
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -8,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -7
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -7
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- -18
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -8
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -8
- ],
- [
- 4,
- -10
- ],
- [
- 3,
- -7
- ],
- [
- 3,
- -6
- ],
- [
- 5,
- -9
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -9
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -11
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 6
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -6,
- -8
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -10
- ],
- [
- 1,
- -9
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -8
- ],
- [
- 2,
- -6
- ],
- [
- 4,
- -7
- ],
- [
- 6,
- -11
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -15
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -8
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -18
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -9
- ],
- [
- -4,
- -17
- ],
- [
- -5,
- -10
- ],
- [
- -4,
- -8
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 7741,
- 5771
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -8
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 10
- ],
- [
- -2,
- 19
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 10
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 11
- ],
- [
- -5,
- 15
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- -19
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 10
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 10
- ],
- [
- -3,
- 10
- ],
- [
- 0,
- 8
- ],
- [
- -2,
- 11
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 18
- ],
- [
- -2,
- 7
- ],
- [
- 1,
- 8
- ],
- [
- -2,
- 25
- ],
- [
- -3,
- 9
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 12
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 9
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 10
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -10
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -8
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 2,
- -8
- ],
- [
- -1,
- -4
- ],
- [
- 3,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -7,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -8
- ],
- [
- -5,
- -7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -9
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 7
- ],
- [
- 2,
- 22
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 13
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 11
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 15
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 22
- ],
- [
- -4,
- 18
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 7
- ],
- [
- 2,
- 0
- ],
- [
- -4,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 15
- ],
- [
- 1,
- 8
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 9
- ],
- [
- -3,
- 10
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -7
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 12
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- 12
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -9
- ],
- [
- -3,
- 10
- ],
- [
- -7,
- 14
- ],
- [
- -1,
- 4
- ]
- ],
- [
- [
- 5533,
- 7691
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 7,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5537,
- 7595
- ],
- [
- -5,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -7,
- 11
- ],
- [
- -7,
- 8
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 7439,
- 8015
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 8,
- 4
- ],
- [
- 4,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 7,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 7,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 6,
- -7
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 9,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 7,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 10,
- 8
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 8,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 6
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 5,
- -6
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 6,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 6,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 9034,
- 5999
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 9045,
- 6046
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 9048,
- 6055
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 9047,
- 6125
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 9048,
- 6225
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 9047,
- 6264
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5913,
- 3637
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 0
- ]
- ],
- [
- [
- 5891,
- 3638
- ],
- [
- 0,
- 18
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 5887,
- 3689
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 8
- ],
- [
- 0,
- 16
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 10
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 11
- ],
- [
- -1,
- 9
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 8
- ],
- [
- -2,
- 15
- ],
- [
- -1,
- 11
- ],
- [
- -2,
- 12
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ]
- ],
- [
- [
- 5869,
- 3893
- ],
- [
- 3,
- 6
- ],
- [
- 4,
- 9
- ],
- [
- 5,
- 10
- ],
- [
- 4,
- 8
- ],
- [
- 4,
- 8
- ],
- [
- 5,
- 11
- ],
- [
- 5,
- 10
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 9
- ],
- [
- 4,
- 11
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 9
- ],
- [
- 2,
- 8
- ],
- [
- 4,
- 14
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 10
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 19
- ],
- [
- 1,
- 18
- ],
- [
- -1,
- 11
- ],
- [
- -2,
- 12
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- -5,
- 5
- ],
- [
- -6,
- 3
- ],
- [
- -8,
- 2
- ],
- [
- -7,
- 12
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 8
- ],
- [
- -8,
- 1
- ],
- [
- -9,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 9
- ]
- ],
- [
- [
- 5844,
- 4283
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 6,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 7,
- 4
- ],
- [
- 6,
- 3
- ],
- [
- 6,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 7,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- 5
- ],
- [
- 9,
- 6
- ],
- [
- 3,
- 3
- ],
- [
- 6,
- 4
- ]
- ],
- [
- [
- 5922,
- 4377
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -14
- ],
- [
- 3,
- -9
- ],
- [
- 4,
- -7
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -10
- ],
- [
- 0,
- -8
- ],
- [
- 1,
- -11
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -9
- ],
- [
- -3,
- -11
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -8
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 4,
- -7
- ],
- [
- 5,
- -12
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 17
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 16
- ],
- [
- 1,
- 15
- ],
- [
- -1,
- 9
- ],
- [
- 1,
- 13
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 11
- ],
- [
- -4,
- 12
- ],
- [
- -6,
- 15
- ],
- [
- -3,
- 8
- ],
- [
- -3,
- 9
- ],
- [
- -7,
- 15
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 10
- ],
- [
- -1,
- 15
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 11
- ],
- [
- -1,
- 10
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 8
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 8
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- 0
- ]
- ],
- [
- [
- 5971,
- 4517
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 6
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- -6
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- 7
- ],
- [
- 5,
- 4
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 6
- ],
- [
- 5,
- 7
- ],
- [
- 5,
- 8
- ],
- [
- 3,
- 5
- ]
- ],
- [
- [
- 6123,
- 4581
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -12
- ],
- [
- 1,
- -10
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -11
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -13
- ],
- [
- 0,
- -16
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -12
- ],
- [
- -7,
- -17
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -9
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- -8
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -6
- ],
- [
- -11,
- -12
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -8
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -7,
- -5
- ],
- [
- -7,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -6,
- -4
- ],
- [
- -9,
- -10
- ],
- [
- -7,
- -10
- ],
- [
- -5,
- -10
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -11
- ],
- [
- -6,
- -12
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- -9
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- -5
- ],
- [
- -4,
- -4
- ],
- [
- -5,
- -10
- ],
- [
- -8,
- -19
- ],
- [
- -12,
- -18
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 7
- ],
- [
- -2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -9
- ],
- [
- -2,
- -18
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -6
- ],
- [
- 3,
- -8
- ],
- [
- 4,
- -22
- ],
- [
- 0,
- -12
- ],
- [
- 4,
- -14
- ],
- [
- 0,
- -7
- ],
- [
- 2,
- -16
- ],
- [
- 0,
- -12
- ],
- [
- -1,
- -8
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -16
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -11
- ],
- [
- -3,
- -13
- ],
- [
- -3,
- -30
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -14
- ],
- [
- -1,
- -6
- ],
- [
- -5,
- -15
- ],
- [
- -3,
- -7
- ],
- [
- -5,
- -6
- ],
- [
- -10,
- -10
- ],
- [
- -22,
- -14
- ],
- [
- -8,
- -7
- ],
- [
- -5,
- -4
- ],
- [
- -11,
- -13
- ],
- [
- -5,
- -9
- ],
- [
- -2,
- -10
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -9
- ],
- [
- -1,
- -34
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5962,
- 4492
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ]
- ],
- [
- [
- 5964,
- 4486
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 4545,
- 6319
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- -9
- ]
- ],
- [
- [
- 4658,
- 6037
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 6
- ],
- [
- -6,
- 10
- ],
- [
- -6,
- 4
- ],
- [
- -7,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -10
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 4540,
- 6096
- ],
- [
- 0,
- 26
- ],
- [
- 2,
- 10
- ],
- [
- 0,
- 8
- ],
- [
- 3,
- 19
- ],
- [
- 4,
- 15
- ],
- [
- 4,
- 20
- ],
- [
- 1,
- 20
- ],
- [
- 0,
- 19
- ],
- [
- -1,
- 18
- ],
- [
- -2,
- 11
- ],
- [
- -2,
- 16
- ],
- [
- -2,
- 9
- ],
- [
- -5,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 6
- ],
- [
- -4,
- -3
- ],
- [
- 4,
- 19
- ],
- [
- 2,
- 12
- ],
- [
- -1,
- 8
- ],
- [
- 1,
- 5
- ],
- [
- -3,
- 11
- ],
- [
- -3,
- 13
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 10
- ],
- [
- -4,
- 16
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -14
- ]
- ],
- [
- [
- 4526,
- 6382
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 10
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 7
- ],
- [
- 3,
- 5
- ],
- [
- 5,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 9
- ]
- ],
- [
- [
- 3273,
- 6148
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 6601,
- 4004
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5922,
- 4377
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 6,
- 5
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 11
- ],
- [
- 1,
- 13
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 9
- ],
- [
- 1,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 11
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ]
- ],
- [
- [
- 5914,
- 4642
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- -6
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -3
- ],
- [
- 7,
- -11
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- -11
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -10
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 8093,
- 5323
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 18
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 7894,
- 5341
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 7814,
- 5356
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8267,
- 5424
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -4
- ]
- ],
- [
- [
- 7785,
- 5489
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 10
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -6
- ]
- ],
- [
- [
- 7773,
- 5556
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 7835,
- 5543
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -18
- ],
- [
- 8,
- -12
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -7
- ],
- [
- 3,
- -8
- ],
- [
- 6,
- -24
- ],
- [
- 1,
- -10
- ],
- [
- 0,
- -16
- ],
- [
- -1,
- -24
- ],
- [
- -2,
- -12
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -8
- ],
- [
- -1,
- -9
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -19
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 8,
- -12
- ],
- [
- 0,
- -4
- ],
- [
- 4,
- -14
- ],
- [
- 7,
- -31
- ],
- [
- 2,
- -14
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -13,
- 14
- ],
- [
- -4,
- 4
- ],
- [
- -5,
- 10
- ],
- [
- -11,
- 12
- ],
- [
- -8,
- 12
- ],
- [
- -3,
- 7
- ],
- [
- -7,
- 6
- ],
- [
- -3,
- 8
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- 7
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 6
- ],
- [
- -5,
- 13
- ],
- [
- -3,
- 9
- ],
- [
- -4,
- 8
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 16
- ],
- [
- -4,
- 22
- ],
- [
- -3,
- 32
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 11
- ],
- [
- -3,
- 12
- ],
- [
- -3,
- 8
- ],
- [
- -1,
- 7
- ]
- ],
- [
- [
- 7780,
- 5555
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -8
- ],
- [
- 6,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ]
- ],
- [
- [
- 8044,
- 5301
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -6
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 8,
- -9
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -7
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 11,
- 4
- ],
- [
- 17,
- 9
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 8
- ],
- [
- 5,
- 13
- ],
- [
- 3,
- 10
- ],
- [
- 8,
- 15
- ],
- [
- 6,
- 14
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 8198,
- 5466
- ],
- [
- 6,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 4,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 4,
- 9
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 10,
- 22
- ],
- [
- 1,
- 4
- ],
- [
- 6,
- 23
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 8
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -7
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- 9,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 4,
- -2
- ],
- [
- 7,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -6,
- -5
- ],
- [
- -6,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -9
- ],
- [
- 4,
- -9
- ],
- [
- 7,
- -10
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 8253,
- 5597
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -1
- ]
- ],
- [
- [
- 5649,
- 4168
- ],
- [
- 6,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 6,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 12,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 5,
- -9
- ]
- ],
- [
- [
- 5554,
- 3757
- ],
- [
- 0,
- -24
- ],
- [
- 0,
- -26
- ],
- [
- 0,
- -26
- ],
- [
- 0,
- -25
- ],
- [
- 0,
- -26
- ],
- [
- 0,
- -26
- ],
- [
- 0,
- -25
- ],
- [
- 0,
- -26
- ],
- [
- 0,
- -8
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -7,
- 1
- ],
- [
- -8,
- -2
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5456,
- 3535
- ],
- [
- -3,
- 5
- ],
- [
- -9,
- 18
- ],
- [
- -3,
- 4
- ],
- [
- -5,
- 11
- ],
- [
- -10,
- 33
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 16
- ],
- [
- -2,
- 12
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- -4,
- 6
- ],
- [
- -1,
- 21
- ],
- [
- -2,
- 13
- ],
- [
- 0,
- 11
- ],
- [
- -1,
- 10
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 12
- ],
- [
- -2,
- 14
- ],
- [
- -4,
- 14
- ],
- [
- -4,
- 20
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 23
- ],
- [
- -1,
- 10
- ],
- [
- 1,
- 11
- ],
- [
- -2,
- 12
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 15
- ],
- [
- -4,
- 15
- ],
- [
- -9,
- 24
- ],
- [
- -3,
- 9
- ],
- [
- -1,
- 8
- ],
- [
- -11,
- 32
- ],
- [
- -5,
- 23
- ],
- [
- -3,
- 19
- ],
- [
- -3,
- 9
- ],
- [
- -16,
- 64
- ],
- [
- -4,
- 10
- ],
- [
- -7,
- 12
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 11
- ],
- [
- -4,
- 16
- ],
- [
- -2,
- 14
- ],
- [
- 0,
- 17
- ],
- [
- 1,
- 12
- ]
- ],
- [
- [
- 9653,
- 3881
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 9666,
- 3949
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- -1,
- -10
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 8
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 9649,
- 3965
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -10
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 9625,
- 3992
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 9560,
- 4018
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- -6
- ],
- [
- 11,
- -17
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 7,
- -8
- ],
- [
- 5,
- -9
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -9
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -6,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -6,
- 11
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -5,
- 12
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -4,
- 9
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- -6
- ]
- ],
- [
- [
- 9442,
- 4071
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 5416,
- 6508
- ],
- [
- 3,
- -33
- ],
- [
- 2,
- -29
- ],
- [
- 0,
- -18
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 9,
- -26
- ],
- [
- -2,
- -5
- ],
- [
- 1,
- -8
- ],
- [
- 3,
- -4
- ],
- [
- 7,
- -15
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- -18
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -23
- ],
- [
- -1,
- -17
- ],
- [
- -1,
- -23
- ],
- [
- -1,
- -27
- ],
- [
- -1,
- -23
- ],
- [
- -2,
- -30
- ],
- [
- -1,
- -29
- ],
- [
- -7,
- -16
- ],
- [
- -13,
- -28
- ],
- [
- -10,
- -23
- ],
- [
- -6,
- -15
- ],
- [
- -10,
- -30
- ],
- [
- -5,
- -19
- ],
- [
- -3,
- -11
- ],
- [
- -2,
- -4
- ],
- [
- 2,
- -14
- ],
- [
- 2,
- -25
- ]
- ],
- [
- [
- 5377,
- 5973
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -7
- ],
- [
- -1,
- -6
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- -9,
- 6
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -12,
- 1
- ],
- [
- -14,
- -2
- ],
- [
- -6,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -4
- ],
- [
- -8,
- -18
- ],
- [
- -12,
- 0
- ],
- [
- -7,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- -9,
- 9
- ],
- [
- -10,
- 13
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -12,
- -13
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- 15
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -9,
- 6
- ],
- [
- -10,
- 6
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -9
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -23
- ],
- [
- -1,
- -7
- ],
- [
- -3,
- -9
- ],
- [
- -5,
- -9
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- -8
- ],
- [
- -1,
- -11
- ],
- [
- 0,
- -8
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 9664,
- 3512
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5202,
- 5438
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 5377,
- 5973
- ],
- [
- 5,
- -12
- ],
- [
- 4,
- -14
- ],
- [
- 4,
- -10
- ]
- ],
- [
- [
- 5237,
- 5458
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- -1
- ],
- [
- 3,
- -14
- ],
- [
- -1,
- -6
- ],
- [
- -8,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- -4,
- -7
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- 2,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- -8
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -6,
- 11
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 10
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -5,
- -4
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 13
- ],
- [
- -7,
- 11
- ],
- [
- -5,
- 7
- ],
- [
- -9,
- 4
- ],
- [
- -18,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -8
- ],
- [
- -15,
- -1
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 2690,
- 6047
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -23
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -15
- ],
- [
- -2,
- -24
- ],
- [
- 2,
- -22
- ],
- [
- -1,
- -20
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -12
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -10
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 2618,
- 5821
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 7
- ],
- [
- -4,
- 7
- ],
- [
- -14,
- 24
- ],
- [
- -5,
- 14
- ],
- [
- -3,
- 10
- ],
- [
- -3,
- 5
- ],
- [
- -7,
- 11
- ],
- [
- -2,
- 4
- ],
- [
- -8,
- 15
- ],
- [
- -5,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 283,
- 4085
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 3105,
- 5883
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- -4
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 3251,
- 6192
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5093,
- 8143
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 2
- ]
- ],
- [
- [
- 5109,
- 8164
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 0
- ]
- ],
- [
- [
- 5135,
- 8241
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 5
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 5141,
- 8254
- ],
- [
- -5,
- -4
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 5117,
- 8144
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 8,
- -6
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 8
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 7
- ],
- [
- 3,
- 22
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 3
- ],
- [
- 8,
- 8
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 10,
- 6
- ],
- [
- 5,
- 2
- ],
- [
- 8,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 7,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ]
- ],
- [
- [
- 5166,
- 8107
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ]
- ],
- [
- [
- 5147,
- 8259
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- -8,
- -3
- ]
- ],
- [
- [
- 5164,
- 8263
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5175,
- 8266
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 5187,
- 8270
- ],
- [
- -3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5141,
- 8657
- ],
- [
- 0,
- -6
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 5137,
- 8702
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 5225,
- 8832
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 5235,
- 8851
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 7,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -9,
- -2
- ]
- ],
- [
- [
- 5311,
- 8920
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -7,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 5332,
- 8964
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5347,
- 8980
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -3
- ]
- ],
- [
- [
- 5344,
- 8988
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- -1
- ]
- ],
- [
- [
- 5360,
- 9093
- ],
- [
- -4,
- -3
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -4
- ]
- ],
- [
- [
- 5385,
- 9116
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 5
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ]
- ],
- [
- [
- 5422,
- 9155
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 5437,
- 9133
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 6
- ],
- [
- 5,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -5,
- -4
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -7,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -8,
- -6
- ],
- [
- -8,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 6,
- 5
- ],
- [
- 4,
- 4
- ],
- [
- 14,
- 2
- ],
- [
- 9,
- 10
- ],
- [
- 2,
- 11
- ],
- [
- 2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- -5,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -4,
- -7
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5486,
- 9192
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -5,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 8,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 5832,
- 9204
- ],
- [
- -6,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 5577,
- 9221
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -7
- ]
- ],
- [
- [
- 5534,
- 9220
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -10,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 5549,
- 9228
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 5655,
- 9247
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 9,
- 6
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 5667,
- 9248
- ],
- [
- -6,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 5651,
- 9263
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- -7
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 8,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- 6
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 5857,
- 9203
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -7,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -12,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -10
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -2
- ]
- ],
- [
- [
- 5572,
- 9160
- ],
- [
- -3,
- 0
- ],
- [
- -11,
- -1
- ],
- [
- 5,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- -3
- ],
- [
- 8,
- -4
- ],
- [
- -5,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -12,
- 4
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -11,
- 4
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -8
- ],
- [
- -10,
- 5
- ],
- [
- -6,
- 3
- ],
- [
- -5,
- -4
- ],
- [
- -10,
- -8
- ],
- [
- -6,
- -15
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- 5,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -10,
- -12
- ],
- [
- -9,
- -13
- ],
- [
- -4,
- -3
- ],
- [
- 2,
- -11
- ],
- [
- -3,
- -3
- ],
- [
- -7,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -11,
- -1
- ],
- [
- 2,
- -12
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -20
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -6,
- -13
- ],
- [
- -6,
- -9
- ],
- [
- -7,
- -12
- ],
- [
- 6,
- -4
- ],
- [
- 6,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -8,
- 1
- ],
- [
- -10,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -6
- ],
- [
- -7,
- -10
- ],
- [
- -3,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- -6,
- -12
- ],
- [
- 4,
- -11
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 5,
- -18
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -11
- ],
- [
- -2,
- -15
- ],
- [
- 4,
- -4
- ],
- [
- 5,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -12
- ],
- [
- 3,
- -8
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -8
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -8
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 7
- ]
- ],
- [
- [
- 5316,
- 8584
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 10
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -5,
- -12
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -7,
- -6
- ],
- [
- -11,
- -15
- ],
- [
- -6,
- -5
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- -4
- ],
- [
- -11,
- -3
- ],
- [
- -8,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -9,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- -8,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 7,
- -3
- ],
- [
- 7,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- -4
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -5,
- -4
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 13
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 6,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 6,
- 7
- ],
- [
- 5,
- 3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- 4,
- 12
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -13,
- -5
- ],
- [
- -6,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 11,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- -5
- ],
- [
- -6,
- -2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 1
- ],
- [
- 14,
- 3
- ],
- [
- 8,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 14,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- -6,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -9,
- 2
- ],
- [
- -12,
- -1
- ],
- [
- -5,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 9,
- 1
- ],
- [
- 9,
- -4
- ],
- [
- 7,
- -2
- ],
- [
- 12,
- 1
- ],
- [
- 7,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -8,
- -2
- ],
- [
- -7,
- 0
- ],
- [
- -13,
- 4
- ],
- [
- -5,
- 2
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 8
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 10,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- -6,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 9,
- -1
- ],
- [
- 6,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 7,
- 2
- ],
- [
- 8,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -18,
- -3
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 11,
- 4
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -1
- ],
- [
- 9,
- -7
- ],
- [
- 0,
- 2
- ],
- [
- -8,
- 9
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 9,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 8,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 6
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 7,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -16,
- -12
- ],
- [
- -8,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 6,
- 5
- ],
- [
- 9,
- 14
- ],
- [
- 7,
- 5
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 4
- ],
- [
- 18,
- 12
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- 7
- ],
- [
- 5,
- 7
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -6,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 8,
- 10
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -5,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 16,
- 5
- ],
- [
- 8,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -8,
- -3
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -2,
- 11
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 18,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -13,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 7
- ],
- [
- 6,
- 4
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- 5
- ],
- [
- 3,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -8,
- -5
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 6,
- 8
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -7,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 6,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -10
- ],
- [
- 4,
- -8
- ],
- [
- 2,
- 0
- ],
- [
- -2,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 6,
- 1
- ],
- [
- 7,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 7,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -7,
- -1
- ],
- [
- -17,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 3
- ],
- [
- 7,
- 0
- ],
- [
- 8,
- 7
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 7
- ],
- [
- 4,
- 6
- ],
- [
- 11,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 6,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- 5
- ],
- [
- 13,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -10
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 13
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -11
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -7,
- -10
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 9,
- 10
- ],
- [
- 7,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 9
- ],
- [
- 2,
- 4
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 7
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- -4
- ],
- [
- 5,
- -3
- ],
- [
- 5,
- -4
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 10
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- 2
- ],
- [
- -6,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 6,
- -2
- ],
- [
- 6,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 8,
- 2
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 8,
- 9
- ],
- [
- 6,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 7,
- 10
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 5,
- 4
- ],
- [
- 6,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -6
- ],
- [
- -6,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -10
- ],
- [
- -4,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- 2
- ],
- [
- 6,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 14,
- 17
- ],
- [
- 7,
- 9
- ],
- [
- 8,
- 7
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- -5
- ],
- [
- -2,
- -7
- ],
- [
- -3,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 9,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 7,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -8,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 7,
- 6
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 9,
- -1
- ],
- [
- 7,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -9,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -8
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 8
- ],
- [
- 4,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 7,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 9,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -13,
- -4
- ],
- [
- -6,
- -4
- ],
- [
- -9,
- -2
- ],
- [
- -32,
- 3
- ],
- [
- 1,
- -3
- ],
- [
- 22,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- -1
- ]
- ],
- [
- [
- 5710,
- 9281
- ],
- [
- 8,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 2
- ]
- ],
- [
- [
- 4751,
- 9264
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 12,
- 7
- ],
- [
- 5,
- 6
- ],
- [
- 9,
- 3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -8,
- -4
- ],
- [
- -9,
- -2
- ],
- [
- -9,
- -6
- ]
- ],
- [
- [
- 5533,
- 9469
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 9,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 5600,
- 9711
- ],
- [
- 3,
- -2
- ],
- [
- 9,
- 1
- ],
- [
- 4,
- -10
- ],
- [
- 3,
- -10
- ],
- [
- 4,
- -1
- ],
- [
- 8,
- 1
- ],
- [
- 7,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- -6
- ],
- [
- 6,
- -2
- ],
- [
- 9,
- -5
- ],
- [
- 6,
- 0
- ],
- [
- 10,
- 2
- ],
- [
- 9,
- -4
- ],
- [
- 9,
- -5
- ],
- [
- -21,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -7,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -8,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -7,
- -1
- ],
- [
- -4,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 6,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -6,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -23,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- 9,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- -12,
- 5
- ],
- [
- -5,
- 3
- ],
- [
- -6,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -7,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 19,
- 3
- ],
- [
- 11,
- 2
- ],
- [
- 5,
- 0
- ]
- ],
- [
- [
- 5746,
- 9714
- ],
- [
- -4,
- 0
- ],
- [
- -8,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- -5
- ],
- [
- 6,
- -1
- ],
- [
- -4,
- -3
- ]
- ],
- [
- [
- 5312,
- 9712
- ],
- [
- 0,
- -4
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- -4
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- 6
- ],
- [
- -5,
- 4
- ],
- [
- -6,
- 3
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -7,
- 11
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -1
- ]
- ],
- [
- [
- 5806,
- 9729
- ],
- [
- 9,
- 0
- ],
- [
- 8,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- -10,
- -3
- ],
- [
- -12,
- 1
- ],
- [
- -11,
- 1
- ],
- [
- -13,
- -4
- ],
- [
- -4,
- 2
- ],
- [
- 7,
- 3
- ],
- [
- 7,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 5,
- -3
- ]
- ],
- [
- [
- 5466,
- 9786
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 7,
- -1
- ],
- [
- 10,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 6,
- 3
- ],
- [
- 11,
- 10
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 11,
- 1
- ],
- [
- 7,
- -1
- ],
- [
- 4,
- -6
- ],
- [
- 6,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- -7,
- -4
- ],
- [
- 6,
- -4
- ],
- [
- 10,
- -3
- ],
- [
- 6,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -10,
- 0
- ],
- [
- -9,
- -1
- ],
- [
- -17,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -5
- ],
- [
- -7,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -8,
- -1
- ],
- [
- -6,
- -5
- ],
- [
- -5,
- -10
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -7,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -13,
- 7
- ],
- [
- -11,
- 12
- ],
- [
- -11,
- 4
- ],
- [
- -7,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 9,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- 10
- ],
- [
- 36,
- 5
- ],
- [
- 11,
- 1
- ],
- [
- 12,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -9,
- -1
- ],
- [
- -13,
- -2
- ],
- [
- -7,
- 0
- ],
- [
- -7,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -7,
- -3
- ],
- [
- -7,
- -1
- ],
- [
- -7,
- -1
- ],
- [
- -14,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- -3
- ],
- [
- -2,
- 4
- ],
- [
- 21,
- 4
- ],
- [
- 10,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 17,
- 0
- ],
- [
- 7,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- 7,
- 7
- ],
- [
- 3,
- 3
- ],
- [
- -7,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -8,
- -6
- ],
- [
- -6,
- -2
- ],
- [
- -7,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -7,
- -1
- ],
- [
- -14,
- -1
- ],
- [
- -7,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- 2
- ],
- [
- -6,
- 5
- ],
- [
- -5,
- 7
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- -7,
- 3
- ],
- [
- -7,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 20,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -8,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- -3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 10,
- 1
- ],
- [
- 11,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 9,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 10,
- 3
- ],
- [
- 16,
- 2
- ],
- [
- 6,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -20,
- -1
- ],
- [
- -14,
- -7
- ],
- [
- 19,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 6,
- 6
- ],
- [
- 6,
- 4
- ],
- [
- 6,
- -2
- ],
- [
- 7,
- -5
- ],
- [
- 5,
- -8
- ],
- [
- 5,
- -7
- ],
- [
- 6,
- -10
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 12,
- -10
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- 8
- ],
- [
- -6,
- 13
- ],
- [
- -5,
- 10
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 6
- ],
- [
- 4,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 8,
- -7
- ]
- ],
- [
- [
- 5903,
- 9799
- ],
- [
- -26,
- -3
- ],
- [
- -3,
- 2
- ],
- [
- 43,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 7,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -29,
- -4
- ]
- ],
- [
- [
- 5520,
- 9809
- ],
- [
- -6,
- -3
- ],
- [
- -10,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- -3
- ]
- ],
- [
- [
- 5580,
- 9806
- ],
- [
- 3,
- -1
- ],
- [
- 15,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 8,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -8
- ],
- [
- 6,
- 0
- ],
- [
- 9,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 16,
- -3
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 17,
- 0
- ],
- [
- 12,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -9
- ],
- [
- -3,
- -2
- ],
- [
- -24,
- -11
- ],
- [
- -6,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- -7
- ],
- [
- -2,
- -2
- ],
- [
- -11,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -8,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -10,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -23,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 5,
- 5
- ],
- [
- -27,
- -2
- ],
- [
- -29,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -10,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -7,
- 3
- ],
- [
- -6,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 9,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- -9,
- 2
- ],
- [
- -10,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -7,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -12,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -9,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 9,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- -14,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -6,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 19,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- 3
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 7,
- -4
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- 7,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 6,
- -4
- ],
- [
- 6,
- -3
- ]
- ],
- [
- [
- 9637,
- 5154
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 9698,
- 2160
- ],
- [
- 2,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 9616,
- 2260
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 9670,
- 2485
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- -9
- ]
- ],
- [
- [
- 9631,
- 2554
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 9637,
- 2582
- ],
- [
- 2,
- -7
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 106,
- 2631
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 106,
- 2664
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 11,
- -2
- ]
- ],
- [
- [
- 9830,
- 2830
- ],
- [
- -4,
- -3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 9808,
- 2806
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 7
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -9
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -7,
- -12
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -19
- ],
- [
- -3,
- -8
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -6,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- -13
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -9
- ],
- [
- -2,
- -8
- ],
- [
- -4,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -9
- ],
- [
- -2,
- -8
- ],
- [
- -3,
- -10
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -5
- ],
- [
- -7,
- -10
- ],
- [
- -4,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -10,
- -3
- ],
- [
- -7,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 8
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -8,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 6,
- 10
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 9,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 6,
- 8
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- 4,
- 8
- ],
- [
- 5,
- 8
- ],
- [
- 5,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 6,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- 4,
- 11
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 10
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 14
- ],
- [
- 2,
- 14
- ],
- [
- 3,
- 11
- ],
- [
- 6,
- 8
- ],
- [
- 5,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -6
- ]
- ],
- [
- [
- 9875,
- 3094
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -6
- ]
- ],
- [
- [
- 9812,
- 3172
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 6,
- -14
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 6,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 10
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -10
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -14
- ],
- [
- 2,
- -14
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 9,
- -8
- ],
- [
- 4,
- -4
- ],
- [
- 11,
- -5
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 7,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -14
- ],
- [
- -1,
- -14
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -10
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- -4,
- -14
- ],
- [
- -4,
- -14
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -9
- ],
- [
- -4,
- -7
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -7
- ],
- [
- -4,
- -8
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -6
- ],
- [
- -4,
- -5
- ],
- [
- -6,
- -8
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- 9
- ],
- [
- 5,
- 12
- ],
- [
- 4,
- 13
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 12
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 10
- ],
- [
- -5,
- 5
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -6,
- 5
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- 7
- ],
- [
- 7,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 10
- ],
- [
- 0,
- 10
- ],
- [
- 2,
- 12
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 11
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 10
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- -4,
- 8
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 14
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- -6
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- 4,
- -8
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- -15,
- 37
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 6
- ],
- [
- -4,
- 10
- ],
- [
- -5,
- 10
- ],
- [
- 5,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- -2,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -9
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 245,
- 4645
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 209,
- 4690
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 6631,
- 6348
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 7
- ],
- [
- 4,
- 9
- ],
- [
- 3,
- 11
- ],
- [
- 2,
- -10
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -9
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 6566,
- 6623
- ],
- [
- 3,
- -16
- ],
- [
- 4,
- -14
- ],
- [
- 3,
- -8
- ],
- [
- 4,
- -10
- ],
- [
- 6,
- -10
- ],
- [
- 3,
- -3
- ],
- [
- 11,
- -7
- ],
- [
- 6,
- -3
- ],
- [
- 8,
- -2
- ],
- [
- 5,
- -6
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -8
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- 5,
- -9
- ],
- [
- 3,
- -10
- ],
- [
- 3,
- -8
- ],
- [
- 3,
- -5
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -10
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -10
- ],
- [
- -4,
- -16
- ],
- [
- -2,
- -4
- ],
- [
- -7,
- -8
- ],
- [
- -5,
- -10
- ],
- [
- -5,
- -18
- ],
- [
- -5,
- -17
- ],
- [
- -1,
- -6
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -13
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -10
- ],
- [
- -2,
- -8
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -10
- ],
- [
- 0,
- -10
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -8
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -1
- ],
- [
- -7,
- -2
- ],
- [
- -7,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- -10
- ],
- [
- -3,
- -24
- ],
- [
- -4,
- -10
- ],
- [
- -4,
- -2
- ],
- [
- -7,
- -1
- ],
- [
- -11,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -6,
- -15
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -9
- ],
- [
- -3,
- -7
- ],
- [
- -8,
- -4
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -9,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -5,
- -3
- ],
- [
- -4,
- -6
- ],
- [
- -9,
- -2
- ],
- [
- -6,
- -4
- ]
- ],
- [
- [
- 6474,
- 6143
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 8
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 6
- ]
- ],
- [
- [
- 6443,
- 6278
- ],
- [
- 4,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 5,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 8
- ],
- [
- -2,
- 8
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 7
- ]
- ],
- [
- [
- 6557,
- 6685
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -18
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 6893,
- 6558
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- -5
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- 23
- ],
- [
- -2,
- 2
- ],
- [
- -11,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 7
- ],
- [
- -4,
- 9
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 7,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -10,
- -3
- ],
- [
- -5,
- -4
- ],
- [
- -8,
- 1
- ],
- [
- -9,
- -3
- ],
- [
- -8,
- -1
- ],
- [
- -4,
- -7
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -11,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- 3
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -10,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 2733,
- 5606
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 2803,
- 5659
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 2808,
- 5660
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 2715,
- 5724
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 2836,
- 5600
- ],
- [
- -1,
- 2
- ],
- [
- -7,
- 16
- ],
- [
- -5,
- 21
- ],
- [
- -2,
- 9
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- -3,
- 5
- ],
- [
- -4,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 11
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 4
- ],
- [
- -5,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- -10,
- -14
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -8
- ],
- [
- 5,
- -11
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- -3
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 9
- ],
- [
- -3,
- 16
- ],
- [
- -1,
- 11
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- 17
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 2706,
- 5735
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -11
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 5
- ],
- [
- 5,
- 7
- ],
- [
- 3,
- 4
- ],
- [
- 12,
- 7
- ],
- [
- 4,
- 8
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 6,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 7,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 12,
- -10
- ],
- [
- 7,
- -10
- ],
- [
- 3,
- -10
- ],
- [
- 9,
- -13
- ]
- ],
- [
- [
- 1436,
- 3779
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 3044,
- 4127
- ],
- [
- -2,
- 4
- ],
- [
- -9,
- 13
- ],
- [
- -4,
- 7
- ],
- [
- -3,
- 3
- ],
- [
- -8,
- 11
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 11
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -7,
- 5
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 3
- ],
- [
- -5,
- 8
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -9,
- 6
- ],
- [
- -5,
- 5
- ],
- [
- -8,
- 8
- ],
- [
- -4,
- 5
- ],
- [
- -9,
- 6
- ],
- [
- -3,
- 2
- ],
- [
- -9,
- 14
- ],
- [
- -6,
- 5
- ],
- [
- -5,
- 8
- ],
- [
- -16,
- 16
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 9
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 12
- ],
- [
- -6,
- 6
- ],
- [
- -6,
- 9
- ],
- [
- -2,
- 8
- ],
- [
- -3,
- 10
- ],
- [
- -1,
- 5
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 10
- ],
- [
- -2,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 16
- ],
- [
- -1,
- 9
- ],
- [
- -5,
- 15
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 9
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 11
- ],
- [
- -3,
- 11
- ],
- [
- -4,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 15
- ],
- [
- -3,
- 8
- ],
- [
- -9,
- 14
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 10
- ],
- [
- -2,
- 11
- ],
- [
- -10,
- 33
- ],
- [
- -2,
- 10
- ],
- [
- -3,
- 16
- ],
- [
- -2,
- 9
- ],
- [
- -2,
- 16
- ],
- [
- -4,
- 12
- ],
- [
- -2,
- 11
- ],
- [
- -3,
- 13
- ],
- [
- 0,
- 7
- ],
- [
- -5,
- 13
- ],
- [
- -2,
- 11
- ],
- [
- -4,
- 9
- ],
- [
- -4,
- 7
- ],
- [
- -2,
- 5
- ],
- [
- -6,
- 24
- ],
- [
- -1,
- 8
- ],
- [
- -4,
- 13
- ],
- [
- -4,
- 9
- ],
- [
- -2,
- 8
- ],
- [
- -4,
- 7
- ],
- [
- -19,
- 21
- ],
- [
- -7,
- 9
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- 9
- ],
- [
- -6,
- 18
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -3,
- 9
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 5
- ],
- [
- 2,
- 20
- ],
- [
- 1,
- 5
- ],
- [
- 10,
- 20
- ],
- [
- 2,
- 9
- ],
- [
- 4,
- 5
- ],
- [
- 5,
- 8
- ],
- [
- 4,
- 7
- ]
- ],
- [
- [
- 8339,
- 5487
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 8365,
- 5534
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 5
- ],
- [
- 4,
- -1
- ]
- ],
- [
- [
- 8391,
- 5554
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 4
- ],
- [
- 6,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 8493,
- 5585
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -10
- ]
- ],
- [
- [
- 8414,
- 5611
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 8251,
- 5638
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- -11
- ]
- ],
- [
- [
- 8259,
- 5657
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 8466,
- 5710
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8435,
- 5716
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 8498,
- 5736
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -6
- ]
- ],
- [
- [
- 8499,
- 5721
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- 1
- ],
- [
- -1,
- -9
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -8
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -9
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -13
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -12
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -9
- ],
- [
- -4,
- -8
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -15
- ],
- [
- -1,
- -10
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 14
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 12
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -14
- ],
- [
- 0,
- -14
- ],
- [
- -2,
- -6
- ],
- [
- -4,
- -12
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -8
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -8,
- 7
- ],
- [
- -6,
- 7
- ],
- [
- -5,
- 7
- ],
- [
- -4,
- 10
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- -2,
- 11
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 8
- ],
- [
- -2,
- 5
- ],
- [
- -6,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -15
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 10
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- -4,
- -12
- ],
- [
- -2,
- -10
- ],
- [
- -2,
- -10
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 17
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- -5
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 11
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- -3,
- 23
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -6
- ],
- [
- 7,
- -8
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -6
- ]
- ],
- [
- [
- 8501,
- 5746
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 8479,
- 5759
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -7
- ]
- ],
- [
- [
- 8460,
- 5748
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -7,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 5,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- -1,
- -8
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 8491,
- 5755
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -8
- ],
- [
- 2,
- -10
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 8330,
- 5788
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 8452,
- 5795
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 8406,
- 5787
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -9
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 8419,
- 5706
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 13
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 12
- ],
- [
- 0,
- 8
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 7,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -12
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 4,
- -14
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 8426,
- 5728
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 18
- ],
- [
- 0,
- 5
- ],
- [
- 3,
- 10
- ],
- [
- 2,
- 9
- ],
- [
- 4,
- 10
- ],
- [
- 0,
- 5
- ],
- [
- 3,
- 10
- ],
- [
- 3,
- 13
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -9
- ],
- [
- 1,
- -10
- ],
- [
- -1,
- -11
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -19
- ],
- [
- -4,
- -8
- ]
- ],
- [
- [
- 8437,
- 5834
- ],
- [
- 1,
- -8
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 8258,
- 5670
- ],
- [
- -3,
- -4
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 3,
- 10
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 8
- ],
- [
- 4,
- 8
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 7,
- 15
- ],
- [
- 5,
- 11
- ],
- [
- 5,
- 14
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 13
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 15
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 3,
- -14
- ],
- [
- 2,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -7,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- -5,
- -19
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 8329,
- 5848
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 8460,
- 5837
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -10
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- -10
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- 2,
- 14
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 13
- ],
- [
- -1,
- 13
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 8461,
- 5846
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 8
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8467,
- 5852
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 8402,
- 5853
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 6,
- 6
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -6
- ],
- [
- -9,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 9
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 13
- ],
- [
- 1,
- 18
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 6,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -5
- ]
- ],
- [
- [
- 8334,
- 5858
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 10
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 8335,
- 5885
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 8406,
- 5893
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 8478,
- 5905
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -10
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -10
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 10
- ],
- [
- 7,
- -3
- ],
- [
- 8,
- 1
- ],
- [
- 9,
- 2
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 8436,
- 5892
- ],
- [
- 5,
- -7
- ],
- [
- 4,
- -12
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -9
- ],
- [
- -4,
- -6
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 13
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -6
- ]
- ],
- [
- [
- 8397,
- 5905
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 8391,
- 5895
- ],
- [
- -3,
- -14
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 9
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -11
- ]
- ],
- [
- [
- 8437,
- 5901
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 10
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -9
- ]
- ],
- [
- [
- 8424,
- 5924
- ],
- [
- 2,
- -9
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- -12
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 8352,
- 5960
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -11
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 8
- ],
- [
- -3,
- 9
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 8386,
- 5964
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 8340,
- 5976
- ],
- [
- 0,
- -4
- ],
- [
- -5,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ]
- ],
- [
- [
- 8453,
- 5969
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 7
- ],
- [
- 0,
- 11
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 8393,
- 5993
- ],
- [
- 0,
- -2
- ],
- [
- -6,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 6,
- -10
- ]
- ],
- [
- [
- 8389,
- 6048
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 8363,
- 6256
- ],
- [
- 4,
- -3
- ],
- [
- 10,
- -11
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -17
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -9
- ],
- [
- -6,
- -23
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -10
- ],
- [
- -5,
- -2
- ],
- [
- -5,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -12
- ],
- [
- 4,
- -12
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- 3,
- -14
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- -14
- ],
- [
- -2,
- -13
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- 7
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -7,
- 9
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 7
- ],
- [
- -5,
- 10
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -8
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- -5,
- 7
- ],
- [
- -4,
- 8
- ],
- [
- -8,
- 9
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 8
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 6,
- 12
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- -7
- ],
- [
- 1,
- -10
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 23
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 11
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 10
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 3,
- 11
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- 5,
- 30
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 8
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 8386,
- 6272
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 8367,
- 6283
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 8375,
- 6299
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- -2
- ]
- ],
- [
- [
- 8387,
- 6357
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- -6
- ]
- ],
- [
- [
- 8385,
- 6381
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 8643,
- 5358
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 8738,
- 5609
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -9
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 9264,
- 4523
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 6,
- -7
- ]
- ],
- [
- [
- 9285,
- 4529
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 9191,
- 4575
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 9196,
- 4607
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -13
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 5,
- -8
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 9180,
- 4645
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 9175,
- 4637
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 8
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -6
- ]
- ],
- [
- [
- 9239,
- 4668
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ]
- ],
- [
- [
- 8988,
- 4687
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 4,
- -6
- ]
- ],
- [
- [
- 9196,
- 4681
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -9
- ]
- ],
- [
- [
- 8988,
- 4695
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 6,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 9111,
- 4848
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 9331,
- 4799
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -10
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -7
- ]
- ],
- [
- [
- 9087,
- 4871
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -7
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 9295,
- 4871
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -9
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 9055,
- 4912
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 9219,
- 4936
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 6
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- -2,
- -9
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -8
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -7
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -9,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 8
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- -3
- ],
- [
- -8,
- 12
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 18
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 6,
- 9
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- -3,
- 17
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 9267,
- 4948
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 9240,
- 5003
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -6
- ]
- ],
- [
- [
- 9224,
- 5014
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 9220,
- 5021
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 8915,
- 5022
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 4
- ]
- ],
- [
- [
- 8915,
- 5033
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 14,
- -12
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- -7
- ],
- [
- 10,
- -7
- ],
- [
- 10,
- -6
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 6,
- -8
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 12,
- -25
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -16
- ],
- [
- -1,
- -13
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 6,
- -4
- ],
- [
- 17,
- -17
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -11
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -10,
- -2
- ],
- [
- -6,
- 2
- ],
- [
- -5,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 4,
- -14
- ],
- [
- 3,
- -12
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 5,
- -10
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 6,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -10
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 5,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -14
- ],
- [
- 1,
- -7
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 9,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 5,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 8,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- 1
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 3
- ],
- [
- -12,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 5
- ],
- [
- -7,
- 9
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 8
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 12
- ],
- [
- -2,
- 6
- ],
- [
- -4,
- 11
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -7,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- -5
- ],
- [
- 6,
- -23
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- -3
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- -1
- ],
- [
- 6,
- -6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -7,
- -6
- ],
- [
- -5,
- -7
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -7,
- -2
- ],
- [
- -7,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 6
- ]
- ],
- [
- [
- 9248,
- 4910
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 8
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 9
- ],
- [
- -2,
- 8
- ],
- [
- -7,
- 19
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -6,
- 10
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -10,
- 12
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 4,
- -7
- ],
- [
- 5,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -6
- ],
- [
- 6,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -8
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 18,
- -30
- ],
- [
- 3,
- -8
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -5
- ]
- ],
- [
- [
- 9178,
- 5030
- ],
- [
- -6,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 9107,
- 5052
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 9084,
- 5071
- ],
- [
- 10,
- -4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- -1
- ]
- ],
- [
- [
- 9159,
- 5094
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -7
- ]
- ],
- [
- [
- 5544,
- 8321
- ],
- [
- 1,
- -1
- ],
- [
- 8,
- -1
- ],
- [
- 8,
- -1
- ],
- [
- 12,
- 0
- ],
- [
- 14,
- -1
- ],
- [
- 13,
- -1
- ],
- [
- 15,
- -1
- ],
- [
- 16,
- -1
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 5655,
- 8151
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -8
- ],
- [
- 2,
- -8
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -7,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -6
- ],
- [
- -7,
- -10
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- -9
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 5626,
- 8010
- ],
- [
- -2,
- 1
- ],
- [
- -8,
- 4
- ],
- [
- -5,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -8,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -7
- ],
- [
- -5,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 1
- ]
- ],
- [
- [
- 5396,
- 8279
- ],
- [
- 6,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -6,
- 2
- ],
- [
- -4,
- 1
- ]
- ],
- [
- [
- 5394,
- 8291
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 9,
- 5
- ],
- [
- 16,
- 7
- ],
- [
- 17,
- 7
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 5,
- 7
- ],
- [
- 9,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 7,
- 4
- ],
- [
- 16,
- 5
- ],
- [
- 7,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- -4
- ],
- [
- 7,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- 4,
- -13
- ],
- [
- 2,
- -5
- ],
- [
- 5,
- -4
- ],
- [
- 4,
- -1
- ],
- [
- 12,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 2
- ]
- ],
- [
- [
- 3114,
- 6224
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 3182,
- 6227
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -1
- ]
- ],
- [
- [
- 3163,
- 6246
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- -8
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -5
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 9
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- -2
- ],
- [
- 17,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 8469,
- 7461
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 8625,
- 7634
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 8629,
- 7620
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -4,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- 3,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -11
- ],
- [
- 1,
- -11
- ],
- [
- -1,
- -4
- ],
- [
- -10,
- -7
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -10
- ],
- [
- -5,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -7
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -8,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -11
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 8517,
- 7360
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- 5
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 7
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 7
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 6,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 5,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 8
- ],
- [
- 2,
- 5
- ],
- [
- 7,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 7,
- 24
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -5,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 7
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 6
- ]
- ],
- [
- [
- 4522,
- 7077
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ]
- ],
- [
- [
- 4304,
- 7313
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 4287,
- 7363
- ],
- [
- 2,
- 0
- ],
- [
- 9,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -8,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -4
- ]
- ],
- [
- [
- 4218,
- 7399
- ],
- [
- 2,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- -5
- ]
- ],
- [
- [
- 4204,
- 7403
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 4228,
- 7405
- ],
- [
- -1,
- -1
- ],
- [
- -8,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 5
- ],
- [
- 10,
- -6
- ],
- [
- 5,
- -4
- ]
- ],
- [
- [
- 4247,
- 7410
- ],
- [
- 0,
- -1
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 4135,
- 7454
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 4794,
- 7325
- ],
- [
- -3,
- 0
- ],
- [
- -9,
- -10
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 4
- ],
- [
- -10,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 8
- ],
- [
- 3,
- 15
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 13
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- 8
- ],
- [
- 6,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 4,
- 5
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -10
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 9
- ],
- [
- 2,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 4,
- 16
- ],
- [
- 5,
- 17
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 3,
- 20
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 10
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 8
- ],
- [
- -2,
- 16
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 7
- ]
- ],
- [
- [
- 5949,
- 6988
- ],
- [
- 6,
- 9
- ],
- [
- 2,
- 6
- ]
- ],
- [
- [
- 1153,
- 3982
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 1214,
- 4116
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 1092,
- 4125
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 1195,
- 4127
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 6
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 1088,
- 4136
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -4
- ]
- ],
- [
- [
- 1089,
- 4155
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 852,
- 4165
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 838,
- 4173
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 794,
- 4212
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 1015,
- 4227
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 1012,
- 4226
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 793,
- 4224
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 959,
- 4243
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 1041,
- 4257
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 971,
- 4271
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- -5
- ]
- ],
- [
- [
- 1148,
- 4578
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 1137,
- 4612
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 1138,
- 4625
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 4,
- 4
- ]
- ],
- [
- [
- 1109,
- 4641
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 1123,
- 4669
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 1109,
- 4671
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 6423,
- 6601
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 7
- ]
- ],
- [
- [
- 6411,
- 6612
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 17
- ],
- [
- -1,
- 13
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 3,
- 15
- ],
- [
- 3,
- 6
- ],
- [
- 4,
- 4
- ],
- [
- 4,
- -8
- ],
- [
- 4,
- -6
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -9
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -12
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -2
- ]
- ],
- [
- [
- 5783,
- 7802
- ],
- [
- 3,
- -6
- ],
- [
- 4,
- -3
- ],
- [
- 8,
- -4
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 5
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 5825,
- 7791
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -9
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -14,
- -5
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -7
- ],
- [
- -2,
- -5
- ],
- [
- 0,
- -18
- ],
- [
- -1,
- -11
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 5630,
- 7732
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -7
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ]
- ],
- [
- [
- 5635,
- 7945
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -5
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 8,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 5,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 8,
- 5
- ],
- [
- 6,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 7,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 9056,
- 7684
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 9051,
- 7687
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 9065,
- 7697
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 9074,
- 7703
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -6,
- -4
- ]
- ],
- [
- [
- 9060,
- 7747
- ],
- [
- 5,
- -4
- ],
- [
- 5,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -6
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- -6
- ],
- [
- -5,
- -6
- ],
- [
- -1,
- -10
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 5,
- 7
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 13
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 9127,
- 7794
- ],
- [
- -5,
- -4
- ],
- [
- -5,
- -2
- ],
- [
- -7,
- -8
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -7,
- -9
- ],
- [
- -3,
- -7
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- -8
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 5,
- 6
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 8,
- 12
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- 0
- ]
- ],
- [
- [
- 6332,
- 7804
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 9157,
- 7813
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- 6,
- 14
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 9
- ],
- [
- 9,
- 10
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- -9,
- -11
- ],
- [
- -1,
- -5
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -8
- ]
- ],
- [
- [
- 9221,
- 7885
- ],
- [
- -5,
- -6
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- 9
- ],
- [
- 4,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- -8,
- -14
- ]
- ],
- [
- [
- 9252,
- 7935
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 9279,
- 7994
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -4
- ]
- ],
- [
- [
- 9299,
- 8024
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 6,
- 15
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 9330,
- 8081
- ],
- [
- -3,
- -6
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 4
- ],
- [
- 7,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 11
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- -4,
- -9
- ]
- ],
- [
- [
- 9344,
- 8102
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -5
- ]
- ],
- [
- [
- 9323,
- 8111
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 8965,
- 8317
- ],
- [
- 6,
- -15
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 5,
- -17
- ],
- [
- 4,
- -11
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -10
- ],
- [
- 1,
- -15
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -15
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- -43
- ],
- [
- 2,
- -13
- ],
- [
- 6,
- -22
- ],
- [
- 3,
- -14
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -8
- ],
- [
- 5,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -11
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- -4,
- 5
- ],
- [
- -4,
- 8
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -10,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -11
- ],
- [
- -9,
- -38
- ],
- [
- -2,
- -10
- ],
- [
- -1,
- -11
- ],
- [
- 0,
- -9
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -8
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -13
- ],
- [
- 2,
- -9
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -11
- ],
- [
- 1,
- -9
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- 11
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 5
- ],
- [
- -6,
- 1
- ],
- [
- -6,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -16
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 16
- ],
- [
- 1,
- 14
- ],
- [
- 4,
- 20
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- -2,
- 16
- ],
- [
- -3,
- 11
- ],
- [
- -3,
- 10
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 13
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 13
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 37
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 11
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 13
- ],
- [
- -3,
- 12
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 7
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 20
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 14
- ],
- [
- 0,
- 14
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 12
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -5,
- 11
- ],
- [
- -4,
- 7
- ],
- [
- 6,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 9667,
- 8327
- ],
- [
- 1,
- -3
- ],
- [
- -11,
- 10
- ],
- [
- -6,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 5,
- -7
- ]
- ],
- [
- [
- 8810,
- 8357
- ],
- [
- -4,
- -10
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 6,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 8831,
- 8357
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 10
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 9,
- -5
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5544,
- 8321
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 4,
- 2
- ],
- [
- 8,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 7
- ],
- [
- 4,
- 7
- ],
- [
- 2,
- 3
- ]
- ],
- [
- [
- 5582,
- 8368
- ],
- [
- -3,
- -6
- ],
- [
- -7,
- -11
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 1,
- 10
- ],
- [
- 0,
- 9
- ]
- ],
- [
- [
- 9628,
- 8342
- ],
- [
- 0,
- -8
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -7,
- 6
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 8,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 4,
- -9
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -4
- ]
- ],
- [
- [
- 9182,
- 8583
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -5
- ]
- ],
- [
- [
- 9544,
- 8559
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 10
- ],
- [
- 2,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 12,
- 5
- ],
- [
- 9,
- 7
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -9
- ],
- [
- -1,
- -4
- ],
- [
- -10,
- -3
- ],
- [
- -9,
- -6
- ],
- [
- -9,
- -8
- ]
- ],
- [
- [
- 5994,
- 8938
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 6944,
- 9014
- ],
- [
- -5,
- 0
- ],
- [
- -5,
- 4
- ],
- [
- -5,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 6186,
- 9026
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 6396,
- 9169
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -6,
- -7
- ],
- [
- -13,
- -5
- ],
- [
- -7,
- -2
- ],
- [
- -7,
- 0
- ],
- [
- -6,
- 4
- ],
- [
- -4,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 6,
- 5
- ],
- [
- 6,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- 1
- ],
- [
- 21,
- -12
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -4
- ]
- ],
- [
- [
- 6870,
- 9189
- ],
- [
- -2,
- -5
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 5,
- 5
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 9484,
- 9152
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 8
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 6,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 9699,
- 9192
- ],
- [
- -8,
- -1
- ],
- [
- -16,
- 5
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- 4
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 28,
- -8
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 6679,
- 9212
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -8,
- 9
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 5
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 9,
- -5
- ],
- [
- 6,
- -5
- ],
- [
- 6,
- -3
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 6848,
- 9247
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- 3,
- -9
- ]
- ],
- [
- [
- 9463,
- 9263
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ]
- ],
- [
- [
- 6469,
- 9294
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -5,
- 4
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -2
- ]
- ],
- [
- [
- 8831,
- 9303
- ],
- [
- -7,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 14,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 0,
- 9304
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 12,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 6,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -8,
- -6
- ],
- [
- -7,
- -1
- ],
- [
- -13,
- -2
- ],
- [
- -18,
- -4
- ],
- [
- -7,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -7,
- 3
- ],
- [
- -7,
- 1
- ],
- [
- 9996,
- -1
- ],
- [
- -7,
- -5
- ],
- [
- -14,
- -1
- ],
- [
- -8,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 10
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 10,
- 5
- ],
- [
- 8,
- 7
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- 3
- ],
- [
- -9996,
- 1
- ]
- ],
- [
- [
- 7156,
- 9348
- ],
- [
- -14,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 7,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 5,
- 4
- ],
- [
- 5,
- 0
- ],
- [
- 15,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -6,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -6,
- -4
- ],
- [
- -4,
- -1
- ]
- ],
- [
- [
- 7208,
- 9372
- ],
- [
- -2,
- 0
- ],
- [
- -16,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 14,
- 12
- ],
- [
- 6,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- 0,
- -9
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 7073,
- 9381
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -7,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- -7,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 8340,
- 9394
- ],
- [
- -7,
- -3
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 6536,
- 9406
- ],
- [
- 13,
- -2
- ],
- [
- 10,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 4,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -5
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 6,
- -10
- ],
- [
- 6,
- -10
- ],
- [
- 12,
- -14
- ],
- [
- 12,
- -10
- ],
- [
- 5,
- -3
- ],
- [
- 11,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- -5,
- -4
- ],
- [
- -5,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -14,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -8,
- 6
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -12,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -13,
- 3
- ],
- [
- -10,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- -1
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- 2
- ],
- [
- -8,
- 4
- ],
- [
- -8,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -13,
- -2
- ],
- [
- -6,
- 0
- ],
- [
- -8,
- 2
- ],
- [
- -6,
- -2
- ],
- [
- -7,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 10,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- -3
- ]
- ],
- [
- [
- 6962,
- 9394
- ],
- [
- -8,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 8
- ],
- [
- 4,
- 5
- ],
- [
- 5,
- 2
- ],
- [
- 17,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -8,
- -1
- ],
- [
- -13,
- -3
- ],
- [
- -6,
- -1
- ]
- ],
- [
- [
- 7131,
- 9414
- ],
- [
- -2,
- 0
- ],
- [
- -12,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 14,
- -6
- ]
- ],
- [
- [
- 7097,
- 9415
- ],
- [
- -5,
- -2
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 4
- ],
- [
- 10,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -9,
- 0
- ]
- ],
- [
- [
- 8949,
- 9440
- ],
- [
- 7,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 20,
- -14
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -12
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- -1
- ],
- [
- -10,
- 2
- ],
- [
- -7,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -15,
- 1
- ],
- [
- -11,
- 5
- ],
- [
- -12,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- -10,
- -5
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 4
- ],
- [
- 7,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 7,
- 1
- ],
- [
- 5,
- 5
- ],
- [
- 3,
- 4
- ],
- [
- 6,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 11,
- 2
- ],
- [
- 7,
- 0
- ],
- [
- 7,
- -1
- ]
- ],
- [
- [
- 8459,
- 9437
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 7320,
- 9450
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -7,
- 2
- ],
- [
- -9,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 7,
- 1
- ],
- [
- 10,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 7297,
- 9451
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 8782,
- 9441
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- -9,
- 8
- ],
- [
- -2,
- 3
- ],
- [
- -5,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 7,
- -2
- ],
- [
- 11,
- -8
- ],
- [
- 6,
- -6
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 8916,
- 9446
- ],
- [
- -14,
- -5
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 4
- ],
- [
- -2,
- 11
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 13,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 7354,
- 9473
- ],
- [
- -2,
- -4
- ],
- [
- -7,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 8149,
- 9469
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -16,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 4
- ],
- [
- -8,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 24,
- -4
- ],
- [
- 9,
- -3
- ],
- [
- 3,
- -2
- ]
- ],
- [
- [
- 7406,
- 9503
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- 1
- ],
- [
- -8,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 7282,
- 9528
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 6,
- 5
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 9077,
- 9525
- ],
- [
- 7,
- 0
- ],
- [
- 11,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 26,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 8,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 16,
- -1
- ],
- [
- 13,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- -5,
- -13
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- -3
- ],
- [
- -14,
- -4
- ],
- [
- -6,
- -1
- ],
- [
- -16,
- 0
- ],
- [
- -21,
- 1
- ],
- [
- -5,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -10,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -6,
- 3
- ],
- [
- -15,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 8775,
- 9527
- ],
- [
- -5,
- -1
- ],
- [
- -8,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 6,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- -6,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 9246,
- 9568
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 8889,
- 9551
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 7,
- 4
- ],
- [
- 5,
- 4
- ],
- [
- 7,
- -1
- ],
- [
- 8,
- -4
- ],
- [
- 12,
- -8
- ],
- [
- 6,
- -3
- ],
- [
- 7,
- -2
- ],
- [
- 7,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 7,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 44,
- -16
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- -9,
- -2
- ],
- [
- -7,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- -14,
- -9
- ],
- [
- -5,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -11,
- 3
- ],
- [
- -7,
- -1
- ],
- [
- -6,
- 2
- ],
- [
- -7,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -11,
- 0
- ],
- [
- -7,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- 2,
- -12
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 10,
- -13
- ],
- [
- 2,
- -1
- ],
- [
- 6,
- -3
- ],
- [
- 6,
- -5
- ],
- [
- -10,
- -6
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -18,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -6,
- 0
- ],
- [
- -7,
- 3
- ],
- [
- -7,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -21,
- 6
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- 8
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 4
- ],
- [
- -6,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- -2,
- 12
- ],
- [
- 1,
- 11
- ],
- [
- 3,
- 2
- ],
- [
- 9,
- -2
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 11,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 9,
- -4
- ],
- [
- 6,
- -3
- ],
- [
- 8,
- -8
- ]
- ],
- [
- [
- 7681,
- 9577
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- 2
- ],
- [
- -7,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -10,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- 2
- ],
- [
- 10,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 8,
- -2
- ]
- ],
- [
- [
- 7690,
- 9573
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 8124,
- 9597
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ]
- ],
- [
- [
- 7710,
- 9596
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- -6
- ]
- ],
- [
- [
- 9142,
- 9599
- ],
- [
- -21,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- 4
- ],
- [
- 19,
- 2
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 6882,
- 9575
- ],
- [
- -11,
- -4
- ],
- [
- -7,
- -3
- ],
- [
- -7,
- -3
- ],
- [
- -6,
- -1
- ],
- [
- -11,
- -4
- ],
- [
- -18,
- -4
- ],
- [
- -12,
- -4
- ],
- [
- -12,
- -3
- ],
- [
- -14,
- -4
- ],
- [
- -13,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -10,
- -4
- ],
- [
- -7,
- -1
- ],
- [
- -28,
- -9
- ],
- [
- -12,
- -6
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -6,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 6,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -10,
- 5
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -11,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -5,
- -5
- ],
- [
- -19,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -9,
- -6
- ],
- [
- -4,
- -8
- ],
- [
- -9,
- -4
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -14,
- 1
- ],
- [
- -7,
- 2
- ],
- [
- -8,
- 4
- ],
- [
- -6,
- -1
- ],
- [
- -6,
- -1
- ],
- [
- -7,
- -4
- ],
- [
- -5,
- 7
- ],
- [
- 2,
- 4
- ],
- [
- -10,
- 9
- ],
- [
- -2,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 4
- ],
- [
- 6,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 9,
- 13
- ],
- [
- 2,
- 1
- ],
- [
- 18,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 8,
- 8
- ],
- [
- 8,
- 6
- ],
- [
- 8,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -9,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- 9
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 9,
- -2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 9,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 10,
- 3
- ],
- [
- 7,
- 3
- ],
- [
- 6,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 2
- ],
- [
- 12,
- 2
- ],
- [
- 7,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 5,
- 2
- ],
- [
- 9,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 11,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 12,
- -3
- ],
- [
- 7,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 15,
- 4
- ],
- [
- 26,
- 4
- ],
- [
- 7,
- 3
- ],
- [
- 6,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 8,
- 5
- ],
- [
- 14,
- 5
- ],
- [
- 12,
- 3
- ],
- [
- 7,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 10,
- -2
- ],
- [
- 13,
- -3
- ],
- [
- 6,
- -4
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -9,
- -7
- ],
- [
- -10,
- -8
- ],
- [
- -1,
- -1
- ],
- [
- -11,
- -3
- ]
- ],
- [
- [
- 7674,
- 9620
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -9,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 12,
- 2
- ],
- [
- 19,
- 7
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -3
- ]
- ],
- [
- [
- 7486,
- 9630
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 10,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -4
- ]
- ],
- [
- [
- 7983,
- 9633
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -7,
- -1
- ]
- ],
- [
- [
- 6367,
- 7853
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -8,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -9
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -13
- ],
- [
- 1,
- -12
- ],
- [
- 3,
- 16
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -10
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -10
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -8
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 7,
- -15
- ],
- [
- 4,
- -10
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -8
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 6110,
- 7685
- ],
- [
- -3,
- 3
- ],
- [
- -10,
- 14
- ],
- [
- -5,
- 10
- ],
- [
- -17,
- 23
- ],
- [
- -2,
- 1
- ],
- [
- -9,
- 4
- ],
- [
- -4,
- 2
- ],
- [
- -9,
- 16
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- -7,
- 6
- ],
- [
- -9,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 7,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- 3
- ],
- [
- 10,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 5,
- 9
- ],
- [
- 2,
- 11
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- -5,
- 8
- ],
- [
- -7,
- 9
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- 5,
- 4
- ],
- [
- 5,
- 2
- ],
- [
- 9,
- 6
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- -6
- ],
- [
- -7,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -7,
- -5
- ]
- ],
- [
- [
- 6061,
- 7896
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 7
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 7,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 5
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -7,
- 8
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -7,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -7,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -8,
- 12
- ],
- [
- -3,
- 10
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -7,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -10
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ]
- ],
- [
- [
- 5778,
- 8610
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 15,
- -3
- ],
- [
- 12,
- -5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -8,
- 1
- ],
- [
- -7,
- 8
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -9,
- -6
- ],
- [
- -10,
- -2
- ]
- ],
- [
- [
- 5857,
- 9203
- ],
- [
- 5,
- -1
- ],
- [
- 11,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 11,
- -5
- ],
- [
- 5,
- -3
- ],
- [
- 10,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -16,
- 4
- ],
- [
- -2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 7,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 8,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 9
- ],
- [
- 2,
- 1
- ],
- [
- 15,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 14,
- -5
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 15,
- -5
- ],
- [
- 22,
- -11
- ],
- [
- 30,
- -18
- ],
- [
- 18,
- -16
- ],
- [
- 2,
- -3
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 21,
- -14
- ],
- [
- 7,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- 5,
- -4
- ],
- [
- 5,
- -6
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- -16
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -12
- ],
- [
- -2,
- -5
- ],
- [
- -19,
- -22
- ],
- [
- -12,
- -8
- ],
- [
- -22,
- -10
- ],
- [
- -18,
- -4
- ],
- [
- -7,
- 0
- ],
- [
- -14,
- 2
- ],
- [
- -7,
- 2
- ],
- [
- -10,
- 5
- ],
- [
- -8,
- 3
- ],
- [
- -6,
- 1
- ],
- [
- -11,
- 1
- ],
- [
- -24,
- 5
- ],
- [
- -4,
- 2
- ],
- [
- -15,
- 10
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -8,
- 3
- ],
- [
- -7,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -9,
- 5
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -15,
- 4
- ],
- [
- -14,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- 6,
- -5
- ],
- [
- 5,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 7,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 15,
- -6
- ],
- [
- 8,
- -5
- ],
- [
- 8,
- -10
- ],
- [
- 3,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -9
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- 4,
- -6
- ],
- [
- 3,
- -7
- ],
- [
- 4,
- -10
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -9
- ],
- [
- 5,
- -7
- ],
- [
- 7,
- -4
- ],
- [
- 4,
- -1
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- -3
- ],
- [
- 9,
- -8
- ],
- [
- 5,
- -9
- ],
- [
- 2,
- -2
- ],
- [
- 9,
- -3
- ],
- [
- 7,
- -2
- ],
- [
- 12,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- 5
- ],
- [
- 9,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -9,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- -7,
- 12
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 11
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 11,
- -5
- ],
- [
- 13,
- -13
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 12,
- -4
- ],
- [
- 14,
- -8
- ],
- [
- 6,
- 0
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 6,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 6
- ],
- [
- -4,
- 3
- ],
- [
- -6,
- 11
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 15,
- 9
- ],
- [
- 5,
- 5
- ],
- [
- 5,
- 7
- ],
- [
- 2,
- 2
- ],
- [
- 8,
- 2
- ],
- [
- 11,
- 5
- ],
- [
- 9,
- 8
- ],
- [
- 8,
- 12
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 9,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- 4,
- 10
- ],
- [
- 2,
- 4
- ],
- [
- 5,
- 11
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 6
- ],
- [
- -6,
- 4
- ],
- [
- -6,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 5,
- 14
- ],
- [
- 5,
- 18
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- -21,
- 17
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 16,
- -8
- ],
- [
- 3,
- 0
- ],
- [
- 26,
- 2
- ],
- [
- 12,
- -2
- ],
- [
- 10,
- -4
- ],
- [
- 8,
- -11
- ],
- [
- 7,
- -10
- ],
- [
- 7,
- -8
- ],
- [
- 0,
- -7
- ],
- [
- -7,
- -2
- ],
- [
- -7,
- 0
- ],
- [
- -18,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -12,
- -13
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 5,
- -4
- ],
- [
- 12,
- -5
- ],
- [
- 5,
- -12
- ],
- [
- 4,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 23,
- 6
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 14
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 11,
- 3
- ],
- [
- 11,
- 3
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- 1
- ],
- [
- 21,
- 11
- ],
- [
- 9,
- 7
- ],
- [
- 5,
- 2
- ],
- [
- 8,
- 6
- ],
- [
- 4,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 3
- ],
- [
- 8,
- 4
- ],
- [
- 11,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- 10,
- 7
- ],
- [
- 20,
- 10
- ],
- [
- 11,
- 5
- ],
- [
- 11,
- 0
- ],
- [
- 8,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -14,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- 4,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -6,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 11,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 10
- ],
- [
- 6,
- 6
- ],
- [
- 8,
- 5
- ],
- [
- 7,
- 1
- ],
- [
- 7,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- -2
- ],
- [
- 9,
- 0
- ],
- [
- 8,
- -3
- ],
- [
- 6,
- -1
- ],
- [
- 9,
- 5
- ],
- [
- 20,
- 15
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- 4
- ],
- [
- 16,
- 5
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -10
- ],
- [
- 6,
- -2
- ],
- [
- 8,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 7,
- 0
- ],
- [
- 10,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- 5,
- 6
- ],
- [
- 3,
- 5
- ],
- [
- -2,
- 9
- ],
- [
- -6,
- -2
- ],
- [
- -9,
- 20
- ],
- [
- -4,
- 8
- ],
- [
- 3,
- 4
- ],
- [
- 8,
- 2
- ],
- [
- 7,
- 7
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 21,
- -5
- ],
- [
- 24,
- -1
- ],
- [
- 20,
- -4
- ],
- [
- 23,
- -8
- ],
- [
- 12,
- -6
- ],
- [
- 9,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- 4,
- 2
- ],
- [
- 8,
- -4
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 8,
- -3
- ],
- [
- 8,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 10,
- -3
- ],
- [
- 6,
- -1
- ],
- [
- 5,
- -7
- ],
- [
- 13,
- -10
- ],
- [
- 3,
- -4
- ],
- [
- 12,
- -6
- ],
- [
- 6,
- -5
- ],
- [
- 3,
- 2
- ],
- [
- 9,
- 12
- ],
- [
- 6,
- 15
- ],
- [
- 3,
- 7
- ],
- [
- -6,
- 1
- ],
- [
- -5,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 6
- ],
- [
- -7,
- 10
- ],
- [
- -1,
- 10
- ],
- [
- -2,
- 4
- ],
- [
- -6,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -16,
- 6
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 10
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 11
- ],
- [
- 1,
- 14
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -9,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 9
- ],
- [
- 10,
- 3
- ],
- [
- 7,
- 4
- ],
- [
- 12,
- 8
- ],
- [
- 9,
- 8
- ],
- [
- 5,
- 9
- ],
- [
- 4,
- 10
- ],
- [
- 6,
- 21
- ],
- [
- 6,
- 16
- ],
- [
- 10,
- 17
- ],
- [
- 6,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 8,
- 1
- ],
- [
- 13,
- -1
- ],
- [
- 23,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 8,
- -5
- ],
- [
- 5,
- 1
- ],
- [
- 10,
- -3
- ],
- [
- 5,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- -1,
- -12
- ],
- [
- -1,
- -8
- ],
- [
- -3,
- -16
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -11
- ],
- [
- -3,
- -8
- ],
- [
- -4,
- -5
- ],
- [
- -6,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 6,
- -9
- ],
- [
- 13,
- -9
- ],
- [
- 4,
- -11
- ],
- [
- 1,
- -8
- ],
- [
- -1,
- -21
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -22
- ],
- [
- 0,
- -18
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -13
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -7
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -4
- ],
- [
- 10,
- -6
- ],
- [
- 10,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -6,
- -8
- ],
- [
- -3,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- -10,
- -6
- ],
- [
- -21,
- -34
- ],
- [
- -5,
- -4
- ],
- [
- -8,
- 2
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- -6,
- 0
- ],
- [
- -8,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -6,
- -2
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- 0
- ],
- [
- -6,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -15,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 6,
- -4
- ],
- [
- 8,
- -2
- ],
- [
- 8,
- -5
- ],
- [
- 10,
- -3
- ],
- [
- 23,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 10,
- -5
- ],
- [
- 4,
- 0
- ],
- [
- 7,
- 4
- ],
- [
- 2,
- 10
- ],
- [
- 1,
- 4
- ],
- [
- 26,
- 14
- ],
- [
- 4,
- 3
- ],
- [
- 8,
- 8
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 14
- ],
- [
- 3,
- 5
- ],
- [
- 17,
- 16
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 8
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- -3,
- 8
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 7
- ],
- [
- 2,
- 13
- ],
- [
- 3,
- 6
- ],
- [
- 15,
- 6
- ],
- [
- 13,
- 2
- ],
- [
- 14,
- 5
- ],
- [
- 6,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- 4,
- -7
- ],
- [
- 10,
- -10
- ],
- [
- 4,
- -7
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -22
- ],
- [
- -2,
- -9
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 16,
- 1
- ],
- [
- 10,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -8,
- 1
- ],
- [
- -11,
- 2
- ],
- [
- -15,
- 4
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 6
- ],
- [
- 4,
- 10
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 9
- ],
- [
- -4,
- 16
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -19,
- 9
- ],
- [
- -18,
- 7
- ],
- [
- -12,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -10,
- -7
- ],
- [
- -7,
- -2
- ],
- [
- -12,
- 3
- ],
- [
- -11,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 3,
- 12
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 7
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 7,
- 22
- ],
- [
- 3,
- 5
- ],
- [
- 8,
- 10
- ],
- [
- 3,
- 8
- ],
- [
- -1,
- 4
- ],
- [
- -16,
- 24
- ],
- [
- -4,
- 9
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- -6,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 17,
- 23
- ],
- [
- 7,
- 4
- ],
- [
- 10,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 9,
- 4
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 9
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- -7
- ],
- [
- 3,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -11
- ],
- [
- -4,
- -1
- ],
- [
- 0,
- -9
- ],
- [
- 7,
- -9
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 11,
- -4
- ],
- [
- 10,
- -3
- ],
- [
- 18,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- 3
- ],
- [
- 17,
- -1
- ],
- [
- 13,
- -10
- ],
- [
- 7,
- -4
- ],
- [
- 6,
- -1
- ],
- [
- 11,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- 11
- ],
- [
- -9,
- 3
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -11,
- 6
- ],
- [
- -6,
- 2
- ],
- [
- -13,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 8
- ],
- [
- -2,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 8,
- 4
- ],
- [
- 13,
- 2
- ],
- [
- 5,
- -2
- ],
- [
- 13,
- -9
- ],
- [
- 7,
- -1
- ],
- [
- 11,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 3
- ],
- [
- -6,
- 1
- ],
- [
- -8,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 6
- ],
- [
- 7,
- 3
- ],
- [
- 7,
- 1
- ],
- [
- 26,
- -1
- ],
- [
- 15,
- -9
- ],
- [
- 15,
- -4
- ],
- [
- 6,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 18,
- -13
- ],
- [
- 5,
- -1
- ],
- [
- 11,
- -1
- ],
- [
- 13,
- 3
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -12,
- -7
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- -9
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 6,
- 8
- ],
- [
- 4,
- 12
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -7
- ],
- [
- -3,
- -10
- ],
- [
- -5,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 6,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- -7,
- 13
- ],
- [
- -5,
- 6
- ],
- [
- 3,
- 10
- ],
- [
- 6,
- 11
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -6,
- 8
- ],
- [
- -4,
- 3
- ],
- [
- -12,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -9,
- 8
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -9,
- 4
- ],
- [
- -5,
- 1
- ],
- [
- -9,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -8,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 24,
- 4
- ],
- [
- 10,
- 1
- ],
- [
- 48,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 21,
- 2
- ],
- [
- 9,
- 2
- ],
- [
- 10,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 1
- ],
- [
- 4,
- 5
- ],
- [
- 11,
- 2
- ],
- [
- 17,
- 2
- ],
- [
- 8,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- -9,
- -6
- ],
- [
- -10,
- -6
- ],
- [
- -7,
- -2
- ],
- [
- -8,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 8,
- -3
- ],
- [
- 6,
- -4
- ],
- [
- 5,
- -3
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- -16,
- 10
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 7,
- 2
- ],
- [
- 20,
- 3
- ],
- [
- 5,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 6,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -14,
- 18
- ],
- [
- -4,
- 3
- ],
- [
- -11,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- 5,
- 6
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 6,
- -5
- ],
- [
- 9,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- 3
- ],
- [
- -5,
- 4
- ],
- [
- -8,
- 4
- ],
- [
- -9,
- 2
- ],
- [
- -9,
- 1
- ],
- [
- 3,
- 6
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 12,
- -8
- ],
- [
- 6,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 11,
- 9
- ],
- [
- 1,
- 4
- ],
- [
- -5,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 14,
- -4
- ],
- [
- 23,
- 9
- ],
- [
- 6,
- 5
- ],
- [
- 16,
- 6
- ],
- [
- 8,
- -1
- ],
- [
- 16,
- 8
- ],
- [
- 23,
- 3
- ],
- [
- 13,
- 0
- ],
- [
- 11,
- 4
- ],
- [
- 15,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 26,
- 4
- ],
- [
- 14,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- -13,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- -3
- ],
- [
- 5,
- 3
- ],
- [
- 7,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 13,
- -2
- ],
- [
- 9,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 10,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -10,
- -7
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- 3
- ],
- [
- 16,
- 5
- ],
- [
- 3,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 10,
- 2
- ],
- [
- 9,
- 5
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 7,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 9,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 11,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -4,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- -1,
- 12
- ],
- [
- -6,
- 6
- ],
- [
- -4,
- 2
- ],
- [
- -10,
- 6
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 19,
- -3
- ],
- [
- 10,
- 1
- ],
- [
- 11,
- 0
- ],
- [
- 14,
- 3
- ],
- [
- 6,
- -3
- ],
- [
- 7,
- 0
- ],
- [
- 8,
- -2
- ],
- [
- 3,
- 2
- ],
- [
- -13,
- 3
- ],
- [
- -6,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 6,
- 5
- ],
- [
- 31,
- 18
- ],
- [
- 14,
- 7
- ],
- [
- 6,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 13,
- 6
- ],
- [
- 4,
- 0
- ],
- [
- 18,
- -5
- ],
- [
- 4,
- -3
- ],
- [
- 9,
- -2
- ],
- [
- 12,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- -9,
- -2
- ],
- [
- -9,
- -6
- ],
- [
- -14,
- -4
- ],
- [
- -16,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- 31,
- -1
- ],
- [
- 9,
- 1
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- 0
- ],
- [
- 9,
- 2
- ],
- [
- 5,
- 1
- ],
- [
- 10,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 9,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- -6,
- -6
- ],
- [
- -7,
- -6
- ],
- [
- -9,
- -9
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 8,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 9,
- 2
- ],
- [
- 13,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 8,
- 0
- ],
- [
- 20,
- 1
- ],
- [
- 17,
- -2
- ],
- [
- 14,
- 3
- ],
- [
- 18,
- -2
- ],
- [
- 7,
- -2
- ],
- [
- 6,
- -4
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 1,
- -9
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 4,
- -13
- ],
- [
- 8,
- 2
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -9
- ],
- [
- -4,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -14,
- 8
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 8,
- -5
- ],
- [
- 6,
- -9
- ],
- [
- 6,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -5
- ],
- [
- 6,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- -3,
- -9
- ],
- [
- -19,
- -16
- ],
- [
- -20,
- -10
- ],
- [
- -9,
- -6
- ],
- [
- -16,
- -5
- ],
- [
- -11,
- -6
- ],
- [
- -15,
- -5
- ],
- [
- -4,
- -5
- ],
- [
- -11,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -8,
- -5
- ],
- [
- -12,
- -3
- ],
- [
- -24,
- -20
- ],
- [
- -12,
- -4
- ],
- [
- -14,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -10,
- -12
- ],
- [
- -3,
- -2
- ],
- [
- -14,
- -2
- ],
- [
- -14,
- -20
- ],
- [
- -8,
- -7
- ],
- [
- -7,
- -3
- ],
- [
- 7,
- 0
- ],
- [
- 9,
- 3
- ],
- [
- 10,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 17,
- 2
- ],
- [
- 8,
- -1
- ],
- [
- 10,
- 0
- ],
- [
- 7,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 14,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 9,
- -2
- ],
- [
- 6,
- 1
- ],
- [
- 16,
- 9
- ],
- [
- 9,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -9,
- -3
- ],
- [
- -9,
- -1
- ],
- [
- -9,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 6,
- 4
- ],
- [
- 5,
- 1
- ],
- [
- 18,
- -4
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 6
- ],
- [
- 6,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 11,
- -5
- ],
- [
- 9,
- -2
- ],
- [
- 7,
- 0
- ],
- [
- 11,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 4,
- -8
- ],
- [
- 3,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -6,
- -7
- ],
- [
- 4,
- -4
- ],
- [
- 6,
- -3
- ],
- [
- 0,
- -11
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 10,
- -2
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -7,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- 10,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 21,
- 1
- ],
- [
- 14,
- 6
- ],
- [
- 32,
- -2
- ],
- [
- 23,
- -4
- ],
- [
- 31,
- -1
- ],
- [
- 12,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -8,
- 0
- ],
- [
- -3,
- -5
- ],
- [
- 2,
- -7
- ],
- [
- 15,
- -8
- ],
- [
- 13,
- -3
- ],
- [
- 9,
- -5
- ],
- [
- 4,
- 0
- ],
- [
- 19,
- 0
- ],
- [
- 11,
- -2
- ],
- [
- 10,
- 2
- ],
- [
- 11,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 6,
- -1
- ],
- [
- 8,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 11,
- -4
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 6
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 9,
- -2
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 10,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- 23,
- -11
- ],
- [
- -1,
- -4
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- 7,
- 5
- ],
- [
- 4,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 19,
- -4
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 9,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -6,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 10,
- -1
- ],
- [
- 6,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -9,
- -5
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 16,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- -7
- ],
- [
- 0,
- -9
- ],
- [
- -4,
- -4
- ],
- [
- -9,
- -1
- ],
- [
- -13,
- 10
- ],
- [
- -8,
- 4
- ],
- [
- -11,
- 7
- ],
- [
- -2,
- -1
- ],
- [
- 3,
- -6
- ],
- [
- 5,
- -4
- ],
- [
- 10,
- -9
- ],
- [
- 15,
- -19
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- -6
- ],
- [
- -6,
- 0
- ],
- [
- -8,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 6,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- -6
- ],
- [
- 11,
- -17
- ],
- [
- 7,
- -3
- ],
- [
- 7,
- -7
- ],
- [
- 7,
- -3
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -8
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 4,
- 5
- ],
- [
- 5,
- 11
- ],
- [
- 4,
- 6
- ],
- [
- 4,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 8
- ],
- [
- 3,
- 9
- ],
- [
- 3,
- 5
- ],
- [
- 6,
- 10
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 8,
- -9
- ],
- [
- 8,
- -6
- ],
- [
- 8,
- -4
- ],
- [
- 11,
- -3
- ],
- [
- 17,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 6,
- 3
- ],
- [
- 9,
- 2
- ],
- [
- 6,
- 3
- ],
- [
- 9,
- 2
- ],
- [
- 5,
- -1
- ],
- [
- 9,
- -3
- ],
- [
- 20,
- -9
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 7,
- -6
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -5
- ],
- [
- 6,
- -6
- ],
- [
- 3,
- 0
- ],
- [
- 9,
- 2
- ],
- [
- 10,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -6,
- 9
- ],
- [
- 0,
- 10
- ],
- [
- -4,
- 3
- ],
- [
- -6,
- 1
- ],
- [
- 8,
- 3
- ],
- [
- 6,
- 8
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -15,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -7,
- 0
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 9,
- 8
- ],
- [
- 4,
- 1
- ],
- [
- 24,
- 0
- ],
- [
- 7,
- 2
- ],
- [
- 10,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -9,
- 7
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 14,
- -2
- ],
- [
- 6,
- -4
- ],
- [
- 15,
- -4
- ],
- [
- 41,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 18,
- -2
- ],
- [
- 7,
- -2
- ],
- [
- 17,
- -2
- ],
- [
- 8,
- -2
- ],
- [
- 7,
- -2
- ],
- [
- 10,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -21,
- 1
- ],
- [
- -7,
- 2
- ],
- [
- -9,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- -5
- ],
- [
- -6,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 5,
- -1
- ],
- [
- 16,
- 5
- ],
- [
- 43,
- 2
- ],
- [
- 7,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -6,
- -7
- ],
- [
- -5,
- -5
- ],
- [
- -8,
- -5
- ],
- [
- -3,
- 0
- ],
- [
- 6,
- 11
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -7,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -10,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 17,
- 3
- ],
- [
- 8,
- 4
- ],
- [
- 8,
- 6
- ],
- [
- 15,
- 16
- ],
- [
- 6,
- 6
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 1
- ],
- [
- 27,
- -2
- ],
- [
- 16,
- -4
- ],
- [
- 15,
- -5
- ],
- [
- 7,
- -4
- ],
- [
- 6,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -16,
- -1
- ],
- [
- -7,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 8,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 10,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 15,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -8,
- -7
- ],
- [
- 5,
- 3
- ],
- [
- 16,
- 5
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 12,
- -5
- ],
- [
- 5,
- -4
- ],
- [
- 9,
- -11
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- 20,
- -8
- ],
- [
- 8,
- 0
- ],
- [
- 19,
- 2
- ],
- [
- 9,
- 0
- ],
- [
- 17,
- 6
- ],
- [
- 17,
- 3
- ],
- [
- 16,
- 1
- ],
- [
- 8,
- 3
- ],
- [
- 22,
- 0
- ],
- [
- 22,
- -1
- ],
- [
- 16,
- -2
- ],
- [
- 18,
- -6
- ],
- [
- 18,
- -9
- ],
- [
- 11,
- -8
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -7
- ],
- [
- 3,
- -5
- ],
- [
- 8,
- -3
- ],
- [
- 17,
- -4
- ],
- [
- 5,
- -3
- ],
- [
- 0,
- -8
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -13
- ],
- [
- 3,
- -4
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -6,
- -15
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- 7,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 10
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 9
- ],
- [
- -2,
- 8
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 12,
- 9
- ],
- [
- 6,
- 4
- ],
- [
- 5,
- 2
- ],
- [
- 16,
- 2
- ],
- [
- 7,
- 2
- ],
- [
- 9,
- -1
- ],
- [
- 5,
- 1
- ],
- [
- 7,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 10,
- -7
- ],
- [
- 35,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 23,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 3
- ],
- [
- 15,
- 11
- ],
- [
- 7,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -7
- ],
- [
- 2,
- -10
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 10,
- -4
- ],
- [
- 10,
- -4
- ],
- [
- 3,
- -10
- ],
- [
- 5,
- -7
- ],
- [
- 13,
- 0
- ],
- [
- 13,
- 2
- ],
- [
- 13,
- 13
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 7
- ],
- [
- -5,
- 7
- ],
- [
- -4,
- 12
- ],
- [
- -11,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 4,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 10
- ],
- [
- 10,
- -1
- ],
- [
- 11,
- -1
- ],
- [
- 20,
- -4
- ],
- [
- 16,
- -2
- ],
- [
- 9,
- -3
- ],
- [
- 5,
- -3
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 8,
- -4
- ],
- [
- 6,
- -1
- ],
- [
- 10,
- 1
- ],
- [
- 13,
- -2
- ],
- [
- 14,
- 1
- ],
- [
- 13,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 8,
- -6
- ],
- [
- 15,
- -7
- ],
- [
- 13,
- -2
- ],
- [
- 15,
- -6
- ],
- [
- 14,
- -3
- ],
- [
- 11,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 9,
- -2
- ],
- [
- 16,
- -14
- ],
- [
- -9995,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 11,
- -4
- ],
- [
- 5,
- -5
- ],
- [
- 5,
- -5
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 6,
- -3
- ],
- [
- 7,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -11,
- 8
- ],
- [
- -3,
- 3
- ],
- [
- 4,
- -1
- ],
- [
- 15,
- -11
- ],
- [
- 5,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 7,
- -4
- ],
- [
- 43,
- -25
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -4,
- -6
- ],
- [
- 7,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -8
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -8
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 16,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 9,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 9,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -12,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 11,
- -3
- ],
- [
- 5,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- -2
- ],
- [
- 6,
- -7
- ],
- [
- 6,
- -8
- ],
- [
- 6,
- -5
- ],
- [
- 6,
- -3
- ],
- [
- 10,
- -10
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 10,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -9,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- 7,
- -4
- ],
- [
- 5,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -10,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -4
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -8,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -8
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- 7
- ],
- [
- -3,
- 4
- ],
- [
- -7,
- 4
- ],
- [
- -7,
- 4
- ],
- [
- -6,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- 5
- ],
- [
- -4,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 7
- ],
- [
- -4,
- 7
- ],
- [
- -13,
- 4
- ],
- [
- -11,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -8,
- -5
- ],
- [
- -6,
- -1
- ],
- [
- -17,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -8
- ],
- [
- -2,
- -4
- ],
- [
- -8,
- -6
- ],
- [
- 9994,
- -2
- ],
- [
- -5,
- -7
- ],
- [
- -5,
- -6
- ],
- [
- -9,
- -2
- ],
- [
- -12,
- -9
- ],
- [
- -5,
- -1
- ],
- [
- -7,
- 4
- ],
- [
- -15,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- -7,
- 9
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -9,
- 3
- ],
- [
- -7,
- -2
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 8,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- 4
- ],
- [
- -8,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -10,
- 6
- ],
- [
- -8,
- -6
- ],
- [
- -11,
- -4
- ],
- [
- -8,
- 0
- ],
- [
- -15,
- -6
- ],
- [
- 4,
- 0
- ],
- [
- 11,
- 4
- ],
- [
- 6,
- 0
- ],
- [
- 10,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 10,
- 5
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 5
- ],
- [
- 9,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -10
- ],
- [
- 1,
- -7
- ],
- [
- 7,
- -8
- ],
- [
- 7,
- -5
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -8
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -10
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- -8
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 8,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -5,
- -6
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -26,
- 11
- ],
- [
- -10,
- 2
- ],
- [
- -9,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -7,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -7,
- -5
- ],
- [
- -3,
- -4
- ],
- [
- -20,
- -9
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -10,
- -6
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -9,
- -7
- ],
- [
- -5,
- 3
- ],
- [
- -7,
- -10
- ],
- [
- -7,
- -8
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 3
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -5,
- -4
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- -6
- ],
- [
- -15,
- -12
- ],
- [
- -5,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -13
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- 1
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -5,
- 10
- ],
- [
- -10,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- -12,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -9,
- -1
- ],
- [
- -11,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -11,
- -4
- ],
- [
- -7,
- -6
- ],
- [
- -14,
- -20
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 10
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- -5,
- -1
- ],
- [
- -6,
- -7
- ],
- [
- -10,
- -7
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 8
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -4
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -11
- ],
- [
- 0,
- -12
- ],
- [
- -5,
- -10
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -8
- ],
- [
- -5,
- -6
- ],
- [
- -9,
- -15
- ],
- [
- -3,
- -10
- ],
- [
- -2,
- -11
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 8
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 12,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -5
- ],
- [
- -5,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -12
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 10
- ],
- [
- 2,
- 5
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -8
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -14
- ],
- [
- -4,
- -11
- ],
- [
- -2,
- -9
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -4
- ],
- [
- 5,
- -8
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -8
- ],
- [
- -4,
- -3
- ],
- [
- -7,
- -9
- ],
- [
- -2,
- -1
- ],
- [
- -10,
- 0
- ],
- [
- -4,
- 5
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -7,
- -6
- ],
- [
- -6,
- -8
- ],
- [
- -6,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -13
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -6
- ],
- [
- 0,
- -8
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 6
- ],
- [
- -5,
- 0
- ],
- [
- -12,
- -7
- ],
- [
- -6,
- -4
- ],
- [
- -5,
- -8
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -10
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -10
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -4,
- -12
- ],
- [
- -6,
- -16
- ],
- [
- -8,
- -12
- ],
- [
- -5,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -8,
- -11
- ],
- [
- -10,
- -12
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- -4,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 25
- ],
- [
- -3,
- 26
- ],
- [
- 0,
- 8
- ],
- [
- -4,
- 7
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- -4,
- 42
- ],
- [
- -1,
- 11
- ],
- [
- -6,
- 34
- ],
- [
- -2,
- 20
- ],
- [
- -2,
- 19
- ],
- [
- 0,
- 9
- ],
- [
- 3,
- 25
- ],
- [
- 2,
- 16
- ],
- [
- 7,
- 36
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 13,
- 14
- ],
- [
- 6,
- 8
- ],
- [
- 3,
- 8
- ],
- [
- 4,
- 10
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- -3
- ],
- [
- 7,
- 1
- ],
- [
- 6,
- 13
- ],
- [
- 8,
- -2
- ],
- [
- 7,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- 7,
- 7
- ],
- [
- 10,
- 8
- ],
- [
- 5,
- 5
- ],
- [
- 2,
- 6
- ],
- [
- 4,
- 5
- ],
- [
- 4,
- 6
- ],
- [
- 7,
- 18
- ],
- [
- 14,
- 16
- ],
- [
- 6,
- 9
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 10,
- 13
- ],
- [
- 7,
- 10
- ],
- [
- 8,
- 7
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 11
- ],
- [
- 2,
- 3
- ],
- [
- 5,
- 4
- ],
- [
- 13,
- 7
- ],
- [
- 7,
- 7
- ],
- [
- 11,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- -5,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 8,
- 7
- ],
- [
- 3,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 10
- ],
- [
- 1,
- 9
- ],
- [
- 3,
- 15
- ],
- [
- 3,
- 3
- ],
- [
- 8,
- 7
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 7,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -9,
- 2
- ],
- [
- -7,
- 3
- ],
- [
- -7,
- 6
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -26,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- -3,
- -9
- ],
- [
- 0,
- -6
- ],
- [
- 6,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- -7
- ],
- [
- -32,
- -33
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -8
- ],
- [
- -8,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 4,
- 11
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 7
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 12
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -13,
- -8
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -7,
- -4
- ],
- [
- -8,
- -2
- ],
- [
- -6,
- 1
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -8,
- 2
- ],
- [
- -9,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -7,
- -4
- ],
- [
- -6,
- -6
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -12
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -8,
- -9
- ],
- [
- -6,
- -13
- ],
- [
- -3,
- -5
- ],
- [
- -8,
- -8
- ],
- [
- -13,
- -10
- ],
- [
- -11,
- -16
- ],
- [
- -4,
- -12
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 11,
- -5
- ],
- [
- 5,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -6,
- 5
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -7,
- -2
- ],
- [
- -3,
- 3
- ],
- [
- -6,
- 6
- ],
- [
- -9,
- -1
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- -8
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- 1
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -11,
- -3
- ],
- [
- -10,
- 1
- ],
- [
- -6,
- 12
- ],
- [
- 11,
- 5
- ],
- [
- 6,
- -1
- ],
- [
- 7,
- 0
- ],
- [
- 8,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 3
- ],
- [
- -9,
- 11
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- -6,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -15,
- 6
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -6,
- -6
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -6,
- -1
- ],
- [
- -6,
- 0
- ],
- [
- -7,
- 9
- ],
- [
- -10,
- -2
- ],
- [
- -5,
- -5
- ],
- [
- -5,
- -1
- ],
- [
- -13,
- 5
- ],
- [
- -7,
- 1
- ],
- [
- -7,
- 4
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- -12
- ],
- [
- -6,
- -3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- -6,
- 2
- ],
- [
- -29,
- -2
- ],
- [
- -10,
- 2
- ],
- [
- -8,
- 0
- ],
- [
- -9,
- -4
- ],
- [
- -9,
- 1
- ],
- [
- -17,
- -7
- ],
- [
- -7,
- -5
- ],
- [
- -9,
- -9
- ],
- [
- -7,
- -15
- ],
- [
- -4,
- -5
- ],
- [
- -8,
- -7
- ],
- [
- -10,
- -6
- ],
- [
- -5,
- -7
- ],
- [
- -3,
- -5
- ],
- [
- -5,
- -20
- ],
- [
- -2,
- -3
- ],
- [
- -12,
- -7
- ],
- [
- -4,
- -8
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -8,
- -4
- ],
- [
- -6,
- -10
- ],
- [
- -8,
- -7
- ],
- [
- -12,
- -19
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -11,
- -17
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- -8
- ],
- [
- -5,
- -5
- ],
- [
- -5,
- -5
- ],
- [
- -6,
- -6
- ],
- [
- -9,
- -7
- ],
- [
- -3,
- -4
- ],
- [
- -5,
- -9
- ],
- [
- -12,
- -11
- ],
- [
- -6,
- -3
- ],
- [
- -8,
- -10
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 12,
- -6
- ],
- [
- 11,
- 1
- ],
- [
- 9,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -16
- ],
- [
- -1,
- -8
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 12
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 6,
- 5
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- -4,
- -7
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 4,
- -4
- ],
- [
- 6,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -9
- ],
- [
- -6,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 11,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 8,
- 7
- ],
- [
- 4,
- 11
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -7
- ],
- [
- -4,
- -9
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 10
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 11,
- -6
- ],
- [
- 6,
- -2
- ],
- [
- 11,
- 5
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 9,
- -9
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -11
- ],
- [
- 9,
- -12
- ],
- [
- 9,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 6,
- -7
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -5
- ],
- [
- -8,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 6,
- -8
- ],
- [
- 5,
- -4
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -6
- ],
- [
- -4,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 5,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- -3,
- -7
- ],
- [
- 0,
- -8
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -8
- ],
- [
- -5,
- -6
- ],
- [
- -3,
- -12
- ],
- [
- -4,
- -10
- ],
- [
- 0,
- -11
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -11
- ],
- [
- -1,
- -15
- ],
- [
- 2,
- -24
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -10
- ],
- [
- -2,
- -15
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- -5,
- -11
- ],
- [
- -1,
- -14
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -6
- ],
- [
- -7,
- -8
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -7
- ],
- [
- -4,
- -5
- ],
- [
- -6,
- -15
- ],
- [
- -5,
- -14
- ],
- [
- -11,
- -19
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -9
- ],
- [
- -1,
- -11
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- -12
- ],
- [
- -9,
- -19
- ],
- [
- -2,
- -6
- ],
- [
- -8,
- -10
- ],
- [
- -7,
- -15
- ],
- [
- -10,
- -12
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -6
- ],
- [
- -4,
- -9
- ],
- [
- -6,
- -8
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -9,
- -24
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -7,
- -9
- ],
- [
- -3,
- -9
- ],
- [
- -6,
- -6
- ],
- [
- -6,
- -8
- ],
- [
- -15,
- -14
- ],
- [
- -4,
- -5
- ],
- [
- -9,
- -7
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- -4
- ],
- [
- -5,
- -4
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- -1
- ],
- [
- 1,
- 20
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- -8
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- -12
- ],
- [
- -3,
- -10
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- 3,
- -8
- ],
- [
- -2,
- -11
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 7991,
- 9684
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -10,
- 0
- ],
- [
- -16,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 26,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -3
- ]
- ],
- [
- [
- 7951,
- 9688
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 8,
- 0
- ],
- [
- 3,
- 4
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- -3
- ]
- ],
- [
- [
- 7857,
- 9749
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -8,
- -13
- ],
- [
- -1,
- -2
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 7,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 8,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 5,
- -2
- ],
- [
- 7,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- -14,
- -8
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- -16,
- -5
- ],
- [
- -20,
- 0
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -12,
- -1
- ],
- [
- -14,
- 0
- ],
- [
- -14,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -14,
- -6
- ],
- [
- -13,
- -4
- ],
- [
- -6,
- -1
- ],
- [
- -10,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- 4,
- 3
- ],
- [
- 10,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 10,
- -2
- ],
- [
- 7,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 7117,
- 9772
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 25,
- -5
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- -22,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- -5,
- 0
- ],
- [
- -8,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 7781,
- 9769
- ],
- [
- -6,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- -4,
- -4
- ]
- ],
- [
- [
- 7574,
- 9774
- ],
- [
- -7,
- -1
- ],
- [
- -8,
- 1
- ],
- [
- -13,
- 6
- ],
- [
- -9,
- 2
- ],
- [
- -6,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 4,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 9,
- 0
- ],
- [
- 12,
- -1
- ],
- [
- 11,
- -3
- ],
- [
- 25,
- -3
- ],
- [
- 9,
- -2
- ],
- [
- -6,
- -5
- ],
- [
- -6,
- -2
- ],
- [
- -6,
- -2
- ],
- [
- -6,
- -2
- ],
- [
- -7,
- -1
- ]
- ],
- [
- [
- 6427,
- 9788
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -10,
- 1
- ],
- [
- -17,
- -1
- ],
- [
- -10,
- 4
- ],
- [
- 10,
- 3
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 3
- ],
- [
- 9,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 6657,
- 9789
- ],
- [
- -10,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 15,
- 4
- ],
- [
- 7,
- -3
- ],
- [
- 4,
- -5
- ],
- [
- -7,
- -2
- ]
- ],
- [
- [
- 7712,
- 9801
- ],
- [
- 7,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- 5,
- 3
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 11,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 8,
- -4
- ],
- [
- 6,
- -5
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- -11,
- -6
- ],
- [
- -3,
- -1
- ],
- [
- -17,
- -1
- ],
- [
- -11,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -8,
- 2
- ],
- [
- -9,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -10,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -16,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 5
- ],
- [
- -3,
- 0
- ],
- [
- -8,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- -12,
- 3
- ],
- [
- -8,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -5,
- 3
- ],
- [
- 9,
- 7
- ],
- [
- 12,
- 4
- ],
- [
- 5,
- 4
- ],
- [
- 6,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 10,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 8,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 10,
- 0
- ],
- [
- 8,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 20,
- 2
- ],
- [
- 13,
- 1
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 6390,
- 9796
- ],
- [
- -3,
- -1
- ],
- [
- -10,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- 9,
- 4
- ],
- [
- 10,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- -7,
- -4
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 6540,
- 9807
- ],
- [
- -7,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 6585,
- 9812
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -22,
- 0
- ],
- [
- -10,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 1
- ],
- [
- 17,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 4,
- -1
- ]
- ],
- [
- [
- 6486,
- 9802
- ],
- [
- -18,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 9,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 9,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 10,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -2
- ]
- ],
- [
- [
- 6609,
- 9799
- ],
- [
- -4,
- -1
- ],
- [
- -11,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 12,
- -1
- ],
- [
- 27,
- -1
- ],
- [
- 13,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- -23,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- -4
- ]
- ],
- [
- [
- 6511,
- 9819
- ],
- [
- -4,
- -3
- ],
- [
- -13,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 8,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 6317,
- 9841
- ],
- [
- 13,
- -3
- ],
- [
- 9,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -16,
- 2
- ],
- [
- -7,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -9,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -7,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -9,
- -1
- ],
- [
- -7,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -7,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 33,
- 5
- ],
- [
- 13,
- 1
- ],
- [
- 7,
- 4
- ],
- [
- 9,
- 2
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 6726,
- 9840
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -9,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -8,
- -1
- ],
- [
- -7,
- -5
- ],
- [
- -9,
- 1
- ],
- [
- -12,
- 3
- ],
- [
- -11,
- -3
- ],
- [
- -7,
- 0
- ],
- [
- -8,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 11,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 10,
- 1
- ],
- [
- 13,
- 2
- ],
- [
- 8,
- 2
- ],
- [
- 7,
- 0
- ],
- [
- 7,
- -1
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 6396,
- 9845
- ],
- [
- 4,
- -1
- ],
- [
- 11,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 15,
- -8
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- -16,
- -5
- ],
- [
- -5,
- -3
- ],
- [
- -19,
- -1
- ],
- [
- -12,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- -6,
- -3
- ],
- [
- -19,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 7,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- 21,
- 8
- ],
- [
- 7,
- 4
- ],
- [
- 7,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 13,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 8,
- 3
- ],
- [
- 17,
- 3
- ],
- [
- 4,
- 0
- ]
- ],
- [
- [
- 7222,
- 9841
- ],
- [
- -26,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 4,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 16,
- 1
- ],
- [
- 13,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -9,
- -1
- ]
- ],
- [
- [
- 6698,
- 9846
- ],
- [
- -9,
- -1
- ],
- [
- -14,
- 2
- ],
- [
- -7,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 12,
- 4
- ],
- [
- 24,
- 1
- ],
- [
- 4,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -9,
- -4
- ]
- ],
- [
- [
- 6519,
- 9856
- ],
- [
- 21,
- -6
- ],
- [
- 20,
- 1
- ],
- [
- 8,
- -2
- ],
- [
- 12,
- -5
- ],
- [
- 18,
- -5
- ],
- [
- 4,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -21,
- -5
- ],
- [
- -14,
- -2
- ],
- [
- -12,
- 0
- ],
- [
- -5,
- 0
- ],
- [
- -5,
- 4
- ],
- [
- -12,
- 3
- ],
- [
- -12,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -9,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 6,
- 8
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 6628,
- 9852
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -6,
- -1
- ],
- [
- -10,
- 0
- ],
- [
- -9,
- 1
- ],
- [
- -5,
- 6
- ],
- [
- -10,
- 1
- ],
- [
- -5,
- 6
- ],
- [
- 5,
- 2
- ],
- [
- 7,
- -1
- ],
- [
- 11,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 9,
- -2
- ],
- [
- 3,
- -1
- ]
- ],
- [
- [
- 6409,
- 9852
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 6760,
- 9832
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -7,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 6,
- 2
- ],
- [
- 9,
- 4
- ],
- [
- 13,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 7,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 7,
- 2
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- -12,
- -6
- ],
- [
- -13,
- -4
- ],
- [
- -32,
- -3
- ]
- ],
- [
- [
- 7543,
- 9857
- ],
- [
- -10,
- -4
- ],
- [
- -34,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 29,
- -1
- ],
- [
- 10,
- -1
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 7681,
- 9854
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 18,
- -7
- ],
- [
- 8,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -12,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -37,
- -4
- ],
- [
- -25,
- -2
- ],
- [
- -8,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- -3
- ],
- [
- -12,
- -4
- ],
- [
- -6,
- 0
- ],
- [
- -18,
- 6
- ],
- [
- -23,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- 4,
- 4
- ],
- [
- 6,
- 3
- ],
- [
- 10,
- 1
- ],
- [
- 9,
- 2
- ],
- [
- 7,
- 5
- ],
- [
- 4,
- 5
- ],
- [
- 8,
- 5
- ],
- [
- -14,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 9,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 7,
- 2
- ],
- [
- 7,
- 1
- ],
- [
- 7,
- 1
- ],
- [
- 6,
- 1
- ],
- [
- 7,
- 1
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 17,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- -5
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 6647,
- 9867
- ],
- [
- -6,
- -1
- ],
- [
- -11,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 7,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 6605,
- 9881
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 12,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -14,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -9,
- -2
- ],
- [
- -8,
- 3
- ],
- [
- -9,
- 3
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -5,
- 2
- ],
- [
- -13,
- -2
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- 9,
- 1
- ],
- [
- 10,
- -1
- ],
- [
- 7,
- 5
- ],
- [
- 9,
- 2
- ],
- [
- 7,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 8,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- 1
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 6767,
- 9884
- ],
- [
- -3,
- 0
- ],
- [
- -18,
- 0
- ],
- [
- -9,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -11,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 15,
- 1
- ],
- [
- 25,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -3
- ]
- ],
- [
- [
- 6619,
- 9890
- ],
- [
- -10,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 32,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -29,
- -3
- ]
- ],
- [
- [
- 5847,
- 5122
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 3,
- -9
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -8
- ],
- [
- -1,
- -9
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 5821,
- 5104
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 4526,
- 6382
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 30
- ],
- [
- 0,
- 3
- ]
- ],
- [
- [
- 6166,
- 6147
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 6024,
- 6646
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -5,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 5,
- -8
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 6016,
- 6665
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 6345,
- 6828
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 3,
- -13
- ],
- [
- 4,
- -10
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- 5,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 3,
- -7
- ],
- [
- 4,
- -8
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -12
- ],
- [
- 8,
- -7
- ],
- [
- 4,
- -9
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -12
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 2,
- -9
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 5,
- -8
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -12
- ],
- [
- 3,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -4
- ]
- ],
- [
- [
- 6423,
- 6601
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -8
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 6443,
- 6278
- ],
- [
- -6,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -8,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- -10,
- -3
- ],
- [
- -9,
- -2
- ],
- [
- -8,
- -2
- ],
- [
- -8,
- -3
- ],
- [
- -7,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- -5
- ],
- [
- -8,
- -8
- ],
- [
- -8,
- -7
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- -11
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -9
- ],
- [
- -3,
- -8
- ],
- [
- -3,
- -8
- ],
- [
- -1,
- -8
- ],
- [
- -3,
- -12
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -5,
- 0
- ],
- [
- -2,
- 8
- ],
- [
- -3,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -7,
- 2
- ],
- [
- -8,
- 1
- ],
- [
- -7,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- -6,
- 1
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -8
- ]
- ],
- [
- [
- 6188,
- 6127
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 10
- ],
- [
- -6,
- 14
- ],
- [
- -9,
- 12
- ],
- [
- -2,
- 7
- ],
- [
- -5,
- 14
- ],
- [
- -2,
- 12
- ],
- [
- -5,
- 13
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- -6,
- 23
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -4,
- 4
- ],
- [
- -4,
- 9
- ],
- [
- -11,
- 16
- ],
- [
- -6,
- 2
- ],
- [
- -4,
- 5
- ],
- [
- -3,
- 8
- ],
- [
- -4,
- 12
- ],
- [
- -6,
- 14
- ],
- [
- -5,
- 19
- ],
- [
- 2,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 9
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 10
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 11
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 6
- ],
- [
- -5,
- 15
- ],
- [
- -2,
- 9
- ],
- [
- -5,
- 11
- ],
- [
- -5,
- 9
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 10
- ],
- [
- -2,
- 9
- ],
- [
- -5,
- 11
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 9
- ],
- [
- -6,
- 20
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 9
- ],
- [
- -1,
- 8
- ],
- [
- -4,
- 3
- ],
- [
- -8,
- 29
- ],
- [
- -4,
- 9
- ],
- [
- -2,
- 7
- ],
- [
- -5,
- 11
- ],
- [
- -2,
- 11
- ],
- [
- -5,
- 10
- ],
- [
- -5,
- 17
- ],
- [
- -6,
- 18
- ],
- [
- -3,
- 3
- ],
- [
- -7,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -4
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 7
- ],
- [
- 3,
- 14
- ],
- [
- 0,
- 12
- ],
- [
- 4,
- 37
- ]
- ],
- [
- [
- 6024,
- 6451
- ],
- [
- 0,
- -13
- ],
- [
- 1,
- -11
- ],
- [
- 4,
- -15
- ],
- [
- 4,
- -8
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -9
- ],
- [
- 1,
- -10
- ],
- [
- -1,
- -9
- ],
- [
- 1,
- -16
- ],
- [
- 1,
- -19
- ],
- [
- 0,
- -12
- ],
- [
- 3,
- -29
- ],
- [
- 3,
- -15
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- -8
- ],
- [
- 4,
- -9
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -4
- ],
- [
- 7,
- -8
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 5946,
- 5729
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- -12,
- 21
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -6,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 42
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 11
- ],
- [
- 1,
- 4
- ],
- [
- -14,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -19,
- -1
- ],
- [
- 8,
- -16
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -14,
- -23
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -10
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -7
- ],
- [
- -12,
- -25
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -7,
- 14
- ],
- [
- -13,
- 17
- ],
- [
- -1,
- -2
- ],
- [
- -8,
- -7
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -9
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -6,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -22,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 13
- ],
- [
- -2,
- -1
- ],
- [
- -21,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -11,
- 26
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -14,
- -6
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -8
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -10
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- -7,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 5634,
- 5813
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 9
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 18
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 11
- ],
- [
- -2,
- 9
- ],
- [
- 1,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 6
- ],
- [
- 5,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 12
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 8
- ],
- [
- 0,
- 26
- ],
- [
- 0,
- 26
- ],
- [
- 0,
- 25
- ],
- [
- 0,
- 26
- ],
- [
- 0,
- 26
- ],
- [
- 0,
- 25
- ],
- [
- 0,
- 26
- ],
- [
- 0,
- 26
- ]
- ],
- [
- [
- 5943,
- 5427
- ],
- [
- -6,
- -14
- ],
- [
- -5,
- -10
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- 6
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 4535,
- 5895
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 11
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ]
- ],
- [
- [
- 4539,
- 5966
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 11
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 9
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- 6
- ],
- [
- 4,
- 2
- ],
- [
- 7,
- 7
- ],
- [
- 9,
- 22
- ],
- [
- 7,
- 25
- ],
- [
- 1,
- 6
- ]
- ],
- [
- [
- 7887,
- 5260
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 4270,
- 1818
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 3969,
- 2070
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -9,
- 7
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- -9,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 11,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 4,
- 0
- ]
- ],
- [
- [
- 4841,
- 4262
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 4601,
- 4724
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 9636,
- 4512
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 9460,
- 4504
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 10,
- -12
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 9614,
- 4564
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 9491,
- 4586
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -12
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -7,
- 8
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -6
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 9486,
- 4629
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -15
- ]
- ],
- [
- [
- 9437,
- 4650
- ],
- [
- 6,
- -10
- ],
- [
- 2,
- 1
- ],
- [
- 8,
- 0
- ],
- [
- 5,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- 4
- ],
- [
- -8,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 9448,
- 4666
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ]
- ],
- [
- [
- 9421,
- 4658
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 9378,
- 4679
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 9394,
- 4676
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 9391,
- 4684
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 9371,
- 4682
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- -4
- ]
- ],
- [
- [
- 9435,
- 4694
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 9464,
- 4705
- ],
- [
- 7,
- -17
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -6
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -7
- ],
- [
- 4,
- -10
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 12
- ],
- [
- -5,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 6
- ],
- [
- -3,
- 11
- ],
- [
- -3,
- 20
- ],
- [
- 1,
- 5
- ],
- [
- -3,
- 10
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 9381,
- 4709
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -10
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -9
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -2
- ]
- ],
- [
- [
- 9349,
- 4713
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 9365,
- 4717
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 9352,
- 4727
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 9440,
- 4692
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -8,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 7,
- -3
- ],
- [
- 4,
- -7
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 11,
- -17
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 9328,
- 4775
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- -4
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 9374,
- 4762
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -5,
- 8
- ],
- [
- -6,
- 16
- ],
- [
- -6,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 5,
- -7
- ],
- [
- 7,
- -7
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -9
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -7
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 4652,
- 5612
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -9,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 7,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 4680,
- 5582
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 8
- ],
- [
- -6,
- 6
- ],
- [
- -11,
- 9
- ],
- [
- -4,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- -2,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 12
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 4
- ]
- ],
- [
- [
- 2560,
- 5956
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- 3
- ],
- [
- -5,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -10,
- 6
- ],
- [
- -11,
- 11
- ],
- [
- -7,
- 2
- ],
- [
- -8,
- 3
- ],
- [
- -4,
- 7
- ],
- [
- -4,
- 3
- ]
- ],
- [
- [
- 6359,
- 5832
- ],
- [
- 0,
- -16
- ],
- [
- 0,
- -15
- ],
- [
- 0,
- -16
- ],
- [
- 0,
- -27
- ],
- [
- 0,
- -9
- ],
- [
- 0,
- -14
- ],
- [
- 0,
- -7
- ],
- [
- -4,
- -12
- ],
- [
- -5,
- -16
- ],
- [
- -5,
- -16
- ],
- [
- -5,
- -14
- ],
- [
- -4,
- -13
- ],
- [
- -4,
- -13
- ]
- ],
- [
- [
- 6201,
- 5846
- ],
- [
- 5,
- -9
- ],
- [
- 5,
- -18
- ],
- [
- 7,
- -14
- ],
- [
- 8,
- -13
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 16,
- 0
- ],
- [
- 11,
- 12
- ],
- [
- 10,
- 9
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- -2
- ],
- [
- 6,
- -1
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- 1
- ],
- [
- 11,
- 10
- ],
- [
- 7,
- 10
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- 8,
- 1
- ],
- [
- 12,
- 9
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 7,
- -4
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 6359,
- 5832
- ],
- [
- 3,
- 1
- ],
- [
- 9,
- 4
- ],
- [
- 7,
- 6
- ],
- [
- 13,
- 5
- ],
- [
- 10,
- 11
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 7
- ],
- [
- 4,
- 2
- ],
- [
- 11,
- -8
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -9
- ],
- [
- -2,
- -9
- ],
- [
- 1,
- -15
- ],
- [
- 1,
- -24
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -19
- ],
- [
- -2,
- -12
- ],
- [
- 0,
- -16
- ],
- [
- -4,
- -11
- ],
- [
- -1,
- -8
- ],
- [
- -6,
- -15
- ],
- [
- -3,
- -13
- ],
- [
- -1,
- -6
- ],
- [
- -5,
- -18
- ],
- [
- -7,
- -14
- ],
- [
- -2,
- -17
- ],
- [
- -3,
- -11
- ],
- [
- -3,
- -10
- ],
- [
- -6,
- -18
- ],
- [
- -3,
- -12
- ],
- [
- -4,
- -21
- ],
- [
- -1,
- -14
- ],
- [
- -11,
- -39
- ],
- [
- -12,
- -31
- ],
- [
- -7,
- -26
- ],
- [
- -13,
- -31
- ],
- [
- -17,
- -39
- ],
- [
- -23,
- -47
- ],
- [
- -7,
- -9
- ],
- [
- -25,
- -29
- ],
- [
- -16,
- -24
- ],
- [
- -8,
- -17
- ],
- [
- -9,
- -14
- ],
- [
- -7,
- -13
- ],
- [
- -21,
- -46
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- -13
- ],
- [
- -3,
- -7
- ],
- [
- -4,
- -6
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -13
- ],
- [
- -3,
- -8
- ],
- [
- -3,
- -7
- ]
- ],
- [
- [
- 3440,
- 7877
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 3437,
- 7882
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 8
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5184,
- 5191
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -7
- ]
- ],
- [
- [
- 5206,
- 5274
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 3411,
- 5503
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 14,
- -3
- ],
- [
- 7,
- -3
- ],
- [
- 8,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 5,
- 2
- ],
- [
- 7,
- -2
- ],
- [
- 7,
- 2
- ],
- [
- 8,
- 0
- ],
- [
- 14,
- -5
- ],
- [
- 6,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -9
- ]
- ],
- [
- [
- 5626,
- 8010
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -7
- ],
- [
- -1,
- -9
- ]
- ],
- [
- [
- 5377,
- 7806
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 3
- ]
- ],
- [
- [
- 5459,
- 8426
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 10
- ],
- [
- 0,
- 5
- ],
- [
- 6,
- 18
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 11
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -5,
- -13
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -2
- ],
- [
- -7,
- -30
- ]
- ],
- [
- [
- 5529,
- 8515
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -13
- ],
- [
- 4,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -5,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 6,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -4
- ]
- ],
- [
- [
- 5532,
- 8520
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -4,
- -2
- ]
- ],
- [
- [
- 5511,
- 8584
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 5516,
- 8609
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 5670,
- 8974
- ],
- [
- -7,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 3
- ],
- [
- -5,
- 5
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -7
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -5
- ],
- [
- -7,
- -7
- ],
- [
- -7,
- -18
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -3
- ],
- [
- -8,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -6,
- -7
- ],
- [
- -6,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- 1,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -10
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -9
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -5
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -3
- ],
- [
- -6,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -6,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -9,
- 0
- ],
- [
- -9,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -14
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -10
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- -8
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -6
- ],
- [
- -4,
- -7
- ],
- [
- -2,
- -5
- ],
- [
- -4,
- -16
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- -7,
- 1
- ],
- [
- -8,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- -5,
- -7
- ],
- [
- -2,
- -1
- ],
- [
- -8,
- 2
- ],
- [
- -13,
- -4
- ],
- [
- -13,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -7,
- 14
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 10
- ],
- [
- -4,
- 5
- ],
- [
- -8,
- 18
- ],
- [
- -3,
- 13
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -4,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 12
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 13
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 12
- ],
- [
- 0,
- 10
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 5891,
- 3638
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -12
- ],
- [
- 0,
- -8
- ],
- [
- -6,
- 0
- ],
- [
- -7,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -6,
- 7
- ],
- [
- -3,
- 11
- ],
- [
- -2,
- 8
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 9
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 12
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- 8
- ],
- [
- 4,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- -7
- ],
- [
- 7,
- -7
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 3249,
- 6225
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 6542,
- 4913
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -8
- ]
- ],
- [
- [
- 5999,
- 7178
- ],
- [
- -2,
- 13
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 10
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -4,
- 9
- ],
- [
- 2,
- 16
- ],
- [
- 1,
- 4
- ]
- ],
- [
- [
- 5996,
- 7253
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 9
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 11
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 11
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 8,
- 6
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 9,
- 5
- ],
- [
- 12,
- 10
- ],
- [
- 7,
- 6
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -7
- ]
- ],
- [
- [
- 2990,
- 6442
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ]
- ],
- [
- [
- 3009,
- 6437
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3003,
- 6442
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 5045,
- 5542
- ],
- [
- -9,
- -4
- ],
- [
- -4,
- -3
- ]
- ],
- [
- [
- 7768,
- 5559
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- -9
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 7751,
- 5621
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 7738,
- 5641
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 11
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -7
- ]
- ],
- [
- [
- 7733,
- 5639
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 8
- ],
- [
- 1,
- 12
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 7730,
- 5705
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 7779,
- 5736
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 7779,
- 5742
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 7849,
- 5856
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 7844,
- 5874
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 7858,
- 5858
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- -3,
- 8
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -8,
- -4
- ],
- [
- -10,
- 3
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 13
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -7,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -3
- ],
- [
- -8,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -7
- ],
- [
- -3,
- -16
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -20
- ],
- [
- 0,
- -10
- ],
- [
- -2,
- -7
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- -10
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -11
- ],
- [
- -2,
- -14
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -12
- ],
- [
- -6,
- -18
- ],
- [
- -1,
- -11
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -14
- ],
- [
- 0,
- -12
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -12
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 9,
- 6
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -26
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -9
- ],
- [
- 5,
- -48
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 11
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -7
- ],
- [
- 2,
- -6
- ],
- [
- 4,
- -13
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -5
- ],
- [
- 6,
- -8
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- 5,
- -16
- ],
- [
- 8,
- -14
- ]
- ],
- [
- [
- 7780,
- 5555
- ],
- [
- -7,
- 18
- ],
- [
- -4,
- 7
- ],
- [
- 0,
- 13
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 11
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 11
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 11
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 13
- ],
- [
- 3,
- 11
- ],
- [
- 1,
- 19
- ],
- [
- 2,
- 12
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 15
- ],
- [
- 4,
- 21
- ]
- ],
- [
- [
- 6962,
- 7542
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 6882,
- 7325
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 14
- ],
- [
- 1,
- 5
- ],
- [
- 5,
- 8
- ],
- [
- 2,
- 7
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 13
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 13
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 6,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 9,
- 3
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 13
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 7,
- 5
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -7
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -6
- ],
- [
- -5,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 7,
- 2
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 6475,
- 7419
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 9
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- -13
- ]
- ],
- [
- [
- 6497,
- 7335
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 15
- ],
- [
- -1,
- 14
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 14
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- 3,
- 10
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- -5
- ],
- [
- 3,
- -7
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 8
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 11
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 8
- ],
- [
- 2,
- 10
- ],
- [
- 1,
- 11
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- -9,
- 10
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 5
- ],
- [
- -3,
- 13
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -11
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -16
- ],
- [
- 1,
- -8
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- -4,
- 10
- ],
- [
- -3,
- 14
- ]
- ],
- [
- [
- 6554,
- 7564
- ],
- [
- 8,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- 8,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 13
- ],
- [
- 0,
- 11
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 8
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 9,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 6
- ],
- [
- 4,
- -6
- ],
- [
- 4,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -8
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 8,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- 7,
- -7
- ],
- [
- 1,
- 0
- ],
- [
- 7,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- 2,
- -12
- ],
- [
- 3,
- -8
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -8
- ],
- [
- 2,
- -17
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- 7,
- -9
- ],
- [
- 4,
- -4
- ],
- [
- 6,
- -8
- ],
- [
- 6,
- -7
- ],
- [
- 6,
- -11
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -6
- ],
- [
- 6,
- -6
- ],
- [
- 4,
- 2
- ],
- [
- 6,
- -9
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 7,
- -7
- ],
- [
- 9,
- -11
- ],
- [
- 6,
- -7
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -9
- ],
- [
- 0,
- -11
- ],
- [
- 0,
- -8
- ],
- [
- 0,
- -6
- ]
- ],
- [
- [
- 8445,
- 4646
- ],
- [
- 4,
- 5
- ],
- [
- 7,
- 3
- ]
- ],
- [
- [
- 8469,
- 4669
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 8
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 12,
- 5
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 10,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -5,
- -10
- ],
- [
- -5,
- -7
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -9,
- -6
- ],
- [
- -6,
- -8
- ],
- [
- -4,
- -6
- ]
- ],
- [
- [
- 8489,
- 4715
- ],
- [
- -2,
- -10
- ],
- [
- -2,
- 2
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ]
- ],
- [
- [
- 141,
- 3957
- ],
- [
- 0,
- -9
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ]
- ],
- [
- [
- 134,
- 3964
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 168,
- 4110
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3305,
- 5768
- ],
- [
- -5,
- -4
- ],
- [
- -11,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- 7,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 16
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 3312,
- 5828
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- -6,
- -5
- ]
- ],
- [
- [
- 5304,
- 7126
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 5313,
- 7186
- ],
- [
- -5,
- -5
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5238,
- 7311
- ],
- [
- 7,
- 4
- ],
- [
- 6,
- 9
- ],
- [
- 2,
- 2
- ],
- [
- 16,
- 9
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- -10
- ],
- [
- 5,
- -10
- ],
- [
- -2,
- -5
- ],
- [
- 4,
- -3
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 6,
- 3
- ],
- [
- 5,
- 7
- ],
- [
- 3,
- 1
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -6
- ],
- [
- -5,
- -14
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -8
- ],
- [
- 3,
- -8
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -2
- ],
- [
- 6,
- -8
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- 0,
- -7
- ],
- [
- 2,
- -5
- ],
- [
- -4,
- -12
- ],
- [
- -3,
- -9
- ],
- [
- -5,
- -12
- ],
- [
- -4,
- -7
- ],
- [
- -9,
- -12
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 3,
- -11
- ],
- [
- 4,
- -8
- ],
- [
- 4,
- -3
- ],
- [
- 7,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 6
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -11
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -3
- ]
- ],
- [
- [
- 5721,
- 7496
- ],
- [
- -7,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 5996,
- 7253
- ],
- [
- 2,
- 4
- ],
- [
- -2,
- 10
- ],
- [
- -2,
- 8
- ],
- [
- 2,
- 6
- ],
- [
- 4,
- 6
- ],
- [
- 5,
- 8
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -6,
- 4
- ],
- [
- -7,
- 5
- ],
- [
- -4,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -9,
- -11
- ],
- [
- -7,
- -15
- ],
- [
- -2,
- -3
- ],
- [
- -8,
- -6
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -9,
- -3
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- -4
- ],
- [
- -7,
- 4
- ],
- [
- -4,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- -4,
- 10
- ],
- [
- -3,
- 5
- ],
- [
- -7,
- 5
- ],
- [
- -12,
- 10
- ],
- [
- -3,
- 2
- ],
- [
- -8,
- 1
- ],
- [
- -8,
- 1
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -15
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -3
- ],
- [
- -8,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -9,
- 6
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- 6
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- -7
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- -8,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 8,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -13,
- -2
- ],
- [
- -9,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 7
- ],
- [
- -3,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 9
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 4
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -3,
- 8
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -10,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 12
- ],
- [
- 1,
- 7
- ],
- [
- 3,
- 2
- ],
- [
- 5,
- 10
- ],
- [
- 7,
- 12
- ],
- [
- 8,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 4,
- -3
- ],
- [
- 7,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 9,
- 2
- ],
- [
- 10,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 5,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 13,
- 4
- ],
- [
- 9,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -12,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 17,
- -4
- ],
- [
- 11,
- 3
- ],
- [
- 13,
- -7
- ],
- [
- 13,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 10
- ],
- [
- 18,
- 15
- ],
- [
- 6,
- 8
- ],
- [
- 6,
- 5
- ],
- [
- 12,
- 5
- ],
- [
- 9,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- 22,
- -3
- ],
- [
- 16,
- -1
- ],
- [
- 7,
- 7
- ],
- [
- 4,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 7,
- -5
- ],
- [
- 10,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -15
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 6,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 10,
- -4
- ],
- [
- 9,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 14,
- -4
- ],
- [
- 4,
- 1
- ],
- [
- 9,
- 4
- ],
- [
- 16,
- 5
- ],
- [
- 10,
- -7
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- 1
- ],
- [
- 12,
- 9
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 9,
- 10
- ],
- [
- 2,
- 5
- ]
- ],
- [
- [
- 5778,
- 7601
- ],
- [
- -1,
- -6
- ],
- [
- 2,
- -8
- ],
- [
- 4,
- -10
- ],
- [
- 4,
- -5
- ],
- [
- 17,
- -12
- ],
- [
- 3,
- -1
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -14,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- -4
- ],
- [
- -5,
- 1
- ],
- [
- -7,
- -2
- ],
- [
- -2,
- -8
- ],
- [
- -4,
- -9
- ],
- [
- -8,
- -7
- ],
- [
- -6,
- -4
- ],
- [
- -8,
- -13
- ],
- [
- -4,
- -8
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 8,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- -6,
- 0
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ]
- ],
- [
- [
- 8288,
- 6596
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 3
- ]
- ],
- [
- [
- 8361,
- 6487
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -7
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- -2,
- 9
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 15
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 13,
- 45
- ],
- [
- 4,
- 9
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 7,
- 5
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -14
- ],
- [
- -3,
- -9
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -11
- ],
- [
- -1,
- -11
- ],
- [
- -1,
- -14
- ],
- [
- -3,
- -14
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -11
- ],
- [
- -4,
- -9
- ]
- ],
- [
- [
- 6102,
- 4724
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -10
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 6097,
- 4828
- ],
- [
- 2,
- -12
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 9
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -8
- ],
- [
- 2,
- -9
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 6107,
- 4901
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -9
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 14
- ],
- [
- -1,
- 11
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- 2
- ]
- ],
- [
- [
- 6089,
- 4914
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -12
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -16
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- -15
- ],
- [
- -1,
- -11
- ],
- [
- 2,
- -8
- ],
- [
- 0,
- -7
- ],
- [
- 3,
- -7
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -8
- ],
- [
- 5,
- -3
- ],
- [
- 2,
- -9
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -8
- ],
- [
- -2,
- -10
- ],
- [
- 0,
- -16
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -12
- ],
- [
- -3,
- -13
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -16
- ],
- [
- 3,
- -8
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 6,
- -15
- ],
- [
- -1,
- -12
- ],
- [
- 2,
- -10
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 5914,
- 4642
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -7,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 4
- ]
- ],
- [
- [
- 5847,
- 5122
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- 0
- ]
- ],
- [
- [
- 5889,
- 7845
- ],
- [
- 3,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- -9,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 11,
- -4
- ]
- ],
- [
- [
- 6061,
- 7896
- ],
- [
- -1,
- 0
- ],
- [
- -10,
- 0
- ],
- [
- -8,
- -1
- ],
- [
- -5,
- -9
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -7
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 1
- ],
- [
- -5,
- -3
- ],
- [
- -12,
- -14
- ],
- [
- -4,
- -10
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 6,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -5,
- -10
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 3,
- -10
- ],
- [
- 7,
- -15
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- 1
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -7
- ],
- [
- -6,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- -1
- ],
- [
- -7,
- -5
- ],
- [
- -5,
- -11
- ],
- [
- -6,
- -6
- ],
- [
- -5,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -5,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 13
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -5,
- 6
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -7,
- 9
- ],
- [
- -4,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 9,
- 11
- ],
- [
- 9,
- 9
- ],
- [
- 4,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 6,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -8,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -8,
- -3
- ],
- [
- -5,
- 3
- ],
- [
- -8,
- 7
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -5,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 7,
- 0
- ],
- [
- 6,
- -2
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -6,
- -3
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -12
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- 1,
- 6
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -9,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -10
- ],
- [
- -1,
- 0
- ],
- [
- -7,
- -13
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -11
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 3517,
- 3240
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -10
- ],
- [
- -6,
- -13
- ],
- [
- -1,
- -7
- ],
- [
- -7,
- -8
- ],
- [
- -4,
- -9
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -4
- ],
- [
- -15,
- -11
- ],
- [
- -6,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 5
- ],
- [
- -9,
- 2
- ],
- [
- -5,
- -2
- ],
- [
- -7,
- -6
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -11,
- 5
- ],
- [
- -8,
- 13
- ],
- [
- -11,
- 1
- ],
- [
- -8,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -7,
- 11
- ],
- [
- -6,
- 11
- ],
- [
- -1,
- 12
- ],
- [
- 1,
- 12
- ],
- [
- 2,
- 14
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 11
- ],
- [
- -1,
- 5
- ]
- ],
- [
- [
- 678,
- 6279
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 15
- ],
- [
- -2,
- 12
- ],
- [
- -3,
- 9
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 7
- ],
- [
- -2,
- 8
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- -7
- ],
- [
- 12,
- -10
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -8
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -6,
- -7
- ],
- [
- -7,
- -4
- ],
- [
- -6,
- -9
- ],
- [
- -2,
- -5
- ]
- ],
- [
- [
- 643,
- 6380
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 653,
- 6389
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 633,
- 6406
- ],
- [
- 6,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- 2
- ],
- [
- -7,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 617,
- 6420
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -9
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 551,
- 6442
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 573,
- 6447
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 4,
- 5
- ],
- [
- 7,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 2728,
- 6598
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 2734,
- 6601
- ],
- [
- -2,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 2740,
- 6604
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 2749,
- 6607
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 2754,
- 6612
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 2760,
- 6618
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 2767,
- 6632
- ],
- [
- -6,
- -11
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- -12
- ]
- ],
- [
- [
- 2721,
- 6707
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 2720,
- 6713
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -7
- ]
- ],
- [
- [
- 2301,
- 6691
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 12
- ],
- [
- -4,
- 29
- ],
- [
- 0,
- 16
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- -22
- ],
- [
- 4,
- -29
- ],
- [
- 1,
- -8
- ]
- ],
- [
- [
- 2296,
- 6756
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 11
- ],
- [
- 5,
- 15
- ],
- [
- 2,
- 2
- ],
- [
- -6,
- -16
- ],
- [
- -2,
- -14
- ]
- ],
- [
- [
- 2772,
- 6755
- ],
- [
- 1,
- -4
- ],
- [
- -3,
- 10
- ],
- [
- -3,
- 15
- ],
- [
- -2,
- 12
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -7
- ],
- [
- 4,
- -23
- ]
- ],
- [
- [
- 2305,
- 6791
- ],
- [
- -1,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -6
- ]
- ],
- [
- [
- 2312,
- 6805
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 6
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -6,
- -7
- ]
- ],
- [
- [
- 2360,
- 6863
- ],
- [
- -2,
- -1
- ],
- [
- 6,
- 9
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- -5
- ],
- [
- -5,
- -6
- ]
- ],
- [
- [
- 2450,
- 6883
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 2641,
- 6891
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- -5,
- -5
- ]
- ],
- [
- [
- 2531,
- 6895
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 2532,
- 6901
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- 9
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -7
- ]
- ],
- [
- [
- 2521,
- 6917
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 2540,
- 6924
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 2553,
- 6926
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 2738,
- 6968
- ],
- [
- -1,
- -14
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ]
- ],
- [
- [
- 1712,
- 7075
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -4
- ],
- [
- 3,
- -6
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 1682,
- 7097
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 1712,
- 7107
- ],
- [
- 2,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -4
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 1665,
- 7137
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 6
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 1658,
- 7144
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 1670,
- 7147
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -7,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 2873,
- 7180
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 2875,
- 7179
- ],
- [
- -1,
- 0
- ],
- [
- 2,
- 7
- ],
- [
- 5,
- 9
- ],
- [
- 2,
- 1
- ],
- [
- -4,
- -8
- ],
- [
- -4,
- -9
- ]
- ],
- [
- [
- 2895,
- 7211
- ],
- [
- -5,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 1
- ]
- ],
- [
- [
- 2901,
- 7214
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 11
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -9
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -10
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 2899,
- 7249
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 6
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 2907,
- 7366
- ],
- [
- -1,
- -1
- ],
- [
- 4,
- 12
- ],
- [
- 3,
- 9
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -6
- ],
- [
- -4,
- -11
- ]
- ],
- [
- [
- 2940,
- 7469
- ],
- [
- -3,
- -8
- ],
- [
- 0,
- 1
- ],
- [
- 4,
- 11
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 2939,
- 7518
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 2986,
- 7545
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- -12,
- -10
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -12,
- -8
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -10,
- -4
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 1
- ],
- [
- -4,
- -6
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 3056,
- 7561
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 3041,
- 7567
- ],
- [
- -8,
- -3
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 3017,
- 7573
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 3021,
- 7574
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -9
- ]
- ],
- [
- [
- 3093,
- 7729
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 3106,
- 7737
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 1587,
- 7903
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 1600,
- 7914
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 1597,
- 7925
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 1595,
- 7958
- ],
- [
- 1,
- -8
- ],
- [
- 1,
- 3
- ],
- [
- 4,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 1588,
- 7973
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 1583,
- 7977
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 1589,
- 7987
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -2
- ]
- ],
- [
- [
- 3135,
- 7785
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -6,
- -9
- ],
- [
- -5,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -3,
- -10
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -4
- ],
- [
- -2,
- -6
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -5,
- -9
- ],
- [
- -4,
- -7
- ],
- [
- -4,
- -13
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -8
- ],
- [
- -2,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -11
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 5,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -6
- ],
- [
- 1,
- -9
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -10,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -5,
- -3
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- -8,
- -10
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -11
- ],
- [
- -2,
- -4
- ],
- [
- -7,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -6,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -10,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -4
- ],
- [
- -4,
- -3
- ],
- [
- -11,
- -8
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 9
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -8
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -9
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 6,
- -2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -9
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 9
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -12
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -12
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 5
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- -5
- ],
- [
- -5,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -7
- ],
- [
- 0,
- -11
- ],
- [
- 3,
- -7
- ],
- [
- 3,
- -8
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- -7,
- -25
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -7
- ],
- [
- -3,
- -8
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 8
- ],
- [
- 3,
- 13
- ],
- [
- 2,
- 8
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 8
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 7
- ],
- [
- 2,
- 7
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- -3,
- -1
- ],
- [
- 1,
- 5
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- 3
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -12
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 6,
- -11
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 7
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- -7
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -8
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -9
- ],
- [
- 8,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -5
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -8,
- 15
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 8
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- 5,
- -8
- ],
- [
- 2,
- -5
- ],
- [
- 4,
- -7
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- -6,
- 11
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 4,
- -7
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- -1
- ],
- [
- -8,
- 6
- ],
- [
- -7,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -7
- ],
- [
- 4,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -24
- ],
- [
- 6,
- -21
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 13
- ],
- [
- -2,
- 10
- ],
- [
- -2,
- 17
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -9
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- -1
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 10
- ],
- [
- 4,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -7
- ],
- [
- -5,
- -8
- ],
- [
- -4,
- -7
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- 2,
- -4
- ],
- [
- 10,
- -7
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 9
- ],
- [
- 3,
- -8
- ],
- [
- 2,
- -3
- ],
- [
- 4,
- -2
- ],
- [
- 8,
- 3
- ],
- [
- 3,
- -3
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -4
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- -8
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -8
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- -10
- ],
- [
- -1,
- -5
- ],
- [
- -11,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- -7,
- -9
- ],
- [
- -3,
- -4
- ],
- [
- -6,
- -14
- ],
- [
- -1,
- -9
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- -5
- ],
- [
- 2,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- 2
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 7
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -22
- ],
- [
- 1,
- -7
- ],
- [
- 3,
- -20
- ],
- [
- 4,
- -20
- ],
- [
- 6,
- -23
- ],
- [
- 9,
- -28
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -10
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 14
- ],
- [
- -1,
- 8
- ],
- [
- 1,
- 12
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -10
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 12,
- -56
- ],
- [
- 3,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -11
- ],
- [
- 0,
- -14
- ],
- [
- -2,
- -25
- ],
- [
- 0,
- -17
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -8
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -11
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- -4
- ],
- [
- -3,
- 1
- ],
- [
- -5,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 12
- ],
- [
- -3,
- 9
- ],
- [
- 0,
- 6
- ],
- [
- -6,
- 3
- ],
- [
- -4,
- 5
- ],
- [
- -3,
- 10
- ],
- [
- -1,
- 16
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 5
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 11
- ],
- [
- 2,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- -5,
- 20
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 9
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 22
- ],
- [
- 3,
- 15
- ],
- [
- 0,
- 16
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -3,
- 9
- ],
- [
- -15,
- 23
- ],
- [
- -11,
- 27
- ],
- [
- -10,
- 11
- ],
- [
- -7,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -7,
- -7
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -4,
- 5
- ],
- [
- -5,
- 9
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -9,
- 7
- ],
- [
- -8,
- 4
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -8,
- -2
- ],
- [
- -7,
- -2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -6
- ],
- [
- -11,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -7
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -10,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -7
- ],
- [
- -4,
- -4
- ],
- [
- -10,
- 6
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -8
- ],
- [
- 4,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 5,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -4
- ],
- [
- 8,
- -5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -8,
- 4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- 3
- ],
- [
- -8,
- 6
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 8
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -11,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- -6,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -9,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- -10
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -13,
- -11
- ],
- [
- -5,
- -6
- ],
- [
- 0,
- 2
- ],
- [
- 6,
- 8
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -10
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -6
- ],
- [
- -4,
- -6
- ],
- [
- -3,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -4,
- -7
- ],
- [
- -3,
- -4
- ],
- [
- -7,
- -9
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 4
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 4,
- -12
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- 2
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 4,
- -9
- ],
- [
- -2,
- -15
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- -10
- ],
- [
- 6,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -9
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -12
- ],
- [
- 1,
- -5
- ],
- [
- 5,
- -19
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 1746,
- 7058
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 8
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 9
- ],
- [
- -4,
- 12
- ],
- [
- -9,
- 14
- ],
- [
- -5,
- 4
- ],
- [
- -3,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 7
- ],
- [
- -3,
- 9
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -9,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -4,
- 5
- ],
- [
- -6,
- 4
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 8
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 8
- ],
- [
- -4,
- 4
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -6,
- 13
- ],
- [
- -6,
- 10
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 8
- ],
- [
- 3,
- 5
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- -8,
- 3
- ],
- [
- -6,
- 13
- ],
- [
- 0,
- 9
- ],
- [
- -3,
- 10
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 10,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -9
- ],
- [
- 1,
- -7
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 8
- ],
- [
- 3,
- -6
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 8
- ],
- [
- -5,
- 5
- ],
- [
- -4,
- 8
- ],
- [
- -7,
- 14
- ],
- [
- -1,
- 12
- ],
- [
- -3,
- 14
- ],
- [
- 2,
- 9
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 5
- ],
- [
- -7,
- 13
- ],
- [
- -6,
- 9
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 9
- ],
- [
- 0,
- 10
- ],
- [
- 2,
- 13
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 9
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- -4,
- 8
- ],
- [
- -2,
- 10
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 12
- ],
- [
- -1,
- 5
- ],
- [
- -3,
- 8
- ],
- [
- 2,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 19
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 21
- ],
- [
- 1,
- 16
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 8
- ],
- [
- 3,
- 36
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 6
- ],
- [
- -1,
- 15
- ],
- [
- 1,
- 17
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- 0
- ],
- [
- 5,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- -2
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- 6
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 7
- ],
- [
- 8,
- 6
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- -3,
- 11
- ],
- [
- -2,
- 15
- ],
- [
- -2,
- 7
- ],
- [
- -5,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 10
- ],
- [
- 1,
- 8
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- -4
- ],
- [
- 8,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 19,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -4,
- -9
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -6,
- -14
- ],
- [
- -2,
- -7
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -6
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 7
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 6
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 8
- ]
- ],
- [
- [
- 9984,
- 8143
- ],
- [
- -5,
- 0
- ],
- [
- -10,
- 9
- ],
- [
- -5,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 103,
- 8167
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 111,
- 8168
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 59,
- 8159
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 79,
- 8163
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 9,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 95,
- 8171
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -4
- ],
- [
- -2,
- 2
- ],
- [
- -4,
- -4
- ],
- [
- 3,
- 11
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 9959,
- 8174
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 9991,
- 8173
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- -4
- ],
- [
- -2,
- -4
- ]
- ],
- [
- [
- 111,
- 8179
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 9927,
- 8172
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -5,
- -4
- ]
- ],
- [
- [
- 179,
- 8187
- ],
- [
- 6,
- -3
- ],
- [
- 6,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- 2
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 0
- ]
- ],
- [
- [
- 209,
- 8195
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- -4,
- -3
- ]
- ],
- [
- [
- 148,
- 8181
- ],
- [
- -15,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 7,
- 3
- ],
- [
- 5,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -6,
- -4
- ],
- [
- -9,
- -2
- ]
- ],
- [
- [
- 9825,
- 8200
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -6,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 257,
- 8212
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 286,
- 8228
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 9799,
- 8237
- ],
- [
- 5,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 5,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -4
- ],
- [
- -5,
- 3
- ],
- [
- -1,
- 5
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 0
- ]
- ],
- [
- [
- 334,
- 8256
- ],
- [
- -8,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -9,
- -7
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 383,
- 8278
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 372,
- 8288
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -5
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 6,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -6
- ]
- ],
- [
- [
- 393,
- 8298
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -1
- ]
- ],
- [
- [
- 401,
- 8302
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -3
- ]
- ],
- [
- [
- 485,
- 8317
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 492,
- 8343
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 459,
- 8351
- ],
- [
- 3,
- -10
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -8,
- 3
- ],
- [
- -5,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -14,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 5,
- 11
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 3
- ],
- [
- 8,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 573,
- 8350
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 569,
- 8360
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -5
- ]
- ],
- [
- [
- 1352,
- 8356
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -8
- ]
- ],
- [
- [
- 559,
- 8359
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 1309,
- 8346
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 6,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -6
- ]
- ],
- [
- [
- 546,
- 8371
- ],
- [
- 0,
- -4
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 536,
- 8370
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 1297,
- 8383
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- 1,
- 9
- ],
- [
- -3,
- 4
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 679,
- 8399
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 1362,
- 8380
- ],
- [
- -1,
- -6
- ],
- [
- -2,
- -7
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 15
- ],
- [
- 10,
- 7
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- 3,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -6
- ],
- [
- 0,
- -4
- ]
- ],
- [
- [
- 1290,
- 8429
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 9,
- -5
- ],
- [
- 5,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -7
- ],
- [
- 4,
- -7
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- 5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -10
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 8
- ],
- [
- -4,
- 6
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -4,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 5,
- 6
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 1
- ]
- ],
- [
- [
- 1312,
- 8424
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 1330,
- 8416
- ],
- [
- 0,
- -10
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 9
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 4,
- -9
- ],
- [
- -1,
- -7
- ]
- ],
- [
- [
- 703,
- 8434
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -5
- ]
- ],
- [
- [
- 716,
- 8439
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 285,
- 8446
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- 1,
- 2
- ]
- ],
- [
- [
- 1312,
- 8440
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 5,
- -6
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 1278,
- 8458
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 12
- ],
- [
- 3,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 1295,
- 8467
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- -3,
- 6
- ],
- [
- -3,
- 2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 9,
- -4
- ]
- ],
- [
- [
- 750,
- 8474
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 2,
- 3
- ],
- [
- 10,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 273,
- 8478
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 8,
- 2
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 1251,
- 8487
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -12
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -7
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 8
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 1
- ],
- [
- 1,
- 5
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -10
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- -6
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -4
- ]
- ],
- [
- [
- 743,
- 8516
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 753,
- 8514
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -6,
- 1
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -6
- ],
- [
- -6,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 8,
- 9
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- 0
- ],
- [
- -5,
- 7
- ],
- [
- -2,
- 10
- ],
- [
- -3,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 4,
- 6
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 7,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 1230,
- 8539
- ],
- [
- 4,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 5,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -8
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -3
- ],
- [
- 3,
- -2
- ],
- [
- 7,
- 0
- ],
- [
- 3,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 4
- ],
- [
- -8,
- 5
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -4
- ],
- [
- -6,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 8
- ],
- [
- -8,
- 9
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ]
- ],
- [
- [
- 1269,
- 8538
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- -3
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 1259,
- 8534
- ],
- [
- 7,
- -1
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- -9
- ],
- [
- 3,
- -7
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 5,
- -10
- ],
- [
- 4,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -5,
- -9
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 11
- ],
- [
- 0,
- 4
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 15
- ],
- [
- -1,
- 5
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- -6
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 766,
- 8545
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -9,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- 8,
- 8
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 5,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ]
- ],
- [
- [
- 764,
- 8552
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -4
- ]
- ],
- [
- [
- 530,
- 8558
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 4
- ],
- [
- 6,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- -6,
- -12
- ]
- ],
- [
- [
- 984,
- 8629
- ],
- [
- -1,
- 0
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -5,
- -6
- ]
- ],
- [
- [
- 888,
- 8643
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 5,
- 2
- ],
- [
- 4,
- -3
- ],
- [
- -3,
- -2
- ]
- ],
- [
- [
- 896,
- 8629
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- 5
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -9,
- -10
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ]
- ],
- [
- [
- 385,
- 8662
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -8,
- 2
- ],
- [
- -10,
- 7
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -4,
- 7
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 12,
- -1
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 969,
- 8659
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- 5,
- 4
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ]
- ],
- [
- [
- 933,
- 8666
- ],
- [
- 1,
- -2
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -3
- ],
- [
- -5,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 4,
- -1
- ]
- ],
- [
- [
- 898,
- 8666
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 777,
- 8661
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -3,
- -6
- ],
- [
- -1,
- 0
- ]
- ],
- [
- [
- 202,
- 8666
- ],
- [
- 6,
- -4
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- -5,
- 2
- ],
- [
- -6,
- 0
- ],
- [
- -9,
- 7
- ],
- [
- -4,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 4,
- 3
- ],
- [
- 1,
- -6
- ],
- [
- 4,
- -3
- ]
- ],
- [
- [
- 891,
- 8687
- ],
- [
- -4,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -3
- ]
- ],
- [
- [
- 237,
- 8849
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 7,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 7,
- 0
- ],
- [
- 7,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- -7,
- 1
- ],
- [
- -8,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -9,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- -5
- ]
- ],
- [
- [
- 386,
- 8998
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 6,
- 3
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -3
- ]
- ],
- [
- [
- 1388,
- 8403
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 2,
- -7
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -4,
- -9
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 1373,
- 8338
- ],
- [
- -1,
- 2
- ],
- [
- -7,
- 1
- ],
- [
- -2,
- 8
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 7,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- -1,
- 4
- ],
- [
- -5,
- 9
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -7,
- -4
- ],
- [
- -10,
- -5
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 5,
- 14
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- -8,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -16,
- 7
- ],
- [
- 1,
- 9
- ],
- [
- -3,
- 13
- ],
- [
- -3,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 6,
- -4
- ],
- [
- 5,
- -4
- ],
- [
- 1,
- 1
- ],
- [
- -9,
- 9
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 9,
- -1
- ],
- [
- -8,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- 10
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -7
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 4
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -5,
- 11
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 14
- ],
- [
- -3,
- 9
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -10
- ],
- [
- 2,
- -8
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -10
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -3,
- 2
- ],
- [
- -8,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 7
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- 10
- ],
- [
- 0,
- 2
- ],
- [
- 6,
- 4
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 6
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 2
- ],
- [
- -7,
- 2
- ],
- [
- -4,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -4
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -10,
- -2
- ],
- [
- -3,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -5,
- 4
- ],
- [
- -6,
- 3
- ],
- [
- -13,
- 11
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- -6,
- 6
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -13,
- 8
- ],
- [
- -6,
- 5
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -6
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- -7,
- 4
- ],
- [
- -4,
- 6
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -3
- ],
- [
- -7,
- -8
- ],
- [
- -2,
- -1
- ],
- [
- -8,
- -5
- ],
- [
- -6,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- -5,
- 1
- ],
- [
- -14,
- 7
- ],
- [
- -2,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -1
- ],
- [
- -12,
- 4
- ],
- [
- -13,
- 3
- ],
- [
- -11,
- 0
- ],
- [
- -15,
- -2
- ],
- [
- -9,
- -3
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- -6,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -6,
- 3
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -13,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 8,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 6,
- 12
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 5,
- -4
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -8
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 6
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- -8
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 7
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- -6,
- -7
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- 2
- ],
- [
- -4,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 4
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 8
- ],
- [
- -1,
- 1
- ],
- [
- -9,
- -8
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -7,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 2,
- 8
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 5,
- 6
- ],
- [
- 1,
- 5
- ],
- [
- 3,
- 11
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 10,
- 6
- ],
- [
- 5,
- 4
- ],
- [
- 9,
- 7
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 13,
- -5
- ],
- [
- 3,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -9,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -11,
- 7
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 8,
- 5
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 0
- ],
- [
- -10,
- -1
- ],
- [
- -2,
- 3
- ],
- [
- -2,
- 0
- ],
- [
- -9,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -5,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -3
- ],
- [
- -8,
- -9
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -4,
- 3
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 4,
- -4
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -7,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 5,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -5
- ],
- [
- -1,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -7,
- -6
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -2
- ],
- [
- 6,
- -4
- ],
- [
- 3,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- -5,
- -6
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- -4
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -12,
- -3
- ],
- [
- -2,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -5,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- 0,
- -2
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -6
- ],
- [
- -2,
- -3
- ],
- [
- -18,
- -9
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 8
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- -6
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -6,
- -1
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -3,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -11
- ],
- [
- -3,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 5
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 4,
- 6
- ],
- [
- 4,
- 8
- ],
- [
- 6,
- 7
- ],
- [
- 6,
- 6
- ],
- [
- 6,
- 5
- ],
- [
- 14,
- 7
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 4,
- -7
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -5,
- 4
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 4
- ],
- [
- 4,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 7,
- 8
- ],
- [
- 14,
- 7
- ],
- [
- 4,
- 5
- ],
- [
- 5,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 8
- ],
- [
- 0,
- 9
- ],
- [
- 1,
- 6
- ],
- [
- 4,
- 1
- ],
- [
- 6,
- 2
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 6
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 4
- ],
- [
- 6,
- 8
- ],
- [
- 8,
- 6
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 3,
- 11
- ],
- [
- 3,
- 10
- ],
- [
- -4,
- -9
- ],
- [
- -5,
- -6
- ],
- [
- -15,
- -7
- ],
- [
- -10,
- -7
- ],
- [
- -4,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 6
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 3
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- -4,
- 3
- ],
- [
- -6,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- -1,
- -4
- ],
- [
- 3,
- -12
- ],
- [
- -1,
- -4
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- 4
- ],
- [
- -8,
- 14
- ],
- [
- -2,
- 4
- ],
- [
- -6,
- 7
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -7,
- 5
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- 5
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- -3,
- 0
- ],
- [
- -8,
- -4
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- -4
- ],
- [
- -11,
- -3
- ],
- [
- -11,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 4
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 4,
- 5
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- 5
- ],
- [
- -1,
- 7
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- 0,
- 4
- ],
- [
- -3,
- 7
- ],
- [
- -6,
- 16
- ],
- [
- -3,
- 11
- ],
- [
- -5,
- 6
- ],
- [
- 4,
- 10
- ],
- [
- 4,
- 9
- ],
- [
- 5,
- 4
- ],
- [
- 0,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -6,
- -12
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- 0
- ],
- [
- -4,
- -4
- ],
- [
- -10,
- -4
- ],
- [
- -13,
- -3
- ],
- [
- -6,
- 1
- ],
- [
- -7,
- 5
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- -10,
- 9
- ],
- [
- -5,
- 9
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- 3
- ],
- [
- -4,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- 9,
- 11
- ],
- [
- 3,
- 8
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -1
- ],
- [
- 5,
- -3
- ],
- [
- 4,
- -1
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 5
- ],
- [
- 3,
- 4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -5
- ],
- [
- 3,
- -4
- ],
- [
- 5,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- -2,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -8,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- -6
- ],
- [
- -13,
- 0
- ],
- [
- -9,
- 3
- ],
- [
- -8,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 5,
- 5
- ],
- [
- 3,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -2,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 8
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- 3,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 7,
- 2
- ],
- [
- 1,
- 1
- ],
- [
- -6,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- 1
- ],
- [
- 7,
- 1
- ],
- [
- -3,
- 4
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 5
- ],
- [
- 7,
- 11
- ],
- [
- 7,
- 10
- ],
- [
- 2,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- 3
- ],
- [
- 7,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- 2
- ],
- [
- -4,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 8,
- 3
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- -3
- ],
- [
- 3,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 4,
- 5
- ],
- [
- 5,
- 4
- ],
- [
- 7,
- 11
- ],
- [
- 2,
- 4
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -3
- ],
- [
- 3,
- -1
- ],
- [
- 13,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 5,
- 4
- ],
- [
- 5,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 5
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 6
- ],
- [
- -2,
- 13
- ],
- [
- -6,
- 8
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- 2,
- 5
- ],
- [
- 6,
- 0
- ],
- [
- 4,
- 1
- ],
- [
- 4,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- -8,
- -7
- ],
- [
- -5,
- 0
- ],
- [
- -3,
- 1
- ],
- [
- -3,
- -4
- ],
- [
- -9,
- -4
- ],
- [
- -4,
- -4
- ],
- [
- -9,
- -9
- ],
- [
- -2,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 8
- ],
- [
- -9,
- 8
- ],
- [
- -3,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- 2
- ],
- [
- -6,
- 5
- ],
- [
- -7,
- 2
- ],
- [
- -16,
- 0
- ],
- [
- -11,
- -5
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -9,
- 3
- ],
- [
- -19,
- 4
- ],
- [
- -5,
- 2
- ],
- [
- -5,
- 6
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- -1,
- 5
- ],
- [
- -3,
- 2
- ],
- [
- -8,
- 8
- ],
- [
- -3,
- 4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- 6,
- 2
- ],
- [
- 2,
- 5
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- -11,
- 3
- ],
- [
- -2,
- -1
- ],
- [
- -20,
- 5
- ],
- [
- -16,
- 8
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 9,
- 4
- ],
- [
- 5,
- 6
- ],
- [
- 9,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 3
- ],
- [
- 4,
- 5
- ],
- [
- 6,
- 3
- ],
- [
- 4,
- 3
- ],
- [
- 5,
- 1
- ],
- [
- 4,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 8,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- -8,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 9,
- 5
- ],
- [
- 7,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 11,
- 6
- ],
- [
- 6,
- 2
- ],
- [
- 11,
- 1
- ],
- [
- 9,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -3,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -3,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 10,
- -8
- ],
- [
- 14,
- 0
- ],
- [
- 8,
- 1
- ],
- [
- 5,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 10,
- 1
- ],
- [
- 8,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 7,
- 12
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -2
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- -3
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 3
- ],
- [
- -11,
- 4
- ],
- [
- -8,
- -2
- ],
- [
- -3,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- -8,
- 11
- ],
- [
- -4,
- 3
- ],
- [
- -4,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- -2,
- 5
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -7
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -6
- ],
- [
- 3,
- -6
- ],
- [
- 9,
- -6
- ],
- [
- 7,
- 2
- ],
- [
- 5,
- 0
- ],
- [
- 3,
- -1
- ],
- [
- 8,
- -6
- ],
- [
- 3,
- 0
- ],
- [
- 12,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 3
- ],
- [
- -7,
- -1
- ],
- [
- -6,
- 4
- ],
- [
- -6,
- -1
- ],
- [
- -9,
- -6
- ],
- [
- -5,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -5,
- 4
- ],
- [
- -1,
- 6
- ],
- [
- 4,
- 6
- ],
- [
- 3,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -7,
- 2
- ],
- [
- -12,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -5,
- -5
- ],
- [
- -5,
- 1
- ],
- [
- -7,
- -1
- ],
- [
- -15,
- 5
- ],
- [
- -5,
- 5
- ],
- [
- -2,
- 5
- ],
- [
- -4,
- 11
- ],
- [
- -5,
- 8
- ],
- [
- -35,
- 25
- ],
- [
- -16,
- 6
- ],
- [
- -8,
- 8
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- 1
- ],
- [
- -6,
- 2
- ],
- [
- 4,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- -3,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 9
- ],
- [
- 3,
- 12
- ],
- [
- -1,
- 5
- ],
- [
- 19,
- -1
- ],
- [
- 13,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 16,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 8,
- 4
- ],
- [
- 9,
- 8
- ],
- [
- 8,
- 10
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 9
- ],
- [
- 4,
- 9
- ],
- [
- 16,
- 19
- ],
- [
- 8,
- 8
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 6,
- 2
- ],
- [
- 4,
- 2
- ],
- [
- 18,
- 4
- ],
- [
- 10,
- 7
- ],
- [
- 0,
- 1
- ],
- [
- 14,
- 9
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- 5,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 9,
- 3
- ],
- [
- -10,
- 0
- ],
- [
- -6,
- 6
- ],
- [
- -4,
- 0
- ],
- [
- 11,
- 9
- ],
- [
- 11,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 2,
- 2
- ],
- [
- 11,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 13,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 8,
- 5
- ],
- [
- 8,
- 6
- ],
- [
- 3,
- 3
- ],
- [
- 7,
- 8
- ],
- [
- 5,
- 5
- ],
- [
- 9,
- 5
- ],
- [
- 2,
- -1
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- 3,
- -3
- ],
- [
- 18,
- -6
- ],
- [
- 4,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- -5,
- -4
- ],
- [
- -9,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- 0
- ],
- [
- 5,
- 1
- ],
- [
- 3,
- 2
- ],
- [
- 8,
- 7
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 6,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- -1
- ],
- [
- 6,
- -2
- ],
- [
- 7,
- 4
- ],
- [
- 6,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 7,
- 2
- ],
- [
- 13,
- -3
- ],
- [
- 3,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 5,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- -5,
- -4
- ],
- [
- -1,
- -5
- ],
- [
- 2,
- -2
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 11,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -4,
- -3
- ],
- [
- 20,
- -2
- ],
- [
- 3,
- 2
- ],
- [
- 4,
- 0
- ],
- [
- 9,
- 3
- ],
- [
- 3,
- -1
- ],
- [
- 4,
- -3
- ],
- [
- 4,
- 0
- ],
- [
- 3,
- 0
- ],
- [
- 8,
- 4
- ],
- [
- 9,
- 0
- ],
- [
- 4,
- -1
- ],
- [
- 4,
- 1
- ],
- [
- 11,
- -5
- ],
- [
- 5,
- 0
- ],
- [
- 5,
- -6
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 3,
- -2
- ],
- [
- 4,
- -1
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 18,
- -2
- ],
- [
- 9,
- 1
- ],
- [
- 13,
- -1
- ],
- [
- 6,
- -1
- ],
- [
- 6,
- 0
- ],
- [
- 11,
- -6
- ],
- [
- 6,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 16,
- -1
- ],
- [
- 5,
- 3
- ],
- [
- 10,
- 1
- ],
- [
- 9,
- 3
- ],
- [
- 5,
- 0
- ],
- [
- 6,
- -1
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- 1
- ],
- [
- 14,
- -4
- ],
- [
- 8,
- -6
- ],
- [
- 3,
- -4
- ],
- [
- 17,
- -6
- ],
- [
- 5,
- -3
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 6,
- 0
- ],
- [
- 2,
- 0
- ]
- ],
- [
- [
- 3296,
- 5915
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 3299,
- 5932
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 3300,
- 5942
- ],
- [
- 0,
- -1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3305,
- 5695
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- 6
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- -1
- ]
- ],
- [
- [
- 3310,
- 5710
- ],
- [
- -3,
- -2
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 3188,
- 5812
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- 2,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 3226,
- 5825
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- -1,
- -1
- ],
- [
- -4,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 3019,
- 5867
- ],
- [
- -1,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -11,
- -5
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- 3,
- -13
- ],
- [
- 1,
- -3
- ],
- [
- 5,
- -7
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- -9
- ],
- [
- 3,
- -6
- ],
- [
- 0,
- -4
- ],
- [
- -2,
- -13
- ],
- [
- -4,
- -7
- ],
- [
- -2,
- -9
- ],
- [
- -2,
- -3
- ],
- [
- -4,
- -17
- ],
- [
- 3,
- -10
- ],
- [
- 0,
- -5
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- 0
- ],
- [
- 6,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- 3,
- 7
- ],
- [
- 0,
- 10
- ],
- [
- 1,
- 11
- ],
- [
- -1,
- 7
- ],
- [
- -3,
- 11
- ],
- [
- -2,
- 7
- ],
- [
- -3,
- 7
- ],
- [
- -2,
- 12
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 9
- ],
- [
- 3,
- 3
- ],
- [
- -1,
- 7
- ],
- [
- 6,
- 2
- ],
- [
- 12,
- 12
- ],
- [
- 8,
- 3
- ],
- [
- 9,
- 7
- ],
- [
- 2,
- 3
- ],
- [
- 2,
- 5
- ],
- [
- 1,
- 1
- ],
- [
- 4,
- -5
- ],
- [
- 3,
- 2
- ],
- [
- 1,
- 4
- ],
- [
- -2,
- 7
- ],
- [
- -2,
- 0
- ],
- [
- -8,
- -3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 9
- ],
- [
- 1,
- 7
- ],
- [
- 2,
- 6
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- -3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -9
- ],
- [
- 1,
- -10
- ],
- [
- 1,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 9,
- 1
- ],
- [
- 5,
- -3
- ],
- [
- 6,
- -2
- ],
- [
- 6,
- -7
- ],
- [
- 6,
- -8
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -7
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -5
- ],
- [
- 7,
- -1
- ],
- [
- 8,
- 3
- ],
- [
- 13,
- 3
- ],
- [
- 4,
- 2
- ],
- [
- 20,
- 1
- ],
- [
- 4,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- 6,
- -12
- ],
- [
- 6,
- -2
- ],
- [
- 5,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 6,
- -3
- ],
- [
- 2,
- 0
- ],
- [
- 3,
- 1
- ],
- [
- 2,
- 0
- ],
- [
- 19,
- 21
- ],
- [
- 10,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- -3,
- 3
- ],
- [
- -8,
- 1
- ],
- [
- -3,
- -2
- ],
- [
- -1,
- 5
- ],
- [
- 2,
- 0
- ],
- [
- 9,
- 2
- ],
- [
- 11,
- -1
- ],
- [
- 8,
- 4
- ],
- [
- 5,
- 0
- ],
- [
- 2,
- 0
- ],
- [
- 7,
- 2
- ],
- [
- 13,
- -3
- ],
- [
- 10,
- 2
- ],
- [
- -1,
- -3
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- -5
- ],
- [
- -9,
- 1
- ],
- [
- -6,
- -2
- ],
- [
- 2,
- -1
- ],
- [
- 0,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- -1,
- -3
- ],
- [
- 2,
- 1
- ],
- [
- 2,
- 3
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- -15
- ],
- [
- 3,
- -8
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -1
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 4,
- 0
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- -3
- ],
- [
- 6,
- -12
- ],
- [
- 2,
- -2
- ],
- [
- 6,
- -3
- ],
- [
- 4,
- -6
- ],
- [
- 2,
- -5
- ],
- [
- -1,
- -6
- ],
- [
- -4,
- -2
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -6
- ],
- [
- -2,
- -7
- ],
- [
- -2,
- -7
- ],
- [
- -10,
- 0
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -6
- ],
- [
- 3,
- 5
- ],
- [
- 4,
- 0
- ],
- [
- 5,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- 9,
- -3
- ],
- [
- 2,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 4,
- -1
- ],
- [
- 5,
- -4
- ]
- ],
- [
- [
- 3205,
- 6244
- ],
- [
- -2,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- -2
- ]
- ],
- [
- [
- 3211,
- 6247
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 3,
- 0
- ],
- [
- -2,
- -3
- ]
- ],
- [
- [
- 3214,
- 6263
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -1
- ]
- ],
- [
- [
- 3201,
- 6209
- ],
- [
- 2,
- -3
- ],
- [
- 3,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -6,
- -1
- ],
- [
- 0,
- 4
- ],
- [
- 4,
- 2
- ]
- ],
- [
- [
- 3204,
- 6241
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -1
- ]
- ],
- [
- [
- 3198,
- 6240
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- 3,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 7961,
- 5684
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 1
- ],
- [
- 3,
- 4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 7890,
- 5782
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- 13
- ],
- [
- -3,
- 5
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 3
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 7976,
- 5783
- ],
- [
- -2,
- -4
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 0,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 7972,
- 6379
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 3,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 7968,
- 6383
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 7986,
- 6389
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ]
- ],
- [
- [
- 7988,
- 6406
- ],
- [
- -4,
- -7
- ],
- [
- -1,
- 0
- ],
- [
- 1,
- 8
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- 0
- ]
- ],
- [
- [
- 7998,
- 6423
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- 0,
- -4
- ],
- [
- -1,
- -4
- ],
- [
- -5,
- -7
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -2
- ],
- [
- -2,
- 1
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -9
- ],
- [
- 1,
- -4
- ],
- [
- -6,
- -12
- ],
- [
- 1,
- -8
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -4
- ],
- [
- -7,
- -13
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- -3
- ],
- [
- -5,
- -20
- ],
- [
- 0,
- -7
- ],
- [
- 0,
- -5
- ],
- [
- 0,
- -5
- ],
- [
- -2,
- -9
- ],
- [
- -2,
- -5
- ],
- [
- -1,
- -5
- ],
- [
- 3,
- -11
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- 2,
- -4
- ],
- [
- 4,
- -11
- ],
- [
- 3,
- -3
- ],
- [
- 2,
- -3
- ],
- [
- 5,
- -9
- ],
- [
- 3,
- -7
- ],
- [
- -2,
- -4
- ],
- [
- 1,
- -9
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- -1
- ],
- [
- 4,
- -5
- ],
- [
- 6,
- -17
- ],
- [
- 5,
- -8
- ],
- [
- 6,
- -10
- ],
- [
- 1,
- -9
- ],
- [
- 5,
- -6
- ],
- [
- 6,
- -9
- ],
- [
- -1,
- -2
- ],
- [
- 2,
- -2
- ],
- [
- 4,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 3,
- -7
- ],
- [
- 2,
- -6
- ],
- [
- 3,
- -11
- ],
- [
- 3,
- -5
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -12
- ],
- [
- 1,
- -10
- ],
- [
- 3,
- -12
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -9
- ],
- [
- 2,
- -10
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -7
- ],
- [
- 0,
- -3
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -11
- ],
- [
- 0,
- -5
- ],
- [
- -1,
- 5
- ],
- [
- 0,
- -15
- ],
- [
- 1,
- -8
- ],
- [
- 0,
- -10
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -11
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -14
- ],
- [
- 0,
- -6
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -4
- ],
- [
- 2,
- -14
- ],
- [
- -2,
- 1
- ],
- [
- 0,
- -20
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- -1
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- -8
- ],
- [
- 0,
- -7
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- -7
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- -6
- ],
- [
- -4,
- -6
- ],
- [
- -3,
- -1
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -10
- ],
- [
- -4,
- -1
- ],
- [
- -8,
- -8
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- -3
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 3
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -10
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- -4,
- -4
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 1
- ],
- [
- 3,
- -4
- ],
- [
- 4,
- -2
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 4
- ],
- [
- -9,
- 17
- ],
- [
- 2,
- -5
- ],
- [
- 9,
- -19
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -4
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 7
- ],
- [
- -7,
- 17
- ],
- [
- -3,
- 2
- ],
- [
- 8,
- -19
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -5
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -3
- ],
- [
- -18,
- -17
- ],
- [
- -3,
- -8
- ],
- [
- -2,
- -9
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -5
- ],
- [
- -6,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- 3,
- 9
- ],
- [
- -2,
- 3
- ],
- [
- 0,
- 22
- ],
- [
- 1,
- 24
- ],
- [
- 1,
- 12
- ],
- [
- 3,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- -3,
- 4
- ],
- [
- -2,
- 4
- ]
- ],
- [
- [
- 7929,
- 6229
- ],
- [
- -2,
- 2
- ],
- [
- -2,
- 0
- ]
- ],
- [
- [
- 9718,
- 4021
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 2
- ],
- [
- 0,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 1,
- -2
- ]
- ],
- [
- [
- 9707,
- 4058
- ],
- [
- -1,
- -6
- ],
- [
- -3,
- 2
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 8
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -7
- ],
- [
- 4,
- -5
- ]
- ],
- [
- [
- 9703,
- 4093
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- 0
- ],
- [
- -7,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 7
- ],
- [
- 1,
- 4
- ],
- [
- 2,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -6
- ],
- [
- 3,
- -2
- ],
- [
- -2,
- -2
- ],
- [
- 3,
- -4
- ],
- [
- 1,
- -4
- ]
- ],
- [
- [
- 9678,
- 4173
- ],
- [
- 3,
- -8
- ],
- [
- 1,
- 0
- ],
- [
- -2,
- -6
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- 6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- 0
- ],
- [
- 3,
- 0
- ]
- ],
- [
- [
- 9678,
- 4217
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- 3
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- 2,
- 2
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 2,
- -4
- ],
- [
- 2,
- -2
- ]
- ],
- [
- [
- 9674,
- 4243
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- 6
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -6
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 9649,
- 4257
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 4,
- -6
- ],
- [
- 1,
- 0
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -4
- ],
- [
- 1,
- -3
- ],
- [
- -2,
- -4
- ],
- [
- -4,
- 2
- ],
- [
- -2,
- -5
- ],
- [
- -3,
- 1
- ],
- [
- 0,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -1,
- 9
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -1
- ],
- [
- -2,
- 5
- ],
- [
- 1,
- 8
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 0
- ],
- [
- 2,
- -2
- ],
- [
- 2,
- -10
- ]
- ],
- [
- [
- 9644,
- 4278
- ],
- [
- 0,
- -1
- ],
- [
- -3,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- 3,
- -1
- ],
- [
- 0,
- -5
- ]
- ],
- [
- [
- 9672,
- 4264
- ],
- [
- -1,
- 0
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 14
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- -2
- ],
- [
- 2,
- -23
- ],
- [
- 0,
- -3
- ],
- [
- -1,
- -1
- ]
- ],
- [
- [
- 9663,
- 4295
- ],
- [
- -2,
- -3
- ],
- [
- -3,
- 0
- ],
- [
- -1,
- 2
- ],
- [
- 4,
- 8
- ],
- [
- 5,
- 2
- ],
- [
- -3,
- -9
- ]
- ],
- [
- [
- 9671,
- 4301
- ],
- [
- -1,
- -4
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 18
- ],
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ],
- [
- 2,
- -13
- ],
- [
- 0,
- -7
- ]
- ],
- [
- [
- 9631,
- 4330
- ],
- [
- 2,
- -19
- ],
- [
- 2,
- 0
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 4
- ],
- [
- 1,
- 7
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 0
- ],
- [
- -1,
- -3
- ],
- [
- 1,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -15
- ],
- [
- 1,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -2,
- -6
- ],
- [
- -5,
- 1
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 6
- ],
- [
- 0,
- 12
- ],
- [
- -3,
- 20
- ],
- [
- 0,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 1,
- 1
- ],
- [
- 2,
- -6
- ],
- [
- 2,
- -5
- ]
- ],
- [
- [
- 9654,
- 4362
- ],
- [
- -1,
- -3
- ],
- [
- -3,
- 1
- ],
- [
- -1,
- 1
- ],
- [
- 0,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 1
- ],
- [
- 3,
- -2
- ],
- [
- -1,
- -5
- ]
- ],
- [
- [
- 9652,
- 4383
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 1
- ],
- [
- -1,
- 7
- ],
- [
- 0,
- 2
- ],
- [
- 2,
- 2
- ],
- [
- 2,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -2
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 54,
- 4359
- ],
- [
- -1,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -1
- ],
- [
- 1,
- -2
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 107,
- 4416
- ],
- [
- -1,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 3
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- -2
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 237,
- 4375
- ],
- [
- -7,
- 0
- ],
- [
- -4,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -4,
- 6
- ],
- [
- 0,
- 3
- ],
- [
- 2,
- 2
- ],
- [
- 3,
- 1
- ],
- [
- 7,
- -5
- ],
- [
- 1,
- -3
- ],
- [
- 2,
- -1
- ],
- [
- 1,
- -1
- ],
- [
- 0,
- -3
- ],
- [
- 0,
- -1
- ]
- ],
- [
- [
- 213,
- 4408
- ],
- [
- 3,
- -5
- ],
- [
- 1,
- -7
- ],
- [
- -1,
- -7
- ],
- [
- -3,
- 1
- ],
- [
- -4,
- -1
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 9
- ],
- [
- -2,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- 2
- ],
- [
- 5,
- 1
- ]
- ],
- [
- [
- 6493,
- 5912
- ],
- [
- 1,
- -1
- ],
- [
- 3,
- 2
- ],
- [
- 8,
- 0
- ],
- [
- 9,
- -6
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -2
- ],
- [
- -4,
- -2
- ],
- [
- -4,
- -5
- ],
- [
- -11,
- -3
- ],
- [
- -4,
- 2
- ],
- [
- -3,
- 4
- ],
- [
- -5,
- 7
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 1
- ],
- [
- 1,
- 2
- ],
- [
- 2,
- 3
- ],
- [
- 3,
- 0
- ],
- [
- 4,
- -4
- ]
- ],
- [
- [
- 6187,
- 5973
- ],
- [
- -2,
- -2
- ],
- [
- 1,
- 5
- ],
- [
- 2,
- 1
- ],
- [
- -1,
- -4
- ]
- ],
- [
- [
- 6188,
- 5989
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- 1
- ],
- [
- -2,
- 3
- ],
- [
- 2,
- 3
- ],
- [
- 1,
- -3
- ],
- [
- 0,
- -2
- ]
- ],
- [
- [
- 6182,
- 6065
- ],
- [
- 0,
- -1
- ],
- [
- -1,
- 2
- ],
- [
- 1,
- 5
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- -4
- ],
- [
- 0,
- -2
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 6474,
- 6143
- ],
- [
- -14,
- -11
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -6
- ],
- [
- -3,
- -7
- ],
- [
- -1,
- -12
- ],
- [
- 1,
- -11
- ],
- [
- 0,
- -6
- ],
- [
- -4,
- -4
- ],
- [
- -3,
- -3
- ],
- [
- -4,
- -5
- ],
- [
- -2,
- -1
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -3
- ],
- [
- -8,
- -6
- ],
- [
- -9,
- -5
- ],
- [
- -13,
- -6
- ],
- [
- -5,
- -6
- ],
- [
- -5,
- -5
- ],
- [
- -7,
- -1
- ],
- [
- -10,
- -6
- ],
- [
- -6,
- -5
- ],
- [
- -7,
- -8
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -5
- ],
- [
- -3,
- -5
- ],
- [
- -4,
- -9
- ],
- [
- -3,
- -4
- ],
- [
- -2,
- 0
- ],
- [
- -4,
- -2
- ],
- [
- -5,
- -1
- ],
- [
- -8,
- 3
- ],
- [
- -2,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -6,
- -6
- ],
- [
- -7,
- -11
- ],
- [
- -4,
- -3
- ],
- [
- -8,
- -4
- ],
- [
- -5,
- -5
- ],
- [
- -3,
- -1
- ],
- [
- -5,
- -1
- ],
- [
- -8,
- 0
- ],
- [
- -8,
- -2
- ],
- [
- -7,
- -3
- ],
- [
- -4,
- -6
- ],
- [
- -4,
- -10
- ],
- [
- -6,
- -4
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -7
- ],
- [
- -4,
- -2
- ],
- [
- -3,
- -1
- ],
- [
- -4,
- 3
- ],
- [
- -7,
- -8
- ],
- [
- -3,
- -2
- ],
- [
- -4,
- 0
- ],
- [
- -3,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -3,
- 4
- ],
- [
- -6,
- 4
- ],
- [
- -4,
- -3
- ],
- [
- 0,
- 8
- ],
- [
- -7,
- 25
- ],
- [
- 2,
- 21
- ],
- [
- 0,
- 3
- ],
- [
- -2,
- 10
- ],
- [
- -4,
- 9
- ],
- [
- 0,
- 11
- ],
- [
- -1,
- 8
- ],
- [
- -1,
- 8
- ],
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 13
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 0,
- 2
- ],
- [
- -1,
- 4
- ],
- [
- -1,
- 7
- ],
- [
- -6,
- 6
- ],
- [
- 1,
- 6
- ],
- [
- 2,
- -2
- ],
- [
- 1,
- -2
- ],
- [
- 0,
- 4
- ],
- [
- 0,
- 2
- ],
- [
- -2,
- 16
- ],
- [
- 3,
- 22
- ],
- [
- -1,
- 20
- ]
- ],
- [
- [
- 6051,
- 2480
- ],
- [
- -1,
- -1
- ],
- [
- -6,
- 1
- ],
- [
- 0,
- 2
- ],
- [
- 1,
- 3
- ],
- [
- 1,
- 2
- ],
- [
- 3,
- -1
- ],
- [
- 2,
- -3
- ],
- [
- 1,
- -1
- ],
- [
- -1,
- -2
- ]
- ],
- [
- [
- 5913,
- 3637
- ],
- [
- -1,
- -13
- ],
- [
- -4,
- -21
- ],
- [
- -1,
- -9
- ],
- [
- -4,
- -34
- ],
- [
- -4,
- -18
- ],
- [
- -3,
- -7
- ],
- [
- -7,
- -12
- ],
- [
- -2,
- -3
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -2
- ],
- [
- -12,
- -25
- ],
- [
- -5,
- -13
- ],
- [
- -4,
- -17
- ],
- [
- -4,
- -10
- ],
- [
- -6,
- -21
- ],
- [
- -5,
- -16
- ],
- [
- -5,
- -15
- ],
- [
- -9,
- -20
- ],
- [
- -4,
- -6
- ],
- [
- -3,
- -3
- ],
- [
- -7,
- -12
- ],
- [
- -9,
- -19
- ],
- [
- -8,
- -16
- ],
- [
- -11,
- -19
- ],
- [
- -7,
- -9
- ],
- [
- -10,
- -16
- ],
- [
- -2,
- -2
- ],
- [
- -11,
- -16
- ],
- [
- -8,
- -9
- ],
- [
- -13,
- -11
- ],
- [
- -5,
- -3
- ],
- [
- -13,
- 3
- ],
- [
- -5,
- -1
- ],
- [
- -4,
- -7
- ],
- [
- 0,
- -9
- ],
- [
- -2,
- -2
- ],
- [
- -3,
- 1
- ],
- [
- -8,
- 4
- ],
- [
- -5,
- -1
- ],
- [
- -3,
- -5
- ],
- [
- -2,
- -6
- ],
- [
- -6,
- -1
- ],
- [
- -12,
- 7
- ],
- [
- -13,
- 4
- ],
- [
- -3,
- 0
- ],
- [
- -7,
- -5
- ],
- [
- -2,
- 0
- ],
- [
- -10,
- 1
- ],
- [
- -5,
- 3
- ],
- [
- -5,
- 0
- ],
- [
- -4,
- -3
- ],
- [
- -5,
- -1
- ],
- [
- -12,
- -17
- ],
- [
- -7,
- 0
- ],
- [
- -6,
- -2
- ],
- [
- -2,
- 0
- ],
- [
- -6,
- 2
- ],
- [
- -2,
- 0
- ],
- [
- -2,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -7,
- -1
- ],
- [
- -3,
- -3
- ],
- [
- -11,
- -16
- ],
- [
- -3,
- 1
- ],
- [
- -2,
- 1
- ],
- [
- -6,
- 0
- ],
- [
- -7,
- 9
- ],
- [
- -2,
- -1
- ],
- [
- 0,
- 3
- ],
- [
- 0,
- 4
- ],
- [
- -1,
- 3
- ],
- [
- -1,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- -4,
- 1
- ],
- [
- -2,
- -1
- ],
- [
- -1,
- -1
- ],
- [
- -1,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- -1,
- 4
- ],
- [
- 0,
- 4
- ],
- [
- -2,
- 2
- ],
- [
- -1,
- 0
- ],
- [
- -3,
- 0
- ],
- [
- -2,
- 0
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- 0,
- -11
- ],
- [
- -1,
- 3
- ],
- [
- -2,
- 7
- ],
- [
- 0,
- 6
- ],
- [
- 0,
- 8
- ],
- [
- 3,
- 3
- ],
- [
- 0,
- 5
- ],
- [
- -1,
- 5
- ],
- [
- -3,
- 11
- ],
- [
- -1,
- 6
- ],
- [
- -3,
- 3
- ],
- [
- -2,
- 9
- ],
- [
- -3,
- 3
- ],
- [
- -1,
- 6
- ],
- [
- -2,
- 5
- ],
- [
- -1,
- 8
- ],
- [
- 2,
- 4
- ],
- [
- 1,
- 3
- ],
- [
- 2,
- -4
- ],
- [
- 3,
- 2
- ],
- [
- 3,
- 5
- ],
- [
- 2,
- 9
- ],
- [
- 1,
- 13
- ],
- [
- -1,
- 9
- ],
- [
- -3,
- 21
- ],
- [
- -1,
- 6
- ],
- [
- -6,
- 15
- ],
- [
- -8,
- 21
- ],
- [
- -9,
- 33
- ],
- [
- -4,
- 20
- ],
- [
- -7,
- 40
- ],
- [
- -6,
- 23
- ],
- [
- -7,
- 21
- ],
- [
- -1,
- 1
- ]
- ],
- [
- [
- 5815,
- 3905
- ],
- [
- 0,
- 1
- ],
- [
- 8,
- 2
- ],
- [
- 7,
- -2
- ],
- [
- 8,
- -6
- ],
- [
- 8,
- -2
- ],
- [
- 7,
- 1
- ],
- [
- 5,
- 1
- ],
- [
- 5,
- -1
- ],
- [
- 3,
- -2
- ],
- [
- 3,
- -4
- ]
- ],
- [
- [
- 5844,
- 4283
- ],
- [
- -4,
- 0
- ],
- [
- -7,
- 0
- ],
- [
- -8,
- 0
- ],
- [
- -6,
- -3
- ],
- [
- -6,
- -5
- ],
- [
- -7,
- -7
- ],
- [
- -2,
- -3
- ],
- [
- -1,
- -2
- ],
- [
- -1,
- -3
- ],
- [
- -1,
- -6
- ],
- [
- 0,
- -9
- ],
- [
- -1,
- -7
- ],
- [
- -2,
- -6
- ],
- [
- -10,
- -8
- ],
- [
- -6,
- -6
- ],
- [
- -7,
- -7
- ],
- [
- -5,
- -10
- ],
- [
- -3,
- -11
- ],
- [
- -5,
- -15
- ],
- [
- -6,
- -12
- ],
- [
- -6,
- -14
- ],
- [
- -7,
- -4
- ],
- [
- -5,
- 1
- ],
- [
- -7,
- 5
- ],
- [
- -5,
- 1
- ],
- [
- -4,
- -3
- ],
- [
- -4,
- 1
- ],
- [
- -4,
- 5
- ],
- [
- -2,
- 2
- ],
- [
- -3,
- -1
- ],
- [
- -3,
- 0
- ],
- [
- -5,
- 3
- ]
- ]
- ],
- "transform": {
- "scale": [
- 0.036003600360036005,
- 0.01736158967459246
- ],
- "translate": [
- -180,
- -89.99892578124998
- ]
- }
-} \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/data/sprites/clouds.json b/framework/src/onos/web/gui/src/main/webapp/data/sprites/clouds.json
deleted file mode 100644
index e0c56030..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/data/sprites/clouds.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "defn_name": "clouds",
- "defn_desc": "Sample Subnet Cloud layout",
-
- "_comment": [
- "Sample cloud sprite layout",
- "(1) Register on the server with ...",
- " onos-upload-sprites localhost clouds.json",
- "(2) Load into topology view with ...",
- " http://localhost:8181/onos/ui/index.html#/topo?sprites=clouds"
- ],
-
- "paths": [
- {
- "tag": "cloud-dashed",
- "stroke": {
- "width": 0.8,
- "dasharray": [4,2]
- },
- "glyph": "cloud"
- },
- {
- "tag": "cloud-solid",
- "stroke": {
- "width": 1
- },
- "glyph": "cloud"
- }
- ],
-
- "defn": [
- {
- "id": "subnetA",
- "path": "cloud-dashed",
- "dim": [400,400],
- "labelyoff": 0.35
- },
- {
- "id": "subnetB",
- "path": "cloud-solid",
- "dim": [600,600],
- "labelyoff": 0.35
- }
- ],
-
- "load": {
- "sprites": [
- { "id": "subnetA", "pos":[-200,40], "label":"apples", "class":"blue1" },
- { "id": "subnetA", "pos":[250,40], "label":"bananas", "class":"blue1" },
- { "id": "subnetA", "pos":[700,40], "label":"cherries", "class":"blue1" },
- { "id": "subnetB", "pos":[-200,400], "label":"Menlo Park", "class":"gold1" },
- { "id": "subnetB", "pos":[500,400], "label":"Stanford", "class":"gold1" }
- ],
- "labels": [
- { "pos":[0,50], "text":"Sample Subnets", "size":1.4 }
- ]
- }
-
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/data/sprites/demo-clouds.json b/framework/src/onos/web/gui/src/main/webapp/data/sprites/demo-clouds.json
deleted file mode 100644
index 98ebc264..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/data/sprites/demo-clouds.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "defn_name": "demo-clouds",
- "defn_desc": "Demo Sample Subnet Clouds",
-
- "_comment": [
- "Sample cloud sprite layout",
- "(1) Register on the server with ...",
- " onos-upload-sprites localhost demo-clouds.json",
- "(2) Load into topology view with ...",
- " http://localhost:8181/onos/ui/index.html#/topo?sprites=demo-clouds"
- ],
-
- "paths": [
- {
- "tag": "dotted-cloud",
- "stroke": {
- "width": 0.8,
- "dasharray": [2,2]
- },
- "glyph": "cloud"
- }
- ],
-
- "defn": [
- {
- "id": "subnetA",
- "path": "dotted-cloud",
- "dim": [400,400],
- "labelyoff": 0.85
- }
- ],
-
- "load": {
- "sprites": [
- { "id": "subnetA", "pos":[250,40], "label":"192.168.2.0/24", "class":"blue1" },
- { "id": "subnetA", "pos":[-200,400], "label":"192.168.1.0/24", "class":"gold1" },
- { "id": "subnetA", "pos":[700,400], "label":"192.168.3.0/24", "class":"gold1" }
- ],
- "labels": [
- { "pos":[450,700], "text":"Demo Subnets", "size":1.6 }
- ]
- }
-
-}
-
diff --git a/framework/src/onos/web/gui/src/main/webapp/data/sprites/layout.json b/framework/src/onos/web/gui/src/main/webapp/data/sprites/layout.json
deleted file mode 100644
index 243681a9..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/data/sprites/layout.json
+++ /dev/null
@@ -1,129 +0,0 @@
-{
- "defn_name": "layout",
- "defn_desc": "Sample Layout Sprite Data",
-
- "_comment": [
- "Sample sprite layout file, demonstrating user-defined paths",
- "(1) Register on the server with ...",
- " onos-upload-sprites localhost layout.json",
- "(2) Load into topology view with ...",
- " http://localhost:8181/onos/ui/index.html#/topo?sprites=layout"
- ],
-
- "_comment_paths": [
- "The 'paths' array contains custom path data.",
- "Note that viewbox defaults to [0 0 1000 1000], which is the logical",
- "coordinate space of the topology view."
- ],
- "paths": [
- {
- "tag": "border",
- "viewbox": "0 0 1 1",
- "d": "M0,0h1v1h-1z",
- "_comment": "path defined in single string"
- },
- {
- "tag": "banner",
- "viewbox": "0 0 4 8",
- "d": [
- "M0,0h4v6l-2,-2l-2,2z",
- "M1,6h2v2h-2z"
- ],
- "_comment": "path defined in multiple strings"
- },
- {
- "tag": "triangle",
- "viewbox": "0 0 1 1",
- "d": "M.5,.2l.3,.6,h-.6z",
- "_comment": "defines its own viewbox"
- },
- {
- "tag": "diamond",
- "viewbox": "0 0 1 1",
- "d": "M.2,.5l.3,-.3l.3,.3l-.3,.3z"
- }
- ],
-
- "_comment_defn": [
- "The 'defn' array contains sprite definitions that combine",
- "path, dimensions, and label-offset into 'sprites' that can be",
- "replicated (stamped) in different positions in the view.",
- "",
- "The 'glyph' property refers to glyphs registered with the UI.",
- "Alternatively, the 'path' property refers to a custom path defined in",
- " the path array above.",
- "The 'dim' property provides the [width,height] bounds within which the",
- " glyph/path is drawn. (default is [40,40])",
- "The 'labelyoff' property defines the Y-offset of the label as a",
- " percentage from the top of the sprite; for example, 0.4 = 40%. The",
- " label is centered horizontally.",
- "The 'scale' property (default is 1) defines the scaling factor, which",
- " is applied after the sprite has been translated to its position."
- ],
- "defn": [
- {
- "id": "border",
- "path": "border",
- "dim":[1000,1000]
- },
- {
- "id": "multi",
- "path": "multi"
- },
- {
- "id": "small_tri",
- "path": "triangle",
- "scale":4
- },
- {
- "id": "big_tri",
- "path": "triangle",
- "scale":12
- },
- {
- "id": "subnet",
- "glyph": "cloud",
- "scale":8,
- "labelyoff": 0.4
- },
- {
- "id": "subnet2",
- "glyph": "cloud",
- "dim":[200,200],
- "labelyoff": 0.4
- }
- ],
-
- "_comment_load": [
- "The 'load' object contains sprites and labels to load into the view.",
- "",
- "Items in the sprite list associate sprites with a position,",
- "style class, and optional label. Note that the coordinates of",
- "the position define the top-left corner of the sprite.",
- "Default 'pos' is [0,0]. Default 'class' is 'gray1'.",
- "",
- "Items in the label list associate labels with a position and",
- "style class. Note that the text is centered on the x-coordinate."
- ],
- "load": {
- "sprites": [
- { "id": "border", "class": "gold1" },
- { "id": "subnet", "pos":[-40,20], "label":"apples", "class": "blue1" },
- { "id": "subnet", "pos":[400,40], "label":"bananas", "class": "blue1" },
- { "id": "subnet", "pos":[840,60], "label":"cherries", "class": "blue1" },
- { "id": "subnet2", "pos":[300,400], "class": "gray1" }
- ],
- "labels": [
- { "pos":[500,850], "text":"Sample Layout", "class":"blue1", "size":1.6 },
- { "pos":[500,900], "text":"Illustrating Sprites", "class":"gray1" }
- ]
- },
- "junk":[
- { "id": "border" },
- { "id": "multi", "class": "gray1" },
- { "id": "small_tri", "pos":[10, 20] },
- { "id": "small_tri", "pos":[110, 20] },
- { "id": "small_tri", "pos":[210, 20] },
- { "id": "small_tri", "pos":[310, 20] }
- ]
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/data/sprites/menlo.json b/framework/src/onos/web/gui/src/main/webapp/data/sprites/menlo.json
deleted file mode 100644
index 68253d34..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/data/sprites/menlo.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
- "defn_name": "menlo",
- "defn_desc": "Office Floor Plan of ONLab at Menlo Park",
-
- "paths": [
- {
- "tag": "outerwalls",
- "stroke": {
- "width": 4
- },
- "viewbox": "0 0 925 550",
- "d": [
- "M36,342V516",
- "M36,516H892",
- "M36,24H892",
- "M36,24V250",
- "M892,516V274",
- "M892,188V24"
- ]
- },
- {
- "tag": "innerwalls",
- "stroke": {
- "width": 2
- },
- "viewbox": "0 0 925 550",
- "d": [
- "M892,188H730V158",
- "M640,24V254H676H676V368",
- "M892,312H742",
- "M742,342V516",
- "M638,368H546V272",
- "M544,282H674",
- "M546,232V66H494V26",
- "M494,130V60",
- "M454,130H340",
- "M400,24V130",
- "M640,178H546",
- "M638,188H672V158",
- "M700,410H602",
- "M518,410H444",
- "M400,410H276",
- "M238,408V516",
- "M352,410V516",
- "M444,410V516",
- "M562,410V516",
- "M650,410V516",
- "M88,178H300V24",
- "M88,60H186V178",
- "M88,140H108V60"
- ]
- }
- ],
-
- "defn": [
- { "id": "owalls", "path": "outerwalls", "dim":[1400,1400] },
- { "id": "iwalls", "path": "innerwalls", "dim":[1400,1400] }
- ],
-
- "load": {
- "alpha": 0.9,
- "sprites": [
- { "id": "owalls", "pos":[-200,-200] },
- { "id": "iwalls", "pos":[-200,-200] }
- ],
- "labels": [
- { "pos":[160,220], "text":"Kitchen", "class":"gold1" },
- { "pos":[480,220], "text":"Guru", "class":"gold1" },
- { "pos":[980,220], "text":"Admin", "class":"gold1" },
- { "pos":[700,400], "text":"Servers", "class":"gold1" },
- { "pos":[720,580], "text":"Sm.Conf.", "class":"gold1" },
- { "pos":[1040,700], "text":"Lg.Conf.", "class":"gold1" },
- { "pos":[500,80], "text":"ONLab at Menlo Park", "class":"blue1", "size":1.4 }
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/data/sprites/packetOptical.json b/framework/src/onos/web/gui/src/main/webapp/data/sprites/packetOptical.json
deleted file mode 100644
index ae19bee1..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/data/sprites/packetOptical.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "defn_name": "packetOptical",
- "defn_desc": "Packet-Optical Demo - ONS 2015",
-
- "paths": [
- {
- "tag": "outline",
- "stroke": {
- "width": 1.0
- },
- "viewbox": "0 0 140 170",
- "d": "M10,10h100v150h-100z"
- }
- ],
-
- "defn": [
- {
- "id": "group",
- "path": "outline",
- "dim": [700, 1000]
- }
- ],
-
- "load": {
- "sprites": [
- { "id": "group", "pos": [-300, 0], "class": "gold1" },
- { "id": "group", "pos": [200, 0], "class": "gold1" },
- { "id": "group", "pos": [700, 0], "class": "gold1" }
- ],
-
- "labels": [
- { "pos":[0,800], "text":"Ciena", "class":"blue1", "size":1.4 },
- { "pos":[0,840], "text":"Ottawa, Ontario", "class":"blue1", "size":1.0 },
-
- { "pos":[500,800], "text":"Fujitsu", "class":"blue1", "size":1.4 },
- { "pos":[500,840], "text":"Richardson, TX", "class":"blue1", "size":1.0 },
-
- { "pos":[1000,800], "text":"Huawei", "class":"blue1", "size":1.4 },
- { "pos":[1000,840], "text":"Plano, TX", "class":"blue1", "size":1.0 }
- ]
- }
-} \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/data/sprites/segmentRouting.json b/framework/src/onos/web/gui/src/main/webapp/data/sprites/segmentRouting.json
deleted file mode 100644
index 58d4702b..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/data/sprites/segmentRouting.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
- "defn_name": "segmentRouting",
- "defn_desc": "Schematic of Data Center",
-
- "paths": [
- {
- "tag": "chassis",
- "stroke": {
- "width": 3.5
- },
- "viewbox": "0 0 120 170",
- "d": "M10,10h80v150h-80z"
- },
- {
- "tag": "module",
- "stroke": {
- "width": 2
- },
- "viewbox": "0 0 120 20",
- "d": "M15,5h70v12h-70z"
- }
- ],
-
- "defn": [
- {
- "id": "rack",
- "path": "chassis",
- "fill": "gray2",
- "subpathfill": "blue2",
- "subpaths": [
- { "path": "module", "pos": [0, 0]},
- { "path": "module", "pos": [0, 20]},
- { "path": "module", "pos": [0, 40]},
- { "path": "module", "pos": [0, 60]}
- ],
- "dim":[120,170]
- }
- ],
-
- "load": {
- "alpha": 0.9,
- "sprites": [
- { "id": "rack", "pos":[200,600], "class":"blue1" },
- { "id": "rack", "pos":[400,600], "class":"blue1" },
- { "id": "rack", "pos":[600,600], "class":"blue1" },
- { "id": "rack", "pos":[800,600], "class":"blue1" }
- ],
- "labels": [
- { "pos":[550,80], "text":"", "class":"blue1", "size":1.4 }
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/main/webapp/error.html b/framework/src/onos/web/gui/src/main/webapp/error.html
deleted file mode 100644
index 564e284b..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/error.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="UTF-8">
- <title>ONOS Login</title>
-
- <style type="text/css">
- img {
- margin: 24px;
- }
- td {
- font: normal 16px Helvetica, Arial, sans-serif !important;
- text-align: left;
- padding: 4px;
- }
- input {
- font: normal 16px Helvetica, Arial, sans-serif !important;
- padding: 3px;
- }
-
- input[type="submit"] {
- margin-top: 20px;
- margin-left: auto;
- margin-right: auto;
- display: block;
- padding: 4px 16px;
- background-color: #CE5650;
- color: #fff;
- /*width: 100%; /!* width of image *!/*/
- height: 32px;
- border-radius: 3px;
- border: 0;
- -moz-outline-radius: 6px;
- }
-
- input[type="submit"]:hover {
- border-radius: 3px;
- border: 1px;
- border-color: #fff;
- border-style: solid;
- box-shadow: 0px 0px 10px #3399ff;
- outline-style: solid;
- outline-width: 3px;
- outline-color: #3399ff;
- }
-
- #error {
- margin: 16px auto;
- color: #CE5650;
- text-align: center;
-
- }
- </style>
-</head>
-<body>
-<div align="center">
- <img src="data/img/onos-logo.lg.png"/>
-
- <form method="post" action="j_security_check">
- <table>
- <tr>
- <td>User:</td>
- <td><input id="username" name="j_username" type="text" autofocus/></td>
- </tr>
- <tr>
- <td>Password:</td>
- <td><input id="password" name="j_password" type="password"/></td>
- </tr>
- <tr>
- <td colspan="2"><input id="submit" type="submit" value="Login"/></td>
- </tr>
- <tr>
- <td colspan="2"><div id="error">Incorrect login credentials!</div></td>
- </tr>
- </table>
- </form>
-</div>
-</body>
-</html> \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/index.html b/framework/src/onos/web/gui/src/main/webapp/index.html
deleted file mode 100644
index 7e0d9b7d..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/index.html
+++ /dev/null
@@ -1,186 +0,0 @@
-<!DOCTYPE html>
-<!--
-~ Copyright 2014,2015 Open Networking Laboratory
-~
-~ Licensed under the Apache License, Version 2.0 (the "License");
-~ you may not use this file except in compliance with the License.
-~ You may obtain a copy of the License at
-~
-~ http://www.apache.org/licenses/LICENSE-2.0
-~
-~ Unless required by applicable law or agreed to in writing, software
-~ distributed under the License is distributed on an "AS IS" BASIS,
-~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~ See the License for the specific language governing permissions and
-~ limitations under the License.
--->
-<html>
-<head>
- <meta charset="utf-8">
- <link rel="shortcut icon" href="data/img/onos-logo.png">
-
- <link rel="apple-touch-icon" href="data/img/apple-touch-icon.png">
- <meta name="apple-mobile-web-app-capable" content="yes">
- <meta name="apple-mobile-web-app-status-bar-style" content="black">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
- <title>ONOS</title>
-
- <!-- Third party library code included here -->
- <!--TODO: use minified versions, once debugging is complete -->
- <script src="tp/angular.js"></script>
- <script src="tp/angular-route.js"></script>
- <script src="tp/angular-cookies.js"></script>
-
- <script src="tp/d3.js"></script>
- <script src="tp/topojson.v1.min.js"></script>
-
- <!-- ONOS UI Framework included here -->
- <!-- TODO: use a single catenated-minified file here -->
- <script src="onos.js"></script>
- <script src="app/directives.js"></script>
-
- <script src="app/fw/util/util.js"></script>
- <script src="app/fw/util/fn.js"></script>
- <script src="app/fw/util/random.js"></script>
- <script src="app/fw/util/theme.js"></script>
- <script src="app/fw/util/keys.js"></script>
- <script src="app/fw/util/prefs.js"></script>
-
- <script src="app/fw/mast/mast.js"></script>
- <script src="app/fw/nav/nav.js"></script>
-
- <script src="app/fw/svg/svg.js"></script>
- <script src="app/fw/svg/glyph.js"></script>
- <script src="app/fw/svg/icon.js"></script>
- <script src="app/fw/svg/geodata.js"></script>
- <script src="app/fw/svg/map.js"></script>
- <script src="app/fw/svg/zoom.js"></script>
- <script src="app/fw/svg/svgUtil.js"></script>
-
- <script src="app/fw/remote/remote.js"></script>
- <script src="app/fw/remote/urlfn.js"></script>
- <script src="app/fw/remote/rest.js"></script>
- <script src="app/fw/remote/wsock.js"></script>
- <script src="app/fw/remote/websocket.js"></script>
-
- <script src="app/fw/widget/widget.js"></script>
- <script src="app/fw/widget/table.js"></script>
- <script src="app/fw/widget/toolbar.js"></script>
- <script src="app/fw/widget/tooltip.js"></script>
- <script src="app/fw/widget/button.js"></script>
- <script src="app/fw/widget/tableBuilder.js"></script>
-
- <script src="app/fw/layer/layer.js"></script>
- <script src="app/fw/layer/panel.js"></script>
- <script src="app/fw/layer/flash.js"></script>
- <script src="app/fw/layer/quickhelp.js"></script>
- <script src="app/fw/layer/veil.js"></script>
-
- <!-- Framework and library stylesheets included here -->
- <!-- TODO: use a single catenated-minified file here -->
- <link rel="stylesheet" href="app/onos.css">
- <link rel="stylesheet" href="app/common.css">
- <link rel="stylesheet" href="app/fw/mast/mast.css">
- <link rel="stylesheet" href="app/fw/svg/glyph.css">
- <link rel="stylesheet" href="app/fw/svg/icon.css">
- <link rel="stylesheet" href="app/fw/layer/panel.css">
- <link rel="stylesheet" href="app/fw/layer/flash.css">
- <link rel="stylesheet" href="app/fw/layer/quickhelp.css">
- <link rel="stylesheet" href="app/fw/layer/veil.css">
- <link rel="stylesheet" href="app/fw/nav/nav.css">
- <link rel="stylesheet" href="app/fw/widget/button.css">
- <link rel="stylesheet" href="app/fw/widget/toolbar.css">
- <link rel="stylesheet" href="app/fw/widget/tooltip.css">
- <link rel="stylesheet" href="app/fw/widget/table.css">
-
- <!-- Builtin views javascript. -->
- <script src="app/view/topo/topo.js"></script>
- <script src="app/view/topo/topoD3.js"></script>
- <script src="app/view/topo/topoEvent.js"></script>
- <script src="app/view/topo/topoDialog.js"></script>
- <script src="app/view/topo/topoFilter.js"></script>
- <script src="app/view/topo/topoForce.js"></script>
- <script src="app/view/topo/topoInst.js"></script>
- <script src="app/view/topo/topoLink.js"></script>
- <script src="app/view/topo/topoModel.js"></script>
- <script src="app/view/topo/topoOblique.js"></script>
- <script src="app/view/topo/topoOverlay.js"></script>
- <script src="app/view/topo/topoPanel.js"></script>
- <script src="app/view/topo/topoSelect.js"></script>
- <script src="app/view/topo/topoSprite.js"></script>
- <script src="app/view/topo/topoTraffic.js"></script>
- <script src="app/view/topo/topoTrafficNew.js"></script>
- <script src="app/view/topo/topoToolbar.js"></script>
- <script src="app/view/device/device.js"></script>
- <script src="app/view/flow/flow.js"></script>
- <script src="app/view/port/port.js"></script>
- <script src="app/view/group/group.js"></script>
- <script src="app/view/link/link.js"></script>
- <script src="app/view/host/host.js"></script>
- <script src="app/view/intent/intent.js"></script>
- <script src="app/view/app/app.js"></script>
- <script src="app/view/settings/settings.js"></script>
- <script src="app/view/cluster/cluster.js"></script>
- <script src="app/view/processor/processor.js"></script>
- <script src="app/view/tunnel/tunnel.js"></script>
-
- <!-- This is where contributed javascript will get injected -->
- <!-- {INJECTED-JAVASCRIPT-START} -->
- <!-- {INJECTED-JAVASCRIPT-END} -->
-
- <!-- Builtin views stylesheets. -->
- <link rel="stylesheet" href="app/view/topo/topo.css">
- <link rel="stylesheet" href="app/view/device/device.css">
- <link rel="stylesheet" href="app/view/flow/flow.css">
- <link rel="stylesheet" href="app/view/port/port.css">
- <link rel="stylesheet" href="app/view/group/group.css">
- <link rel="stylesheet" href="app/view/link/link.css">
- <link rel="stylesheet" href="app/view/host/host.css">
- <link rel="stylesheet" href="app/view/intent/intent.css">
- <link rel="stylesheet" href="app/view/app/app.css">
- <link rel="stylesheet" href="app/view/settings/settings.css">
- <link rel="stylesheet" href="app/view/cluster/cluster.css">
- <link rel="stylesheet" href="app/view/processor/processor.css">
- <link rel="stylesheet" href="app/view/tunnel/tunnel.css">
-
- <!-- This is where contributed stylesheets will get injected -->
- <!-- {INJECTED-STYLESHEETS-START} -->
- <!-- {INJECTED-STYLESHEETS-END} -->
-
-</head>
-<body class="light" ng-app="onosApp">
-<div id="frame" ng-controller="OnosCtrl as onosCtrl" detect-browser>
- <div id="mast"
- ng-controller="MastCtrl as mastCtrl"
- ng-include="'app/fw/mast/mast.html'"></div>
-
- <div id="view" ng-view></div>
-
- <div id="nav"
- ng-controller="NavCtrl as navCtrl"
- ng-include="'nav.html'"></div>
-
- <div id="floatpanels"></div>
- <div id="alerts"></div>
- <div id="tooltip"></div>
- <div id="flash"></div>
- <div id="quickhelp"></div>
- <div id="veil">
- <div class="msg"></div>
- <svg resize></svg>
- </div>
-</div>
-
-<script>
- <!-- Inject user agent info into html element to allow CSS sensitivity. -->
- (function () {
- var t = !!('ontouchstart' in window) || !!('onmsgesturechange' in window);
- d3.select(document.documentElement)
- .attr('data-useragent', navigator.userAgent)
- .attr('data-platform', navigator.platform)
- .classed('touch', t);
- }());
-</script>
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/login.html b/framework/src/onos/web/gui/src/main/webapp/login.html
deleted file mode 100644
index d05260fa..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/login.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="UTF-8">
- <title>ONOS Login</title>
-
- <style type="text/css">
- img {
- margin: 24px;
- }
- td {
- font: normal 16px Helvetica, Arial, sans-serif !important;
- text-align: left;
- padding: 4px;
- }
- input {
- font: normal 16px Helvetica, Arial, sans-serif !important;
- padding: 3px;
- }
-
- input[type="submit"] {
- margin-top: 20px;
- margin-left: auto;
- margin-right: auto;
- display: block;
- padding: 4px 16px;
- background-color: #CE5650;
- color: #fff;
- /*width: 100%; /!* width of image *!/*/
- height: 32px;
- border-radius: 3px;
- border: 0;
- -moz-outline-radius: 6px;
- }
-
- input[type="submit"]:hover {
- border-radius: 3px;
- border: 1px;
- border-color: #fff;
- border-style: solid;
- box-shadow: 0px 0px 10px #3399ff;
- outline-style: solid;
- outline-width: 3px;
- outline-color: #3399ff;
- }
- </style>
-</head>
-<body>
-<div align="center">
- <img src="data/img/onos-logo.lg.png"/>
-
- <form method="post" action="j_security_check">
- <table>
- <tr>
- <td>User:</td>
- <td><input id="username" name="j_username" type="text" autofocus/></td>
- </tr>
- <tr>
- <td>Password:</td>
- <td><input id="password" name="j_password" type="password"/></td>
- </tr>
- <tr>
- <td colspan="2"><input id="submit" type="submit" value="Login"/></td>
- </tr>
- </table>
- </form>
-</div>
-</body>
-</html> \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/nav.html b/framework/src/onos/web/gui/src/main/webapp/nav.html
deleted file mode 100644
index 453efc39..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/nav.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<!-- {INJECTED-VIEW-NAV-START} -->
-<a ng-click="navCtrl.hideNav()" href="#/topo">Network Topology</a>
-<a ng-click="navCtrl.hideNav()" href="#/device">Device List</a>
-<!-- {INJECTED-VIEW-NAV-END} -->
diff --git a/framework/src/onos/web/gui/src/main/webapp/not-ready.html b/framework/src/onos/web/gui/src/main/webapp/not-ready.html
deleted file mode 100644
index bf1e5445..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/not-ready.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE html>
-<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-<html>
-<link>
- <meta charset="utf-8">
- <link rel="shortcut icon" href="data/img/onos-logo.png">
-
- <link rel="apple-touch-icon" href="data/img/apple-touch-icon.png">
- <meta name="apple-mobile-web-app-capable" content="yes">
- <meta name="apple-mobile-web-app-status-bar-style" content="black">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
- <meta http-equiv="refresh" content="5;URL=/onos/ui">
-
- <style>
- body { padding: 16px; }
- h1 { font-family: Arial, Helvetica, sans-serif }
- </style>
-
- <title>ONOS</title>
-
-</head>
-<body>
-<h1>ONOS GUI not ready yet... please stand by...</h1>
-</body>
-</html>
diff --git a/framework/src/onos/web/gui/src/main/webapp/onos.js b/framework/src/onos/web/gui/src/main/webapp/onos.js
deleted file mode 100644
index a0de495b..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/onos.js
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Main Application Module
- */
-
-(function () {
- 'use strict';
-
- // define core module dependencies here...
- var coreDependencies = [
- 'ngRoute',
- 'onosMast',
- 'onosNav',
- 'onosUtil',
- 'onosSvg',
- 'onosRemote',
- 'onosLayer',
- 'onosWidget'
- ];
-
- // view IDs.. note the first view listed is loaded at startup
- var viewIds = [
- // {INJECTED-VIEW-IDS-START}
- 'topo',
- 'device',
- 'flow',
- 'port',
- 'group',
- 'host',
- 'app',
- 'intent',
- 'cluster',
- 'link',
- // {INJECTED-VIEW-IDS-END}
-
- // dummy entry
- ''
- ];
-
- var viewDependencies = [];
-
- viewIds.forEach(function (id) {
- if (id) {
- viewDependencies.push('ov' + capitalize(id));
- }
- });
-
- var moduleDependencies = coreDependencies.concat(viewDependencies);
-
- function capitalize(word) {
- return word ? word[0].toUpperCase() + word.slice(1) : word;
- }
-
- angular.module('onosApp', moduleDependencies)
-
- .controller('OnosCtrl', [
- '$log', '$scope', '$route', '$routeParams', '$location',
- 'KeyService', 'ThemeService', 'GlyphService', 'VeilService',
- 'PanelService', 'FlashService', 'QuickHelpService',
- 'WebSocketService',
-
- function ($log, $scope, $route, $routeParams, $location,
- ks, ts, gs, vs, ps, flash, qhs, wss) {
- var self = this;
-
- self.$route = $route;
- self.$routeParams = $routeParams;
- self.$location = $location;
- self.version = '1.3.0';
-
- // shared object inherited by all views:
- $scope.onos = {};
-
- // initialize services...
- ts.init();
- ks.installOn(d3.select('body'));
- ks.bindQhs(qhs);
- gs.init();
- vs.init();
- ps.init();
- flash.initFlash();
- qhs.initQuickHelp();
-
- // TODO: register handler for user settings, etc.
-
- wss.createWebSocket({
- wsport: $location.search().wsport
- });
-
- $log.log('OnosCtrl has been created');
-
- $log.debug('route: ', self.$route);
- $log.debug('routeParams: ', self.$routeParams);
- $log.debug('location: ', self.$location);
- }])
-
- .config(['$routeProvider', function ($routeProvider) {
- // If view ID not provided, route to the first view in the list.
- $routeProvider
- .otherwise({
- redirectTo: '/topo'
- });
-
- function viewCtrlName(vid) {
- return 'Ov' + capitalize(vid) + 'Ctrl';
- }
-
- function viewTemplateUrl(vid) {
- return 'app/view/' + vid + '/' + vid + '.html';
- }
-
- // Add routes for each defined view.
- viewIds.forEach(function (vid) {
- if (vid) {
- $routeProvider.when('/' + vid, {
- controller: viewCtrlName(vid),
- controllerAs: 'ctrl',
- templateUrl: viewTemplateUrl(vid)
- });
- }
- });
- }])
-
- .directive('detectBrowser', ['$log', 'FnService',
- function ($log, fs) {
- return function (scope) {
- var body = d3.select('body'),
- browser = '';
- if (fs.isChrome()) {
- browser = 'chrome';
- } else if (fs.isSafari()) {
- browser = 'safari';
- } else if (fs.isFirefox()) {
- browser = 'firefox';
- }
- body.classed(browser, true);
- scope.onos.browser = browser;
-
- if (fs.isMobile()) {
- body.classed('mobile', true);
- scope.onos.mobile = true;
- }
-
- $log.debug('Detected browser is', fs.cap(browser));
- };
- }]);
-}());
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/README.txt b/framework/src/onos/web/gui/src/main/webapp/tests/README.txt
deleted file mode 100644
index 213b4841..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/README.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-####
-# Unit and integration tests for code under the /app directory
-####
-
-To run these tests, karma, node.js etc needs to be installed in the
-build environment.
-
-From the karma installation directory, execute the following:
-
- $ karma start {_path_to_}/src/main/webapp/tests/karma.conf.js
-
-This will launch and capture a browser, install and run the unit tests.
-
-The configuration is currently set to re-run the tests every time a
-file change is detected, (i.e. each time a source file is saved).
-
-----------------------------------------------------------------------
-Useful Notes
-============
-
-Set a 'breakpoint' with the debugger command:
-
- it('should define four functions', function () {
- debugger;
-
- expect(fs.isF(gs.init)).toBeTruthy();
- // ...
- });
-
-Open Developer Tools in the captured Chrome browser, and reload the page.
-The debugger will break at the given point, allowing you to inspect context.
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/flash-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/flash-spec.js
deleted file mode 100644
index a17f9e78..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/flash-spec.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Layer -- Flash Service - Unit Tests
- */
-describe('factory: fw/layer/flash.js', function () {
- var $log, $timeout, fs, flash, d3Elem;
-
- beforeEach(module('onosLayer'));
-
- beforeEach(inject(function (_$log_, _$timeout_, FnService, FlashService) {
- $log = _$log_;
- $timeout = _$timeout_;
- fs = FnService;
- flash = FlashService;
- jasmine.clock().install();
- d3Elem = d3.select('body').append('div').attr('id', 'myflashdiv');
- flash.initFlash();
- }));
-
- afterEach(function () {
- jasmine.clock().uninstall();
- d3.select('#myflashdiv').remove();
- });
-
- function flashItemSelection() {
- return d3Elem.selectAll('.flashItem');
- }
-
- it('should define FlashService', function () {
- expect(flash).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(flash, [
- 'initFlash', 'flash', 'enable'
- ])).toBe(true);
- });
-
- it('should have no items to start', function () {
- expect(flashItemSelection().size()).toBe(0);
- });
-
- it('should flash the message Foo', function () {
- var item, rect, text;
- flash.flash('foo');
- jasmine.clock().tick(101);
- setTimeout(function () {
- item = flashItemSelection();
- expect(item.size()).toEqual(1);
- expect(item.classed('flashItem')).toBeTruthy();
- expect(item.select('rect').size()).toEqual(1);
- text = item.select('text');
- expect(text.size()).toEqual(1);
- expect(text.text()).toEqual('foo');
- }, 100);
- });
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/panel-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/panel-spec.js
deleted file mode 100644
index 24ed9900..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/panel-spec.js
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Layer -- Panel Service - Unit Tests
- */
-describe('factory: fw/layer/panel.js', function () {
- var $log, $timeout, fs, ps, d3Elem;
-
- beforeEach(module('onosLayer'));
-
- beforeEach(inject(function (_$log_, _$timeout_, FnService, PanelService) {
- $log = _$log_;
- $timeout = _$timeout_;
- fs = FnService;
- ps = PanelService;
- d3Elem = d3.select('body').append('div').attr('id', 'floatpanels');
- ps.init();
- }));
-
- afterEach(function () {
- d3.select('#floatpanels').remove();
- ps.init();
- });
-
- function floatPanelSelection() {
- return d3Elem.selectAll('.floatpanel');
- }
-
- it('should define PanelService', function () {
- expect(ps).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(ps, [
- 'init', 'createPanel', 'destroyPanel'
- ])).toBeTruthy();
- });
-
- it('should have no panels to start', function () {
- expect(floatPanelSelection().size()).toBe(0);
- });
-
- it('should log a warning if no ID is given', function () {
- spyOn($log, 'warn');
- var p = ps.createPanel();
- expect(p).toBeNull();
- expect($log.warn).toHaveBeenCalledWith('createPanel: no ID given');
- expect(floatPanelSelection().size()).toBe(0);
- });
-
- it('should create a default panel', function () {
- spyOn($log, 'warn');
- spyOn($log, 'debug');
- var p = ps.createPanel('foo');
- expect(p).not.toBeNull();
- expect($log.warn).not.toHaveBeenCalled();
- expect(floatPanelSelection().size()).toBe(1);
- expect($log.debug).toHaveBeenCalledWith('creating panel:', 'foo', {
- edge: 'right',
- width: 200,
- margin: 20,
- hideMargin: 20,
- xtnTime: 750,
- fade: true
- });
-
- // check basic properties
- expect(p.width()).toEqual(200);
- expect(p.isVisible()).toBeFalsy();
-
- var el = floatPanelSelection();
- expect(el.style('width')).toEqual('200px');
- });
-
- it('should provide an api of panel functions', function () {
- var p = ps.createPanel('foo');
- expect(fs.areFunctions(p, [
- 'show', 'hide', 'toggle', 'empty', 'append',
- 'width', 'height', 'isVisible', 'classed', 'el'
- ])).toBeTruthy();
- });
-
- it('should complain when a duplicate ID is used', function () {
- spyOn($log, 'warn');
- var p = ps.createPanel('foo');
- expect(p).not.toBeNull();
- expect($log.warn).not.toHaveBeenCalled();
- expect(floatPanelSelection().size()).toBe(1);
-
- var dup = ps.createPanel('foo');
- expect(dup).toBeNull();
- expect($log.warn).toHaveBeenCalledWith('Panel with ID "foo" already exists');
- expect(floatPanelSelection().size()).toBe(1);
- });
-
- it('should note when there is no panel to destroy', function () {
- spyOn($log, 'debug');
- ps.destroyPanel('bar');
- expect($log.debug).toHaveBeenCalledWith('no panel to destroy:', 'bar');
- });
-
- it('should destroy the panel', function () {
- spyOn($log, 'debug');
- var p = ps.createPanel('foo');
- expect(floatPanelSelection().size()).toBe(1);
-
- ps.destroyPanel('foo');
- expect($log.debug).toHaveBeenCalledWith('destroying panel:', 'foo');
- expect(floatPanelSelection().size()).toBe(0);
- });
-
- it('should allow alternate settings to be given', function () {
- spyOn($log, 'debug');
- var p = ps.createPanel('foo', { width: 250, edge: 'left' });
- expect($log.debug).toHaveBeenCalledWith('creating panel:', 'foo', {
- edge: 'left',
- width: 250,
- margin: 20,
- hideMargin: 20,
- xtnTime: 750,
- fade: true
- });
- });
-
- it('should show and hide the panel', function () {
- var p = ps.createPanel('foo', {xtnTime:0});
- expect(p.isVisible()).toBeFalsy();
-
- p.show();
- expect(p.isVisible()).toBeTruthy();
-
- p.hide();
- expect(p.isVisible()).toBeFalsy();
- });
-
- it('should append content to the panel', function () {
- var p = ps.createPanel('foo');
- var span = p.append('span').attr('id', 'thisIsMySpan');
-
- expect(floatPanelSelection().selectAll('span').attr('id'))
- .toEqual('thisIsMySpan');
- });
-
- it('should remove content on empty', function () {
- var p = ps.createPanel('voop');
- p.append('span');
- p.append('span');
- p.append('span');
- expect(floatPanelSelection().selectAll('span').size()).toEqual(3);
-
- p.empty();
- expect(floatPanelSelection().selectAll('span').size()).toEqual(0);
- expect(floatPanelSelection().html()).toEqual('');
- });
-
- it('should allow programmatic setting of width', function () {
- var p = ps.createPanel('whatcha', {width:234});
- expect(floatPanelSelection().style('width')).toEqual('234px');
- expect(p.width()).toEqual(234);
-
- p.width(345);
- expect(floatPanelSelection().style('width')).toEqual('345px');
- expect(p.width()).toEqual(345);
- });
-
- it('should allow programmatic setting of height', function () {
- var p = ps.createPanel('ciao', {height:50});
- expect(floatPanelSelection().style('height')).toEqual('50px');
- expect(p.height()).toEqual(50);
-
- p.height(100);
- expect(floatPanelSelection().style('height')).toEqual('100px');
- expect(p.height()).toEqual(100);
- });
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/quickhelp-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/quickhelp-spec.js
deleted file mode 100644
index 0f473b42..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/quickhelp-spec.js
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Layer -- Flash Service - Unit Tests
- */
-describe('factory: fw/layer/quickhelp.js', function () {
- var $log, fs, qhs, d3Elem,
- fade = 500,
- noop = function () {},
- mockBindings = {
- globalKeys: {
- slash: [noop, 'Show / hide Quick Help'],
- T: [noop, 'Toggle Theme']
- },
- globalFormat: ['slash', 'T'],
- viewKeys: {
- H: [noop, 'Show / hide hosts'],
- I: [noop, 'Toggle instances panel']
- },
- viewGestures: []
- };
-
- // list of needed bindings to use in aggregateData
- var neededBindings = [
- 'globalKeys', 'globalFormat', 'viewKeys', 'viewGestures'
- ];
-
- beforeEach(module('onosUtil', 'onosSvg', 'onosLayer'));
-
- beforeEach(inject(function (_$log_, FnService, QuickHelpService) {
- $log = _$log_;
- fs = FnService;
- qhs = QuickHelpService;
-
- jasmine.clock().install();
- d3Elem = d3.select('body').append('div').attr('id', 'quickhelp');
- qhs.initQuickHelp();
- }));
-
- afterEach(function () {
- jasmine.clock().uninstall();
- d3.select('#quickhelp').remove();
- });
-
- function helpItemSelection() {
- return d3Elem.selectAll('.help');
- }
-
- it('should define QuickHelpService', function () {
- expect(qhs).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(qhs, [
- 'initQuickHelp', 'showQuickHelp', 'hideQuickHelp'
- ])).toBeTruthy();
- });
-
- it('should have no items to start', function () {
- expect(helpItemSelection().size()).toBe(0);
- });
-
- // === showQuickHelp
-
- it('should warn if bad bindings are provided', function () {
- var warning =
- 'Quickhelp Service: showQuickHelp(), invalid bindings object';
- spyOn($log, 'warn');
-
- expect(qhs.showQuickHelp()).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(warning);
-
- expect(qhs.showQuickHelp({})).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(warning);
-
- expect(qhs.showQuickHelp([1, 2, 3])).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(warning);
- });
-
- it('should warn if not all needed bindings are provided', function () {
- var warning =
- 'Quickhelp Service: showQuickHelp(),' +
- ' needed bindings for help panel not provided:';
- spyOn($log, 'warn');
-
- expect(qhs.showQuickHelp({
- foo: 'foo', bar: 'bar'
- })).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(warning, neededBindings);
-
- expect(qhs.showQuickHelp({
- globalKeys: {}
- })).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(warning, neededBindings);
-
- expect(qhs.showQuickHelp({
- globalKeys: {},
- globalFormat: {},
- viewKeys: {}
- })).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(warning, neededBindings);
- });
-
- it('should not warn if bindings are provided', function () {
- spyOn($log, 'warn');
- expect(qhs.showQuickHelp(mockBindings)).toBe(undefined);
- expect($log.warn).not.toHaveBeenCalled();
- });
-
- it('should append an svg', function () {
- var svg = d3Elem.select('svg');
- expect(d3Elem.empty()).toBe(false);
- expect(svg.empty()).toBe(true);
-
- qhs.showQuickHelp(mockBindings);
-
- svg = d3Elem.select('svg');
- expect(svg.empty()).toBe(false);
- expect(svg.attr('width')).toBe('100%');
- expect(svg.attr('height')).toBe('80%');
- expect(svg.attr('viewBox')).toBe('-200 0 400 400');
- });
-
- it('should create the quick help panel', function () {
- var helpItems, g, rect, text, rows;
- qhs.showQuickHelp(mockBindings);
-
- helpItems = helpItemSelection();
- expect(helpItems.size()).toBe(1);
-
- g = d3.select('g.help');
- expect(g.attr('opacity')).toBe('0');
-
- rect = g.select('rect');
- expect(rect.attr('rx')).toBe('8');
-
- text = g.select('text');
- expect(text.text()).toBe('Quick Help');
- expect(text.classed('title')).toBe(true);
- expect(text.attr('dy')).toBe('1.2em');
- expect(text.attr('transform')).toBeTruthy();
-
- rows = g.select('g');
- expect(rows.empty()).toBe(false);
-
- jasmine.clock().tick(fade + 1);
- setTimeout(function () {
- expect(g.attr('opacity')).toBe('1');
- }, fade);
-
- // TODO: test aggregate data helper function
- });
-
- it('should show panel with custom fade time', function () {
- var g,
- ctmFade = 200;
- qhs.initQuickHelp({ fade: ctmFade });
- qhs.showQuickHelp(mockBindings);
-
- g = d3.select('g.help');
- expect(g.attr('opacity')).toBe('0');
-
- jasmine.clock().tick(ctmFade + 1);
- setTimeout(function () {
- expect(g.attr('opacity')).toBe('1');
- }, ctmFade);
- });
-
- // === hideQuickHelp
-
- it('should hide quick help if svg exists', function () {
- var svg;
-
- expect(qhs.hideQuickHelp()).toBe(false);
-
- svg = d3.select('#quickhelp')
- .append('svg');
- svg.append('g')
- .classed('help', true)
- .attr('opacity', 1);
-
- expect(qhs.hideQuickHelp()).toBe(true);
-
- jasmine.clock().tick(fade + 1);
- setTimeout(function () {
- expect(svg.select('g.help').attr('opacity')).toBe('0');
- }, fade);
-
- jasmine.clock().tick(20);
- setTimeout(function () {
- expect(svg.empty()).toBe(true);
- }, fade + 20);
- });
-
- it('should not hide quick help if svg does not exist', function () {
- expect(qhs.hideQuickHelp()).toBe(false);
- });
-
-});
-
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/veil-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/veil-spec.js
deleted file mode 100644
index 155ebaab..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/veil-spec.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Layer -- Veil Service - Unit Tests
- */
-
-describe('factory: fw/layer/veil.js', function () {
- var $log, $route, vs, fs, ks, gs;
-
- beforeEach(module('onosLayer', 'onosNav', 'onosSvg', 'ngRoute'));
-
- beforeEach(inject(function (_$log_, _$route_, VeilService, FnService,
- KeyService, GlyphService) {
- $log = _$log_;
- $route = _$route_;
- vs = VeilService;
- fs = FnService;
- ks = KeyService;
- gs = GlyphService;
- }));
-
- it('should define VeilService', function () {
- expect(vs).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(vs, [
- 'init', 'show', 'hide', 'lostServer'
- ])).toBeTruthy();
- });
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/mast/mast-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/mast/mast-spec.js
deleted file mode 100644
index 26ccef8a..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/mast/mast-spec.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Masthead Controller - Unit Tests
- */
-describe('Controller: MastCtrl', function () {
- // instantiate the masthead module
- beforeEach(module('onosMast', 'onosUtil'));
-
- var $log, ctrl, ms, fs;
-
- // we need an instance of the controller
- beforeEach(inject(function(_$log_, $controller, MastService, FnService) {
- $log = _$log_;
- ctrl = $controller('MastCtrl');
- ms = MastService;
- fs = FnService;
- }));
-
- it('should declare height to be 36', function () {
- expect(ms.mastHeight()).toBe(36);
- })
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/nav/nav-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/nav/nav-spec.js
deleted file mode 100644
index d14d5147..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/nav/nav-spec.js
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Util -- Theme Service - Unit Tests
- */
-describe('factory: fw/nav/nav.js', function() {
- var $log, $location, $window, ns, fs;
- var d3Elem;
-
- beforeEach(module('onosNav', 'onosUtil'));
-
- var mockWindow = {
- location: {
- href: 'http://server/#/mock/url'
- }
- };
-
- beforeEach(function () {
- module(function ($provide) {
- $provide.value('$window', mockWindow);
- });
- });
-
- beforeEach(inject(function (_$log_, _$location_, _$window_,
- NavService, FnService) {
- $log = _$log_;
- $location = _$location_;
- $window = _$window_;
- ns = NavService;
- fs = FnService;
- d3Elem = d3.select('body').append('div').attr('id', 'nav');
- ns.hideNav();
- }));
-
- afterEach(function () {
- d3.select('#nav').remove();
- });
-
- it('should define NavService', function () {
- expect(ns).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(ns, [
- 'showNav', 'hideNav', 'toggleNav', 'hideIfShown', 'navTo'
- ])).toBeTruthy();
- });
-
- function checkHidden(b) {
- var what = b ? 'hidden' : 'visible';
- expect(d3.select('#nav').style('visibility')).toEqual(what);
- }
-
- it('should start hidden', function () {
- checkHidden(true);
- });
-
- it('should be shown then hidden', function () {
- ns.showNav();
- checkHidden(false);
- ns.hideNav();
- checkHidden(true);
- });
-
- it('should toggle hidden', function () {
- ns.toggleNav();
- checkHidden(false);
- ns.toggleNav();
- checkHidden(true);
- });
-
- it('should show idempotently', function () {
- checkHidden(true);
- ns.showNav();
- checkHidden(false);
- ns.showNav();
- checkHidden(false);
- });
-
- it('should hide idempotently', function () {
- checkHidden(true);
- ns.hideNav();
- checkHidden(true);
- });
-
- it('should be a noop if already hidden', function () {
- checkHidden(true);
- expect(ns.hideIfShown()).toBe(false);
- checkHidden(true);
- });
-
- it('should hide if shown', function () {
- ns.showNav();
- checkHidden(false);
- expect(ns.hideIfShown()).toBe(true);
- checkHidden(true);
- });
-
- it('should take correct navTo parameters', function () {
- spyOn($log, 'warn');
-
- ns.navTo('foo');
- expect($log.warn).not.toHaveBeenCalled();
-
- ns.navTo('bar', { q1: 'thing', q2: 'thing2' });
- expect($log.warn).not.toHaveBeenCalled();
-
- });
-
- it('should check navTo parameter warnings', function () {
- spyOn($log, 'warn');
-
- expect(ns.navTo()).toBeNull();
- expect($log.warn).toHaveBeenCalledWith('Not a valid navigation path');
-
- ns.navTo('baz', [1, 2, 3]);
- expect($log.warn).toHaveBeenCalledWith(
- 'Query params not an object', [1, 2, 3]
- );
-
- ns.navTo('zoom', 'not a query param');
- expect($log.warn).toHaveBeenCalledWith(
- 'Query params not an object', 'not a query param'
- );
- });
-
- it('should verify where the window is navigating', function () {
- ns.navTo('foo');
- expect($window.location.href).toBe('http://server/#/foo');
-
- ns.navTo('bar');
- expect($window.location.href).toBe('http://server/#/bar');
-
- ns.navTo('baz', { q1: 'thing1', q2: 'thing2' });
- expect($window.location.href).toBe(
- 'http://server/#/baz?q1=thing1&q2=thing2'
- );
-
- ns.navTo('zip', { q3: 'thing3' });
- expect($window.location.href).toBe(
- 'http://server/#/zip?q3=thing3'
- );
-
- ns.navTo('zoom', {});
- expect($window.location.href).toBe('http://server/#/zoom');
-
- ns.navTo('roof', [1, 2, 3]);
- expect($window.location.href).toBe('http://server/#/roof');
- });
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/rest-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/rest-spec.js
deleted file mode 100644
index 55e22782..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/rest-spec.js
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Remote -- REST Service - Unit Tests
- */
-describe('factory: fw/remote/rest.js', function() {
- var $log, $httpBackend, fs, rs, promise;
-
- beforeEach(module('onosUtil', 'onosRemote'));
-
- beforeEach(module(function($provide) {
- $provide.factory('$location', function (){
- return {
- protocol: function () { return 'http'; },
- host: function () { return 'foo'; },
- port: function () { return '80'; }
- };
- })
- }));
-
- beforeEach(inject(function (_$log_, _$httpBackend_, FnService, RestService) {
- $log = _$log_;
- $httpBackend = _$httpBackend_;
- fs = FnService;
- rs = RestService;
- }));
-
- it('should define RestService', function () {
- expect(rs).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(rs, [
- 'get'
- ])).toBeTruthy();
- });
-
- var mockData = {
- id: 1,
- prop: 'abc'
- };
-
- it('should fetch remote data', function () {
- var called = 0,
- capture = null;
- $httpBackend.whenGET(/.*/).respond(mockData);
- spyOn($log, 'warn');
-
- rs.get('bar', function (data) {
- called++;
- capture = data;
- });
-
- expect(called).toEqual(0);
- expect(capture).toBeNull();
- $httpBackend.flush();
- expect(called).toEqual(1);
- expect(capture).toEqual(mockData);
- expect($log.warn).not.toHaveBeenCalled();
- });
-
- it('should fail to fetch remote data', function () {
- var called = 0,
- capture = null;
- $httpBackend.whenGET(/.*/).respond(404, 'Not Found');
- spyOn($log, 'warn');
-
- rs.get('bar', function (data) {
- called++;
- capture = data;
- });
-
- expect(called).toEqual(0);
- expect(capture).toBeNull();
- $httpBackend.flush();
- expect(called).toEqual(0);
- expect(capture).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(
- 'Failed to retrieve JSON data: http://foo:80/onos/ui/rs/bar',
- 404, 'Not Found');
- });
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/urlfn-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/urlfn-spec.js
deleted file mode 100644
index eddbf8b2..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/urlfn-spec.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Remote -- General Functions - Unit Tests
- */
-describe('factory: fw/remote/urlfn.js', function () {
- var $log, $loc, ufs, fs;
-
- var protocol, host, port;
-
- beforeEach(module('onosRemote'));
-
- beforeEach(module(function($provide) {
- $provide.factory('$location', function (){
- return {
- protocol: function () { return protocol; },
- host: function () { return host; },
- port: function () { return port; }
- };
- })
- }));
-
- beforeEach(inject(function (_$log_, $location, UrlFnService, FnService) {
- $log = _$log_;
- $loc = $location;
- ufs = UrlFnService;
- fs = FnService;
- }));
-
- function setLoc(prot, h, p) {
- protocol = prot;
- host = h;
- port = p;
- }
-
- it('should define UrlFnService', function () {
- expect(ufs).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(ufs, [
- 'rsUrl', 'wsUrl'
- ])).toBeTruthy();
- });
-
- it('should return the correct (http) RS url', function () {
- setLoc('http', 'foo', '123');
- expect(ufs.rsUrl('path')).toEqual('http://foo:123/onos/ui/rs/path');
- });
-
- it('should return the correct (https) RS url', function () {
- setLoc('https', 'foo', '123');
- expect(ufs.rsUrl('path')).toEqual('https://foo:123/onos/ui/rs/path');
- });
-
- it('should return the correct (ws) WS url', function () {
- setLoc('http', 'foo', '123');
- expect(ufs.wsUrl('path')).toEqual('ws://foo:123/onos/ui/websock/path');
- });
-
- it('should return the correct (wss) WS url', function () {
- setLoc('https', 'foo', '123');
- expect(ufs.wsUrl('path')).toEqual('wss://foo:123/onos/ui/websock/path');
- });
-
- it('should allow us to define an alternate WS port', function () {
- setLoc('http', 'foo', '123');
- expect(ufs.wsUrl('xyyzy', 456)).toEqual('ws://foo:456/onos/ui/websock/xyyzy');
- });
-
- it('should allow us to define an alternate host', function () {
- setLoc('http', 'foo', '123');
- expect(ufs.wsUrl('core', 456, 'bar')).toEqual('ws://bar:456/onos/ui/websock/core');
- });
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/websocket-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/websocket-spec.js
deleted file mode 100644
index 9673f16e..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/websocket-spec.js
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Remote -- Web Socket Service - Unit Tests
- */
-describe('factory: fw/remote/websocket.js', function () {
- var $log, fs, wss;
-
- var noop = function () {},
- send = jasmine.createSpy('send').and.callFake(function (ev) {
- return ev;
- }),
- mockWebSocket = {
- send: send
- };
-
- beforeEach(module('onosRemote', 'onosLayer', 'ngRoute', 'onosNav', 'onosSvg'));
-
- beforeEach(function () {
- mockWebSocket = {
- send: send
- };
- });
-
- beforeEach(function () {
- module(function ($provide) {
- $provide.factory('WSock', function () {
- return {
- newWebSocket: function () {
- return mockWebSocket;
- }
- };
- });
- });
- });
-
- beforeEach(module(function($provide) {
- $provide.factory('$location', function () {
- return {
- protocol: function () { return 'http'; },
- host: function () { return 'foo'; },
- port: function () { return '80'; }
- };
- })
- }));
-
- beforeEach(inject(function (_$log_, FnService, WebSocketService) {
- $log = _$log_;
- fs = FnService;
- wss = WebSocketService;
- wss.resetState();
- }));
-
-
- it('should define WebSocketService', function () {
- expect(wss).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(wss, [
- 'resetSid', 'resetState',
- 'createWebSocket', 'bindHandlers', 'unbindHandlers',
- 'addOpenListener', 'removeOpenListener', 'sendEvent'
- ])).toBeTruthy();
- });
-
- it('should use the appropriate URL, createWebsocket', function () {
- var url = wss.createWebSocket();
- expect(url).toEqual('ws://foo:80/onos/ui/websock/core');
- });
-
- it('should use the appropriate URL with modified port, createWebsocket',
- function () {
- var url = wss.createWebSocket({ wsport: 1243 });
- expect(url).toEqual('ws://foo:1243/onos/ui/websock/core');
- });
-
- it('should verify websocket event handlers, createWebsocket', function () {
- wss.createWebSocket({ wsport: 1234 });
- expect(fs.isF(mockWebSocket.onopen)).toBeTruthy();
- expect(fs.isF(mockWebSocket.onmessage)).toBeTruthy();
- expect(fs.isF(mockWebSocket.onclose)).toBeTruthy();
- });
-
- it('should invoke listener callbacks when websocket is up, handleOpen',
- function () {
- var num = 0;
- function incrementNum() { num++; }
- wss.addOpenListener(incrementNum);
- wss.createWebSocket({ wsport: 1234 });
- mockWebSocket.onopen();
- expect(num).toBe(1);
- });
-
- it('should send pending events, handleOpen', function () {
- var fakeEvent = {
- event: 'mockEv',
- sid: 1,
- payload: { mock: 'thing' }
- };
- wss.sendEvent(fakeEvent.event, fakeEvent.payload);
- expect(mockWebSocket.send).not.toHaveBeenCalled();
- wss.createWebSocket({ wsport: 1234 });
- mockWebSocket.onopen();
- expect(mockWebSocket.send).toHaveBeenCalledWith(JSON.stringify(fakeEvent));
- });
-
- it('should handle an incoming bad JSON message, handleMessage', function () {
- spyOn($log, 'error');
- var badMsg = {
- data: 'bad message'
- };
- wss.createWebSocket({ wsport: 1234 });
- expect(mockWebSocket.onmessage(badMsg)).toBeNull();
- expect($log.error).toHaveBeenCalled();
- });
-
- it('should verify message was handled, handleMessage', function () {
- var num = 0,
- fakeHandler = {
- mockEvResp: function () { num++; }
- },
- data = JSON.stringify({
- event: 'mockEvResp',
- payload: {}
- }),
- event = {
- data: data
- };
- wss.createWebSocket({ wsport: 1234 });
- wss.bindHandlers(fakeHandler);
- expect(mockWebSocket.onmessage(event)).toBe(undefined);
- expect(num).toBe(1);
- });
-
- it('should warn if there is an unhandled event, handleMessage', function () {
- spyOn($log, 'warn');
- var data = { foo: 'bar', bar: 'baz'},
- dataString = JSON.stringify(data),
- badEv = {
- data: dataString
- };
- wss.createWebSocket({ wsport: 1234 });
- mockWebSocket.onmessage(badEv);
- expect($log.warn).toHaveBeenCalledWith('Unhandled event:', data);
- });
-
- it('should not warn if valid input, bindHandlers', function () {
- spyOn($log, 'warn');
- expect(wss.bindHandlers({
- foo: noop,
- bar: noop
- })).toBe(undefined);
- expect($log.warn).not.toHaveBeenCalled();
- });
-
- it('should warn if no arguments, bindHandlers', function () {
- spyOn($log, 'warn');
- expect(wss.bindHandlers()).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(
- 'WSS.bindHandlers(): no event handlers'
- );
- expect(wss.bindHandlers({})).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(
- 'WSS.bindHandlers(): no event handlers'
- );
- });
-
- it('should warn if handler is not a function, bindHandlers', function () {
- spyOn($log, 'warn');
- expect(wss.bindHandlers({
- foo: 'handler1',
- bar: 3,
- baz: noop
- })).toBe(undefined);
- expect($log.warn).toHaveBeenCalledWith('foo handler not a function');
- expect($log.warn).toHaveBeenCalledWith('bar handler not a function');
- });
-
- it('should warn if duplicate handlers were given, bindHandlers',
- function () {
- spyOn($log, 'warn');
- wss.bindHandlers({
- foo: noop
- });
- expect(wss.bindHandlers({
- foo: noop
- })).toBe(undefined);
- expect($log.warn).toHaveBeenCalledWith('duplicate bindings ignored:',
- ['foo']);
- });
-
- it('should warn if no arguments, unbindHandlers', function () {
- spyOn($log, 'warn');
- expect(wss.unbindHandlers()).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(
- 'WSS.unbindHandlers(): no event handlers'
- );
- expect(wss.unbindHandlers({})).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(
- 'WSS.unbindHandlers(): no event handlers'
- );
- });
- // Note: cannot test unbindHandlers' forEach due to it using closure variable
-
- it('should not warn if valid argument, addOpenListener', function () {
- spyOn($log, 'warn');
- var o = wss.addOpenListener(noop);
- expect(o.id === 1);
- expect(o.cb === noop);
- expect($log.warn).not.toHaveBeenCalled();
- o = wss.addOpenListener(noop);
- expect(o.id === 2);
- expect(o.cb === noop);
- expect($log.warn).not.toHaveBeenCalled();
- });
-
- it('should log error if callback not a function, addOpenListener',
- function () {
- spyOn($log, 'error');
- var o = wss.addOpenListener('foo');
- expect(o.id === 1);
- expect(o.cb === 'foo');
- expect(o.error === 'No callback defined');
- expect($log.error).toHaveBeenCalledWith(
- 'WSS.addOpenListener(): callback not a function'
- );
- });
-
- it('should not warn if valid listener object, removeOpenListener', function () {
- spyOn($log, 'warn');
- expect(wss.removeOpenListener({
- id: 1,
- cb: noop
- })).toBe(undefined);
- expect($log.warn).not.toHaveBeenCalled();
- });
-
- it('should warn if listener is invalid, removeOpenListener', function () {
- spyOn($log, 'warn');
- expect(wss.removeOpenListener({})).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(
- 'WSS.removeOpenListener(): invalid listener', {}
- );
- expect(wss.removeOpenListener('listener')).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(
- 'WSS.removeOpenListener(): invalid listener', 'listener'
- );
- });
-
- // Note: handleClose is not currently tested due to all work it does relies
- // on closure variables that cannot be mocked
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/wsevent-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/wsevent-spec.js
deleted file mode 100644
index 23d3153f..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/remote/wsevent-spec.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Remote -- Web Socket Event Service - Unit Tests
- */
-describe('factory: fw/remote/wsevent.js', function () {
- var $log, fs, wse;
-
- beforeEach(module('onosRemote'));
-
- beforeEach(inject(function (_$log_, FnService, WsEventService) {
- $log = _$log_;
- fs = FnService;
- wse = WsEventService;
- wse.resetSid();
- }));
-
-
- it('should define WsEventService', function () {
- expect(wse).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(wse, [
- 'sendEvent', 'resetSid'
- ])).toBeTruthy();
- });
-
- var event,
- fakeWs = {
- send: function (ev) {
- event = ev;
- }
- };
-
- it('should construct an event object with no payload', function () {
- wse.sendEvent(fakeWs, 'foo');
- expect(event.event).toEqual('foo');
- expect(event.sid).toEqual(1);
- expect(event.payload).toEqual({});
- });
-
- it('should construct an event object with some payload', function () {
- wse.sendEvent(fakeWs, 'bar', { val: 42 });
- expect(event.event).toEqual('bar');
- expect(event.sid).toEqual(1);
- expect(event.payload).toEqual({ val: 42 });
- });
-
- it('should increment the sid', function () {
- wse.sendEvent(fakeWs, 'one');
- expect(event.event).toEqual('one');
- expect(event.sid).toEqual(1);
-
- wse.sendEvent(fakeWs, 'dos');
- expect(event.event).toEqual('dos');
- expect(event.sid).toEqual(2);
-
- wse.sendEvent(fakeWs, 'tres');
- expect(event.event).toEqual('tres');
- expect(event.sid).toEqual(3);
- });
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/geodata-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/geodata-spec.js
deleted file mode 100644
index ccf4782f..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/geodata-spec.js
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- SVG -- GeoData Service - Unit Tests
- */
-describe('factory: fw/svg/geodata.js', function() {
- var $log, $httpBackend, fs, gds, promise;
-
- beforeEach(module('onosUtil', 'onosSvg'));
-
- beforeEach(inject(function (_$log_, _$httpBackend_, FnService, GeoDataService) {
- $log = _$log_;
- $httpBackend = _$httpBackend_;
- fs = FnService;
- gds = GeoDataService;
- gds.clearCache();
- }));
-
-
- it('should define GeoDataService', function () {
- expect(gds).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(gds, [
- 'clearCache', 'fetchTopoData', 'createPathGenerator'
- ])).toBeTruthy();
- });
-
- it('should return null when no parameters given', function () {
- promise = gds.fetchTopoData();
- expect(promise).toBeNull();
- });
-
- it('should augment the id of a bundled map', function () {
- var id = '*foo';
- promise = gds.fetchTopoData(id);
- expect(promise.meta).toBeDefined();
- expect(promise.meta.id).toBe(id);
- expect(promise.meta.url).toBe('data/map/foo.json');
- });
-
- it('should treat an external id as the url itself', function () {
- var id = 'some/path/to/foo';
- promise = gds.fetchTopoData(id);
- expect(promise.meta).toBeDefined();
- expect(promise.meta.id).toBe(id);
- expect(promise.meta.url).toBe(id + '.json');
- });
-
- it('should cache the returned objects', function () {
- var id = 'foo';
- promise = gds.fetchTopoData(id);
- expect(promise).toBeDefined();
- expect(promise.meta.wasCached).toBeFalsy();
- expect(promise.tagged).toBeUndefined();
-
- promise.tagged = 'I woz here';
-
- promise = gds.fetchTopoData(id);
- expect(promise).toBeDefined();
- expect(promise.meta.wasCached).toBeTruthy();
- expect(promise.tagged).toEqual('I woz here');
- });
-
- it('should clear the cache when asked', function () {
- var id = 'foo';
- promise = gds.fetchTopoData(id);
- expect(promise.meta.wasCached).toBeFalsy();
-
- promise = gds.fetchTopoData(id);
- expect(promise.meta.wasCached).toBeTruthy();
-
- gds.clearCache();
- promise = gds.fetchTopoData(id);
- expect(promise.meta.wasCached).toBeFalsy();
- });
-
-
- it('should log a warning if data fails to load', function () {
- var id = 'foo';
- $httpBackend.expectGET('foo.json').respond(404, 'Not found');
- spyOn($log, 'warn');
-
- promise = gds.fetchTopoData(id);
- $httpBackend.flush();
- expect(promise.topodata).toBeUndefined();
- expect($log.warn)
- .toHaveBeenCalledWith('Failed to retrieve map TopoJSON data: foo.json',
- 404, 'Not found');
- });
-
- // --- path generator tests
-
- function simpleTopology(object) {
- return {
- type: "Topology",
- transform: {scale: [1, 1], translate: [0, 0]},
- objects: {states: object},
- arcs: [
- [[0, 0], [1, 0], [0, 1], [-1, 0], [0, -1]],
- [[0, 0], [1, 0], [0, 1]],
- [[1, 1], [-1, 0], [0, -1]],
- [[1, 1]],
- [[0, 0]]
- ]
- };
- }
-
- function simpleLineStringTopo() {
- return simpleTopology({type: "LineString", arcs: [1, 2]});
- }
-
- it('should use default settings if none are supplied', function () {
- var gen = gds.createPathGenerator(simpleLineStringTopo());
- expect(gen.settings.objectTag).toBe('states');
- expect(gen.settings.logicalSize).toBe(1000);
- expect(gen.settings.mapFillScale).toBe(.95);
- // best we can do for now is test that projection is a function ...
- expect(fs.isF(gen.settings.projection)).toBeTruthy();
- });
-
- it('should allow us to override default settings', function () {
- var gen = gds.createPathGenerator(simpleLineStringTopo(), {
- mapFillScale: .80
- });
- expect(gen.settings.objectTag).toBe('states');
- expect(gen.settings.logicalSize).toBe(1000);
- expect(gen.settings.mapFillScale).toBe(.80);
- });
-
- it('should create transformed geodata, and a path generator', function () {
- var gen = gds.createPathGenerator(simpleLineStringTopo());
- expect(fs.isO(gen.settings)).toBeTruthy();
- expect(fs.isO(gen.geodata)).toBeTruthy();
- expect(fs.isF(gen.pathgen)).toBeTruthy();
- });
- // NOTE: we probably should have more unit tests that assert stuff about
- // the transformed data (geo data) -- though perhaps we can rely on
- // the unit testing of TopoJSON? See...
- // https://github.com/mbostock/topojson/blob/master/test/feature-test.js
- // and, what about the path generator?, and the computed bounds?
- // In summary, more work should be done here..
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/glyph-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/glyph-spec.js
deleted file mode 100644
index 9709ec73..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/glyph-spec.js
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- SVG -- Glyph Service - Unit Tests
- */
-describe('factory: fw/svg/glyph.js', function() {
- var $log, fs, gs, d3Elem, svg;
-
- var numBaseGlyphs = 42,
- vbBird = '352 224 113 112',
- vbGlyph = '0 0 110 110',
- vbBadge = '0 0 10 10',
- longPrefix = 'M95.8,9.2H14.2c-2.8,0-5,2.2-5,5v81.5c0,2.8,2.2,5,5,' +
- '5h81.5c2.8,0,5-2.2,5-5V14.2C100.8,11.5,98.5,9.2,95.8,9.2z ',
- tablePrefix = 'M15.9,19.1h-8v-13h8V19.1z M90.5,6.1H75.6v13h14.9V6.1' +
- 'z M71.9,6.1H56.9v13h14.9V6.1z M53.2,6.1H38.3v13h14.9V6.1z M34.5,' +
- '6.1H19.6v13h14.9V6.1z M102.2,6.1h-8v13h8V6.1z ',
- prefixLookup = {
- bird: 'M427.7,300.4',
- unknown: 'M35,40a5',
- node: 'M15,100a5',
- switch: 'M10,20a10',
- roadm: 'M10,35l25-',
- endstation: 'M10,15a5,5',
- router: 'M10,55A45,45',
- bgpSpeaker: 'M10,40a45,35',
- chain: 'M60.4,77.6c-',
- crown: 'M99.5,21.6c0,',
- lock: 'M79.4,48.6h',
- topo: 'M97.2,76.3H86.6',
- refresh: 'M102.6,40.8L88.4',
- garbage: 'M94.6,20.2c',
-
- // navigation specific glyphs
- flowTable: tablePrefix + 'M102.2,23.6H7.9v',
- portTable: tablePrefix + 'M102.6,23.6v78.5H',
- groupTable: 'M16,19.1H8v-13h',
-
- // toolbar specific glyphs
- summary: longPrefix + 'M16.7',
- details: longPrefix + 'M16.9',
- ports: 'M98,9.2H79.6c',
- map: 'M95.8,9.2H14.2c-2.8,0-5,2.2-5,5v66',
- cycleLabels: 'M72.5,33.9c',
- oblique: 'M80.9,30.2h',
- filters: 'M24.8,13.3L',
- resetZoom: 'M86,79.8L',
- relatedIntents: 'M99.9,43.7',
- nextIntent: 'M88.1,55.7',
- prevIntent: 'M22.5,55.6',
- intentTraffic: 'M14.7,71.5h',
- allTraffic: 'M15.7,64.5h-7v',
- flows: 'M93.8,46.1c',
- eqMaster: 'M100.1,46.9l',
-
- // badges
- uiAttached: 'M2,2.5a.5,.5',
- checkMark: 'M2.6,4.5c0',
- xMark: 'M9.0,7.2C8.2',
- triangleUp: 'M0.5,6.2c0',
- triangleDown: 'M9.5,4.2c0',
- plus: 'M4,2h2v2h2v2',
- minus: 'M2,4h6v2',
- play: 'M2.5,2l5.5,3',
- stop: 'M2.5,2.5h5',
-
- cloud: 'M37.6,79.5c-6.9,8.7-20.4,8.6',
-
- // our test ones..
- triangle: 'M.5,.2',
- diamond: 'M.2,.5'
- },
- glyphIds = [
- 'unknown', 'node', 'switch', 'roadm', 'endstation', 'router',
- 'bgpSpeaker', 'chain', 'crown', 'lock', 'topo', 'refresh',
- 'garbage',
- 'flowTable', 'portTable', 'groupTable',
- 'summary', 'details', 'ports', 'map', 'cycleLabels',
- 'oblique', 'filters', 'resetZoom', 'relatedIntents', 'nextIntent',
- 'prevIntent', 'intentTraffic', 'allTraffic', 'flows', 'eqMaster'
- ],
- badgeIds = [
- 'uiAttached', 'checkMark', 'xMark', 'triangleUp', 'triangleDown',
- 'plus', 'minus', 'play', 'stop'
- ],
- spriteIds = [
- 'cloud'
- ];
-
- beforeEach(module('onosUtil', 'onosSvg'));
-
- beforeEach(inject(function (_$log_, FnService, GlyphService) {
- var body = d3.select('body');
- $log = _$log_;
- fs = FnService;
- gs = GlyphService;
- d3Elem = body.append('defs').attr('id', 'myDefs');
- svg = body.append('svg').attr('id', 'mySvg');
- }));
-
- afterEach(function () {
- d3.select('#mySvg').remove();
- d3.select('#myDefs').remove();
- gs.clear();
- });
-
- it('should define GlyphService', function () {
- expect(gs).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(gs, [
- 'clear', 'init', 'registerGlyphs', 'registerGlyphSet',
- 'ids', 'glyph', 'loadDefs', 'addGlyph'
- ])).toBe(true);
- });
-
- it('should start with no glyphs loaded', function () {
- expect(gs.ids()).toEqual([]);
- });
-
- it('should load the base set of glyphs into the cache', function () {
- gs.init();
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- });
-
- it('should remove glyphs from the cache on clear', function () {
- gs.init();
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- gs.clear();
- expect(gs.ids().length).toEqual(0);
- });
-
- function verifyGlyphLoadedInCache(id, vbox, expPfxId) {
- var pfxId = expPfxId || id,
- glyph = gs.glyph(id),
- prefix = prefixLookup[pfxId],
- plen = prefix.length;
- expect(fs.contains(gs.ids(), id)).toBe(true);
- expect(glyph).toBeDefined();
- expect(glyph.id).toEqual(id);
- expect(glyph.vb).toEqual(vbox);
- expect(glyph.d.slice(0, plen)).toEqual(prefix);
- }
-
- it('should be configured with the correct number of glyphs', function () {
- var nGlyphs = 1 + glyphIds.length + badgeIds.length + spriteIds.length;
- expect(nGlyphs).toEqual(numBaseGlyphs);
- });
-
- it('should load the bird glyph', function() {
- gs.init();
- verifyGlyphLoadedInCache('bird', vbBird);
- });
-
- it('should load the regular glyphs', function () {
- gs.init();
- glyphIds.forEach(function (id) {
- verifyGlyphLoadedInCache(id, vbGlyph);
- });
- });
-
- it('should load the badge glyphs', function () {
- gs.init();
- badgeIds.forEach(function (id) {
- verifyGlyphLoadedInCache(id, vbBadge);
- });
- });
-
- it('should load the sprites', function () {
- gs.init();
- spriteIds.forEach(function (id) {
- verifyGlyphLoadedInCache(id, vbGlyph);
- });
- });
-
-
- // define some glyphs that we want to install
-
- var testVbox = '0 0 1 1',
- triVbox = '0 0 12 12',
- diaVbox = '0 0 15 15',
- dTriangle = 'M.5,.2l.3,.6,h-.6z',
- dDiamond = 'M.2,.5l.3,-.3l.3,.3l-.3,.3z',
- newGlyphs = {
- _viewbox: testVbox,
- triangle: dTriangle,
- diamond: dDiamond
- },
- dupGlyphs = {
- _viewbox: testVbox,
- router: dTriangle,
- switch: dDiamond
- },
- altNewGlyphs = {
- _triangle: triVbox,
- triangle: dTriangle,
- _diamond: diaVbox,
- diamond: dDiamond
- },
- altDupGlyphs = {
- _router: triVbox,
- router: dTriangle,
- _switch: diaVbox,
- switch: dDiamond
- },
- badGlyphSet = {
- triangle: dTriangle,
- diamond: dDiamond
- },
- warnMsg = 'GlyphService.registerGlyphs(): ',
- warnMsgSet = 'GlyphService.registerGlyphSet(): ',
- idCollision = warnMsg + 'ID collision: ',
- idCollisionSet = warnMsgSet + 'ID collision: ',
- missVbSet = warnMsgSet + 'no "_viewbox" property found',
- missVbCustom = warnMsg + 'Missing viewbox property: ',
- missVbTri = missVbCustom + '"_triangle"',
- missVbDia = missVbCustom + '"_diamond"';
-
-
- it('should install new glyphs as a glyph-set', function () {
- gs.init();
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- spyOn($log, 'warn');
-
- var ok = gs.registerGlyphSet(newGlyphs);
- expect(ok).toBe(true);
- expect($log.warn).not.toHaveBeenCalled();
-
- expect(gs.ids().length).toEqual(numBaseGlyphs + 2);
- verifyGlyphLoadedInCache('triangle', testVbox);
- verifyGlyphLoadedInCache('diamond', testVbox);
- });
-
- it('should not overwrite glyphs (via glyph-set) with dup IDs', function () {
- gs.init();
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- spyOn($log, 'warn');
-
- var ok = gs.registerGlyphSet(dupGlyphs);
- expect(ok).toBe(false);
- expect($log.warn).toHaveBeenCalledWith(idCollisionSet + '"switch"');
- expect($log.warn).toHaveBeenCalledWith(idCollisionSet + '"router"');
-
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- // verify original glyphs still exist...
- verifyGlyphLoadedInCache('router', vbGlyph);
- verifyGlyphLoadedInCache('switch', vbGlyph);
- });
-
- it('should replace glyphs (via glyph-set) if asked nicely', function () {
- gs.init();
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- spyOn($log, 'warn');
-
- var ok = gs.registerGlyphSet(dupGlyphs, true);
- expect(ok).toBe(true);
- expect($log.warn).not.toHaveBeenCalled();
-
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- // verify glyphs have been overwritten...
- verifyGlyphLoadedInCache('router', testVbox, 'triangle');
- verifyGlyphLoadedInCache('switch', testVbox, 'diamond');
- });
-
- it ('should complain if missing _viewbox in a glyph-set', function () {
- gs.init();
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- spyOn($log, 'warn');
-
- var ok = gs.registerGlyphSet(badGlyphSet);
- expect(ok).toBe(false);
- expect($log.warn).toHaveBeenCalledWith(missVbSet);
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- });
-
- it('should install new glyphs', function () {
- gs.init();
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- spyOn($log, 'warn');
-
- var ok = gs.registerGlyphs(altNewGlyphs);
- expect(ok).toBe(true);
- expect($log.warn).not.toHaveBeenCalled();
-
- expect(gs.ids().length).toEqual(numBaseGlyphs + 2);
- verifyGlyphLoadedInCache('triangle', triVbox);
- verifyGlyphLoadedInCache('diamond', diaVbox);
- });
-
- it('should not overwrite glyphs with dup IDs', function () {
- gs.init();
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- spyOn($log, 'warn');
-
- var ok = gs.registerGlyphs(altDupGlyphs);
- expect(ok).toBe(false);
- expect($log.warn).toHaveBeenCalledWith(idCollision + '"switch"');
- expect($log.warn).toHaveBeenCalledWith(idCollision + '"router"');
-
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- // verify original glyphs still exist...
- verifyGlyphLoadedInCache('router', vbGlyph);
- verifyGlyphLoadedInCache('switch', vbGlyph);
- });
-
- it('should replace glyphs if asked nicely', function () {
- gs.init();
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- spyOn($log, 'warn');
-
- var ok = gs.registerGlyphs(altDupGlyphs, true);
- expect(ok).toBe(true);
- expect($log.warn).not.toHaveBeenCalled();
-
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- // verify glyphs have been overwritten...
- verifyGlyphLoadedInCache('router', triVbox, 'triangle');
- verifyGlyphLoadedInCache('switch', diaVbox, 'diamond');
- });
-
- it ('should complain if missing custom viewbox', function () {
- gs.init();
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- spyOn($log, 'warn');
-
- var ok = gs.registerGlyphs(badGlyphSet);
- expect(ok).toBe(false);
- expect($log.warn).toHaveBeenCalledWith(missVbTri);
- expect($log.warn).toHaveBeenCalledWith(missVbDia);
- expect(gs.ids().length).toEqual(numBaseGlyphs);
- });
-
- function verifyPathPrefix(elem, prefix) {
- var plen = prefix.length,
- d = elem.select('path').attr('d');
- expect(d.slice(0, plen)).toEqual(prefix);
- }
-
- function verifyLoadedInDom(id, vb, expPfxId) {
- var pfxId = expPfxId || id,
- symbol = d3Elem.select('#' + id);
- expect(symbol.size()).toEqual(1);
- expect(symbol.attr('viewBox')).toEqual(vb);
- verifyPathPrefix(symbol, prefixLookup[pfxId]);
- }
-
- it('should load base glyphs into the DOM', function () {
- gs.init();
- gs.loadDefs(d3Elem);
- expect(d3Elem.selectAll('symbol').size()).toEqual(numBaseGlyphs);
- verifyLoadedInDom('bgpSpeaker', vbGlyph);
- });
-
- it('should load custom glyphs into the DOM', function () {
- gs.init();
- gs.registerGlyphSet(newGlyphs);
- gs.loadDefs(d3Elem);
- expect(d3Elem.selectAll('symbol').size()).toEqual(numBaseGlyphs + 2);
- verifyLoadedInDom('diamond', testVbox);
- });
-
- it('should load only specified glyphs into the DOM', function () {
- gs.init();
- gs.loadDefs(d3Elem, ['crown', 'chain', 'node']);
- expect(d3Elem.selectAll('symbol').size()).toEqual(3);
- verifyLoadedInDom('crown', vbGlyph);
- verifyLoadedInDom('chain', vbGlyph);
- verifyLoadedInDom('node', vbGlyph);
- });
-
- it('should add a glyph with default size', function () {
- gs.init();
- var retval = gs.addGlyph(svg, 'crown');
- var what = svg.selectAll('use');
- expect(what.size()).toEqual(1);
- expect(what.attr('width')).toEqual('40');
- expect(what.attr('height')).toEqual('40');
- expect(what.attr('xlink:href')).toEqual('#crown');
- expect(what.classed('glyph')).toBeTruthy();
- expect(what.classed('overlay')).toBeFalsy();
-
- // check a couple on retval, which should be the same thing..
- expect(retval.attr('xlink:href')).toEqual('#crown');
- expect(retval.classed('glyph')).toBeTruthy();
- });
-
- it('should add a glyph with given size', function () {
- gs.init();
- gs.addGlyph(svg, 'crown', 37);
- var what = svg.selectAll('use');
- expect(what.size()).toEqual(1);
- expect(what.attr('width')).toEqual('37');
- expect(what.attr('height')).toEqual('37');
- expect(what.attr('xlink:href')).toEqual('#crown');
- expect(what.classed('glyph')).toBeTruthy();
- expect(what.classed('overlay')).toBeFalsy();
- });
-
- it('should add a glyph marked as overlay', function () {
- gs.init();
- gs.addGlyph(svg, 'crown', 20, true);
- var what = svg.selectAll('use');
- expect(what.size()).toEqual(1);
- expect(what.attr('width')).toEqual('20');
- expect(what.attr('height')).toEqual('20');
- expect(what.attr('xlink:href')).toEqual('#crown');
- expect(what.classed('glyph')).toBeTruthy();
- expect(what.classed('overlay')).toBeTruthy();
- });
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/icon-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/icon-spec.js
deleted file mode 100644
index 99d7bc38..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/icon-spec.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- SVG -- Icon Service - Unit Tests
- */
-describe('factory: fw/svg/icon.js', function() {
- var is, d3Elem;
-
- var viewBox = '0 0 50 50',
- glyphSize = '50',
- iconSize = '20';
-
-
- beforeEach(module('onosSvg'));
-
- beforeEach(inject(function (IconService) {
- is = IconService;
- d3Elem = d3.select('body').append('div').attr('id', 'myDiv');
- }));
-
- afterEach(function () {
- d3.select('#myDiv').remove();
- });
-
- it('should define IconService', function () {
- expect(is).toBeDefined();
- });
-
- function checkElemSize(elem, dim) {
- expect(elem.attr('width')).toEqual(dim);
- expect(elem.attr('height')).toEqual(dim);
- }
-
- function verifyIconStructure(iconClass, useHref, iSize, vBox, gSize) {
- var isz = iSize || iconSize,
- vbx = vBox || viewBox,
- gsz = gSize || glyphSize;
-
- var svg = d3Elem.selectAll('svg');
- expect(svg.size()).toBe(1);
- checkElemSize(svg, isz);
- expect(svg.attr('viewBox')).toEqual(vbx);
-
- var g = svg.selectAll('g');
- expect(g.size()).toBe(1);
- expect(g.classed('icon')).toBeTruthy();
- expect(g.classed(iconClass)).toBeTruthy();
-
- var rect = g.select('rect');
- expect(rect.size()).toBe(1);
- checkElemSize(rect, gsz);
- expect(rect.attr('rx')).toEqual('5');
-
- if (useHref) {
- var use = g.select('use');
- expect(use.classed('glyph')).toBeTruthy();
- expect(use.attr('xlink:href')).toEqual(useHref);
- checkElemSize(use, gsz);
- }
- }
-
- it('should load an icon into a div', function () {
- expect(d3Elem.html()).toEqual('');
- is.loadIconByClass(d3Elem, 'active');
- verifyIconStructure('active', '#checkMark');
- });
-
- it('should allow us to specify the icon size', function () {
- expect(d3Elem.html()).toEqual('');
- is.loadIconByClass(d3Elem, 'inactive', 32);
- verifyIconStructure('inactive', '#xMark', '32');
- });
-
- it('should verify triangleUp icon', function () {
- expect(d3Elem.html()).toEqual('');
- is.loadIconByClass(d3Elem, 'upArrow', 10);
- verifyIconStructure('upArrow', '#triangleUp', '10');
- });
-
- it('should verify triangleDown icon', function () {
- expect(d3Elem.html()).toEqual('');
- is.loadIconByClass(d3Elem, 'downArrow', 10);
- verifyIconStructure('downArrow', '#triangleDown', '10');
- });
-
- it('should verify no icon is displayed', function () {
- expect(d3Elem.html()).toEqual('');
- is.loadIconByClass(d3Elem, 'tableColSortNone', 10);
- verifyIconStructure('tableColSortNone', null, '10');
- });
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/map-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/map-spec.js
deleted file mode 100644
index 27848d1a..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/map-spec.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- SVG -- Map Service - Unit Tests
- */
-describe('factory: fw/svg/map.js', function() {
- var $log, $httpBackend, fs, ms, d3Elem, promise;
-
- beforeEach(module('onosUtil', 'onosSvg'));
-
- beforeEach(inject(function (_$log_, _$httpBackend_, FnService, MapService) {
- $log = _$log_;
- $httpBackend = _$httpBackend_;
- fs = FnService;
- ms = MapService;
- //ms.clearCache();
- d3Elem = d3.select('body').append('svg').append('g').attr('id', 'mapLayer');
- }));
-
- afterEach(function () {
- d3.select('svg').remove();
- });
-
- it('should define MapService', function () {
- expect(ms).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(ms, [
- 'loadMapInto'
- ])).toBeTruthy();
- });
-
- var fakeMapId = '../tests/app/fw/svg/fake-map-data',
- fakeMapUrl = fakeMapId + '.json';
-
- var fakeMapData = {
- "type": "Topology",
- "objects": {
- "states": {
- "type": "GeometryCollection",
- "geometries": [
- { "type": "Polygon", "arcs": [[0, 1]]},
- { "type": "Polygon", "arcs": [[2, 3]]}
- ]
- }
- },
- "arcs": [
- [ [6347, 2300], [ -16, -9], [ -22, 1], [ -5, 3], [ 9, 6], [ 27, 7], [ 7, -8]],
- [ [6447, 2350], [ -4, -4], [ -19, -41], [ -66, -14], [ 4, 9], [ 14, 2]],
- [ [6290, 2347], [ -2, 83], [ -2, 76], [ -2, 75], [ -2, 76], [ -2, 76], [ -2, 75]],
- [ [6329, 4211], [ -3, 6], [ -2, 4], [ 2, 1], [ 28, -1], [ 28, 0]]
- ],
- "transform": {
- "scale": [0.005772872856602365, 0.0024829805705001468],
- "translate": [-124.70997774915153, 24.542349340056283]
- }
- };
-
-
- it('should load map into layer', function () {
- $httpBackend.expectGET(fakeMapUrl).respond(fakeMapData);
-
- var obj = ms.loadMapInto(d3Elem, fakeMapId);
- //$httpBackend.flush();
- // TODO: figure out how to test this function as a black box test.
-
- expect(obj).toBeTruthy();
-
- // todo: assert that paths are added to map layer element
- });
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/svgUtil-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/svgUtil-spec.js
deleted file mode 100644
index ab2bfa3e..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/svgUtil-spec.js
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- SVG -- SVG Util Service - Unit Tests
- */
-describe('factory: fw/svg/svgUtil.js', function() {
- var $log, fs, sus, svg, defs, force;
-
- var noop = function () {};
-
- beforeEach(module('onosUtil', 'onosSvg'));
-
- beforeEach(inject(function (_$log_, FnService, SvgUtilService) {
- $log = _$log_;
- fs = FnService;
- sus = SvgUtilService;
- svg = d3.select('body').append('svg').attr('id', 'mySvg');
- defs = svg.append('defs');
- force = d3.layout.force();
- }));
-
- afterEach(function () {
- d3.select('svg').remove();
- });
-
- it('should define SvgUtilService', function () {
- expect(sus).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(sus, [
- 'createDragBehavior', 'loadGlowDefs', 'cat7',
- 'translate', 'scale', 'skewX', 'rotate',
- 'stripPx', 'safeId', 'visible'
- ])).toBeTruthy();
- });
-
- // === createDragBehavior
- // TODO: break up drag into separate functions for testing
- // d3 needs better testing support...
-
- // Note: just checking to see if error message was called
- // because jasmine spy isn't catching the right newline char
- it('should complain if function given no parameters', function () {
- spyOn($log, 'error');
- expect(sus.createDragBehavior()).toBeNull();
- expect($log.error).toHaveBeenCalled();
- });
-
- it('should complain if function is not given clickEnabled', function () {
- spyOn($log, 'error');
- expect(sus.createDragBehavior(force, noop, noop, noop)).toBeNull();
- expect($log.error).toHaveBeenCalled();
- });
-
- it('should complain if function is not given dragEnabled', function () {
- spyOn($log, 'error');
- expect(sus.createDragBehavior(force, noop, noop)).toBeNull();
- expect($log.error).toHaveBeenCalled();
- });
-
- it('should complain if function is not given atDragEnd', function () {
- spyOn($log, 'error');
- expect(sus.createDragBehavior(force, noop)).toBeNull();
- expect($log.error).toHaveBeenCalled();
- });
-
- it('should complain if function is not given selectCb', function () {
- spyOn($log, 'error');
- expect(sus.createDragBehavior(force)).toBeNull();
- expect($log.error).toHaveBeenCalled();
- });
-
- // === loadGlowDefs
- function checkAttrs(glow, r, g, b) {
- var filterEffects, feColor, feBlur, feMerge, feMergeNodes;
-
- // filter attrs
- expect(glow.attr('x')).toBe('-50%');
- expect(glow.attr('y')).toBe('-50%');
- expect(glow.attr('width')).toBe('200%');
- expect(glow.attr('height')).toBe('200%');
-
- filterEffects = d3.selectAll(glow.node().childNodes);
- expect(filterEffects.size()).toBe(3);
-
- // Note: d3 didn't recognize 'feColorMatrix' and others as valid selectors
- // this is a work around
- feColor = d3.select(filterEffects[0].shift());
- feBlur = d3.select(filterEffects[0].shift());
- feMerge = d3.select(filterEffects[0].shift());
-
- // feColorMatrix attrs
- expect(feColor.empty()).toBe(false);
- expect(feColor.attr('type')).toBe('matrix');
- expect(feColor.attr('values')).toBe(
- '0 0 0 0 ' + r + ' ' +
- '0 0 0 0 ' + g + ' ' +
- '0 0 0 0 ' + b + ' ' +
- '0 0 0 1 0 '
- );
-
- // feGuassianBlur attrs
- expect(feBlur.empty()).toBe(false);
- expect(feBlur.attr('stdDeviation')).toBe('3');
- expect(feBlur.attr('result')).toBe('coloredBlur');
-
- // feMerge attrs
- feMergeNodes = d3.selectAll(feMerge.node().childNodes);
- expect(feMergeNodes.size()).toBe(2);
- expect(d3.select(feMergeNodes[0][0]).attr('in')).toBe('coloredBlur');
- expect(d3.select(feMergeNodes[0][1]).attr('in')).toBe('SourceGraphic');
- }
-
- it('should load glow definitions', function () {
- var blue, yellow;
- sus.loadGlowDefs(defs);
-
- expect(defs.empty()).toBe(false);
- expect((defs.selectAll('filter')).size()).toBe(2);
-
- // blue-glow specific
- blue = defs.select('#blue-glow');
- expect(blue.empty()).toBe(false);
- checkAttrs(blue, 0.0, 0.0, 0.7);
-
- // yellow-glow specific
- yellow = defs.select('#yellow-glow');
- expect(yellow.empty()).toBe(false);
- checkAttrs(yellow, 1.0, 1.0, 0.3);
- });
-
- // === cat7
-
- it('should define two methods on the api', function () {
- var cat7 = sus.cat7();
- expect(fs.areFunctions(cat7, [
- 'testCard', 'getColor'
- ])).toBeTruthy();
- });
-
- it('should provide a certain shade of blue', function () {
- expect(sus.cat7().getColor('foo', false, 'light')).toEqual('#3E5780');
- });
-
- it('should not matter what the ID really is for shade of blue', function () {
- expect(sus.cat7().getColor('bar', false, 'light')).toEqual('#3E5780');
- });
-
- it('should provide different shade of blue for muted', function () {
- expect(sus.cat7().getColor('foo', true, 'light')).toEqual('#A8B8CC');
- });
-
-
- it('should provide an alternate (dark) shade of blue', function () {
- expect(sus.cat7().getColor('foo', false, 'dark')).toEqual('#304860');
- });
-
- it('should provide an alternate (dark) shade of blue for muted', function () {
- expect(sus.cat7().getColor('foo', true, 'dark')).toEqual('#304860');
- });
-
- it('should iterate across the colors', function () {
- expect(sus.cat7().getColor('foo', false, 'light')).toEqual('#3E5780');
- expect(sus.cat7().getColor('bar', false, 'light')).toEqual('#78533B');
- expect(sus.cat7().getColor('baz', false, 'light')).toEqual('#CB4D28');
- expect(sus.cat7().getColor('goo', false, 'light')).toEqual('#018D61');
- expect(sus.cat7().getColor('zoo', false, 'light')).toEqual('#8A2979');
- expect(sus.cat7().getColor('pip', false, 'light')).toEqual('#006D73');
- expect(sus.cat7().getColor('sdh', false, 'light')).toEqual('#56AF00');
- // and cycle back to the first color for item #8
- expect(sus.cat7().getColor('bri', false, 'light')).toEqual('#3E5780');
- // and return the same color for the same ID
- expect(sus.cat7().getColor('zoo', false, 'light')).toEqual('#8A2979');
- });
-
- // === translate(), scale(), skewX(), rotate()
-
- it('should translate from two args', function () {
- expect(sus.translate(1,2)).toEqual('translate(1,2)');
- });
-
- it('should translate from an array', function () {
- expect(sus.translate([3,4])).toEqual('translate(3,4)');
- });
-
- it('should scale', function () {
- expect(sus.scale(1.5,2.5)).toEqual('scale(1.5,2.5)');
- });
-
- it('should skewX', function () {
- expect(sus.skewX(3.14)).toEqual('skewX(3.14)');
- });
-
- it('should rotate', function () {
- expect(sus.rotate(45)).toEqual('rotate(45)');
- });
-
-
- // === stripPx()
-
- it('should not affect a number', function () {
- expect(sus.stripPx('4')).toEqual('4');
- });
-
- it('should remove trailing px', function () {
- expect(sus.stripPx('4px')).toEqual('4');
- });
-
- // === visible()
-
- it('should hide and show an element', function () {
- var r = svg.append('rect');
-
- sus.visible(r, false);
- expect(r.style('visibility')).toEqual('hidden');
- expect(sus.visible(r)).toBe(false);
-
- sus.visible(r, true);
- expect(r.style('visibility')).toEqual('visible');
- expect(sus.visible(r)).toBe(true);
- });
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/zoom-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/zoom-spec.js
deleted file mode 100644
index d70c87fb..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/svg/zoom-spec.js
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- SVG -- Zoom Service - Unit Tests
- */
-describe('factory: fw/svg/zoom.js', function() {
- var $log, fs, zs, svg, zoomLayer, zoomer;
-
- var cz = 'ZoomService.createZoomer(): ',
- d3s = ' (D3 selection) property defined';
-
- beforeEach(module('onosUtil', 'onosSvg'));
-
- beforeEach(inject(function (_$log_, FnService, ZoomService) {
- $log = _$log_;
- fs = FnService;
- zs = ZoomService;
- svg = d3.select('body').append('svg').attr('id', 'mySvg');
- zoomLayer = svg.append('g').attr('id', 'myZoomlayer');
- }));
-
- afterEach(function () {
- d3.select('#mySvg').remove();
- // Note: since zoomLayer is a child of svg, it should be removed also
- });
-
- it('should define ZoomService', function () {
- expect(zs).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(zs, ['createZoomer'])).toBeTruthy();
- });
-
- function verifyZoomerApi() {
- expect(fs.areFunctions(zoomer, [
- 'panZoom', 'reset', 'translate', 'scale', 'scaleExtent'
- ])).toBeTruthy();
- }
-
- it('should fail gracefully with no option object', function () {
- spyOn($log, 'error');
-
- zoomer = zs.createZoomer();
- expect($log.error).toHaveBeenCalledWith(cz + 'No "svg" (svg tag)' + d3s);
- expect($log.error).toHaveBeenCalledWith(cz + 'No "zoomLayer" (g tag)' + d3s);
- expect(zoomer).toBeNull();
- });
-
- it('should complain if we miss required options', function () {
- spyOn($log, 'error');
-
- zoomer = zs.createZoomer({});
- expect($log.error).toHaveBeenCalledWith(cz + 'No "svg" (svg tag)' + d3s);
- expect($log.error).toHaveBeenCalledWith(cz + 'No "zoomLayer" (g tag)' + d3s);
- expect(zoomer).toBeNull();
- });
-
- it('should work with minimal parameters', function () {
- spyOn($log, 'error');
-
- zoomer = zs.createZoomer({
- svg: svg,
- zoomLayer: zoomLayer
- });
- expect($log.error).not.toHaveBeenCalled();
- verifyZoomerApi();
- });
-
- it('should start at scale 1 and translate 0,0', function () {
- zoomer = zs.createZoomer({
- svg: svg,
- zoomLayer: zoomLayer
- });
- verifyZoomerApi();
- expect(zoomer.translate()).toEqual([0,0]);
- expect(zoomer.scale()).toEqual(1);
- });
-
- it('should allow programmatic pan/zoom', function () {
- zoomer = zs.createZoomer({
- svg: svg,
- zoomLayer: zoomLayer
- });
- verifyZoomerApi();
- expect(zoomer.translate()).toEqual([0,0]);
- expect(zoomer.scale()).toEqual(1);
-
- zoomer.panZoom([20,30], 3);
- expect(zoomer.translate()).toEqual([20,30]);
- expect(zoomer.scale()).toEqual(3);
- });
-
- it('should provide default scale extent', function () {
- zoomer = zs.createZoomer({
- svg: svg,
- zoomLayer: zoomLayer
- });
- expect(zoomer.scaleExtent()).toEqual([0.25, 10]);
- });
-
- it('should allow us to override the minimum zoom', function () {
- zoomer = zs.createZoomer({
- svg: svg,
- zoomLayer: zoomLayer,
- zoomMin: 1.23
- });
- expect(zoomer.scaleExtent()).toEqual([1.23, 10]);
- });
-
- it('should allow us to override the maximum zoom', function () {
- zoomer = zs.createZoomer({
- svg: svg,
- zoomLayer: zoomLayer,
- zoomMax: 13
- });
- expect(zoomer.scaleExtent()).toEqual([0.25, 13]);
- });
-
- // TODO: test zoomed() where we fake out the d3.event.sourceEvent etc...
- // need to check default enabled (true) and custom enabled predicate
- // need to check that the callback is invoked also
-
- it('should invoke the callback on programmatic pan/zoom', function () {
- var foo = { cb: function () {} };
- spyOn(foo, 'cb');
-
- zoomer = zs.createZoomer({
- svg: svg,
- zoomLayer: zoomLayer,
- zoomCallback: foo.cb
- });
-
- zoomer.panZoom([0,0], 2);
- expect(foo.cb).toHaveBeenCalled();
- });
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/fn-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/fn-spec.js
deleted file mode 100644
index c9f3bef6..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/fn-spec.js
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Util -- General Purpose Functions - Unit Tests
- */
-describe('factory: fw/util/fn.js', function() {
- var $window,
- fs,
- someFunction = function () {},
- someArray = [1, 2, 3],
- someObject = { foo: 'bar'},
- someNumber = 42,
- someString = 'xyyzy',
- someDate = new Date(),
- stringArray = ['foo', 'bar'];
-
- beforeEach(module('onosUtil'));
-
- var mockWindow = {
- innerWidth: 400,
- innerHeight: 200,
- navigator: {
- userAgent: 'defaultUA'
- }
- };
-
- beforeEach(function () {
- module(function ($provide) {
- $provide.value('$window', mockWindow);
- });
- });
-
- beforeEach(inject(function (_$window_, FnService) {
- $window = _$window_;
- fs = FnService;
- }));
-
- // === Tests for isF()
- it('isF(): null for undefined', function () {
- expect(fs.isF(undefined)).toBeNull();
- });
- it('isF(): null for null', function () {
- expect(fs.isF(null)).toBeNull();
- });
- it('isF(): the reference for function', function () {
- expect(fs.isF(someFunction)).toBe(someFunction);
- });
- it('isF(): null for string', function () {
- expect(fs.isF(someString)).toBeNull();
- });
- it('isF(): null for number', function () {
- expect(fs.isF(someNumber)).toBeNull();
- });
- it('isF(): null for Date', function () {
- expect(fs.isF(someDate)).toBeNull();
- });
- it('isF(): null for array', function () {
- expect(fs.isF(someArray)).toBeNull();
- });
- it('isF(): null for object', function () {
- expect(fs.isF(someObject)).toBeNull();
- });
-
-
- // === Tests for isA()
- it('isA(): null for undefined', function () {
- expect(fs.isA(undefined)).toBeNull();
- });
- it('isA(): null for null', function () {
- expect(fs.isA(null)).toBeNull();
- });
- it('isA(): null for function', function () {
- expect(fs.isA(someFunction)).toBeNull();
- });
- it('isA(): null for string', function () {
- expect(fs.isA(someString)).toBeNull();
- });
- it('isA(): null for number', function () {
- expect(fs.isA(someNumber)).toBeNull();
- });
- it('isA(): null for Date', function () {
- expect(fs.isA(someDate)).toBeNull();
- });
- it('isA(): the reference for array', function () {
- expect(fs.isA(someArray)).toBe(someArray);
- });
- it('isA(): null for object', function () {
- expect(fs.isA(someObject)).toBeNull();
- });
-
-
- // === Tests for isS()
- it('isS(): null for undefined', function () {
- expect(fs.isS(undefined)).toBeNull();
- });
- it('isS(): null for null', function () {
- expect(fs.isS(null)).toBeNull();
- });
- it('isS(): null for function', function () {
- expect(fs.isS(someFunction)).toBeNull();
- });
- it('isS(): the reference for string', function () {
- expect(fs.isS(someString)).toBe(someString);
- });
- it('isS(): null for number', function () {
- expect(fs.isS(someNumber)).toBeNull();
- });
- it('isS(): null for Date', function () {
- expect(fs.isS(someDate)).toBeNull();
- });
- it('isS(): null for array', function () {
- expect(fs.isS(someArray)).toBeNull();
- });
- it('isS(): null for object', function () {
- expect(fs.isS(someObject)).toBeNull();
- });
-
-
- // === Tests for isO()
- it('isO(): null for undefined', function () {
- expect(fs.isO(undefined)).toBeNull();
- });
- it('isO(): null for null', function () {
- expect(fs.isO(null)).toBeNull();
- });
- it('isO(): null for function', function () {
- expect(fs.isO(someFunction)).toBeNull();
- });
- it('isO(): null for string', function () {
- expect(fs.isO(someString)).toBeNull();
- });
- it('isO(): null for number', function () {
- expect(fs.isO(someNumber)).toBeNull();
- });
- it('isO(): null for Date', function () {
- expect(fs.isO(someDate)).toBeNull();
- });
- it('isO(): null for array', function () {
- expect(fs.isO(someArray)).toBeNull();
- });
- it('isO(): the reference for object', function () {
- expect(fs.isO(someObject)).toBe(someObject);
- });
-
- // === Tests for contains()
- it('contains(): false for improper args', function () {
- expect(fs.contains()).toBeFalsy();
- });
- it('contains(): false for non-array', function () {
- expect(fs.contains(null, 1)).toBeFalsy();
- });
- it('contains(): true for contained item', function () {
- expect(fs.contains(someArray, 1)).toBeTruthy();
- expect(fs.contains(stringArray, 'bar')).toBeTruthy();
- });
- it('contains(): false for non-contained item', function () {
- expect(fs.contains(someArray, 109)).toBeFalsy();
- expect(fs.contains(stringArray, 'zonko')).toBeFalsy();
- });
-
- // === Tests for areFunctions()
- it('areFunctions(): false for non-array', function () {
- expect(fs.areFunctions({}, 'not-an-array')).toBeFalsy();
- });
- it('areFunctions(): true for empty-array', function () {
- expect(fs.areFunctions({}, [])).toBeTruthy();
- });
- it('areFunctions(): true for some api', function () {
- expect(fs.areFunctions({
- a: function () {},
- b: function () {}
- }, ['b', 'a'])).toBeTruthy();
- });
- it('areFunctions(): false for some other api', function () {
- expect(fs.areFunctions({
- a: function () {},
- b: 'not-a-function'
- }, ['b', 'a'])).toBeFalsy();
- });
- it('areFunctions(): extraneous stuff NOT ignored', function () {
- expect(fs.areFunctions({
- a: function () {},
- b: function () {},
- c: 1,
- d: 'foo'
- }, ['a', 'b'])).toBeFalsy();
- });
- it('areFunctions(): extraneous stuff ignored (alternate fn)', function () {
- expect(fs.areFunctionsNonStrict({
- a: function () {},
- b: function () {},
- c: 1,
- d: 'foo'
- }, ['a', 'b'])).toBeTruthy();
- });
-
- // == use the now-tested areFunctions() on our own api:
- it('should define api functions', function () {
- expect(fs.areFunctions(fs, [
- 'isF', 'isA', 'isS', 'isO', 'contains',
- 'areFunctions', 'areFunctionsNonStrict', 'windowSize', 'isMobile',
- 'find', 'inArray', 'removeFromArray', 'isEmptyObject', 'cap',
- 'noPx', 'noPxStyle', 'endsWith', 'parseBitRate'
- ])).toBeTruthy();
- });
-
-
- // === Tests for windowSize()
- it('windowSize(): noargs', function () {
- var dim = fs.windowSize();
- expect(dim.width).toEqual(400);
- expect(dim.height).toEqual(200);
- });
-
- it('windowSize(): adjust height', function () {
- var dim = fs.windowSize(50);
- expect(dim.width).toEqual(400);
- expect(dim.height).toEqual(150);
- });
-
- it('windowSize(): adjust width', function () {
- var dim = fs.windowSize(0, 50);
- expect(dim.width).toEqual(350);
- expect(dim.height).toEqual(200);
- });
-
- it('windowSize(): adjust width and height', function () {
- var dim = fs.windowSize(101, 201);
- expect(dim.width).toEqual(199);
- expect(dim.height).toEqual(99);
- });
-
- // === Tests for isMobile()
- var uaMap = {
- chrome: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) " +
- "AppleWebKit/537.36 (KHTML, like Gecko) " +
- "Chrome/41.0.2272.89 Safari/537.36",
-
- iPad: "Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) " +
- "AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 " +
- "Mobile/11A465 Safari/9537.53",
-
- iPhone: "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) " +
- "AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 " +
- "Mobile/11A465 Safari/9537.53"
- };
-
- function setUa(key) {
- var str = uaMap[key];
- expect(str).toBeTruthy();
- mockWindow.navigator.userAgent = str;
- }
-
- it('isMobile(): should be false for Chrome on Mac OS X', function () {
- setUa('chrome');
- expect(fs.isMobile()).toBe(false);
- });
- it('isMobile(): should be true for Safari on iPad', function () {
- setUa('iPad');
- expect(fs.isMobile()).toBe(true);
- });
- it('isMobile(): should be true for Safari on iPhone', function () {
- setUa('iPhone');
- expect(fs.isMobile()).toBe(true);
- });
-
- // === Tests for find()
- var dataset = [
- { id: 'foo', name: 'Furby'},
- { id: 'bar', name: 'Barbi'},
- { id: 'baz', name: 'Basil'},
- { id: 'goo', name: 'Gabby'},
- { id: 'zoo', name: 'Zevvv'}
- ];
-
- it('should not find ooo', function () {
- expect(fs.find('ooo', dataset)).toEqual(-1);
- });
- it('should find foo', function () {
- expect(fs.find('foo', dataset)).toEqual(0);
- });
- it('should find zoo', function () {
- expect(fs.find('zoo', dataset)).toEqual(4);
- });
-
- it('should not find Simon', function () {
- expect(fs.find('Simon', dataset, 'name')).toEqual(-1);
- });
- it('should find Furby', function () {
- expect(fs.find('Furby', dataset, 'name')).toEqual(0);
- });
- it('should find Zevvv', function () {
- expect(fs.find('Zevvv', dataset, 'name')).toEqual(4);
- });
-
-
- // === Tests for inArray()
- var objRef = { x:1, y:2 },
- array = [1, 3.14, 'hey', objRef, 'there', true],
- array2 = ['b', 'a', 'd', 'a', 's', 's'];
-
- it('should return -1 on non-arrays', function () {
- expect(fs.inArray(1, {x:1})).toEqual(-1);
- });
- it('should not find HOO', function () {
- expect(fs.inArray('HOO', array)).toEqual(-1);
- });
- it('should find 1', function () {
- expect(fs.inArray(1, array)).toEqual(0);
- });
- it('should find pi', function () {
- expect(fs.inArray(3.14, array)).toEqual(1);
- });
- it('should find hey', function () {
- expect(fs.inArray('hey', array)).toEqual(2);
- });
- it('should find the object', function () {
- expect(fs.inArray(objRef, array)).toEqual(3);
- });
- it('should find there', function () {
- expect(fs.inArray('there', array)).toEqual(4);
- });
- it('should find true', function () {
- expect(fs.inArray(true, array)).toEqual(5);
- });
-
- it('should find the first occurrence A', function () {
- expect(fs.inArray('a', array2)).toEqual(1);
- });
- it('should find the first occurrence S', function () {
- expect(fs.inArray('s', array2)).toEqual(4);
- });
- it('should not find X', function () {
- expect(fs.inArray('x', array2)).toEqual(-1);
- });
-
- // === Tests for removeFromArray()
- it('should ignore non-arrays', function () {
- expect(fs.removeFromArray(1, {x:1})).toBe(false);
- });
- it('should keep the array the same, for non-match', function () {
- var array = [1, 2, 3];
- expect(fs.removeFromArray(4, array)).toBe(false);
- expect(array).toEqual([1, 2, 3]);
- });
- it('should remove a value', function () {
- var array = [1, 2, 3];
- expect(fs.removeFromArray(2, array)).toBe(true);
- expect(array).toEqual([1, 3]);
- });
- it('should remove the first occurrence', function () {
- var array = ['x', 'y', 'z', 'z', 'y'];
- expect(fs.removeFromArray('y', array)).toBe(true);
- expect(array).toEqual(['x', 'z', 'z', 'y']);
- expect(fs.removeFromArray('x', array)).toBe(true);
- expect(array).toEqual(['z', 'z', 'y']);
- });
-
- // === Tests for isEmptyObject()
- it('should return true if an object is empty', function () {
- expect(fs.isEmptyObject({})).toBe(true);
- });
- it('should return false if an object is not empty', function () {
- expect(fs.isEmptyObject({foo: 'bar'})).toBe(false);
- });
-
- // === Tests for cap()
- it('should ignore non-alpha', function () {
- expect(fs.cap('123')).toEqual('123');
- });
- it('should capitalize first char', function () {
- expect(fs.cap('Foo')).toEqual('Foo');
- expect(fs.cap('foo')).toEqual('Foo');
- expect(fs.cap('foo bar')).toEqual('Foo bar');
- expect(fs.cap('FOO BAR')).toEqual('Foo bar');
- expect(fs.cap('foo Bar')).toEqual('Foo bar');
- });
-
- // === Tests for noPx()
- it('should return the value without px suffix', function () {
- expect(fs.noPx('10px')).toBe(10);
- expect(fs.noPx('500px')).toBe(500);
- expect(fs.noPx('-80px')).toBe(-80);
- });
-
- // === Tests for noPxStyle()
- it("should give a style's property without px suffix", function () {
- var d3Elem = d3.select('body')
- .append('div')
- .attr('id', 'fooElem')
- .style({
- width: '500px',
- height: '200px',
- 'font-size': '12px'
- });
- expect(fs.noPxStyle(d3Elem, 'width')).toBe(500);
- expect(fs.noPxStyle(d3Elem, 'height')).toBe(200);
- expect(fs.noPxStyle(d3Elem, 'font-size')).toBe(12);
- d3.select('#fooElem').remove();
- });
-
- // === Tests for endsWith()
- it('should return true if string ends with foo', function () {
- expect(fs.endsWith("barfoo", "foo")).toBe(true);
- });
-
- it('should return false if string doesnt end with foo', function () {
- expect(fs.endsWith("barfood", "foo")).toBe(false);
- });
-
- // === Tests for parseBitRate()
- it('should return 5 - a', function () {
- expect(fs.parseBitRate('5.47 KBps')).toBe(5);
- });
-
- it('should return 5 - b', function () {
- expect(fs.parseBitRate('5. KBps')).toBe(5);
- });
-
- it('should return 5 - c', function () {
- expect(fs.parseBitRate('5 KBps')).toBe(5);
- });
-
- it('should return 5 - d', function () {
- expect(fs.parseBitRate('5 Kbps')).toBe(5);
- });
-
- it('should return 2001', function () {
- expect(fs.parseBitRate('2,001.59 Gbps')).toBe(2001);
- });
-});
-
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/keys-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/keys-spec.js
deleted file mode 100644
index 227d7904..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/keys-spec.js
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Key Handler Service - Unit Tests
- */
-describe('factory: fw/util/keys.js', function() {
- var $log, ks, fs, qhs,
- d3Elem, elem, last;
-
-
- beforeEach(module('onosUtil', 'onosSvg', 'onosLayer', 'onosNav'));
-
- beforeEach(inject(function (_$log_, KeyService, FnService, QuickHelpService) {
- $log = _$log_;
- ks = KeyService;
- fs = FnService;
- qhs = QuickHelpService;
- d3Elem = d3.select('body').append('p').attr('id', 'ptest');
- elem = d3Elem.node();
- ks.installOn(d3Elem);
- ks.bindQhs(qhs);
- last = {
- view: null,
- key: null,
- code: null,
- ev: null
- };
- }));
-
- afterEach(function () {
- d3.select('#ptest').remove();
- });
-
- it('should define the key service', function () {
- expect(ks).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(ks, [
- 'bindQhs', 'installOn', 'keyBindings', 'gestureNotes', 'enableKeys'
- ])).toBeTruthy();
- });
-
- // This no longer works because 'initKeyboardEvent' has been depreciated.
- // Now there is a constructor for 'KeyboardEvent' where you can modify
- // the new event with a dictionary(?) 'KeyboardEventInit'.
- // However, the below code has been so recently depreciated, there are no
- // examples online of how to use the new interface, and some browsers
- // don't support it still. These tests will have to be put off for a
- // while more. (Investigated 4/28/15)
- // Also tried was Angular's triggerHandler() function, but it doesn't seem
- // that it can take arguments about the event.
- // Using jQuery in tests might be a good idea, for triggering test events.
- function jsKeyDown(element, code) {
- var ev = document.createEvent('KeyboardEvent');
-
- // Chromium Hack
- if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {
- Object.defineProperty(ev, 'keyCode', {
- get: function () { return this.keyCodeVal; }
- });
- Object.defineProperty(ev, 'which', {
- get: function () { return this.keyCodeVal; }
- });
- }
-
- if (ev.initKeyboardEvent) {
- ev.initKeyboardEvent('keydown', true, true, document.defaultView,
- false, false, false, false, code, code);
- } else {
- ev.initKeyEvent('keydown', true, true, document.defaultView,
- false, false, false, false, code, 0);
- }
-
- ev.keyCodeVal = code;
-
- if (ev.keyCode !== code) {
- console.warn("keyCode mismatch " + ev.keyCode +
- "(" + ev.which + ") -> "+ code);
- }
- element.dispatchEvent(ev);
- }
-
- // === Key binding related tests
- it('should start with default key bindings', function () {
- var state = ks.keyBindings(),
- gk = state.globalKeys,
- mk = state.maskedKeys,
- vk = state.viewKeys,
- vf = state.viewFunction;
-
- expect(gk.length).toEqual(4);
- ['backSlash', 'slash', 'esc', 'T'].forEach(function (k) {
- expect(fs.contains(gk, k)).toBeTruthy();
- });
-
- expect(mk.length).toEqual(3);
- ['backSlash', 'slash', 'T'].forEach(function (k) {
- expect(fs.contains(mk, k)).toBeTruthy();
- });
-
- expect(vk.length).toEqual(0);
- expect(vf).toBeFalsy();
- });
-
- function bindTestKeys(withDescs) {
- var keys = ['A', '1', 'F5', 'equals'],
- kb = {};
-
- function cb(view, key, code, ev) {
- last.view = view;
- last.key = key;
- last.code = code;
- last.ev = ev;
- }
-
- function bind(k) {
- return withDescs ? [cb, 'desc for key ' + k] : cb;
- }
-
- keys.forEach(function (k) {
- kb[k] = bind(k);
- });
-
- ks.keyBindings(kb);
- }
-
- function verifyCall(key, code) {
- // TODO: update expectation, when view tokens are implemented
- expect(last.view).toEqual('NotYetAViewToken');
- last.view = null;
-
- expect(last.key).toEqual(key);
- last.key = null;
-
- expect(last.code).toEqual(code);
- last.code = null;
-
- expect(last.ev).toBeTruthy();
- last.ev = null;
- }
-
- function verifyNoCall() {
- expect(last.view).toBeNull();
- expect(last.key).toBeNull();
- expect(last.code).toBeNull();
- expect(last.ev).toBeNull();
- }
-
- function verifyTestKeys() {
- jsKeyDown(elem, 65); // 'A'
- verifyCall('A', 65);
- jsKeyDown(elem, 66); // 'B'
- verifyNoCall();
-
- jsKeyDown(elem, 49); // '1'
- verifyCall('1', 49);
- jsKeyDown(elem, 50); // '2'
- verifyNoCall();
-
- jsKeyDown(elem, 116); // 'F5'
- verifyCall('F5', 116);
- jsKeyDown(elem, 117); // 'F6'
- verifyNoCall();
-
- jsKeyDown(elem, 187); // 'equals'
- verifyCall('equals', 187);
- jsKeyDown(elem, 189); // 'dash'
- verifyNoCall();
-
- var vk = ks.keyBindings().viewKeys;
-
- expect(vk.length).toEqual(4);
- ['A', '1', 'F5', 'equals'].forEach(function (k) {
- expect(fs.contains(vk, k)).toBeTruthy();
- });
-
- expect(ks.keyBindings().viewFunction).toBeFalsy();
- }
-
- // TODO: jsKeyDown(...) no longer emulates key presses ?! :(
- // The following four unit tests ignored until we can figure this out.
- // INVESTIGATED: see jsKeyDown for details...
-
- xit('should allow specific key bindings', function () {
- bindTestKeys();
- verifyTestKeys();
- });
-
- xit('should allow specific key bindings with descriptions', function () {
- bindTestKeys(true);
- verifyTestKeys();
- });
-
- xit('should warn about masked keys', function () {
- var k = {'space': cb, 'T': cb},
- count = 0;
-
- function cb(token, key, code, ev) {
- count++;
- //console.debug('count = ' + count, token, key, code);
- }
-
- spyOn($log, 'warn');
-
- ks.keyBindings(k);
-
- expect($log.warn).toHaveBeenCalledWith('setKeyBindings(): Key "T" is reserved');
-
- // the 'T' key should NOT invoke our callback
- expect(count).toEqual(0);
- jsKeyDown(elem, 84); // 'T'
- expect(count).toEqual(0);
-
- // but the 'space' key SHOULD invoke our callback
- jsKeyDown(elem, 32); // 'space'
- expect(count).toEqual(1);
- });
-
- xit('should block keys when disabled', function () {
- var cbCount = 0;
-
- function cb() { cbCount++; }
-
- function pressA() { jsKeyDown(elem, 65); } // 65 == 'A' keycode
-
- ks.keyBindings({ A: cb });
-
- expect(cbCount).toBe(0);
-
- pressA();
- expect(cbCount).toBe(1);
-
- ks.enableKeys(false);
- pressA();
- expect(cbCount).toBe(1);
-
- ks.enableKeys(true);
- pressA();
- expect(cbCount).toBe(2);
- });
-
- // === Gesture notes related tests
- it('should start with no notes', function () {
- expect(ks.gestureNotes()).toEqual([]);
- });
-
- it('should allow us to add nodes', function () {
- var notes = [
- ['one', 'something about one'],
- ['two', 'description of two']
- ];
- ks.gestureNotes(notes);
-
- expect(ks.gestureNotes()).toEqual(notes);
- });
-
- it('should ignore non-arrays', function () {
- ks.gestureNotes({foo:4});
- expect(ks.gestureNotes()).toEqual([]);
- });
-
- // Consider adding test to ensure array contains 2-tuples of strings
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/prefs-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/prefs-spec.js
deleted file mode 100644
index 02152895..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/prefs-spec.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Util -- User Preference Service - Unit Tests
- */
-describe('factory: fw/util/prefs.js', function() {
- var $cookies, ps, fs;
-
- beforeEach(module('onosUtil'));
-
- var mockCookies = {
- foo: 'bar'
- };
-
- beforeEach(function () {
- module(function ($provide) {
- $provide.value('$cookies', mockCookies);
- });
- });
-
- beforeEach(inject(function (PrefsService, FnService, _$cookies_) {
- ps = PrefsService;
- fs = FnService;
- $cookies = _$cookies_;
- }));
-
- it('should define PrefsService', function () {
- expect(ps).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(ps, [
- 'getPrefs', 'asNumbers', 'setPrefs'
- ])).toBe(true);
- });
-
- // === Tests for getPrefs()
- // TODO unit tests for getPrefs()
-
- // === Tests for asNumbers()
- // TODO unit tests for asNumbers()
-
- // === Tests for setPrefs()
- // TODO unit tests for setPrefs()
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/random-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/random-spec.js
deleted file mode 100644
index c4c61f1a..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/random-spec.js
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Util -- Random Service - Unit Tests
- */
-describe('factory: fw/util/random.js', function() {
- var rnd, $log, fs;
-
- beforeEach(module('onosUtil'));
-
- beforeEach(inject(function (RandomService, _$log_, FnService) {
- rnd = RandomService;
- $log = _$log_;
- fs = FnService;
- }));
-
- // interesting use of a custom matcher...
- beforeEach(function () {
- jasmine.addMatchers({
- toBeWithinOf: function () {
- return {
- compare: function (actual, distance, base) {
- var lower = base - distance,
- upper = base + distance,
- result = {};
-
- result.pass = Math.abs(actual - base) <= distance;
-
- if (result.pass) {
- // for negation with ".not"
- result.message = 'Expected ' + actual +
- ' to be outside ' + lower + ' and ' +
- upper + ' (inclusive)';
- } else {
- result.message = 'Expected ' + actual +
- ' to be between ' + lower + ' and ' +
- upper + ' (inclusive)';
- }
- return result;
- }
- }
- }
- });
- });
-
- it('should define RandomService', function () {
- expect(rnd).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(rnd, [
- 'spread', 'randDim'
- ])).toBeTruthy();
- });
-
- // really, can only do this heuristically.. hope this doesn't break
- it('should spread results across the range', function () {
- var load = 1000,
- s = 12,
- low = 0,
- high = 0,
- i, res,
- which = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
- minCount = load / s * 0.5; // generous error
-
- for (i=0; i<load; i++) {
- res = rnd.spread(s);
- if (res < low) low = res;
- if (res > high) high = res;
- which[res + s/2]++;
- }
- expect(low).toBe(-6);
- expect(high).toBe(5);
-
- // check we got a good number of hits in each bucket
- for (i=0; i<s; i++) {
- expect(which[i]).toBeGreaterThan(minCount);
- }
- });
-
- // really, can only do this heuristically.. hope this doesn't break
- it('should choose results across the dimension', function () {
- var load = 1000,
- dim = 100,
- low = 999,
- high = 0,
- i, res;
-
- for (i=0; i<load; i++) {
- res = rnd.randDim(dim);
- if (res < low) low = res;
- if (res > high) high = res;
- expect(res).toBeWithinOf(36, 50);
- }
- });
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/theme-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/theme-spec.js
deleted file mode 100644
index 1d400ed1..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/util/theme-spec.js
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Util -- Theme Service - Unit Tests
- */
-describe('factory: fw/util/theme.js', function() {
- var ts, $log, fs;
-
- beforeEach(module('onosUtil'));
-
- beforeEach(inject(function (ThemeService, _$log_, FnService) {
- ts = ThemeService;
- $log = _$log_;
- fs = FnService;
- ts.init();
- }));
-
- it('should define ThemeService', function () {
- expect(ts).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(ts, [
- 'init', 'theme', 'toggleTheme', 'addListener', 'removeListener'
- ])).toBeTruthy();
- });
-
-
- function verifyBodyClass(yes, no) {
- function bodyHasClass(c) {
- return d3.select('body').classed(c);
- }
- expect(bodyHasClass(yes)).toBeTruthy();
- expect(bodyHasClass(no)).toBeFalsy();
- }
-
- it('should default to light theme', function () {
- expect(ts.theme()).toEqual('light');
- });
-
- it('should toggle to dark, then to light again', function () {
- // Note: re-work this once theme-change listeners are implemented
- spyOn($log, 'debug');
-
- expect(ts.toggleTheme()).toEqual('dark');
- expect(ts.theme()).toEqual('dark');
- expect($log.debug).toHaveBeenCalledWith('Theme-Change-(toggle): dark');
- verifyBodyClass('dark', 'light');
-
- expect(ts.toggleTheme()).toEqual('light');
- expect(ts.theme()).toEqual('light');
- expect($log.debug).toHaveBeenCalledWith('Theme-Change-(toggle): light');
- verifyBodyClass('light', 'dark');
- });
-
- it('should let us set the theme by name', function () {
- // Note: re-work this once theme-change listeners are implemented
- spyOn($log, 'debug');
-
- expect(ts.theme()).toEqual('light');
- ts.theme('dark');
- expect(ts.theme()).toEqual('dark');
- expect($log.debug).toHaveBeenCalledWith('Theme-Change-(set): dark');
- verifyBodyClass('dark', 'light');
- });
-
- it('should ignore unknown theme names', function () {
- // Note: re-work this once theme-change listeners are implemented
- spyOn($log, 'debug');
-
- expect(ts.theme()).toEqual('light');
- verifyBodyClass('light', 'dark');
-
- ts.theme('turquoise');
- expect(ts.theme()).toEqual('light');
- expect($log.debug).not.toHaveBeenCalled();
- verifyBodyClass('light', 'dark');
- });
-
-
- // === Unit Tests for listeners
-
- it('should report lack of callback', function () {
- spyOn($log, 'error');
- var list = ts.addListener();
- expect($log.error).toHaveBeenCalledWith(
- 'ThemeService.addListener(): callback not a function'
- );
- expect(list.error).toEqual('No callback defined');
- });
-
- it('should report non-functional callback', function () {
- spyOn($log, 'error');
- var list = ts.addListener(['some array']);
- expect($log.error).toHaveBeenCalledWith(
- 'ThemeService.addListener(): callback not a function'
- );
- expect(list.error).toEqual('No callback defined');
- });
-
- it('should invoke our callback with an event', function () {
- var event;
-
- function cb(ev) {
- event = ev;
- }
-
- expect(event).toBeUndefined();
- ts.addListener(cb);
- ts.theme('dark');
- expect(event).toEqual({
- event: 'themeChange',
- value: 'dark'
- });
- });
-
- it('should invoke our callback at appropriate times', function () {
- var calls = [],
- phase,
- listener;
-
- function cb() {
- calls.push(phase);
- }
-
- expect(calls).toEqual([]);
-
- phase = 'pre';
- ts.toggleTheme(); // -> dark
-
- phase = 'added';
- listener = ts.addListener(cb);
- ts.toggleTheme(); // -> light
-
- phase = 'same';
- ts.theme('light'); // (still light - no event)
-
- phase = 'diff';
- ts.theme('dark'); // -> dark
-
- phase = 'post';
- ts.removeListener(listener);
- ts.toggleTheme(); // -> light
-
- expect(calls).toEqual(['added', 'diff']);
- });
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/button-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/button-spec.js
deleted file mode 100644
index 5226984d..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/button-spec.js
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Widget -- Button Service - Unit Tests
- */
-describe('factory: fw/widget/button.js', function () {
- var $log, fs, bns, d3Elem;
-
- beforeEach(module('onosWidget', 'onosSvg'));
-
- beforeEach(inject(function (_$log_, FnService, ButtonService) {
- $log = _$log_;
- fs = FnService;
- bns = ButtonService;
- }));
-
- beforeEach(function () {
- d3Elem = d3.select('body').append('div').attr('id', 'testDiv');
- });
-
- afterEach(function () {
- d3.select('#testDiv').remove();
- });
-
-
- // re-usable null function
- function nullFunc () {}
-
- it('should define ButtonService', function () {
- expect(bns).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(bns, [
- 'button', 'toggle', 'radioSet'
- ])).toBeTruthy();
- });
-
- it('should verify button glyph', function () {
- var btn = bns.button(d3Elem, 'foo-id', 'crown', nullFunc);
- var el = d3Elem.select('#foo-id');
- expect(el.classed('button')).toBeTruthy();
- expect(el.attr('id')).toBe('foo-id');
- expect(el.select('svg')).toBeTruthy();
- expect(el.select('use')).toBeTruthy();
- expect(el.select('use').classed('glyph')).toBeTruthy();
- expect(el.select('use').attr('xlink:href')).toBe('#crown');
- });
-
-
- it('should not append button to an undefined div', function () {
- spyOn($log, 'warn');
- expect(bns.button(null, 'id', 'gid', nullFunc)).toBeNull();
- expect($log.warn).toHaveBeenCalledWith('div undefined (button)');
- });
-
- it('should verify button callback', function () {
- var count = 0;
- function cb() { count++; }
- var btn = bns.button(d3Elem, 'test', 'nothing', cb);
- expect(count).toBe(0);
- d3Elem.select('#test').on('click')();
- expect(count).toBe(1);
- });
-
- it('should ignore non-function callbacks button', function () {
- var count = 0;
- var btn = bns.button(d3Elem, 'test', 'nothing', 'foo');
- expect(count).toBe(0);
- d3Elem.select('#test').on('click')();
- expect(count).toBe(0);
- });
-
- it('should not append toggle to an undefined div', function () {
- spyOn($log, 'warn');
- expect(bns.toggle(undefined, 'id', 'gid', false, nullFunc)).toBeNull();
- expect($log.warn).toHaveBeenCalledWith('div undefined (toggle button)');
- });
-
- it('should verify toggle glyph', function () {
- var tog = bns.toggle(d3Elem, 'foo-id', 'crown', false, nullFunc);
- var el = d3Elem.select('#foo-id');
- expect(el.classed('toggleButton')).toBeTruthy();
- expect(el.attr('id')).toBe('foo-id');
- expect(el.select('svg')).toBeTruthy();
- expect(el.select('use')).toBeTruthy();
- expect(el.select('use').classed('glyph')).toBeTruthy();
- expect(el.select('use').attr('xlink:href')).toBe('#crown');
- });
-
- it('should toggle the selected state', function () {
- var tog = bns.toggle(d3Elem, 'test', 'nothing');
- expect(tog.selected()).toBe(false);
- tog.toggle();
- expect(tog.selected()).toBe(true);
- tog.toggle();
- expect(tog.selected()).toBe(false);
- });
-
- it('should set toggle state', function () {
- var tog = bns.toggle(d3Elem, 'test', 'nothing');
- tog.toggle(true);
- expect(tog.selected()).toBe(true);
- tog.toggle();
- expect(tog.selected()).toBe(false);
- tog.toggle('truthy string');
- expect(tog.selected()).toBe(true);
- tog.toggle(null);
- expect(tog.selected()).toBe(false);
- tog.toggle('');
- expect(tog.selected()).toBe(false);
- });
-
- it('should verity toggle initial state', function () {
- var tog = bns.toggle(d3Elem, 'id', 'gid', true);
- expect(tog.selected()).toBe(true);
- tog = bns.toggle(d3Elem, 'id', 'gid', false);
- expect(tog.selected()).toBe(false);
- tog = bns.toggle(d3Elem, 'id', 'gid', '');
- expect(tog.selected()).toBe(false);
- tog = bns.toggle(d3Elem, 'id', 'gid', 'something');
- expect(tog.selected()).toBe(true);
- });
-
- it('should not append radio button set to an undefined div', function () {
- spyOn($log, 'warn');
- expect(bns.radioSet(undefined, 'id', [])).toBeNull();
- expect($log.warn).toHaveBeenCalledWith('div undefined (radio button set)');
- });
-
- it('should not create radio button set from a non-array', function () {
- var rads = {test: 'test'};
- var warning = 'invalid array (radio button set)';
-
- spyOn($log, 'warn');
-
- expect(bns.radioSet(d3Elem, 'test', rads)).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(warning);
- rads = 'rads';
- expect(bns.radioSet(d3Elem, 'test', rads)).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(warning);
- rads = {arr: [1, 2, 3]};
- expect(bns.radioSet(d3Elem, 'test', rads)).toBeNull();
- expect($log.warn).toHaveBeenCalledWith(warning);
- });
-
- it('should not create radio button set from empty array', function () {
- var rads = [];
- spyOn($log, 'warn');
- expect(bns.radioSet(d3Elem, 'test', rads)).toBeNull();
- expect($log.warn).toHaveBeenCalledWith('invalid array (radio button set)');
- });
-
- it('should verify radio button glyph structure', function () {
- var rads = [
- { gid: 'crown', cb: nullFunc, tooltip: 'n/a'}
- ], rdiv;
-
- spyOn($log, 'warn');
- expect(bns.radioSet(d3Elem, 'foo', rads)).toBeTruthy();
- expect($log.warn).not.toHaveBeenCalled();
-
- rdiv = d3Elem.select('div');
- expect(rdiv.classed('radioSet')).toBe(true);
- expect(rdiv.select('div').classed('radioButton')).toBe(true);
- expect(rdiv.select('div').attr('id')).toBe('foo-0');
- expect(rdiv.select('div').select('svg')).toBeTruthy();
- expect(rdiv.select('use').classed('glyph')).toBeTruthy();
- expect(rdiv.select('use').attr('xlink:href')).toBe('#crown');
- });
-
- it('should verify more than one radio button glyph was added', function () {
- var rads = [
- { gid: 'crown', cb: nullFunc, tooltip: 'n/a'},
- { gid: 'router', cb: nullFunc, tooltip: 'n/a'}
- ], rdiv;
-
- expect(bns.radioSet(d3Elem, 'foo', rads)).toBeTruthy();
- rdiv = d3Elem.select('div');
- expect(rdiv.select('#foo-0')).toBeTruthy();
- expect(rdiv.select('#foo-1')).toBeTruthy();
-
- expect(rdiv.select('#foo-0')
- .select('use')
- .classed('glyph'))
- .toBeTruthy();
- expect(rdiv.select('#foo-0')
- .select('use')
- .attr('xlink:href'))
- .toBe('#crown');
-
- expect(rdiv.select('#foo-1')
- .select('use')
- .classed('glyph'))
- .toBeTruthy();
- expect(rdiv.select('#foo-1')
- .select('use')
- .attr('xlink:href'))
- .toBe('#router');
- });
-
- it('should select radio button by index', function () {
- var count0 = 0,
- count1 = 9;
- function cb0() { count0++; }
- function cb1() { count1++; }
-
- function validate(expSel, exp0, exp1) {
- expect(rset.selected()).toBe(expSel);
- expect(count0).toBe(exp0);
- expect(count1).toBe(exp1);
- }
-
- function checkWarn(msg, index) {
- expect($log.warn).toHaveBeenCalledWith(msg, index);
- }
-
- var rads = [
- { gid: 'crown', cb: cb0, tooltip: 'n/a'},
- { gid: 'router', cb: cb1, tooltip: 'n/a'}
- ],
- rset = bns.radioSet(d3Elem, 'test', rads);
- spyOn($log, 'warn');
-
- validate(0, 0, 9);
- rset.selectedIndex(0);
- validate(0, 0, 9);
-
- rset.selectedIndex(1);
- validate(1, 0, 10);
-
- rset.selectedIndex(-1);
- checkWarn('invalid radio button index:', -1);
- validate(1, 0, 10);
-
- rset.selectedIndex(66);
- checkWarn('invalid radio button index:', 66);
- validate(1, 0, 10);
-
- rset.selectedIndex(0);
- validate(0, 1, 10);
- });
-
- it('should select radio button by key', function () {
- var count0 = 0,
- count1 = 9;
- function cb0() { count0++; }
- function cb1() { count1++; }
-
- function validate(expSel, exp0, exp1) {
- expect(rset.selected()).toBe(expSel);
- expect(count0).toBe(exp0);
- expect(count1).toBe(exp1);
- }
-
- function checkWarn(msg, index) {
- expect($log.warn).toHaveBeenCalledWith(msg, index);
- }
-
- var rads = [
- { key: 'foo', gid: 'crown', cb: cb0, tooltip: 'n/a'},
- { key: 'bar', gid: 'router', cb: cb1, tooltip: 'n/a'}
- ],
- rset = bns.radioSet(d3Elem, 'test', rads);
- spyOn($log, 'warn');
-
- validate('foo', 0, 9);
- rset.selected('foo');
- validate('foo', 0, 9);
-
- rset.selected('bar');
- validate('bar', 0, 10);
-
- rset.selected('blob');
- checkWarn('no radio button with key:', 'blob');
- validate('bar', 0, 10);
-
- rset.selected('foo');
- validate('foo', 1, 10);
-
- rset.selected('foo');
- validate('foo', 1, 10);
- checkWarn('current index already selected:', 0);
- });
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/table-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/table-spec.js
deleted file mode 100644
index 4f8f0c0f..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/table-spec.js
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Widget -- Table Service - Unit Tests
- */
-describe('factory: fw/widget/table.js', function () {
- var $log, $compile, $rootScope,
- fs, ts, mast, is,
- scope,
- containerDiv,
- headerDiv, bodyDiv,
- header, body,
- mockHeader,
- mockHeaderHeight = 40;
-
- var onosFixedHeaderTags =
- '<div class="summary-list" onos-fixed-header>' +
- '<div class="table-header">' +
- '<table>' +
- '<tr>' +
- '<td colId="type" class="table-icon"></td>' +
- '<td colId="id">Host ID </td>' +
- '<td colId="mac" sortable>MAC Address </td>' +
- '<td colId="location" col-width="110px">Location </td>' +
- '</tr>' +
- '</table>' +
- '</div>' +
-
- '<div class="table-body">' +
- '<table>' +
- '<tr class="ignore-width">' +
- '<td class="not-picked"></td>' +
- '</tr>' +
- '<tr>' +
- '<td class="table-icon">Some Icon</td>' +
- '<td>Some ID</td>' +
- '<td>Some MAC Address</td>' +
- '<td>Some Location</td>' +
- '</tr>' +
- '</table>' +
- '</div>' +
- '</div>',
-
- onosSortableHeaderTags =
- '<div onos-sortable-header ' +
- 'sort-callback="sortCallback(requestParams)">' +
- '<table>' +
- '<tr>' +
- '<td colId="type"></td>' +
- '<td colId="id" sortable>Host ID </td>' +
- '<td colId="mac" sortable>MAC Address </td>' +
- '<td colId="location" sortable>Location </td>' +
- '</tr>' +
- '</table>' +
- '</div>';
-
- beforeEach(module('onosWidget', 'onosUtil', 'onosMast', 'onosSvg'));
-
- var mockWindow = {
- innerWidth: 600,
- innerHeight: 400,
- navigator: {
- userAgent: 'defaultUA'
- },
- on: function () {},
- addEventListener: function () {}
- };
-
- beforeEach(function () {
- module(function ($provide) {
- $provide.value('$window', mockWindow);
- });
- });
-
- beforeEach(inject(function (_$log_, _$compile_, _$rootScope_,
- FnService, TableService, MastService, IconService) {
- $log = _$log_;
- $compile = _$compile_;
- $rootScope = _$rootScope_;
- fs = FnService;
- ts = TableService;
- mast = MastService;
- is = IconService;
- }));
-
- beforeEach(function () {
- scope = $rootScope.$new();
- scope.tableData = [];
- });
-
- // Note: dummy header so that d3 doesn't trip up.
- // $compile has to be used on the directive tag element, so it can't
- // be included in the tag strings declared above.
- beforeEach(function () {
- mockHeader = d3.select('body')
- .append('h2')
- .classed('tabular-header', true)
- .style({
- height: mockHeaderHeight + 'px',
- margin: 0,
- padding: 0
- })
- .text('Some Header');
- });
-
- afterEach(function () {
- containerDiv = undefined;
- headerDiv = undefined;
- bodyDiv = undefined;
- header = undefined;
- body = undefined;
- mockHeader.remove();
- });
-
- function populateTableData() {
- scope.tableData = [
- {
- type: 'endstation',
- id: '1234',
- mac: '00:00:03',
- location: 'USA'
- }
- ];
- }
-
- it('should define TableBuilderService', function () {
- expect(ts).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(ts, [
- 'resetSortIcons'
- ])).toBeTruthy();
- });
-
- function compile(elem) {
- var compiled = $compile(elem);
- compiled(scope);
- scope.$digest();
- }
-
- function selectTables() {
- expect(containerDiv.find('div').length).toBe(2);
-
- headerDiv = angular.element(containerDiv[0].querySelector('.table-header'));
- expect(headerDiv.length).toBe(1);
-
- bodyDiv = angular.element(containerDiv[0].querySelector('.table-body'));
- expect(bodyDiv.length).toBe(1);
-
- header = headerDiv.find('table');
- expect(header.length).toBe(1);
-
- body = bodyDiv.find('table');
- expect(body.length).toBe(1);
- }
-
- function verifyGivenTags(dirName, div) {
- expect(div).toBeDefined();
- expect(div.attr(dirName)).toBe('');
- }
-
- function verifyDefaultSize() {
- expect(header.css('width')).toBe('570px');
- expect(body.css('width')).toBe('570px');
- }
-
- function verifyHeight() {
- var padding = 22,
- mastHeight = 36,
- tableHeight = (mockWindow.innerHeight - mockHeaderHeight) -
- (fs.noPx(headerDiv.css('height')) + mastHeight + padding);
-
- expect(bodyDiv.css('height')).toBe(tableHeight + 'px');
- }
-
- function verifyColWidth() {
- var hdrs = header.find('td'),
- cols = body.find('td');
-
- expect(angular.element(hdrs[0]).css('width')).toBe('33px');
- expect(angular.element(hdrs[3]).css('width')).toBe('110px');
-
- expect(angular.element(cols[1]).css('width')).toBe('33px');
- expect(angular.element(cols[4]).css('width')).toBe('110px');
- }
-
- function verifyCallbacks(h) {
- expect(scope.sortCallback).not.toHaveBeenCalled();
-
- h[0].click();
- expect(scope.sortCallback).not.toHaveBeenCalled();
-
- h[1].click();
- expect(scope.sortCallback).toHaveBeenCalledWith({
- sortCol: 'id',
- sortDir: 'asc'
- });
- h[1].click();
- expect(scope.sortCallback).toHaveBeenCalledWith({
- sortCol: 'id',
- sortDir: 'desc'
- });
- h[1].click();
- expect(scope.sortCallback).toHaveBeenCalledWith({
- sortCol: 'id',
- sortDir: 'asc'
- });
-
- h[2].click();
- expect(scope.sortCallback).toHaveBeenCalledWith({
- sortCol: 'mac',
- sortDir: 'asc'
- });
- h[2].click();
- expect(scope.sortCallback).toHaveBeenCalledWith({
- sortCol: 'mac',
- sortDir: 'desc'
- });
- h[2].click();
- expect(scope.sortCallback).toHaveBeenCalledWith({
- sortCol: 'mac',
- sortDir: 'asc'
- });
-
- h[3].click();
- expect(scope.sortCallback).toHaveBeenCalledWith({
- sortCol: 'location',
- sortDir: 'asc'
- });
- h[3].click();
- expect(scope.sortCallback).toHaveBeenCalledWith({
- sortCol: 'location',
- sortDir: 'desc'
- });
- h[3].click();
- expect(scope.sortCallback).toHaveBeenCalledWith({
- sortCol: 'location',
- sortDir: 'asc'
- });
- }
-
- function verifyIcons(h) {
- var currH, div;
-
- h[1].click();
- currH = angular.element(h[1]);
- div = currH.find('div');
- expect(div.html()).toBe(
- '<svg class="embeddedIcon" width="10" height="10" viewBox="0 0 ' +
- '50 50"><g class="icon upArrow"><rect width="50" height="50" ' +
- 'rx="5"></rect><use width="50" height="50" class="glyph" xmlns:' +
- 'xlink="http://www.w3.org/1999/xlink" xlink:href="#triangleUp">' +
- '</use></g></svg>'
- );
- h[1].click();
- div = currH.find('div');
- expect(div.html()).toBe(
- '<svg class="embeddedIcon" width="10" height="10" viewBox="0 0 ' +
- '50 50"><g class="icon downArrow"><rect width="50" height="50" ' +
- 'rx="5"></rect><use width="50" height="50" class="glyph" xmlns:' +
- 'xlink="http://www.w3.org/1999/xlink" xlink:href="#triangleDown">' +
- '</use></g></svg>'
- );
-
- h[2].click();
- div = currH.children();
- // clicked on a new element, so the previous icon should have been deleted
- expect(div.html()).toBeFalsy();
-
- // the new element should have the ascending icon
- currH = angular.element(h[2]);
- div = currH.children();
- expect(div.html()).toBe(
- '<svg class="embeddedIcon" width="10" height="10" viewBox="0 0 ' +
- '50 50"><g class="icon upArrow"><rect width="50" height="50" ' +
- 'rx="5"></rect><use width="50" height="50" class="glyph" xmlns:' +
- 'xlink="http://www.w3.org/1999/xlink" xlink:href="#triangleUp">' +
- '</use></g></svg>'
- );
- }
-
- it('should affirm that onos-fixed-header is working', function () {
- containerDiv = angular.element(onosFixedHeaderTags);
-
- compile(containerDiv);
-
- verifyGivenTags('onos-fixed-header', containerDiv);
- selectTables();
- verifyDefaultSize();
-
- populateTableData();
-
- scope.$emit('LastElement');
- scope.$digest();
-
- verifyHeight();
- verifyColWidth();
-
- mockWindow.innerHeight = 300;
- scope.$digest();
- verifyHeight();
-
- mockWindow.innerWidth = 500;
- scope.$digest();
- verifyColWidth();
- });
-
- it('should affirm that onos-sortable-header is working', function () {
- headerDiv = angular.element(onosSortableHeaderTags);
-
- compile(headerDiv);
- verifyGivenTags('onos-sortable-header', headerDiv);
-
- scope.sortCallback = jasmine.createSpy('sortCallback');
-
- header = headerDiv.find('td');
- verifyCallbacks(header);
- verifyIcons(header);
- });
-
- // Note: testing resetSortIcons isn't feasible because due to the nature of
- // directive compilation: they are jQuery elements, not d3 elements,
- // so the function doesn't work.
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/tableBuilder-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/tableBuilder-spec.js
deleted file mode 100644
index 0372a25f..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/tableBuilder-spec.js
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Widget -- Table Builder Service - Unit Tests
- */
-
-describe('factory: fw/widget/tableBuilder.js', function () {
- var $log, $rootScope, fs, tbs, is;
-
- var mockObj,
- mockWss = {
- bindHandlers: function () {},
- sendEvent: function () {},
- unbindHandlers: function () {}
- };
-
- beforeEach(module('onosWidget', 'onosUtil', 'onosRemote', 'onosSvg'));
-
- beforeEach(function () {
- module(function ($provide) {
- $provide.value('WebSocketService', mockWss);
- });
- });
-
- beforeEach(inject(function (_$log_, _$rootScope_,
- FnService, TableBuilderService, IconService) {
- $log = _$log_;
- $rootScope = _$rootScope_;
- fs = FnService;
- tbs = TableBuilderService;
- is = IconService;
- }));
-
- function mockSelCb(event, sel) {}
-
- beforeEach(function () {
- mockObj = {
- scope: $rootScope.$new(),
- tag: 'foo',
- selCb: mockSelCb
- };
- });
-
- afterEach(function () {
- mockObj = {};
- });
-
- it('should define TableBuilderService', function () {
- expect(tbs).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(tbs, [
- 'buildTable'
- ])).toBeTruthy();
- });
-
- it('should verify sortCb', function () {
- spyOn(mockWss, 'sendEvent');
- expect(mockObj.scope.sortCallback).not.toBeDefined();
- tbs.buildTable(mockObj);
- expect(mockObj.scope.sortCallback).toBeDefined();
- expect(mockWss.sendEvent).toHaveBeenCalled();
- });
-
- it('should set tableData', function () {
- expect(mockObj.scope.tableData).not.toBeDefined();
- tbs.buildTable(mockObj);
- expect(fs.isA(mockObj.scope.tableData)).toBeTruthy();
- expect(mockObj.scope.tableData.length).toBe(0);
- });
-
- it('should unbind handlers on destroyed scope', function () {
- spyOn(mockWss, 'unbindHandlers');
- tbs.buildTable(mockObj);
- expect(mockWss.unbindHandlers).not.toHaveBeenCalled();
- mockObj.scope.$destroy();
- expect(mockWss.unbindHandlers).toHaveBeenCalled();
- });
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/toolbar-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/toolbar-spec.js
deleted file mode 100644
index 83fd042e..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/toolbar-spec.js
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Widget -- Toolbar Service - Unit Tests
- */
-describe('factory: fw/widget/toolbar.js', function () {
- var $log, fs, tbs, ps, bns, is;
-
- beforeEach(module('onosWidget', 'onosUtil', 'onosLayer', 'onosSvg'));
-
- beforeEach(inject(function (_$log_, FnService, ToolbarService,
- PanelService, ButtonService, IconService) {
- $log = _$log_;
- fs = FnService;
- tbs = ToolbarService;
- ps = PanelService;
- bns = ButtonService;
- is = IconService;
- }));
-
- beforeEach(function () {
- // panel service expects #floatpanels div into which panels are placed
- d3.select('body').append('div').attr('id', 'floatpanels');
- tbs.init();
- ps.init();
- });
-
- afterEach(function () {
- tbs.init();
- ps.init();
- d3.select('#floatpanels').remove();
- });
-
- function nullFunc() { }
-
- it('should define ToolbarService', function () {
- expect(tbs).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(tbs, [
- 'init',
- 'createToolbar', 'destroyToolbar'
- ])).toBeTruthy();
- });
-
- it('should warn when no id is given', function () {
- spyOn($log, 'warn');
- expect(tbs.createToolbar()).toBeNull();
- expect($log.warn).toHaveBeenCalledWith('createToolbar: ' +
- 'no ID given: [undefined]');
- });
-
- it('should warn when a duplicate id is given', function () {
- spyOn($log, 'warn');
- expect(tbs.createToolbar('test')).toBeTruthy();
- expect(tbs.createToolbar('test')).toBeNull();
- expect($log.warn).toHaveBeenCalledWith('createToolbar: ' +
- 'duplicate ID given: [test]');
- });
-
- it('should verify the toolbar arrow div exists', function () {
- tbs.createToolbar('test');
-
- // NOTE: toolbar service prefixes id with 'toolbar-'
- var tbar = d3.select('#toolbar-test'),
- arrow = tbar.select('.tbar-arrow');
-
- expect(arrow.size()).toBe(1);
- expect(arrow.select('svg').size()).toBe(1);
- expect(arrow.select('svg').select('g').select('use')
- .attr('xlink:href')).toEqual('#triangleUp');
- });
-
-
- it('should create a button', function () {
- spyOn($log, 'warn');
- var toolbar = tbs.createToolbar('foo'),
- btn = toolbar.addButton('btn0', 'gid');
- expect(btn).not.toBeNull();
- expect(btn.id).toBe('toolbar-foo-btn0');
- expect($log.warn).not.toHaveBeenCalled();
- });
-
- it('should not create an item with a duplicate id', function () {
- spyOn($log, 'warn');
- var toolbar = tbs.createToolbar('foo'),
- btn = toolbar.addButton('btn0', 'gid'),
- dup;
- expect(btn).not.toBeNull();
- expect(btn.id).toBe('toolbar-foo-btn0');
-
- dup = toolbar.addButton('btn0', 'gid');
- expect($log.warn).toHaveBeenCalledWith('addButton: duplicate ID:', 'btn0');
- expect(dup).toBeNull();
-
- dup = toolbar.addToggle('btn0', 'gid');
- expect($log.warn).toHaveBeenCalledWith('addToggle: duplicate ID:', 'btn0');
- expect(dup).toBeNull();
-
- dup = toolbar.addRadioSet('btn0', []);
- expect($log.warn).toHaveBeenCalledWith('addRadioSet: duplicate ID:', 'btn0');
- expect(dup).toBeNull();
- });
-
- it('should create a toggle', function () {
- spyOn($log, 'warn');
- var toolbar = tbs.createToolbar('foo'),
- tog = toolbar.addButton('tog0', 'gid');
- expect(tog).not.toBeNull();
- expect(tog.id).toBe('toolbar-foo-tog0');
- expect($log.warn).not.toHaveBeenCalled();
- });
-
- it('should create a radio button set', function () {
- spyOn($log, 'warn');
- var toolbar = tbs.createToolbar('foo'),
- rset = [
- { gid: 'crown', cb: nullFunc, tooltip: 'A Crown' },
- { gid: 'bird', cb: nullFunc, tooltip: 'A Bird' }
- ],
- rad = toolbar.addRadioSet('rad0', rset);
- expect(rad).not.toBeNull();
- expect(rad.selectedIndex()).toBe(0);
- expect($log.warn).not.toHaveBeenCalled();
- });
-
- it('should create a separator div', function () {
- spyOn($log, 'warn');
- var toolbar = tbs.createToolbar('foo'),
- tbar = d3.select('#toolbar-foo');
-
- toolbar.addSeparator();
- expect($log.warn).not.toHaveBeenCalled();
-
- expect(tbar.select('.separator').size()).toBe(1);
- });
-
- it('should add another row of buttons', function () {
- var toolbar = tbs.createToolbar('foo'),
- tbar = d3.select('#toolbar-foo'),
- rows;
- toolbar.addButton('btn0', 'gid');
- toolbar.addRow();
- toolbar.addButton('btn1', 'gid');
-
- rows = tbar.selectAll('.tbar-row');
- expect(rows.size()).toBe(2);
- rows.each(function (d, i) {
- expect(d3.select(this)
- .select('div')
- .attr('id','toolbar-foo-btn' + i)
- .empty())
- .toBe(false);
- });
- });
-
- it('should not add a row if current row is empty', function () {
- var toolbar = tbs.createToolbar('foo');
- expect(toolbar.addRow()).toBeNull();
- toolbar.addButton('btn0', 'gid');
- expect(toolbar.addRow()).not.toBeNull();
- expect(toolbar.addRow()).toBeNull();
- });
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/tooltip-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/tooltip-spec.js
deleted file mode 100644
index 0ae1f65d..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/widget/tooltip-spec.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Widget -- Tooltip Service - Unit Tests
- */
-describe('factory: fw/widget/tooltip.js', function () {
- var $log, fs, tts, d3Elem;
-
- beforeEach(module('onosWidget', 'onosUtil'));
-
- beforeEach(inject(function (_$log_, FnService, TooltipService) {
- $log = _$log_;
- fs = FnService;
- tts = TooltipService;
- }));
-
- beforeEach(function () {
- d3Elem = d3.select('body').append('div').attr('id', 'tooltip');
- });
-
- afterEach(function () {
- d3.select('#tooltip').remove();
- });
-
- it('should define TooltipService', function () {
- expect(tts).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(tts, [
- 'showTooltip', 'cancelTooltip'
- ])).toBeTruthy();
- });
-
- it('should not accept undefined arguments', function () {
- var btn = d3.select('body').append('div');
- expect(tts.showTooltip()).toBeFalsy();
- expect(tts.showTooltip(btn)).toBeFalsy();
-
- expect(tts.cancelTooltip()).toBeFalsy();
- });
-
- // TODO: figure out how to test this
- // testing mouse events is tough
- // showTooltip needs a d3 event, which currently has no test backend
- // .each is a workaround, which provides this, d, and i
- xit('should show a tooltip', function () {
- var btn = d3.select('body').append('div').attr('id', 'foo');
- btn.each(function () {
- tts.showTooltip(this, 'yay a tooltip');
- });
- // tests here
- });
-
- // can't cancel a tooltip until we show one
- // because currElemId isn't set otherwise
- xit('should cancel an existing tooltip', function () {
- var btn = d3.select('body').append('div').attr('id', 'foo');
- btn.each(function () {
- tts.cancelTooltip(this);
- });
- expect(d3Elem.text()).toBe('');
- expect(d3Elem.style('display')).toBe('none');
- });
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/onos-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/onos-spec.js
deleted file mode 100644
index 3bf0ce82..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/onos-spec.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2014,2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Main App Controller - Unit Tests
- */
-describe('Controller: OnosCtrl', function () {
- // instantiate the main module
- beforeEach(module('onosApp'));
-
- var $log, ctrl;
-
- // we need an instance of the controller
- beforeEach(inject(function(_$log_, $controller) {
- $log = _$log_;
- ctrl = $controller('OnosCtrl');
- }));
-
- it('should report version 1.2.0', function () {
- expect(ctrl.version).toEqual('1.2.0');
- });
-}); \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/device/device-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/view/device/device-spec.js
deleted file mode 100644
index c4957843..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/device/device-spec.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Device Controller - Unit Tests
- */
-describe('Controller: OvDeviceCtrl', function () {
- var $log, $scope, $controller, ctrl, $mockHttp;
-
- // instantiate the Device module
- beforeEach(module('ovDevice', 'onosRemote', 'onosLayer', 'onosSvg',
- 'onosNav', 'ngRoute'));
-
- beforeEach(inject(function(_$log_, $rootScope, _$controller_, $httpBackend) {
- $log = _$log_;
- $scope = $rootScope.$new();
- $controller = _$controller_;
- $mockHttp = $httpBackend;
- }));
-
- beforeEach(function() {
- ctrl = $controller('OvDeviceCtrl', { $scope: $scope });
- });
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/device/fakeData.json b/framework/src/onos/web/gui/src/main/webapp/tests/app/view/device/fakeData.json
deleted file mode 100644
index a6bd78f0..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/device/fakeData.json
+++ /dev/null
@@ -1,88 +0,0 @@
-{
- "devices": [
- {
- "id": "of:0000000000000001",
- "available": true,
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000004",
- "available": true,
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000005",
- "available": true,
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000002",
- "available": true,
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000003",
- "available": true,
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000006",
- "available": true,
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- },
- {
- "id": "of:0000000000000007",
- "available": true,
- "role": "MASTER",
- "mfr": "Nicira, Inc.",
- "hw": "Open vSwitch",
- "sw": "2.0.1",
- "serial": "None",
- "annotations": {
- "protocol": "OF_10"
- }
- }
- ]
-} \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoEvent-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoEvent-spec.js
deleted file mode 100644
index ef94711e..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoEvent-spec.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topo View -- Topo Event Service - Unit Tests
- */
-describe('factory: view/topo/topoEvent.js', function() {
- var $log, fs, tes, bns;
-
- beforeEach(module('ovTopo', 'onosNav', 'onosUtil', 'onosLayer', 'ngRoute',
- 'onosWidget'));
-
- beforeEach(inject(function (_$log_, FnService,
- TopoEventService, ButtonService) {
- $log = _$log_;
- fs = FnService;
- tes = TopoEventService;
- bns = ButtonService;
- }));
-
- it('should define TopoEventService', function () {
- expect(tes).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(tes, [
- 'start', 'stop'
- ])).toBeTruthy();
- });
-
- // TODO: more tests...
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoFilter-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoFilter-spec.js
deleted file mode 100644
index eebccfca..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoFilter-spec.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topo View -- Topo Filter Service - Unit Tests
- */
-describe('factory: view/topo/topoFilter.js', function() {
- var $log, fs, fltr, bns, api;
-
- var mockNodes = {
- each: function () {},
- classed: function () {}
- },
- mockLinks = {
- each: function () {},
- classed: function () {}
- };
-
- beforeEach(module('ovTopo', 'onosUtil', 'onosLayer', 'ngRoute', 'onosNav',
- 'onosWidget'));
-
- beforeEach(inject(function (_$log_, FnService,
- TopoFilterService, ButtonService) {
- $log = _$log_;
- fs = FnService;
- fltr = TopoFilterService;
- bns = ButtonService;
-
- api = {
- node: function () { return mockNodes; },
- link: function () { return mockLinks; }
- };
- }));
-
- afterEach(function () {
-
- });
-
- it('should define TopoFilterService', function () {
- expect(fltr).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(fltr, [
- 'initFilter',
- 'clickAction', 'selected', 'inLayer'
- ])).toBeTruthy();
- });
-
- it('should report the selected button', function () {
- fltr.initFilter(api);
- expect(fltr.selected()).toEqual('all');
- });
-
- // TODO: test the on click functions
-
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoForce-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoForce-spec.js
deleted file mode 100644
index edb1cc56..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoForce-spec.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topo View -- Topo Force Service - Unit Tests
- */
-describe('factory: view/topo/topoForce.js', function() {
- var $log, fs, tfs, bns;
-
- beforeEach(module('ovTopo', 'onosUtil', 'onosLayer', 'ngRoute', 'onosNav',
- 'onosWidget'));
-
- beforeEach(inject(function (_$log_, FnService,
- TopoForceService, ButtonService) {
- $log = _$log_;
- fs = FnService;
- tfs = TopoForceService;
- bns = ButtonService;
- }));
-
- it('should define TopoForceService', function () {
- expect(tfs).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(tfs, [
- 'initForce', 'newDim', 'destroyForce',
-
- 'updateDeviceColors', 'toggleHosts',
- 'togglePorts', 'toggleOffline',
- 'cycleDeviceLabels', 'unpin', 'showMastership', 'showBadLinks',
-
- 'addDevice', 'updateDevice', 'removeDevice',
- 'addHost', 'updateHost', 'removeHost',
- 'addLink', 'updateLink', 'removeLink'
- ])).toBeTruthy();
- });
-
- // TODO: more tests...
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoInst-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoInst-spec.js
deleted file mode 100644
index a6a12651..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoInst-spec.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topo View -- Topo Instance Service - Unit Tests
- */
-describe('factory: view/topo/topoInst.js', function() {
- var $log, fs, tis;
-
- beforeEach(module('ovTopo', 'onosUtil', 'onosLayer'));
-
- beforeEach(inject(function (_$log_, FnService, TopoInstService) {
- $log = _$log_;
- fs = FnService;
- tis = TopoInstService;
- }));
-
- it('should define TopoInstService', function () {
- expect(tis).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(tis, [
- 'initInst', 'destroyInst',
- 'addInstance', 'updateInstance', 'removeInstance',
- 'cancelAffinity',
- 'isVisible', 'show', 'hide', 'toggle', 'showMaster'
- ])).toBeTruthy();
- });
-
- // TODO: more tests...
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoModel-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoModel-spec.js
deleted file mode 100644
index 725bd475..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoModel-spec.js
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topo View -- Topo Model Service - Unit Tests
- */
-describe('factory: view/topo/topoModel.js', function() {
- var $log, fs, rnd, tms;
-
- // stop random numbers from being quite so random
- var mockRandom = {
- // mock spread returns s + 1
- spread: function (s) {
- return s + 1;
- },
- // mock random dimension returns d / 2 - 1
- randDim: function (d) {
- return d/2 - 1;
- },
- mock: 'yup'
- };
-
- // to mock out the [lng,lat] <=> [x,y] transformations, we will
- // add/subtract 2000, 3000 respectively:
- // lng:2005 === x:5, lat:3004 === y:4
-
- var mockProjection = function (lnglat) {
- return [lnglat[0] - 2000, lnglat[1] - 3000];
- };
-
- mockProjection.invert = function (xy) {
- return [xy[0] + 2000, xy[1] + 3000];
- };
-
- // our test devices and hosts:
- var dev1 = {
- 'class': 'device',
- id: 'dev1',
- x: 17,
- y: 27,
- online: true
- },
- dev2 = {
- 'class': 'device',
- id: 'dev2',
- x: 18,
- y: 28,
- online: true
- },
- host1 = {
- 'class': 'host',
- id: 'host1',
- x: 23,
- y: 33,
- cp: {
- device: 'dev1',
- port: 7
- },
- ingress: 'dev1/7-host1'
- },
- host2 = {
- 'class': 'host',
- id: 'host2',
- x: 24,
- y: 34,
- cp: {
- device: 'dev0',
- port: 0
- },
- ingress: 'dev0/0-host2'
- };
-
-
- // our test api
- var api = {
- projection: function () { return mockProjection; },
- network: {
- nodes: [dev1, dev2, host1, host2],
- links: [],
- lookup: {dev1: dev1, dev2: dev2, host1: host1, host2: host2},
- revLinkToKey: {}
- },
- restyleLinkElement: function () {},
- removeLinkElement: function () {}
- };
-
- // our test dimensions and well known locations..
- var dim = [20, 40],
- randLoc = [9, 19], // random location using randDim(): d/2-1
- randHostLoc = [40, 50], // host "near" random location
- // given that 'nearDist' = 15
- // and spread(15) = 16
- // 9 + 15 + 16 = 40; 19 + 15 + 16 = 50
- nearDev1 = [48,58], // [17+15+16, 27+15+16]
- dev1Loc = [17,27],
- dev2Loc = [18,28],
- host1Loc = [23,33],
- host2Loc = [24,34];
-
- // implement some custom matchers...
- beforeEach(function () {
- jasmine.addMatchers({
- toBePositionedAt: function () {
- return {
- compare: function (actual, xy) {
- var result = {},
- actCoord = [actual.x, actual.y];
-
- result.pass = (actual.x === xy[0]) && (actual.y === xy[1]);
-
- if (result.pass) {
- // for negation with ".not"
- result.message = 'Expected [' + actCoord +
- '] NOT to be positioned at [' + xy + ']';
- } else {
- result.message = 'Expected [' + actCoord +
- '] to be positioned at [' + xy + ']';
- }
- return result;
- }
- }
- },
- toHaveEndPoints: function () {
- return {
- compare: function (actual, xy1, xy2) {
- var result = {};
-
- result.pass = (actual.source.x === xy1[0]) &&
- (actual.source.y === xy1[1]) &&
- (actual.target.x === xy2[0]) &&
- (actual.target.y === xy2[1]);
-
- if (result.pass) {
- // for negation with ".not"
- result.message = 'Expected ' + actual +
- ' NOT to have endpoints [' + xy1 + ']-[' + xy2 + ']';
- } else {
- result.message = 'Expected ' + actual +
- ' to have endpoints [' + xy1 + ']-[' + xy2 + ']';
- }
- return result;
- }
- }
- },
- toBeFixed: function () {
- return {
- compare: function (actual) {
- var result = {
- pass: actual.fixed
- };
- if (result.pass) {
- result.message = 'Expected ' + actual +
- ' NOT to be fixed!';
- } else {
- result.message = 'Expected ' + actual +
- ' to be fixed!';
- }
- return result;
- }
- }
- }
- });
- });
-
- beforeEach(module('ovTopo', 'onosUtil'));
-
- beforeEach(function () {
- module(function ($provide) {
- $provide.value('RandomService', mockRandom);
- });
- });
-
- beforeEach(inject(function (_$log_, FnService, RandomService, TopoModelService) {
- $log = _$log_;
- fs = FnService;
- rnd = RandomService;
- tms = TopoModelService;
- tms.initModel(api, dim);
- }));
-
-
- it('should install the mock random service', function () {
- expect(rnd.mock).toBe('yup');
- expect(rnd.spread(4)).toBe(5);
- expect(rnd.randDim(8)).toBe(3);
- });
-
- it('should install the mock projection', function () {
- expect(tms.coordFromLngLat({lng: 2005, lat: 3004})).toEqual([5,4]);
- expect(tms.lngLatFromCoord([5,4])).toEqual([2005,3004]);
- });
-
- it('should define TopoModelService', function () {
- expect(tms).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(tms, [
- 'initModel', 'newDim', 'destroyModel',
- 'positionNode', 'createDeviceNode', 'createHostNode',
- 'createHostLink', 'createLink',
- 'coordFromLngLat', 'lngLatFromCoord',
- 'findLink', 'findLinkById', 'findDevices',
- 'findAttachedHosts', 'findAttachedLinks', 'findBadLinks'
- ])).toBeTruthy();
- });
-
- // === unit tests for positionNode()
-
- it('should position a node using meta x/y', function () {
- var node = {
- metaUi: { x:37, y:48 }
- };
- tms.positionNode(node);
- expect(node).toBePositionedAt([37,48]);
- expect(node).toBeFixed();
- });
-
- it('should position a node by translating lng/lat', function () {
- var node = {
- location: {
- type: 'latlng',
- lng: 2008,
- lat: 3009
- }
- };
- tms.positionNode(node);
- expect(node).toBePositionedAt([8,9]);
- expect(node).toBeFixed();
- });
-
- it('should position a device with no location randomly', function () {
- var node = { 'class': 'device' };
- tms.positionNode(node);
- expect(node).toBePositionedAt(randLoc);
- expect(node).not.toBeFixed();
- });
-
- it('should position a device randomly even if x/y set', function () {
- var node = { 'class': 'device', x: 1, y: 2 };
- tms.positionNode(node);
- expect(node).toBePositionedAt(randLoc);
- expect(node).not.toBeFixed();
- });
-
- it('should NOT reposition a device randomly on update', function () {
- var node = { 'class': 'device', x: 1, y: 2 };
- tms.positionNode(node, true);
- expect(node).toBePositionedAt([1,2]);
- expect(node).not.toBeFixed();
- });
-
- it('should position a host close to its device', function () {
- var node = { 'class': 'host', cp: { device: 'dev1' } };
- tms.positionNode(node);
-
- // note: nearDist is 15; spread(15) adds 16; dev1 at [17,27]
-
- expect(node).toBePositionedAt(nearDev1);
- expect(node).not.toBeFixed();
- });
-
- it('should randomize host with no assoc device', function () {
- var node = { 'class': 'host', cp: { device: 'dev0' } };
- tms.positionNode(node);
-
- // note: no device gives 'rand loc' [9,19]
- // nearDist is 15; spread(15) adds 16
-
- expect(node).toBePositionedAt(randHostLoc);
- expect(node).not.toBeFixed();
- });
-
- // === unit tests for createDeviceNode()
-
- it('should create a basic device node', function () {
- var node = tms.createDeviceNode({ id: 'foo' });
- expect(node).toBePositionedAt(randLoc);
- expect(node).not.toBeFixed();
- expect(node.class).toEqual('device');
- expect(node.svgClass).toEqual('node device');
- expect(node.id).toEqual('foo');
- });
-
- it('should create device node with type', function () {
- var node = tms.createDeviceNode({ id: 'foo', type: 'cool' });
- expect(node).toBePositionedAt(randLoc);
- expect(node).not.toBeFixed();
- expect(node.class).toEqual('device');
- expect(node.svgClass).toEqual('node device cool');
- expect(node.id).toEqual('foo');
- });
-
- it('should create online device node with type', function () {
- var node = tms.createDeviceNode({ id: 'foo', type: 'cool', online: true });
- expect(node).toBePositionedAt(randLoc);
- expect(node).not.toBeFixed();
- expect(node.class).toEqual('device');
- expect(node.svgClass).toEqual('node device cool online');
- expect(node.id).toEqual('foo');
- });
-
- it('should create online device node with type and lng/lat', function () {
- var node = tms.createDeviceNode({
- id: 'foo',
- type: 'yowser',
- online: true,
- location: {
- type: 'latlng',
- lng: 2048,
- lat: 3096
- }
- });
- expect(node).toBePositionedAt([48,96]);
- expect(node).toBeFixed();
- expect(node.class).toEqual('device');
- expect(node.svgClass).toEqual('node device yowser online');
- expect(node.id).toEqual('foo');
- });
-
- // === unit tests for createHostNode()
-
- it('should create a basic host node', function () {
- var node = tms.createHostNode({ id: 'bar', cp: { device: 'dev0' } });
- expect(node).toBePositionedAt(randHostLoc);
- expect(node).not.toBeFixed();
- expect(node.class).toEqual('host');
- expect(node.svgClass).toEqual('node host endstation');
- expect(node.id).toEqual('bar');
- });
-
- it('should create a host with type', function () {
- var node = tms.createHostNode({
- id: 'bar',
- type: 'classic',
- cp: { device: 'dev1' }
- });
- expect(node).toBePositionedAt(nearDev1);
- expect(node).not.toBeFixed();
- expect(node.class).toEqual('host');
- expect(node.svgClass).toEqual('node host classic');
- expect(node.id).toEqual('bar');
- });
-
- // === unit tests for createHostLink()
-
- it('should create a basic host link', function () {
- var link = tms.createHostLink(host1);
- expect(link.source).toEqual(host1);
- expect(link.target).toEqual(dev1);
- expect(link).toHaveEndPoints(host1Loc, dev1Loc);
- expect(link.key).toEqual('dev1/7-host1');
- expect(link.class).toEqual('link');
- expect(link.type()).toEqual('hostLink');
- expect(link.linkWidth()).toEqual(1);
- expect(link.online()).toEqual(true);
- });
-
- it('should return null for failed endpoint lookup', function () {
- spyOn($log, 'error');
- var link = tms.createHostLink(host2);
- expect(link).toBeNull();
- expect($log.error).toHaveBeenCalledWith(
- 'Node(s) not on map for link:\n[dst] "dev0" missing'
- );
- });
-
- // === unit tests for createLink()
-
- it('should return null for missing endpoints', function () {
- spyOn($log, 'error');
- var link = tms.createLink({src: 'dev0', dst: 'dev00'});
- expect(link).toBeNull();
- expect($log.error).toHaveBeenCalledWith(
- 'Node(s) not on map for link:\n[src] "dev0" missing\n[dst] "dev00" missing'
- );
- });
-
- it('should create a basic link', function () {
- var linkData = {
- src: 'dev1',
- dst: 'dev2',
- id: 'baz',
- type: 'zoo',
- online: true,
- linkWidth: 1.5
- },
- link = tms.createLink(linkData);
- expect(link.source).toEqual(dev1);
- expect(link.target).toEqual(dev2);
- expect(link).toHaveEndPoints(dev1Loc, dev2Loc);
- expect(link.key).toEqual('baz');
- expect(link.class).toEqual('link');
- expect(link.fromSource).toBe(linkData);
- expect(link.type()).toEqual('zoo');
- expect(link.online()).toEqual(true);
- expect(link.linkWidth()).toEqual(1.5);
- });
-
- // TODO: more unit tests for additional functions....
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoOblique-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoOblique-spec.js
deleted file mode 100644
index 2b563295..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoOblique-spec.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topo View -- Topo Oblique View Service - Unit Tests
- */
-describe('factory: view/topo/topoOblique.js', function() {
- var $log, fs, tos, flash;
-
- beforeEach(module('ovTopo', 'onosUtil', 'onosLayer'));
-
- beforeEach(inject(function (_$log_, FnService,
- TopoObliqueService, FlashService) {
- $log = _$log_;
- fs = FnService;
- tos = TopoObliqueService;
- flash = FlashService;
- }));
-
- it('should define TopoTrafficService', function () {
- expect(tos).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(tos, [
- 'initOblique', 'destroyOblique', 'isOblique', 'toggleOblique'
- ])).toBeTruthy();
- });
-
- // TODO: more tests...
-});
-
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoPanel-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoPanel-spec.js
deleted file mode 100644
index 21513d1b..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoPanel-spec.js
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topo View -- Topo Panel Service - Unit Tests
- */
-describe('factory: view/topo/topoPanel.js', function() {
- var $log, fs, tps, bns, ps, panelLayer;
-
- var mockWindow = {
- innerWidth: 300,
- innerHeight: 100,
- navigator: {
- userAgent: 'defaultUA'
- },
- on: function () {},
- addEventListener: function () {}
- };
-
- beforeEach(module('ovTopo', 'onosUtil', 'onosLayer', 'ngRoute', 'onosNav',
- 'onosWidget'));
-
- beforeEach(function () {
- module(function ($provide) {
- $provide.value('$window', mockWindow);
- });
- });
-
- beforeEach(inject(function (_$log_, FnService,
- TopoPanelService, ButtonService, PanelService) {
- $log = _$log_;
- fs = FnService;
- tps = TopoPanelService;
- bns = ButtonService;
- ps = PanelService;
- panelLayer = d3.select('body').append('div').attr('id', 'floatpanels');
- }));
-
- afterEach(function () {
- panelLayer.remove();
- });
-
- it('should define TopoPanelService', function () {
- expect(tps).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(tps, [
- 'initPanels',
- 'destroyPanels',
- 'createTopoPanel',
-
- 'showSummary',
- 'toggleSummary',
-
- 'toggleUseDetailsFlag',
- 'displaySingle',
- 'displayMulti',
- 'displayLink',
- 'displayNothing',
- 'displaySomething',
- 'addAction',
-
- 'hideSummaryPanel',
-
- 'detailVisible',
- 'summaryVisible'
- ])).toBeTruthy();
- });
-
- // === topoPanel api ------------------
-
- it('should define topoPanel api functions', function () {
- var panel = tps.createTopoPanel('foo');
- expect(fs.areFunctions(panel, [
- 'panel', 'setup', 'destroy',
- 'appendHeader', 'appendBody', 'appendFooter',
- 'adjustHeight'
- ])).toBeTruthy();
- panel.destroy();
- });
-
- it('should allow you to get panel', function () {
- var panel = tps.createTopoPanel('foo');
- expect(panel.panel()).toBeTruthy();
- panel.destroy();
- });
-
- it('should set up panel', function () {
- var p = tps.createTopoPanel('foo'),
- h, b, f;
- p.setup();
- expect(p.panel().el().selectAll('div').size()).toBe(3);
-
- h = p.panel().el().select('.header');
- expect(h.empty()).toBe(false);
- b = p.panel().el().select('.body');
- expect(b.empty()).toBe(false);
- f = p.panel().el().select('.footer');
- expect(f.empty()).toBe(false);
- p.destroy();
- });
-
- it('should destroy panel', function () {
- spyOn(ps, 'destroyPanel').and.callThrough();
- var p = tps.createTopoPanel('foo');
- p.destroy();
- expect(ps.destroyPanel).toHaveBeenCalledWith('foo');
- });
-
- it('should append to panel', function () {
- var p = tps.createTopoPanel('foo');
- p.setup();
- p.appendHeader('div').attr('id', 'header-div');
- expect(p.panel().el().select('#header-div').empty()).toBe(false);
- p.appendBody('p').attr('id', 'body-paragraph');
- expect(p.panel().el().select('#body-paragraph').empty()).toBe(false);
- p.appendFooter('svg').attr('id', 'footer-svg');
- expect(p.panel().el().select('#footer-svg').empty()).toBe(false);
- p.destroy();
- });
-
- it('should warn if fromTop not given, adjustHeight', function () {
- spyOn($log, 'warn');
- var p = tps.createTopoPanel('foo');
- p.adjustHeight();
- expect($log.warn).toHaveBeenCalledWith(
- 'adjustHeight: height from top of page not given'
- );
- p.destroy();
- });
-
- it('should warn if panel is not setup/defined, adjustHeight', function () {
- spyOn($log, 'warn');
- var p = tps.createTopoPanel('foo');
- p.adjustHeight(50);
- expect($log.warn).toHaveBeenCalledWith(
- 'adjustHeight: panel contents are not defined'
- );
- p.destroy();
- });
-
- // TODO: test adjustHeight height adjustment
-
- // TODO: more tests...
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoSelect-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoSelect-spec.js
deleted file mode 100644
index c8c051c9..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoSelect-spec.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topo View -- Topo Selection Service - Unit Tests
- */
-describe('factory: view/topo/topoSelect.js', function() {
- var $log, fs, tss, bns;
-
- beforeEach(module('ovTopo', 'onosUtil', 'onosLayer', 'ngRoute', 'onosNav',
- 'onosWidget'));
-
- beforeEach(inject(function (_$log_, FnService,
- TopoSelectService, ButtonService) {
- $log = _$log_;
- fs = FnService;
- tss = TopoSelectService;
- bns = ButtonService;
- }));
-
- it('should define TopoSelectService', function () {
- expect(tss).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(tss, [
- 'initSelect', 'destroySelect',
- 'showDetails',
- 'nodeMouseOver', 'nodeMouseOut', 'selectObject', 'deselectObject',
- 'deselectAll',
- 'hovered', 'selectOrder',
- 'validateSelectionContext',
- 'clickConsumed'
- ])).toBeTruthy();
- });
-
- // TODO: more tests...
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoToolbar-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoToolbar-spec.js
deleted file mode 100644
index eedc476f..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoToolbar-spec.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topo View -- Topo Toolbar Service - Unit Tests
- */
-describe('factory: view/topo/topoToolbar.js', function() {
- var $log, fs, ttbs, prefs, ps,
- d3Elem;
-
- beforeEach(module('ovTopo', 'onosUtil', 'onosLayer', 'ngRoute', 'onosNav',
- 'onosWidget'));
-
- beforeEach(inject(function (_$log_, FnService,
- TopoToolbarService, PanelService, PrefsService) {
- $log = _$log_;
- fs = FnService;
- ttbs = TopoToolbarService;
- prefs = PrefsService;
- ps = PanelService;
- d3Elem = d3.select('body').append('div').attr('id', 'floatpanels');
- ps.init();
- }));
-
- it('should define TopoToolbarService', function () {
- expect(ttbs).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(ttbs, [
- 'init', 'createToolbar', 'destroyToolbar',
- 'keyListener', 'toggleToolbar'
- ])).toBeTruthy();
- });
-
- // NOTE: topoToolbar relies too much on topo's closure variables
- // to adequately test it
-
-}); \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoTraffic-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoTraffic-spec.js
deleted file mode 100644
index a04c2021..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/app/view/topo/topoTraffic-spec.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- Topo View -- Topo Traffic Service - Unit Tests
- */
-describe('factory: view/topo/topoTraffic.js', function() {
- var $log, fs, tts;
-
- beforeEach(module('ovTopo', 'onosUtil', 'onosLayer', 'onosNav', 'ngRoute'));
-
- beforeEach(inject(function (_$log_, FnService, TopoTrafficService) {
- $log = _$log_;
- fs = FnService;
- tts = TopoTrafficService;
- }));
-
- it('should define TopoTrafficService', function () {
- expect(tts).toBeDefined();
- });
-
- it('should define api functions', function () {
- expect(fs.areFunctions(tts, [
- 'initTraffic', 'destroyTraffic', 'showTraffic',
- 'cancelTraffic', 'requestTrafficForMode',
- 'showRelatedIntentsAction', 'addHostIntentAction',
- 'addMultiSourceIntentAction', 'showDeviceLinkFlowsAction',
- 'showNextIntentAction', 'showPrevIntentAction',
- 'showSelectedIntentTrafficAction', 'showAllTrafficAction'
- ])).toBeTruthy();
- });
-
- // TODO: more tests...
-});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/e2e/README.txt b/framework/src/onos/web/gui/src/main/webapp/tests/e2e/README.txt
deleted file mode 100644
index 4a23fa14..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/e2e/README.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# End-to-End Tests (i.e. Scenario Tests)
-
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/karma.conf.js b/framework/src/onos/web/gui/src/main/webapp/tests/karma.conf.js
deleted file mode 100644
index bd572c1b..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tests/karma.conf.js
+++ /dev/null
@@ -1,90 +0,0 @@
-// Karma configuration
-
-module.exports = function(config) {
- config.set({
-
- // base path that will be used to resolve all patterns (eg. files, exclude)
- // the path is relative to this (karma.conf.js) file
- basePath: '',
-
-
- // frameworks to use
- // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
- frameworks: ['jasmine'],
-
-
- // list of files / patterns to load in the browser
- files: [
- // library code...
- '../tp/angular.js',
- '../tp/angular-mocks.js',
- '../tp/angular-route.js',
- '../tp/angular-cookies.js',
- '../tp/d3.js',
- '../tp/topojson.v1.min.js',
-
- // production code...
- // make sure modules are defined first...
- '../onos.js',
-
- '../app/fw/util/util.js',
- '../app/fw/svg/svg.js',
- '../app/fw/remote/remote.js',
- '../app/fw/widget/widget.js',
- '../app/fw/layer/layer.js',
-
- '../app/view/topo/topo.js',
-
- // now load services etc. that augment the modules
- '../app/**/*.js',
-
- // unit test code...
- 'app/*-spec.js',
- 'app/**/*-spec.js'
- ],
-
-
- // list of files to exclude
- exclude: [
- ],
-
-
- // preprocess matching files before serving them to the browser
- // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
- preprocessors: {
- },
-
-
- // test results reporter to use
- // possible values: 'dots', 'progress'
- // available reporters: https://npmjs.org/browse/keyword/karma-reporter
- reporters: ['progress'],
-
-
- // web server port
- port: 9876,
-
-
- // enable / disable colors in the output (reporters and logs)
- colors: true,
-
-
- // level of logging
- // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
- logLevel: config.LOG_INFO,
-
-
- // enable / disable watching file and executing tests whenever any file changes
- autoWatch: true,
-
-
- // start these browsers
- // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
- browsers: ['Chrome'],
-
-
- // Continuous Integration mode
- // if true, Karma captures browsers, runs the tests and exits
- singleRun: false
- });
-};
diff --git a/framework/src/onos/web/gui/src/main/webapp/tp/AngularJS.LICENSE b/framework/src/onos/web/gui/src/main/webapp/tp/AngularJS.LICENSE
deleted file mode 100644
index 8d062757..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tp/AngularJS.LICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-AngularJS uses the MIT License, as follows...
------------------------------------------------------------------------------
-
-The MIT License
-
-Copyright (c) 2010-2014 Google, Inc. http://angularjs.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/framework/src/onos/web/gui/src/main/webapp/tp/D3.LICENSE b/framework/src/onos/web/gui/src/main/webapp/tp/D3.LICENSE
deleted file mode 100644
index 83013469..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tp/D3.LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright (c) 2010-2014, Michael Bostock
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-* The name Michael Bostock may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/framework/src/onos/web/gui/src/main/webapp/tp/README.txt b/framework/src/onos/web/gui/src/main/webapp/tp/README.txt
deleted file mode 100644
index c4e0e80f..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tp/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-# Third Party libraries
diff --git a/framework/src/onos/web/gui/src/main/webapp/tp/angular-cookies.js b/framework/src/onos/web/gui/src/main/webapp/tp/angular-cookies.js
deleted file mode 100644
index f400db28..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tp/angular-cookies.js
+++ /dev/null
@@ -1,206 +0,0 @@
-/**
- * @license AngularJS v1.3.5
- * (c) 2010-2014 Google, Inc. http://angularjs.org
- * License: MIT
- */
-(function(window, angular, undefined) {'use strict';
-
-/**
- * @ngdoc module
- * @name ngCookies
- * @description
- *
- * # ngCookies
- *
- * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.
- *
- *
- * <div doc-module-components="ngCookies"></div>
- *
- * See {@link ngCookies.$cookies `$cookies`} and
- * {@link ngCookies.$cookieStore `$cookieStore`} for usage.
- */
-
-
-angular.module('ngCookies', ['ng']).
- /**
- * @ngdoc service
- * @name $cookies
- *
- * @description
- * Provides read/write access to browser's cookies.
- *
- * Only a simple Object is exposed and by adding or removing properties to/from this object, new
- * cookies are created/deleted at the end of current $eval.
- * The object's properties can only be strings.
- *
- * Requires the {@link ngCookies `ngCookies`} module to be installed.
- *
- * @example
- *
- * ```js
- * angular.module('cookiesExample', ['ngCookies'])
- * .controller('ExampleController', ['$cookies', function($cookies) {
- * // Retrieving a cookie
- * var favoriteCookie = $cookies.myFavorite;
- * // Setting a cookie
- * $cookies.myFavorite = 'oatmeal';
- * }]);
- * ```
- */
- factory('$cookies', ['$rootScope', '$browser', function($rootScope, $browser) {
- var cookies = {},
- lastCookies = {},
- lastBrowserCookies,
- runEval = false,
- copy = angular.copy,
- isUndefined = angular.isUndefined;
-
- //creates a poller fn that copies all cookies from the $browser to service & inits the service
- $browser.addPollFn(function() {
- var currentCookies = $browser.cookies();
- if (lastBrowserCookies != currentCookies) { //relies on browser.cookies() impl
- lastBrowserCookies = currentCookies;
- copy(currentCookies, lastCookies);
- copy(currentCookies, cookies);
- if (runEval) $rootScope.$apply();
- }
- })();
-
- runEval = true;
-
- //at the end of each eval, push cookies
- //TODO: this should happen before the "delayed" watches fire, because if some cookies are not
- // strings or browser refuses to store some cookies, we update the model in the push fn.
- $rootScope.$watch(push);
-
- return cookies;
-
-
- /**
- * Pushes all the cookies from the service to the browser and verifies if all cookies were
- * stored.
- */
- function push() {
- var name,
- value,
- browserCookies,
- updated;
-
- //delete any cookies deleted in $cookies
- for (name in lastCookies) {
- if (isUndefined(cookies[name])) {
- $browser.cookies(name, undefined);
- }
- }
-
- //update all cookies updated in $cookies
- for (name in cookies) {
- value = cookies[name];
- if (!angular.isString(value)) {
- value = '' + value;
- cookies[name] = value;
- }
- if (value !== lastCookies[name]) {
- $browser.cookies(name, value);
- updated = true;
- }
- }
-
- //verify what was actually stored
- if (updated) {
- updated = false;
- browserCookies = $browser.cookies();
-
- for (name in cookies) {
- if (cookies[name] !== browserCookies[name]) {
- //delete or reset all cookies that the browser dropped from $cookies
- if (isUndefined(browserCookies[name])) {
- delete cookies[name];
- } else {
- cookies[name] = browserCookies[name];
- }
- updated = true;
- }
- }
- }
- }
- }]).
-
-
- /**
- * @ngdoc service
- * @name $cookieStore
- * @requires $cookies
- *
- * @description
- * Provides a key-value (string-object) storage, that is backed by session cookies.
- * Objects put or retrieved from this storage are automatically serialized or
- * deserialized by angular's toJson/fromJson.
- *
- * Requires the {@link ngCookies `ngCookies`} module to be installed.
- *
- * @example
- *
- * ```js
- * angular.module('cookieStoreExample', ['ngCookies'])
- * .controller('ExampleController', ['$cookieStore', function($cookieStore) {
- * // Put cookie
- * $cookieStore.put('myFavorite','oatmeal');
- * // Get cookie
- * var favoriteCookie = $cookieStore.get('myFavorite');
- * // Removing a cookie
- * $cookieStore.remove('myFavorite');
- * }]);
- * ```
- */
- factory('$cookieStore', ['$cookies', function($cookies) {
-
- return {
- /**
- * @ngdoc method
- * @name $cookieStore#get
- *
- * @description
- * Returns the value of given cookie key
- *
- * @param {string} key Id to use for lookup.
- * @returns {Object} Deserialized cookie value.
- */
- get: function(key) {
- var value = $cookies[key];
- return value ? angular.fromJson(value) : value;
- },
-
- /**
- * @ngdoc method
- * @name $cookieStore#put
- *
- * @description
- * Sets a value for given cookie key
- *
- * @param {string} key Id for the `value`.
- * @param {Object} value Value to be stored.
- */
- put: function(key, value) {
- $cookies[key] = angular.toJson(value);
- },
-
- /**
- * @ngdoc method
- * @name $cookieStore#remove
- *
- * @description
- * Remove given cookie
- *
- * @param {string} key Id of the key-value pair to delete.
- */
- remove: function(key) {
- delete $cookies[key];
- }
- };
-
- }]);
-
-
-})(window, window.angular);
diff --git a/framework/src/onos/web/gui/src/main/webapp/tp/angular-cookies.min.js b/framework/src/onos/web/gui/src/main/webapp/tp/angular-cookies.min.js
deleted file mode 100644
index 20333da3..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tp/angular-cookies.min.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- AngularJS v1.3.5
- (c) 2010-2014 Google, Inc. http://angularjs.org
- License: MIT
-*/
-(function(p,f,n){'use strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(e,b){var c={},g={},h,k=!1,l=f.copy,m=f.isUndefined;b.addPollFn(function(){var a=b.cookies();h!=a&&(h=a,l(a,g),l(a,c),k&&e.$apply())})();k=!0;e.$watch(function(){var a,d,e;for(a in g)m(c[a])&&b.cookies(a,n);for(a in c)d=c[a],f.isString(d)||(d=""+d,c[a]=d),d!==g[a]&&(b.cookies(a,d),e=!0);if(e)for(a in d=b.cookies(),c)c[a]!==d[a]&&(m(d[a])?delete c[a]:c[a]=d[a])});return c}]).factory("$cookieStore",
-["$cookies",function(e){return{get:function(b){return(b=e[b])?f.fromJson(b):b},put:function(b,c){e[b]=f.toJson(c)},remove:function(b){delete e[b]}}}])})(window,window.angular);
-//# sourceMappingURL=angular-cookies.min.js.map
diff --git a/framework/src/onos/web/gui/src/main/webapp/tp/angular-mocks.js b/framework/src/onos/web/gui/src/main/webapp/tp/angular-mocks.js
deleted file mode 100644
index 3d33b223..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tp/angular-mocks.js
+++ /dev/null
@@ -1,2380 +0,0 @@
-/**
- * @license AngularJS v1.3.5
- * (c) 2010-2014 Google, Inc. http://angularjs.org
- * License: MIT
- */
-(function(window, angular, undefined) {
-
-'use strict';
-
-/**
- * @ngdoc object
- * @name angular.mock
- * @description
- *
- * Namespace from 'angular-mocks.js' which contains testing related code.
- */
-angular.mock = {};
-
-/**
- * ! This is a private undocumented service !
- *
- * @name $browser
- *
- * @description
- * This service is a mock implementation of {@link ng.$browser}. It provides fake
- * implementation for commonly used browser apis that are hard to test, e.g. setTimeout, xhr,
- * cookies, etc...
- *
- * The api of this service is the same as that of the real {@link ng.$browser $browser}, except
- * that there are several helper methods available which can be used in tests.
- */
-angular.mock.$BrowserProvider = function() {
- this.$get = function() {
- return new angular.mock.$Browser();
- };
-};
-
-angular.mock.$Browser = function() {
- var self = this;
-
- this.isMock = true;
- self.$$url = "http://server/";
- self.$$lastUrl = self.$$url; // used by url polling fn
- self.pollFns = [];
-
- // TODO(vojta): remove this temporary api
- self.$$completeOutstandingRequest = angular.noop;
- self.$$incOutstandingRequestCount = angular.noop;
-
-
- // register url polling fn
-
- self.onUrlChange = function(listener) {
- self.pollFns.push(
- function() {
- if (self.$$lastUrl !== self.$$url || self.$$state !== self.$$lastState) {
- self.$$lastUrl = self.$$url;
- self.$$lastState = self.$$state;
- listener(self.$$url, self.$$state);
- }
- }
- );
-
- return listener;
- };
-
- self.$$checkUrlChange = angular.noop;
-
- self.cookieHash = {};
- self.lastCookieHash = {};
- self.deferredFns = [];
- self.deferredNextId = 0;
-
- self.defer = function(fn, delay) {
- delay = delay || 0;
- self.deferredFns.push({time:(self.defer.now + delay), fn:fn, id: self.deferredNextId});
- self.deferredFns.sort(function(a, b) { return a.time - b.time;});
- return self.deferredNextId++;
- };
-
-
- /**
- * @name $browser#defer.now
- *
- * @description
- * Current milliseconds mock time.
- */
- self.defer.now = 0;
-
-
- self.defer.cancel = function(deferId) {
- var fnIndex;
-
- angular.forEach(self.deferredFns, function(fn, index) {
- if (fn.id === deferId) fnIndex = index;
- });
-
- if (fnIndex !== undefined) {
- self.deferredFns.splice(fnIndex, 1);
- return true;
- }
-
- return false;
- };
-
-
- /**
- * @name $browser#defer.flush
- *
- * @description
- * Flushes all pending requests and executes the defer callbacks.
- *
- * @param {number=} number of milliseconds to flush. See {@link #defer.now}
- */
- self.defer.flush = function(delay) {
- if (angular.isDefined(delay)) {
- self.defer.now += delay;
- } else {
- if (self.deferredFns.length) {
- self.defer.now = self.deferredFns[self.deferredFns.length - 1].time;
- } else {
- throw new Error('No deferred tasks to be flushed');
- }
- }
-
- while (self.deferredFns.length && self.deferredFns[0].time <= self.defer.now) {
- self.deferredFns.shift().fn();
- }
- };
-
- self.$$baseHref = '/';
- self.baseHref = function() {
- return this.$$baseHref;
- };
-};
-angular.mock.$Browser.prototype = {
-
-/**
- * @name $browser#poll
- *
- * @description
- * run all fns in pollFns
- */
- poll: function poll() {
- angular.forEach(this.pollFns, function(pollFn) {
- pollFn();
- });
- },
-
- addPollFn: function(pollFn) {
- this.pollFns.push(pollFn);
- return pollFn;
- },
-
- url: function(url, replace, state) {
- if (angular.isUndefined(state)) {
- state = null;
- }
- if (url) {
- this.$$url = url;
- // Native pushState serializes & copies the object; simulate it.
- this.$$state = angular.copy(state);
- return this;
- }
-
- return this.$$url;
- },
-
- state: function() {
- return this.$$state;
- },
-
- cookies: function(name, value) {
- if (name) {
- if (angular.isUndefined(value)) {
- delete this.cookieHash[name];
- } else {
- if (angular.isString(value) && //strings only
- value.length <= 4096) { //strict cookie storage limits
- this.cookieHash[name] = value;
- }
- }
- } else {
- if (!angular.equals(this.cookieHash, this.lastCookieHash)) {
- this.lastCookieHash = angular.copy(this.cookieHash);
- this.cookieHash = angular.copy(this.cookieHash);
- }
- return this.cookieHash;
- }
- },
-
- notifyWhenNoOutstandingRequests: function(fn) {
- fn();
- }
-};
-
-
-/**
- * @ngdoc provider
- * @name $exceptionHandlerProvider
- *
- * @description
- * Configures the mock implementation of {@link ng.$exceptionHandler} to rethrow or to log errors
- * passed to the `$exceptionHandler`.
- */
-
-/**
- * @ngdoc service
- * @name $exceptionHandler
- *
- * @description
- * Mock implementation of {@link ng.$exceptionHandler} that rethrows or logs errors passed
- * to it. See {@link ngMock.$exceptionHandlerProvider $exceptionHandlerProvider} for configuration
- * information.
- *
- *
- * ```js
- * describe('$exceptionHandlerProvider', function() {
- *
- * it('should capture log messages and exceptions', function() {
- *
- * module(function($exceptionHandlerProvider) {
- * $exceptionHandlerProvider.mode('log');
- * });
- *
- * inject(function($log, $exceptionHandler, $timeout) {
- * $timeout(function() { $log.log(1); });
- * $timeout(function() { $log.log(2); throw 'banana peel'; });
- * $timeout(function() { $log.log(3); });
- * expect($exceptionHandler.errors).toEqual([]);
- * expect($log.assertEmpty());
- * $timeout.flush();
- * expect($exceptionHandler.errors).toEqual(['banana peel']);
- * expect($log.log.logs).toEqual([[1], [2], [3]]);
- * });
- * });
- * });
- * ```
- */
-
-angular.mock.$ExceptionHandlerProvider = function() {
- var handler;
-
- /**
- * @ngdoc method
- * @name $exceptionHandlerProvider#mode
- *
- * @description
- * Sets the logging mode.
- *
- * @param {string} mode Mode of operation, defaults to `rethrow`.
- *
- * - `rethrow`: If any errors are passed to the handler in tests, it typically means that there
- * is a bug in the application or test, so this mock will make these tests fail.
- * - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log`
- * mode stores an array of errors in `$exceptionHandler.errors`, to allow later
- * assertion of them. See {@link ngMock.$log#assertEmpty assertEmpty()} and
- * {@link ngMock.$log#reset reset()}
- */
- this.mode = function(mode) {
- switch (mode) {
- case 'rethrow':
- handler = function(e) {
- throw e;
- };
- break;
- case 'log':
- var errors = [];
-
- handler = function(e) {
- if (arguments.length == 1) {
- errors.push(e);
- } else {
- errors.push([].slice.call(arguments, 0));
- }
- };
-
- handler.errors = errors;
- break;
- default:
- throw new Error("Unknown mode '" + mode + "', only 'log'/'rethrow' modes are allowed!");
- }
- };
-
- this.$get = function() {
- return handler;
- };
-
- this.mode('rethrow');
-};
-
-
-/**
- * @ngdoc service
- * @name $log
- *
- * @description
- * Mock implementation of {@link ng.$log} that gathers all logged messages in arrays
- * (one array per logging level). These arrays are exposed as `logs` property of each of the
- * level-specific log function, e.g. for level `error` the array is exposed as `$log.error.logs`.
- *
- */
-angular.mock.$LogProvider = function() {
- var debug = true;
-
- function concat(array1, array2, index) {
- return array1.concat(Array.prototype.slice.call(array2, index));
- }
-
- this.debugEnabled = function(flag) {
- if (angular.isDefined(flag)) {
- debug = flag;
- return this;
- } else {
- return debug;
- }
- };
-
- this.$get = function() {
- var $log = {
- log: function() { $log.log.logs.push(concat([], arguments, 0)); },
- warn: function() { $log.warn.logs.push(concat([], arguments, 0)); },
- info: function() { $log.info.logs.push(concat([], arguments, 0)); },
- error: function() { $log.error.logs.push(concat([], arguments, 0)); },
- debug: function() {
- if (debug) {
- $log.debug.logs.push(concat([], arguments, 0));
- }
- }
- };
-
- /**
- * @ngdoc method
- * @name $log#reset
- *
- * @description
- * Reset all of the logging arrays to empty.
- */
- $log.reset = function() {
- /**
- * @ngdoc property
- * @name $log#log.logs
- *
- * @description
- * Array of messages logged using {@link ng.$log#log `log()`}.
- *
- * @example
- * ```js
- * $log.log('Some Log');
- * var first = $log.log.logs.unshift();
- * ```
- */
- $log.log.logs = [];
- /**
- * @ngdoc property
- * @name $log#info.logs
- *
- * @description
- * Array of messages logged using {@link ng.$log#info `info()`}.
- *
- * @example
- * ```js
- * $log.info('Some Info');
- * var first = $log.info.logs.unshift();
- * ```
- */
- $log.info.logs = [];
- /**
- * @ngdoc property
- * @name $log#warn.logs
- *
- * @description
- * Array of messages logged using {@link ng.$log#warn `warn()`}.
- *
- * @example
- * ```js
- * $log.warn('Some Warning');
- * var first = $log.warn.logs.unshift();
- * ```
- */
- $log.warn.logs = [];
- /**
- * @ngdoc property
- * @name $log#error.logs
- *
- * @description
- * Array of messages logged using {@link ng.$log#error `error()`}.
- *
- * @example
- * ```js
- * $log.error('Some Error');
- * var first = $log.error.logs.unshift();
- * ```
- */
- $log.error.logs = [];
- /**
- * @ngdoc property
- * @name $log#debug.logs
- *
- * @description
- * Array of messages logged using {@link ng.$log#debug `debug()`}.
- *
- * @example
- * ```js
- * $log.debug('Some Error');
- * var first = $log.debug.logs.unshift();
- * ```
- */
- $log.debug.logs = [];
- };
-
- /**
- * @ngdoc method
- * @name $log#assertEmpty
- *
- * @description
- * Assert that all of the logging methods have no logged messages. If any messages are present,
- * an exception is thrown.
- */
- $log.assertEmpty = function() {
- var errors = [];
- angular.forEach(['error', 'warn', 'info', 'log', 'debug'], function(logLevel) {
- angular.forEach($log[logLevel].logs, function(log) {
- angular.forEach(log, function(logItem) {
- errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\n' +
- (logItem.stack || ''));
- });
- });
- });
- if (errors.length) {
- errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or " +
- "an expected log message was not checked and removed:");
- errors.push('');
- throw new Error(errors.join('\n---------\n'));
- }
- };
-
- $log.reset();
- return $log;
- };
-};
-
-
-/**
- * @ngdoc service
- * @name $interval
- *
- * @description
- * Mock implementation of the $interval service.
- *
- * Use {@link ngMock.$interval#flush `$interval.flush(millis)`} to
- * move forward by `millis` milliseconds and trigger any functions scheduled to run in that
- * time.
- *
- * @param {function()} fn A function that should be called repeatedly.
- * @param {number} delay Number of milliseconds between each function call.
- * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat
- * indefinitely.
- * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
- * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
- * @returns {promise} A promise which will be notified on each iteration.
- */
-angular.mock.$IntervalProvider = function() {
- this.$get = ['$browser', '$rootScope', '$q', '$$q',
- function($browser, $rootScope, $q, $$q) {
- var repeatFns = [],
- nextRepeatId = 0,
- now = 0;
-
- var $interval = function(fn, delay, count, invokeApply) {
- var iteration = 0,
- skipApply = (angular.isDefined(invokeApply) && !invokeApply),
- deferred = (skipApply ? $$q : $q).defer(),
- promise = deferred.promise;
-
- count = (angular.isDefined(count)) ? count : 0;
- promise.then(null, null, fn);
-
- promise.$$intervalId = nextRepeatId;
-
- function tick() {
- deferred.notify(iteration++);
-
- if (count > 0 && iteration >= count) {
- var fnIndex;
- deferred.resolve(iteration);
-
- angular.forEach(repeatFns, function(fn, index) {
- if (fn.id === promise.$$intervalId) fnIndex = index;
- });
-
- if (fnIndex !== undefined) {
- repeatFns.splice(fnIndex, 1);
- }
- }
-
- if (skipApply) {
- $browser.defer.flush();
- } else {
- $rootScope.$apply();
- }
- }
-
- repeatFns.push({
- nextTime:(now + delay),
- delay: delay,
- fn: tick,
- id: nextRepeatId,
- deferred: deferred
- });
- repeatFns.sort(function(a, b) { return a.nextTime - b.nextTime;});
-
- nextRepeatId++;
- return promise;
- };
- /**
- * @ngdoc method
- * @name $interval#cancel
- *
- * @description
- * Cancels a task associated with the `promise`.
- *
- * @param {promise} promise A promise from calling the `$interval` function.
- * @returns {boolean} Returns `true` if the task was successfully cancelled.
- */
- $interval.cancel = function(promise) {
- if (!promise) return false;
- var fnIndex;
-
- angular.forEach(repeatFns, function(fn, index) {
- if (fn.id === promise.$$intervalId) fnIndex = index;
- });
-
- if (fnIndex !== undefined) {
- repeatFns[fnIndex].deferred.reject('canceled');
- repeatFns.splice(fnIndex, 1);
- return true;
- }
-
- return false;
- };
-
- /**
- * @ngdoc method
- * @name $interval#flush
- * @description
- *
- * Runs interval tasks scheduled to be run in the next `millis` milliseconds.
- *
- * @param {number=} millis maximum timeout amount to flush up until.
- *
- * @return {number} The amount of time moved forward.
- */
- $interval.flush = function(millis) {
- now += millis;
- while (repeatFns.length && repeatFns[0].nextTime <= now) {
- var task = repeatFns[0];
- task.fn();
- task.nextTime += task.delay;
- repeatFns.sort(function(a, b) { return a.nextTime - b.nextTime;});
- }
- return millis;
- };
-
- return $interval;
- }];
-};
-
-
-/* jshint -W101 */
-/* The R_ISO8061_STR regex is never going to fit into the 100 char limit!
- * This directive should go inside the anonymous function but a bug in JSHint means that it would
- * not be enacted early enough to prevent the warning.
- */
-var R_ISO8061_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/;
-
-function jsonStringToDate(string) {
- var match;
- if (match = string.match(R_ISO8061_STR)) {
- var date = new Date(0),
- tzHour = 0,
- tzMin = 0;
- if (match[9]) {
- tzHour = int(match[9] + match[10]);
- tzMin = int(match[9] + match[11]);
- }
- date.setUTCFullYear(int(match[1]), int(match[2]) - 1, int(match[3]));
- date.setUTCHours(int(match[4] || 0) - tzHour,
- int(match[5] || 0) - tzMin,
- int(match[6] || 0),
- int(match[7] || 0));
- return date;
- }
- return string;
-}
-
-function int(str) {
- return parseInt(str, 10);
-}
-
-function padNumber(num, digits, trim) {
- var neg = '';
- if (num < 0) {
- neg = '-';
- num = -num;
- }
- num = '' + num;
- while (num.length < digits) num = '0' + num;
- if (trim)
- num = num.substr(num.length - digits);
- return neg + num;
-}
-
-
-/**
- * @ngdoc type
- * @name angular.mock.TzDate
- * @description
- *
- * *NOTE*: this is not an injectable instance, just a globally available mock class of `Date`.
- *
- * Mock of the Date type which has its timezone specified via constructor arg.
- *
- * The main purpose is to create Date-like instances with timezone fixed to the specified timezone
- * offset, so that we can test code that depends on local timezone settings without dependency on
- * the time zone settings of the machine where the code is running.
- *
- * @param {number} offset Offset of the *desired* timezone in hours (fractions will be honored)
- * @param {(number|string)} timestamp Timestamp representing the desired time in *UTC*
- *
- * @example
- * !!!! WARNING !!!!!
- * This is not a complete Date object so only methods that were implemented can be called safely.
- * To make matters worse, TzDate instances inherit stuff from Date via a prototype.
- *
- * We do our best to intercept calls to "unimplemented" methods, but since the list of methods is
- * incomplete we might be missing some non-standard methods. This can result in errors like:
- * "Date.prototype.foo called on incompatible Object".
- *
- * ```js
- * var newYearInBratislava = new TzDate(-1, '2009-12-31T23:00:00Z');
- * newYearInBratislava.getTimezoneOffset() => -60;
- * newYearInBratislava.getFullYear() => 2010;
- * newYearInBratislava.getMonth() => 0;
- * newYearInBratislava.getDate() => 1;
- * newYearInBratislava.getHours() => 0;
- * newYearInBratislava.getMinutes() => 0;
- * newYearInBratislava.getSeconds() => 0;
- * ```
- *
- */
-angular.mock.TzDate = function(offset, timestamp) {
- var self = new Date(0);
- if (angular.isString(timestamp)) {
- var tsStr = timestamp;
-
- self.origDate = jsonStringToDate(timestamp);
-
- timestamp = self.origDate.getTime();
- if (isNaN(timestamp))
- throw {
- name: "Illegal Argument",
- message: "Arg '" + tsStr + "' passed into TzDate constructor is not a valid date string"
- };
- } else {
- self.origDate = new Date(timestamp);
- }
-
- var localOffset = new Date(timestamp).getTimezoneOffset();
- self.offsetDiff = localOffset * 60 * 1000 - offset * 1000 * 60 * 60;
- self.date = new Date(timestamp + self.offsetDiff);
-
- self.getTime = function() {
- return self.date.getTime() - self.offsetDiff;
- };
-
- self.toLocaleDateString = function() {
- return self.date.toLocaleDateString();
- };
-
- self.getFullYear = function() {
- return self.date.getFullYear();
- };
-
- self.getMonth = function() {
- return self.date.getMonth();
- };
-
- self.getDate = function() {
- return self.date.getDate();
- };
-
- self.getHours = function() {
- return self.date.getHours();
- };
-
- self.getMinutes = function() {
- return self.date.getMinutes();
- };
-
- self.getSeconds = function() {
- return self.date.getSeconds();
- };
-
- self.getMilliseconds = function() {
- return self.date.getMilliseconds();
- };
-
- self.getTimezoneOffset = function() {
- return offset * 60;
- };
-
- self.getUTCFullYear = function() {
- return self.origDate.getUTCFullYear();
- };
-
- self.getUTCMonth = function() {
- return self.origDate.getUTCMonth();
- };
-
- self.getUTCDate = function() {
- return self.origDate.getUTCDate();
- };
-
- self.getUTCHours = function() {
- return self.origDate.getUTCHours();
- };
-
- self.getUTCMinutes = function() {
- return self.origDate.getUTCMinutes();
- };
-
- self.getUTCSeconds = function() {
- return self.origDate.getUTCSeconds();
- };
-
- self.getUTCMilliseconds = function() {
- return self.origDate.getUTCMilliseconds();
- };
-
- self.getDay = function() {
- return self.date.getDay();
- };
-
- // provide this method only on browsers that already have it
- if (self.toISOString) {
- self.toISOString = function() {
- return padNumber(self.origDate.getUTCFullYear(), 4) + '-' +
- padNumber(self.origDate.getUTCMonth() + 1, 2) + '-' +
- padNumber(self.origDate.getUTCDate(), 2) + 'T' +
- padNumber(self.origDate.getUTCHours(), 2) + ':' +
- padNumber(self.origDate.getUTCMinutes(), 2) + ':' +
- padNumber(self.origDate.getUTCSeconds(), 2) + '.' +
- padNumber(self.origDate.getUTCMilliseconds(), 3) + 'Z';
- };
- }
-
- //hide all methods not implemented in this mock that the Date prototype exposes
- var unimplementedMethods = ['getUTCDay',
- 'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds',
- 'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear',
- 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds',
- 'setYear', 'toDateString', 'toGMTString', 'toJSON', 'toLocaleFormat', 'toLocaleString',
- 'toLocaleTimeString', 'toSource', 'toString', 'toTimeString', 'toUTCString', 'valueOf'];
-
- angular.forEach(unimplementedMethods, function(methodName) {
- self[methodName] = function() {
- throw new Error("Method '" + methodName + "' is not implemented in the TzDate mock");
- };
- });
-
- return self;
-};
-
-//make "tzDateInstance instanceof Date" return true
-angular.mock.TzDate.prototype = Date.prototype;
-/* jshint +W101 */
-
-angular.mock.animate = angular.module('ngAnimateMock', ['ng'])
-
- .config(['$provide', function($provide) {
-
- var reflowQueue = [];
- $provide.value('$$animateReflow', function(fn) {
- var index = reflowQueue.length;
- reflowQueue.push(fn);
- return function cancel() {
- reflowQueue.splice(index, 1);
- };
- });
-
- $provide.decorator('$animate', ['$delegate', '$$asyncCallback', '$timeout', '$browser',
- function($delegate, $$asyncCallback, $timeout, $browser) {
- var animate = {
- queue: [],
- cancel: $delegate.cancel,
- enabled: $delegate.enabled,
- triggerCallbackEvents: function() {
- $$asyncCallback.flush();
- },
- triggerCallbackPromise: function() {
- $timeout.flush(0);
- },
- triggerCallbacks: function() {
- this.triggerCallbackEvents();
- this.triggerCallbackPromise();
- },
- triggerReflow: function() {
- angular.forEach(reflowQueue, function(fn) {
- fn();
- });
- reflowQueue = [];
- }
- };
-
- angular.forEach(
- ['animate','enter','leave','move','addClass','removeClass','setClass'], function(method) {
- animate[method] = function() {
- animate.queue.push({
- event: method,
- element: arguments[0],
- options: arguments[arguments.length - 1],
- args: arguments
- });
- return $delegate[method].apply($delegate, arguments);
- };
- });
-
- return animate;
- }]);
-
- }]);
-
-
-/**
- * @ngdoc function
- * @name angular.mock.dump
- * @description
- *
- * *NOTE*: this is not an injectable instance, just a globally available function.
- *
- * Method for serializing common angular objects (scope, elements, etc..) into strings, useful for
- * debugging.
- *
- * This method is also available on window, where it can be used to display objects on debug
- * console.
- *
- * @param {*} object - any object to turn into string.
- * @return {string} a serialized string of the argument
- */
-angular.mock.dump = function(object) {
- return serialize(object);
-
- function serialize(object) {
- var out;
-
- if (angular.isElement(object)) {
- object = angular.element(object);
- out = angular.element('<div></div>');
- angular.forEach(object, function(element) {
- out.append(angular.element(element).clone());
- });
- out = out.html();
- } else if (angular.isArray(object)) {
- out = [];
- angular.forEach(object, function(o) {
- out.push(serialize(o));
- });
- out = '[ ' + out.join(', ') + ' ]';
- } else if (angular.isObject(object)) {
- if (angular.isFunction(object.$eval) && angular.isFunction(object.$apply)) {
- out = serializeScope(object);
- } else if (object instanceof Error) {
- out = object.stack || ('' + object.name + ': ' + object.message);
- } else {
- // TODO(i): this prevents methods being logged,
- // we should have a better way to serialize objects
- out = angular.toJson(object, true);
- }
- } else {
- out = String(object);
- }
-
- return out;
- }
-
- function serializeScope(scope, offset) {
- offset = offset || ' ';
- var log = [offset + 'Scope(' + scope.$id + '): {'];
- for (var key in scope) {
- if (Object.prototype.hasOwnProperty.call(scope, key) && !key.match(/^(\$|this)/)) {
- log.push(' ' + key + ': ' + angular.toJson(scope[key]));
- }
- }
- var child = scope.$$childHead;
- while (child) {
- log.push(serializeScope(child, offset + ' '));
- child = child.$$nextSibling;
- }
- log.push('}');
- return log.join('\n' + offset);
- }
-};
-
-/**
- * @ngdoc service
- * @name $httpBackend
- * @description
- * Fake HTTP backend implementation suitable for unit testing applications that use the
- * {@link ng.$http $http service}.
- *
- * *Note*: For fake HTTP backend implementation suitable for end-to-end testing or backend-less
- * development please see {@link ngMockE2E.$httpBackend e2e $httpBackend mock}.
- *
- * During unit testing, we want our unit tests to run quickly and have no external dependencies so
- * we don’t want to send [XHR](https://developer.mozilla.org/en/xmlhttprequest) or
- * [JSONP](http://en.wikipedia.org/wiki/JSONP) requests to a real server. All we really need is
- * to verify whether a certain request has been sent or not, or alternatively just let the
- * application make requests, respond with pre-trained responses and assert that the end result is
- * what we expect it to be.
- *
- * This mock implementation can be used to respond with static or dynamic responses via the
- * `expect` and `when` apis and their shortcuts (`expectGET`, `whenPOST`, etc).
- *
- * When an Angular application needs some data from a server, it calls the $http service, which
- * sends the request to a real server using $httpBackend service. With dependency injection, it is
- * easy to inject $httpBackend mock (which has the same API as $httpBackend) and use it to verify
- * the requests and respond with some testing data without sending a request to a real server.
- *
- * There are two ways to specify what test data should be returned as http responses by the mock
- * backend when the code under test makes http requests:
- *
- * - `$httpBackend.expect` - specifies a request expectation
- * - `$httpBackend.when` - specifies a backend definition
- *
- *
- * # Request Expectations vs Backend Definitions
- *
- * Request expectations provide a way to make assertions about requests made by the application and
- * to define responses for those requests. The test will fail if the expected requests are not made
- * or they are made in the wrong order.
- *
- * Backend definitions allow you to define a fake backend for your application which doesn't assert
- * if a particular request was made or not, it just returns a trained response if a request is made.
- * The test will pass whether or not the request gets made during testing.
- *
- *
- * <table class="table">
- * <tr><th width="220px"></th><th>Request expectations</th><th>Backend definitions</th></tr>
- * <tr>
- * <th>Syntax</th>
- * <td>.expect(...).respond(...)</td>
- * <td>.when(...).respond(...)</td>
- * </tr>
- * <tr>
- * <th>Typical usage</th>
- * <td>strict unit tests</td>
- * <td>loose (black-box) unit testing</td>
- * </tr>
- * <tr>
- * <th>Fulfills multiple requests</th>
- * <td>NO</td>
- * <td>YES</td>
- * </tr>
- * <tr>
- * <th>Order of requests matters</th>
- * <td>YES</td>
- * <td>NO</td>
- * </tr>
- * <tr>
- * <th>Request required</th>
- * <td>YES</td>
- * <td>NO</td>
- * </tr>
- * <tr>
- * <th>Response required</th>
- * <td>optional (see below)</td>
- * <td>YES</td>
- * </tr>
- * </table>
- *
- * In cases where both backend definitions and request expectations are specified during unit
- * testing, the request expectations are evaluated first.
- *
- * If a request expectation has no response specified, the algorithm will search your backend
- * definitions for an appropriate response.
- *
- * If a request didn't match any expectation or if the expectation doesn't have the response
- * defined, the backend definitions are evaluated in sequential order to see if any of them match
- * the request. The response from the first matched definition is returned.
- *
- *
- * # Flushing HTTP requests
- *
- * The $httpBackend used in production always responds to requests asynchronously. If we preserved
- * this behavior in unit testing, we'd have to create async unit tests, which are hard to write,
- * to follow and to maintain. But neither can the testing mock respond synchronously; that would
- * change the execution of the code under test. For this reason, the mock $httpBackend has a
- * `flush()` method, which allows the test to explicitly flush pending requests. This preserves
- * the async api of the backend, while allowing the test to execute synchronously.
- *
- *
- * # Unit testing with mock $httpBackend
- * The following code shows how to setup and use the mock backend when unit testing a controller.
- * First we create the controller under test:
- *
- ```js
- // The module code
- angular
- .module('MyApp', [])
- .controller('MyController', MyController);
-
- // The controller code
- function MyController($scope, $http) {
- var authToken;
-
- $http.get('/auth.py').success(function(data, status, headers) {
- authToken = headers('A-Token');
- $scope.user = data;
- });
-
- $scope.saveMessage = function(message) {
- var headers = { 'Authorization': authToken };
- $scope.status = 'Saving...';
-
- $http.post('/add-msg.py', message, { headers: headers } ).success(function(response) {
- $scope.status = '';
- }).error(function() {
- $scope.status = 'ERROR!';
- });
- };
- }
- ```
- *
- * Now we setup the mock backend and create the test specs:
- *
- ```js
- // testing controller
- describe('MyController', function() {
- var $httpBackend, $rootScope, createController, authRequestHandler;
-
- // Set up the module
- beforeEach(module('MyApp'));
-
- beforeEach(inject(function($injector) {
- // Set up the mock http service responses
- $httpBackend = $injector.get('$httpBackend');
- // backend definition common for all tests
- authRequestHandler = $httpBackend.when('GET', '/auth.py')
- .respond({userId: 'userX'}, {'A-Token': 'xxx'});
-
- // Get hold of a scope (i.e. the root scope)
- $rootScope = $injector.get('$rootScope');
- // The $controller service is used to create instances of controllers
- var $controller = $injector.get('$controller');
-
- createController = function() {
- return $controller('MyController', {'$scope' : $rootScope });
- };
- }));
-
-
- afterEach(function() {
- $httpBackend.verifyNoOutstandingExpectation();
- $httpBackend.verifyNoOutstandingRequest();
- });
-
-
- it('should fetch authentication token', function() {
- $httpBackend.expectGET('/auth.py');
- var controller = createController();
- $httpBackend.flush();
- });
-
-
- it('should fail authentication', function() {
-
- // Notice how you can change the response even after it was set
- authRequestHandler.respond(401, '');
-
- $httpBackend.expectGET('/auth.py');
- var controller = createController();
- $httpBackend.flush();
- expect($rootScope.status).toBe('Failed...');
- });
-
-
- it('should send msg to server', function() {
- var controller = createController();
- $httpBackend.flush();
-
- // now you don’t care about the authentication, but
- // the controller will still send the request and
- // $httpBackend will respond without you having to
- // specify the expectation and response for this request
-
- $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, '');
- $rootScope.saveMessage('message content');
- expect($rootScope.status).toBe('Saving...');
- $httpBackend.flush();
- expect($rootScope.status).toBe('');
- });
-
-
- it('should send auth header', function() {
- var controller = createController();
- $httpBackend.flush();
-
- $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) {
- // check if the header was send, if it wasn't the expectation won't
- // match the request and the test will fail
- return headers['Authorization'] == 'xxx';
- }).respond(201, '');
-
- $rootScope.saveMessage('whatever');
- $httpBackend.flush();
- });
- });
- ```
- */
-angular.mock.$HttpBackendProvider = function() {
- this.$get = ['$rootScope', createHttpBackendMock];
-};
-
-/**
- * General factory function for $httpBackend mock.
- * Returns instance for unit testing (when no arguments specified):
- * - passing through is disabled
- * - auto flushing is disabled
- *
- * Returns instance for e2e testing (when `$delegate` and `$browser` specified):
- * - passing through (delegating request to real backend) is enabled
- * - auto flushing is enabled
- *
- * @param {Object=} $delegate Real $httpBackend instance (allow passing through if specified)
- * @param {Object=} $browser Auto-flushing enabled if specified
- * @return {Object} Instance of $httpBackend mock
- */
-function createHttpBackendMock($rootScope, $delegate, $browser) {
- var definitions = [],
- expectations = [],
- responses = [],
- responsesPush = angular.bind(responses, responses.push),
- copy = angular.copy;
-
- function createResponse(status, data, headers, statusText) {
- if (angular.isFunction(status)) return status;
-
- return function() {
- return angular.isNumber(status)
- ? [status, data, headers, statusText]
- : [200, status, data, headers];
- };
- }
-
- // TODO(vojta): change params to: method, url, data, headers, callback
- function $httpBackend(method, url, data, callback, headers, timeout, withCredentials) {
- var xhr = new MockXhr(),
- expectation = expectations[0],
- wasExpected = false;
-
- function prettyPrint(data) {
- return (angular.isString(data) || angular.isFunction(data) || data instanceof RegExp)
- ? data
- : angular.toJson(data);
- }
-
- function wrapResponse(wrapped) {
- if (!$browser && timeout && timeout.then) timeout.then(handleTimeout);
-
- return handleResponse;
-
- function handleResponse() {
- var response = wrapped.response(method, url, data, headers);
- xhr.$$respHeaders = response[2];
- callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders(),
- copy(response[3] || ''));
- }
-
- function handleTimeout() {
- for (var i = 0, ii = responses.length; i < ii; i++) {
- if (responses[i] === handleResponse) {
- responses.splice(i, 1);
- callback(-1, undefined, '');
- break;
- }
- }
- }
- }
-
- if (expectation && expectation.match(method, url)) {
- if (!expectation.matchData(data))
- throw new Error('Expected ' + expectation + ' with different data\n' +
- 'EXPECTED: ' + prettyPrint(expectation.data) + '\nGOT: ' + data);
-
- if (!expectation.matchHeaders(headers))
- throw new Error('Expected ' + expectation + ' with different headers\n' +
- 'EXPECTED: ' + prettyPrint(expectation.headers) + '\nGOT: ' +
- prettyPrint(headers));
-
- expectations.shift();
-
- if (expectation.response) {
- responses.push(wrapResponse(expectation));
- return;
- }
- wasExpected = true;
- }
-
- var i = -1, definition;
- while ((definition = definitions[++i])) {
- if (definition.match(method, url, data, headers || {})) {
- if (definition.response) {
- // if $browser specified, we do auto flush all requests
- ($browser ? $browser.defer : responsesPush)(wrapResponse(definition));
- } else if (definition.passThrough) {
- $delegate(method, url, data, callback, headers, timeout, withCredentials);
- } else throw new Error('No response defined !');
- return;
- }
- }
- throw wasExpected ?
- new Error('No response defined !') :
- new Error('Unexpected request: ' + method + ' ' + url + '\n' +
- (expectation ? 'Expected ' + expectation : 'No more request expected'));
- }
-
- /**
- * @ngdoc method
- * @name $httpBackend#when
- * @description
- * Creates a new backend definition.
- *
- * @param {string} method HTTP method.
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
- * data string and returns true if the data is as expected.
- * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
- * object and returns true if the headers match the current definition.
- * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
- * request is handled. You can save this object for later use and invoke `respond` again in
- * order to change how a matched request is handled.
- *
- * - respond –
- * `{function([status,] data[, headers, statusText])
- * | function(function(method, url, data, headers)}`
- * – The respond method takes a set of static data to be returned or a function that can
- * return an array containing response status (number), response data (string), response
- * headers (Object), and the text for the status (string). The respond method returns the
- * `requestHandler` object for possible overrides.
- */
- $httpBackend.when = function(method, url, data, headers) {
- var definition = new MockHttpExpectation(method, url, data, headers),
- chain = {
- respond: function(status, data, headers, statusText) {
- definition.passThrough = undefined;
- definition.response = createResponse(status, data, headers, statusText);
- return chain;
- }
- };
-
- if ($browser) {
- chain.passThrough = function() {
- definition.response = undefined;
- definition.passThrough = true;
- return chain;
- };
- }
-
- definitions.push(definition);
- return chain;
- };
-
- /**
- * @ngdoc method
- * @name $httpBackend#whenGET
- * @description
- * Creates a new backend definition for GET requests. For more info see `when()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(Object|function(Object))=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
- * request is handled. You can save this object for later use and invoke `respond` again in
- * order to change how a matched request is handled.
- */
-
- /**
- * @ngdoc method
- * @name $httpBackend#whenHEAD
- * @description
- * Creates a new backend definition for HEAD requests. For more info see `when()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(Object|function(Object))=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
- * request is handled. You can save this object for later use and invoke `respond` again in
- * order to change how a matched request is handled.
- */
-
- /**
- * @ngdoc method
- * @name $httpBackend#whenDELETE
- * @description
- * Creates a new backend definition for DELETE requests. For more info see `when()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(Object|function(Object))=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
- * request is handled. You can save this object for later use and invoke `respond` again in
- * order to change how a matched request is handled.
- */
-
- /**
- * @ngdoc method
- * @name $httpBackend#whenPOST
- * @description
- * Creates a new backend definition for POST requests. For more info see `when()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
- * data string and returns true if the data is as expected.
- * @param {(Object|function(Object))=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
- * request is handled. You can save this object for later use and invoke `respond` again in
- * order to change how a matched request is handled.
- */
-
- /**
- * @ngdoc method
- * @name $httpBackend#whenPUT
- * @description
- * Creates a new backend definition for PUT requests. For more info see `when()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
- * data string and returns true if the data is as expected.
- * @param {(Object|function(Object))=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
- * request is handled. You can save this object for later use and invoke `respond` again in
- * order to change how a matched request is handled.
- */
-
- /**
- * @ngdoc method
- * @name $httpBackend#whenJSONP
- * @description
- * Creates a new backend definition for JSONP requests. For more info see `when()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
- * request is handled. You can save this object for later use and invoke `respond` again in
- * order to change how a matched request is handled.
- */
- createShortMethods('when');
-
-
- /**
- * @ngdoc method
- * @name $httpBackend#expect
- * @description
- * Creates a new request expectation.
- *
- * @param {string} method HTTP method.
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
- * receives data string and returns true if the data is as expected, or Object if request body
- * is in JSON format.
- * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
- * object and returns true if the headers match the current expectation.
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
- * request is handled. You can save this object for later use and invoke `respond` again in
- * order to change how a matched request is handled.
- *
- * - respond –
- * `{function([status,] data[, headers, statusText])
- * | function(function(method, url, data, headers)}`
- * – The respond method takes a set of static data to be returned or a function that can
- * return an array containing response status (number), response data (string), response
- * headers (Object), and the text for the status (string). The respond method returns the
- * `requestHandler` object for possible overrides.
- */
- $httpBackend.expect = function(method, url, data, headers) {
- var expectation = new MockHttpExpectation(method, url, data, headers),
- chain = {
- respond: function(status, data, headers, statusText) {
- expectation.response = createResponse(status, data, headers, statusText);
- return chain;
- }
- };
-
- expectations.push(expectation);
- return chain;
- };
-
-
- /**
- * @ngdoc method
- * @name $httpBackend#expectGET
- * @description
- * Creates a new request expectation for GET requests. For more info see `expect()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {Object=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
- * request is handled. You can save this object for later use and invoke `respond` again in
- * order to change how a matched request is handled. See #expect for more info.
- */
-
- /**
- * @ngdoc method
- * @name $httpBackend#expectHEAD
- * @description
- * Creates a new request expectation for HEAD requests. For more info see `expect()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {Object=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
- * request is handled. You can save this object for later use and invoke `respond` again in
- * order to change how a matched request is handled.
- */
-
- /**
- * @ngdoc method
- * @name $httpBackend#expectDELETE
- * @description
- * Creates a new request expectation for DELETE requests. For more info see `expect()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {Object=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
- * request is handled. You can save this object for later use and invoke `respond` again in
- * order to change how a matched request is handled.
- */
-
- /**
- * @ngdoc method
- * @name $httpBackend#expectPOST
- * @description
- * Creates a new request expectation for POST requests. For more info see `expect()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
- * receives data string and returns true if the data is as expected, or Object if request body
- * is in JSON format.
- * @param {Object=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
- * request is handled. You can save this object for later use and invoke `respond` again in
- * order to change how a matched request is handled.
- */
-
- /**
- * @ngdoc method
- * @name $httpBackend#expectPUT
- * @description
- * Creates a new request expectation for PUT requests. For more info see `expect()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
- * receives data string and returns true if the data is as expected, or Object if request body
- * is in JSON format.
- * @param {Object=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
- * request is handled. You can save this object for later use and invoke `respond` again in
- * order to change how a matched request is handled.
- */
-
- /**
- * @ngdoc method
- * @name $httpBackend#expectPATCH
- * @description
- * Creates a new request expectation for PATCH requests. For more info see `expect()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
- * receives data string and returns true if the data is as expected, or Object if request body
- * is in JSON format.
- * @param {Object=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
- * request is handled. You can save this object for later use and invoke `respond` again in
- * order to change how a matched request is handled.
- */
-
- /**
- * @ngdoc method
- * @name $httpBackend#expectJSONP
- * @description
- * Creates a new request expectation for JSONP requests. For more info see `expect()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @returns {requestHandler} Returns an object with `respond` method that control how a matched
- * request is handled. You can save this object for later use and invoke `respond` again in
- * order to change how a matched request is handled.
- */
- createShortMethods('expect');
-
-
- /**
- * @ngdoc method
- * @name $httpBackend#flush
- * @description
- * Flushes all pending requests using the trained responses.
- *
- * @param {number=} count Number of responses to flush (in the order they arrived). If undefined,
- * all pending requests will be flushed. If there are no pending requests when the flush method
- * is called an exception is thrown (as this typically a sign of programming error).
- */
- $httpBackend.flush = function(count, digest) {
- if (digest !== false) $rootScope.$digest();
- if (!responses.length) throw new Error('No pending request to flush !');
-
- if (angular.isDefined(count) && count !== null) {
- while (count--) {
- if (!responses.length) throw new Error('No more pending request to flush !');
- responses.shift()();
- }
- } else {
- while (responses.length) {
- responses.shift()();
- }
- }
- $httpBackend.verifyNoOutstandingExpectation(digest);
- };
-
-
- /**
- * @ngdoc method
- * @name $httpBackend#verifyNoOutstandingExpectation
- * @description
- * Verifies that all of the requests defined via the `expect` api were made. If any of the
- * requests were not made, verifyNoOutstandingExpectation throws an exception.
- *
- * Typically, you would call this method following each test case that asserts requests using an
- * "afterEach" clause.
- *
- * ```js
- * afterEach($httpBackend.verifyNoOutstandingExpectation);
- * ```
- */
- $httpBackend.verifyNoOutstandingExpectation = function(digest) {
- if (digest !== false) $rootScope.$digest();
- if (expectations.length) {
- throw new Error('Unsatisfied requests: ' + expectations.join(', '));
- }
- };
-
-
- /**
- * @ngdoc method
- * @name $httpBackend#verifyNoOutstandingRequest
- * @description
- * Verifies that there are no outstanding requests that need to be flushed.
- *
- * Typically, you would call this method following each test case that asserts requests using an
- * "afterEach" clause.
- *
- * ```js
- * afterEach($httpBackend.verifyNoOutstandingRequest);
- * ```
- */
- $httpBackend.verifyNoOutstandingRequest = function() {
- if (responses.length) {
- throw new Error('Unflushed requests: ' + responses.length);
- }
- };
-
-
- /**
- * @ngdoc method
- * @name $httpBackend#resetExpectations
- * @description
- * Resets all request expectations, but preserves all backend definitions. Typically, you would
- * call resetExpectations during a multiple-phase test when you want to reuse the same instance of
- * $httpBackend mock.
- */
- $httpBackend.resetExpectations = function() {
- expectations.length = 0;
- responses.length = 0;
- };
-
- return $httpBackend;
-
-
- function createShortMethods(prefix) {
- angular.forEach(['GET', 'DELETE', 'JSONP', 'HEAD'], function(method) {
- $httpBackend[prefix + method] = function(url, headers) {
- return $httpBackend[prefix](method, url, undefined, headers);
- };
- });
-
- angular.forEach(['PUT', 'POST', 'PATCH'], function(method) {
- $httpBackend[prefix + method] = function(url, data, headers) {
- return $httpBackend[prefix](method, url, data, headers);
- };
- });
- }
-}
-
-function MockHttpExpectation(method, url, data, headers) {
-
- this.data = data;
- this.headers = headers;
-
- this.match = function(m, u, d, h) {
- if (method != m) return false;
- if (!this.matchUrl(u)) return false;
- if (angular.isDefined(d) && !this.matchData(d)) return false;
- if (angular.isDefined(h) && !this.matchHeaders(h)) return false;
- return true;
- };
-
- this.matchUrl = function(u) {
- if (!url) return true;
- if (angular.isFunction(url.test)) return url.test(u);
- if (angular.isFunction(url)) return url(u);
- return url == u;
- };
-
- this.matchHeaders = function(h) {
- if (angular.isUndefined(headers)) return true;
- if (angular.isFunction(headers)) return headers(h);
- return angular.equals(headers, h);
- };
-
- this.matchData = function(d) {
- if (angular.isUndefined(data)) return true;
- if (data && angular.isFunction(data.test)) return data.test(d);
- if (data && angular.isFunction(data)) return data(d);
- if (data && !angular.isString(data)) {
- return angular.equals(angular.fromJson(angular.toJson(data)), angular.fromJson(d));
- }
- return data == d;
- };
-
- this.toString = function() {
- return method + ' ' + url;
- };
-}
-
-function createMockXhr() {
- return new MockXhr();
-}
-
-function MockXhr() {
-
- // hack for testing $http, $httpBackend
- MockXhr.$$lastInstance = this;
-
- this.open = function(method, url, async) {
- this.$$method = method;
- this.$$url = url;
- this.$$async = async;
- this.$$reqHeaders = {};
- this.$$respHeaders = {};
- };
-
- this.send = function(data) {
- this.$$data = data;
- };
-
- this.setRequestHeader = function(key, value) {
- this.$$reqHeaders[key] = value;
- };
-
- this.getResponseHeader = function(name) {
- // the lookup must be case insensitive,
- // that's why we try two quick lookups first and full scan last
- var header = this.$$respHeaders[name];
- if (header) return header;
-
- name = angular.lowercase(name);
- header = this.$$respHeaders[name];
- if (header) return header;
-
- header = undefined;
- angular.forEach(this.$$respHeaders, function(headerVal, headerName) {
- if (!header && angular.lowercase(headerName) == name) header = headerVal;
- });
- return header;
- };
-
- this.getAllResponseHeaders = function() {
- var lines = [];
-
- angular.forEach(this.$$respHeaders, function(value, key) {
- lines.push(key + ': ' + value);
- });
- return lines.join('\n');
- };
-
- this.abort = angular.noop;
-}
-
-
-/**
- * @ngdoc service
- * @name $timeout
- * @description
- *
- * This service is just a simple decorator for {@link ng.$timeout $timeout} service
- * that adds a "flush" and "verifyNoPendingTasks" methods.
- */
-
-angular.mock.$TimeoutDecorator = ['$delegate', '$browser', function($delegate, $browser) {
-
- /**
- * @ngdoc method
- * @name $timeout#flush
- * @description
- *
- * Flushes the queue of pending tasks.
- *
- * @param {number=} delay maximum timeout amount to flush up until
- */
- $delegate.flush = function(delay) {
- $browser.defer.flush(delay);
- };
-
- /**
- * @ngdoc method
- * @name $timeout#verifyNoPendingTasks
- * @description
- *
- * Verifies that there are no pending tasks that need to be flushed.
- */
- $delegate.verifyNoPendingTasks = function() {
- if ($browser.deferredFns.length) {
- throw new Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' +
- formatPendingTasksAsString($browser.deferredFns));
- }
- };
-
- function formatPendingTasksAsString(tasks) {
- var result = [];
- angular.forEach(tasks, function(task) {
- result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}');
- });
-
- return result.join(', ');
- }
-
- return $delegate;
-}];
-
-angular.mock.$RAFDecorator = ['$delegate', function($delegate) {
- var queue = [];
- var rafFn = function(fn) {
- var index = queue.length;
- queue.push(fn);
- return function() {
- queue.splice(index, 1);
- };
- };
-
- rafFn.supported = $delegate.supported;
-
- rafFn.flush = function() {
- if (queue.length === 0) {
- throw new Error('No rAF callbacks present');
- }
-
- var length = queue.length;
- for (var i = 0; i < length; i++) {
- queue[i]();
- }
-
- queue = [];
- };
-
- return rafFn;
-}];
-
-angular.mock.$AsyncCallbackDecorator = ['$delegate', function($delegate) {
- var callbacks = [];
- var addFn = function(fn) {
- callbacks.push(fn);
- };
- addFn.flush = function() {
- angular.forEach(callbacks, function(fn) {
- fn();
- });
- callbacks = [];
- };
- return addFn;
-}];
-
-/**
- *
- */
-angular.mock.$RootElementProvider = function() {
- this.$get = function() {
- return angular.element('<div ng-app></div>');
- };
-};
-
-/**
- * @ngdoc module
- * @name ngMock
- * @packageName angular-mocks
- * @description
- *
- * # ngMock
- *
- * The `ngMock` module provides support to inject and mock Angular services into unit tests.
- * In addition, ngMock also extends various core ng services such that they can be
- * inspected and controlled in a synchronous manner within test code.
- *
- *
- * <div doc-module-components="ngMock"></div>
- *
- */
-angular.module('ngMock', ['ng']).provider({
- $browser: angular.mock.$BrowserProvider,
- $exceptionHandler: angular.mock.$ExceptionHandlerProvider,
- $log: angular.mock.$LogProvider,
- $interval: angular.mock.$IntervalProvider,
- $httpBackend: angular.mock.$HttpBackendProvider,
- $rootElement: angular.mock.$RootElementProvider
-}).config(['$provide', function($provide) {
- $provide.decorator('$timeout', angular.mock.$TimeoutDecorator);
- $provide.decorator('$$rAF', angular.mock.$RAFDecorator);
- $provide.decorator('$$asyncCallback', angular.mock.$AsyncCallbackDecorator);
- $provide.decorator('$rootScope', angular.mock.$RootScopeDecorator);
-}]);
-
-/**
- * @ngdoc module
- * @name ngMockE2E
- * @module ngMockE2E
- * @packageName angular-mocks
- * @description
- *
- * The `ngMockE2E` is an angular module which contains mocks suitable for end-to-end testing.
- * Currently there is only one mock present in this module -
- * the {@link ngMockE2E.$httpBackend e2e $httpBackend} mock.
- */
-angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
- $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator);
-}]);
-
-/**
- * @ngdoc service
- * @name $httpBackend
- * @module ngMockE2E
- * @description
- * Fake HTTP backend implementation suitable for end-to-end testing or backend-less development of
- * applications that use the {@link ng.$http $http service}.
- *
- * *Note*: For fake http backend implementation suitable for unit testing please see
- * {@link ngMock.$httpBackend unit-testing $httpBackend mock}.
- *
- * This implementation can be used to respond with static or dynamic responses via the `when` api
- * and its shortcuts (`whenGET`, `whenPOST`, etc) and optionally pass through requests to the
- * real $httpBackend for specific requests (e.g. to interact with certain remote apis or to fetch
- * templates from a webserver).
- *
- * As opposed to unit-testing, in an end-to-end testing scenario or in scenario when an application
- * is being developed with the real backend api replaced with a mock, it is often desirable for
- * certain category of requests to bypass the mock and issue a real http request (e.g. to fetch
- * templates or static files from the webserver). To configure the backend with this behavior
- * use the `passThrough` request handler of `when` instead of `respond`.
- *
- * Additionally, we don't want to manually have to flush mocked out requests like we do during unit
- * testing. For this reason the e2e $httpBackend flushes mocked out requests
- * automatically, closely simulating the behavior of the XMLHttpRequest object.
- *
- * To setup the application to run with this http backend, you have to create a module that depends
- * on the `ngMockE2E` and your application modules and defines the fake backend:
- *
- * ```js
- * myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']);
- * myAppDev.run(function($httpBackend) {
- * phones = [{name: 'phone1'}, {name: 'phone2'}];
- *
- * // returns the current list of phones
- * $httpBackend.whenGET('/phones').respond(phones);
- *
- * // adds a new phone to the phones array
- * $httpBackend.whenPOST('/phones').respond(function(method, url, data) {
- * var phone = angular.fromJson(data);
- * phones.push(phone);
- * return [200, phone, {}];
- * });
- * $httpBackend.whenGET(/^\/templates\//).passThrough();
- * //...
- * });
- * ```
- *
- * Afterwards, bootstrap your app with this new module.
- */
-
-/**
- * @ngdoc method
- * @name $httpBackend#when
- * @module ngMockE2E
- * @description
- * Creates a new backend definition.
- *
- * @param {string} method HTTP method.
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(string|RegExp)=} data HTTP request body.
- * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
- * object and returns true if the headers match the current definition.
- * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
- * control how a matched request is handled. You can save this object for later use and invoke
- * `respond` or `passThrough` again in order to change how a matched request is handled.
- *
- * - respond –
- * `{function([status,] data[, headers, statusText])
- * | function(function(method, url, data, headers)}`
- * – The respond method takes a set of static data to be returned or a function that can return
- * an array containing response status (number), response data (string), response headers
- * (Object), and the text for the status (string).
- * - passThrough – `{function()}` – Any request matching a backend definition with
- * `passThrough` handler will be passed through to the real backend (an XHR request will be made
- * to the server.)
- * - Both methods return the `requestHandler` object for possible overrides.
- */
-
-/**
- * @ngdoc method
- * @name $httpBackend#whenGET
- * @module ngMockE2E
- * @description
- * Creates a new backend definition for GET requests. For more info see `when()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(Object|function(Object))=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
- * control how a matched request is handled. You can save this object for later use and invoke
- * `respond` or `passThrough` again in order to change how a matched request is handled.
- */
-
-/**
- * @ngdoc method
- * @name $httpBackend#whenHEAD
- * @module ngMockE2E
- * @description
- * Creates a new backend definition for HEAD requests. For more info see `when()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(Object|function(Object))=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
- * control how a matched request is handled. You can save this object for later use and invoke
- * `respond` or `passThrough` again in order to change how a matched request is handled.
- */
-
-/**
- * @ngdoc method
- * @name $httpBackend#whenDELETE
- * @module ngMockE2E
- * @description
- * Creates a new backend definition for DELETE requests. For more info see `when()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(Object|function(Object))=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
- * control how a matched request is handled. You can save this object for later use and invoke
- * `respond` or `passThrough` again in order to change how a matched request is handled.
- */
-
-/**
- * @ngdoc method
- * @name $httpBackend#whenPOST
- * @module ngMockE2E
- * @description
- * Creates a new backend definition for POST requests. For more info see `when()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(string|RegExp)=} data HTTP request body.
- * @param {(Object|function(Object))=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
- * control how a matched request is handled. You can save this object for later use and invoke
- * `respond` or `passThrough` again in order to change how a matched request is handled.
- */
-
-/**
- * @ngdoc method
- * @name $httpBackend#whenPUT
- * @module ngMockE2E
- * @description
- * Creates a new backend definition for PUT requests. For more info see `when()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(string|RegExp)=} data HTTP request body.
- * @param {(Object|function(Object))=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
- * control how a matched request is handled. You can save this object for later use and invoke
- * `respond` or `passThrough` again in order to change how a matched request is handled.
- */
-
-/**
- * @ngdoc method
- * @name $httpBackend#whenPATCH
- * @module ngMockE2E
- * @description
- * Creates a new backend definition for PATCH requests. For more info see `when()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @param {(string|RegExp)=} data HTTP request body.
- * @param {(Object|function(Object))=} headers HTTP headers.
- * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
- * control how a matched request is handled. You can save this object for later use and invoke
- * `respond` or `passThrough` again in order to change how a matched request is handled.
- */
-
-/**
- * @ngdoc method
- * @name $httpBackend#whenJSONP
- * @module ngMockE2E
- * @description
- * Creates a new backend definition for JSONP requests. For more info see `when()`.
- *
- * @param {string|RegExp|function(string)} url HTTP url or function that receives the url
- * and returns true if the url match the current definition.
- * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
- * control how a matched request is handled. You can save this object for later use and invoke
- * `respond` or `passThrough` again in order to change how a matched request is handled.
- */
-angular.mock.e2e = {};
-angular.mock.e2e.$httpBackendDecorator =
- ['$rootScope', '$delegate', '$browser', createHttpBackendMock];
-
-
-/**
- * @ngdoc type
- * @name $rootScope.Scope
- * @module ngMock
- * @description
- * {@link ng.$rootScope.Scope Scope} type decorated with helper methods useful for testing. These
- * methods are automatically available on any {@link ng.$rootScope.Scope Scope} instance when
- * `ngMock` module is loaded.
- *
- * In addition to all the regular `Scope` methods, the following helper methods are available:
- */
-angular.mock.$RootScopeDecorator = ['$delegate', function($delegate) {
-
- var $rootScopePrototype = Object.getPrototypeOf($delegate);
-
- $rootScopePrototype.$countChildScopes = countChildScopes;
- $rootScopePrototype.$countWatchers = countWatchers;
-
- return $delegate;
-
- // ------------------------------------------------------------------------------------------ //
-
- /**
- * @ngdoc method
- * @name $rootScope.Scope#$countChildScopes
- * @module ngMock
- * @description
- * Counts all the direct and indirect child scopes of the current scope.
- *
- * The current scope is excluded from the count. The count includes all isolate child scopes.
- *
- * @returns {number} Total number of child scopes.
- */
- function countChildScopes() {
- // jshint validthis: true
- var count = 0; // exclude the current scope
- var pendingChildHeads = [this.$$childHead];
- var currentScope;
-
- while (pendingChildHeads.length) {
- currentScope = pendingChildHeads.shift();
-
- while (currentScope) {
- count += 1;
- pendingChildHeads.push(currentScope.$$childHead);
- currentScope = currentScope.$$nextSibling;
- }
- }
-
- return count;
- }
-
-
- /**
- * @ngdoc method
- * @name $rootScope.Scope#$countWatchers
- * @module ngMock
- * @description
- * Counts all the watchers of direct and indirect child scopes of the current scope.
- *
- * The watchers of the current scope are included in the count and so are all the watchers of
- * isolate child scopes.
- *
- * @returns {number} Total number of watchers.
- */
- function countWatchers() {
- // jshint validthis: true
- var count = this.$$watchers ? this.$$watchers.length : 0; // include the current scope
- var pendingChildHeads = [this.$$childHead];
- var currentScope;
-
- while (pendingChildHeads.length) {
- currentScope = pendingChildHeads.shift();
-
- while (currentScope) {
- count += currentScope.$$watchers ? currentScope.$$watchers.length : 0;
- pendingChildHeads.push(currentScope.$$childHead);
- currentScope = currentScope.$$nextSibling;
- }
- }
-
- return count;
- }
-}];
-
-
-if (window.jasmine || window.mocha) {
-
- var currentSpec = null,
- isSpecRunning = function() {
- return !!currentSpec;
- };
-
-
- (window.beforeEach || window.setup)(function() {
- currentSpec = this;
- });
-
- (window.afterEach || window.teardown)(function() {
- var injector = currentSpec.$injector;
-
- angular.forEach(currentSpec.$modules, function(module) {
- if (module && module.$$hashKey) {
- module.$$hashKey = undefined;
- }
- });
-
- currentSpec.$injector = null;
- currentSpec.$modules = null;
- currentSpec = null;
-
- if (injector) {
- injector.get('$rootElement').off();
- injector.get('$browser').pollFns.length = 0;
- }
-
- // clean up jquery's fragment cache
- angular.forEach(angular.element.fragments, function(val, key) {
- delete angular.element.fragments[key];
- });
-
- MockXhr.$$lastInstance = null;
-
- angular.forEach(angular.callbacks, function(val, key) {
- delete angular.callbacks[key];
- });
- angular.callbacks.counter = 0;
- });
-
- /**
- * @ngdoc function
- * @name angular.mock.module
- * @description
- *
- * *NOTE*: This function is also published on window for easy access.<br>
- * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha
- *
- * This function registers a module configuration code. It collects the configuration information
- * which will be used when the injector is created by {@link angular.mock.inject inject}.
- *
- * See {@link angular.mock.inject inject} for usage example
- *
- * @param {...(string|Function|Object)} fns any number of modules which are represented as string
- * aliases or as anonymous module initialization functions. The modules are used to
- * configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. If an
- * object literal is passed they will be registered as values in the module, the key being
- * the module name and the value being what is returned.
- */
- window.module = angular.mock.module = function() {
- var moduleFns = Array.prototype.slice.call(arguments, 0);
- return isSpecRunning() ? workFn() : workFn;
- /////////////////////
- function workFn() {
- if (currentSpec.$injector) {
- throw new Error('Injector already created, can not register a module!');
- } else {
- var modules = currentSpec.$modules || (currentSpec.$modules = []);
- angular.forEach(moduleFns, function(module) {
- if (angular.isObject(module) && !angular.isArray(module)) {
- modules.push(function($provide) {
- angular.forEach(module, function(value, key) {
- $provide.value(key, value);
- });
- });
- } else {
- modules.push(module);
- }
- });
- }
- }
- };
-
- /**
- * @ngdoc function
- * @name angular.mock.inject
- * @description
- *
- * *NOTE*: This function is also published on window for easy access.<br>
- * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha
- *
- * The inject function wraps a function into an injectable function. The inject() creates new
- * instance of {@link auto.$injector $injector} per test, which is then used for
- * resolving references.
- *
- *
- * ## Resolving References (Underscore Wrapping)
- * Often, we would like to inject a reference once, in a `beforeEach()` block and reuse this
- * in multiple `it()` clauses. To be able to do this we must assign the reference to a variable
- * that is declared in the scope of the `describe()` block. Since we would, most likely, want
- * the variable to have the same name of the reference we have a problem, since the parameter
- * to the `inject()` function would hide the outer variable.
- *
- * To help with this, the injected parameters can, optionally, be enclosed with underscores.
- * These are ignored by the injector when the reference name is resolved.
- *
- * For example, the parameter `_myService_` would be resolved as the reference `myService`.
- * Since it is available in the function body as _myService_, we can then assign it to a variable
- * defined in an outer scope.
- *
- * ```
- * // Defined out reference variable outside
- * var myService;
- *
- * // Wrap the parameter in underscores
- * beforeEach( inject( function(_myService_){
- * myService = _myService_;
- * }));
- *
- * // Use myService in a series of tests.
- * it('makes use of myService', function() {
- * myService.doStuff();
- * });
- *
- * ```
- *
- * See also {@link angular.mock.module angular.mock.module}
- *
- * ## Example
- * Example of what a typical jasmine tests looks like with the inject method.
- * ```js
- *
- * angular.module('myApplicationModule', [])
- * .value('mode', 'app')
- * .value('version', 'v1.0.1');
- *
- *
- * describe('MyApp', function() {
- *
- * // You need to load modules that you want to test,
- * // it loads only the "ng" module by default.
- * beforeEach(module('myApplicationModule'));
- *
- *
- * // inject() is used to inject arguments of all given functions
- * it('should provide a version', inject(function(mode, version) {
- * expect(version).toEqual('v1.0.1');
- * expect(mode).toEqual('app');
- * }));
- *
- *
- * // The inject and module method can also be used inside of the it or beforeEach
- * it('should override a version and test the new version is injected', function() {
- * // module() takes functions or strings (module aliases)
- * module(function($provide) {
- * $provide.value('version', 'overridden'); // override version here
- * });
- *
- * inject(function(version) {
- * expect(version).toEqual('overridden');
- * });
- * });
- * });
- *
- * ```
- *
- * @param {...Function} fns any number of functions which will be injected using the injector.
- */
-
-
-
- var ErrorAddingDeclarationLocationStack = function(e, errorForStack) {
- this.message = e.message;
- this.name = e.name;
- if (e.line) this.line = e.line;
- if (e.sourceId) this.sourceId = e.sourceId;
- if (e.stack && errorForStack)
- this.stack = e.stack + '\n' + errorForStack.stack;
- if (e.stackArray) this.stackArray = e.stackArray;
- };
- ErrorAddingDeclarationLocationStack.prototype.toString = Error.prototype.toString;
-
- window.inject = angular.mock.inject = function() {
- var blockFns = Array.prototype.slice.call(arguments, 0);
- var errorForStack = new Error('Declaration Location');
- return isSpecRunning() ? workFn.call(currentSpec) : workFn;
- /////////////////////
- function workFn() {
- var modules = currentSpec.$modules || [];
- var strictDi = !!currentSpec.$injectorStrict;
- modules.unshift('ngMock');
- modules.unshift('ng');
- var injector = currentSpec.$injector;
- if (!injector) {
- if (strictDi) {
- // If strictDi is enabled, annotate the providerInjector blocks
- angular.forEach(modules, function(moduleFn) {
- if (typeof moduleFn === "function") {
- angular.injector.$$annotate(moduleFn);
- }
- });
- }
- injector = currentSpec.$injector = angular.injector(modules, strictDi);
- currentSpec.$injectorStrict = strictDi;
- }
- for (var i = 0, ii = blockFns.length; i < ii; i++) {
- if (currentSpec.$injectorStrict) {
- // If the injector is strict / strictDi, and the spec wants to inject using automatic
- // annotation, then annotate the function here.
- injector.annotate(blockFns[i]);
- }
- try {
- /* jshint -W040 *//* Jasmine explicitly provides a `this` object when calling functions */
- injector.invoke(blockFns[i] || angular.noop, this);
- /* jshint +W040 */
- } catch (e) {
- if (e.stack && errorForStack) {
- throw new ErrorAddingDeclarationLocationStack(e, errorForStack);
- }
- throw e;
- } finally {
- errorForStack = null;
- }
- }
- }
- };
-
-
- angular.mock.inject.strictDi = function(value) {
- value = arguments.length ? !!value : true;
- return isSpecRunning() ? workFn() : workFn;
-
- function workFn() {
- if (value !== currentSpec.$injectorStrict) {
- if (currentSpec.$injector) {
- throw new Error('Injector already created, can not modify strict annotations');
- } else {
- currentSpec.$injectorStrict = value;
- }
- }
- }
- };
-}
-
-
-})(window, window.angular);
diff --git a/framework/src/onos/web/gui/src/main/webapp/tp/angular-route.js b/framework/src/onos/web/gui/src/main/webapp/tp/angular-route.js
deleted file mode 100644
index 2959c50b..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tp/angular-route.js
+++ /dev/null
@@ -1,996 +0,0 @@
-/**
- * @license AngularJS v1.3.5
- * (c) 2010-2014 Google, Inc. http://angularjs.org
- * License: MIT
- */
-(function(window, angular, undefined) {'use strict';
-
-/**
- * @ngdoc module
- * @name ngRoute
- * @description
- *
- * # ngRoute
- *
- * The `ngRoute` module provides routing and deeplinking services and directives for angular apps.
- *
- * ## Example
- * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`.
- *
- *
- * <div doc-module-components="ngRoute"></div>
- */
- /* global -ngRouteModule */
-var ngRouteModule = angular.module('ngRoute', ['ng']).
- provider('$route', $RouteProvider),
- $routeMinErr = angular.$$minErr('ngRoute');
-
-/**
- * @ngdoc provider
- * @name $routeProvider
- *
- * @description
- *
- * Used for configuring routes.
- *
- * ## Example
- * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`.
- *
- * ## Dependencies
- * Requires the {@link ngRoute `ngRoute`} module to be installed.
- */
-function $RouteProvider() {
- function inherit(parent, extra) {
- return angular.extend(Object.create(parent), extra);
- }
-
- var routes = {};
-
- /**
- * @ngdoc method
- * @name $routeProvider#when
- *
- * @param {string} path Route path (matched against `$location.path`). If `$location.path`
- * contains redundant trailing slash or is missing one, the route will still match and the
- * `$location.path` will be updated to add or drop the trailing slash to exactly match the
- * route definition.
- *
- * * `path` can contain named groups starting with a colon: e.g. `:name`. All characters up
- * to the next slash are matched and stored in `$routeParams` under the given `name`
- * when the route matches.
- * * `path` can contain named groups starting with a colon and ending with a star:
- * e.g.`:name*`. All characters are eagerly stored in `$routeParams` under the given `name`
- * when the route matches.
- * * `path` can contain optional named groups with a question mark: e.g.`:name?`.
- *
- * For example, routes like `/color/:color/largecode/:largecode*\/edit` will match
- * `/color/brown/largecode/code/with/slashes/edit` and extract:
- *
- * * `color: brown`
- * * `largecode: code/with/slashes`.
- *
- *
- * @param {Object} route Mapping information to be assigned to `$route.current` on route
- * match.
- *
- * Object properties:
- *
- * - `controller` – `{(string|function()=}` – Controller fn that should be associated with
- * newly created scope or the name of a {@link angular.Module#controller registered
- * controller} if passed as a string.
- * - `controllerAs` – `{string=}` – A controller alias name. If present the controller will be
- * published to scope under the `controllerAs` name.
- * - `template` – `{string=|function()=}` – html template as a string or a function that
- * returns an html template as a string which should be used by {@link
- * ngRoute.directive:ngView ngView} or {@link ng.directive:ngInclude ngInclude} directives.
- * This property takes precedence over `templateUrl`.
- *
- * If `template` is a function, it will be called with the following parameters:
- *
- * - `{Array.<Object>}` - route parameters extracted from the current
- * `$location.path()` by applying the current route
- *
- * - `templateUrl` – `{string=|function()=}` – path or function that returns a path to an html
- * template that should be used by {@link ngRoute.directive:ngView ngView}.
- *
- * If `templateUrl` is a function, it will be called with the following parameters:
- *
- * - `{Array.<Object>}` - route parameters extracted from the current
- * `$location.path()` by applying the current route
- *
- * - `resolve` - `{Object.<string, function>=}` - An optional map of dependencies which should
- * be injected into the controller. If any of these dependencies are promises, the router
- * will wait for them all to be resolved or one to be rejected before the controller is
- * instantiated.
- * If all the promises are resolved successfully, the values of the resolved promises are
- * injected and {@link ngRoute.$route#$routeChangeSuccess $routeChangeSuccess} event is
- * fired. If any of the promises are rejected the
- * {@link ngRoute.$route#$routeChangeError $routeChangeError} event is fired. The map object
- * is:
- *
- * - `key` – `{string}`: a name of a dependency to be injected into the controller.
- * - `factory` - `{string|function}`: If `string` then it is an alias for a service.
- * Otherwise if function, then it is {@link auto.$injector#invoke injected}
- * and the return value is treated as the dependency. If the result is a promise, it is
- * resolved before its value is injected into the controller. Be aware that
- * `ngRoute.$routeParams` will still refer to the previous route within these resolve
- * functions. Use `$route.current.params` to access the new route parameters, instead.
- *
- * - `redirectTo` – {(string|function())=} – value to update
- * {@link ng.$location $location} path with and trigger route redirection.
- *
- * If `redirectTo` is a function, it will be called with the following parameters:
- *
- * - `{Object.<string>}` - route parameters extracted from the current
- * `$location.path()` by applying the current route templateUrl.
- * - `{string}` - current `$location.path()`
- * - `{Object}` - current `$location.search()`
- *
- * The custom `redirectTo` function is expected to return a string which will be used
- * to update `$location.path()` and `$location.search()`.
- *
- * - `[reloadOnSearch=true]` - {boolean=} - reload route when only `$location.search()`
- * or `$location.hash()` changes.
- *
- * If the option is set to `false` and url in the browser changes, then
- * `$routeUpdate` event is broadcasted on the root scope.
- *
- * - `[caseInsensitiveMatch=false]` - {boolean=} - match routes without being case sensitive
- *
- * If the option is set to `true`, then the particular route can be matched without being
- * case sensitive
- *
- * @returns {Object} self
- *
- * @description
- * Adds a new route definition to the `$route` service.
- */
- this.when = function(path, route) {
- //copy original route object to preserve params inherited from proto chain
- var routeCopy = angular.copy(route);
- if (angular.isUndefined(routeCopy.reloadOnSearch)) {
- routeCopy.reloadOnSearch = true;
- }
- if (angular.isUndefined(routeCopy.caseInsensitiveMatch)) {
- routeCopy.caseInsensitiveMatch = this.caseInsensitiveMatch;
- }
- routes[path] = angular.extend(
- routeCopy,
- path && pathRegExp(path, routeCopy)
- );
-
- // create redirection for trailing slashes
- if (path) {
- var redirectPath = (path[path.length - 1] == '/')
- ? path.substr(0, path.length - 1)
- : path + '/';
-
- routes[redirectPath] = angular.extend(
- {redirectTo: path},
- pathRegExp(redirectPath, routeCopy)
- );
- }
-
- return this;
- };
-
- /**
- * @ngdoc property
- * @name $routeProvider#caseInsensitiveMatch
- * @description
- *
- * A boolean property indicating if routes defined
- * using this provider should be matched using a case insensitive
- * algorithm. Defaults to `false`.
- */
- this.caseInsensitiveMatch = false;
-
- /**
- * @param path {string} path
- * @param opts {Object} options
- * @return {?Object}
- *
- * @description
- * Normalizes the given path, returning a regular expression
- * and the original path.
- *
- * Inspired by pathRexp in visionmedia/express/lib/utils.js.
- */
- function pathRegExp(path, opts) {
- var insensitive = opts.caseInsensitiveMatch,
- ret = {
- originalPath: path,
- regexp: path
- },
- keys = ret.keys = [];
-
- path = path
- .replace(/([().])/g, '\\$1')
- .replace(/(\/)?:(\w+)([\?\*])?/g, function(_, slash, key, option) {
- var optional = option === '?' ? option : null;
- var star = option === '*' ? option : null;
- keys.push({ name: key, optional: !!optional });
- slash = slash || '';
- return ''
- + (optional ? '' : slash)
- + '(?:'
- + (optional ? slash : '')
- + (star && '(.+?)' || '([^/]+)')
- + (optional || '')
- + ')'
- + (optional || '');
- })
- .replace(/([\/$\*])/g, '\\$1');
-
- ret.regexp = new RegExp('^' + path + '$', insensitive ? 'i' : '');
- return ret;
- }
-
- /**
- * @ngdoc method
- * @name $routeProvider#otherwise
- *
- * @description
- * Sets route definition that will be used on route change when no other route definition
- * is matched.
- *
- * @param {Object|string} params Mapping information to be assigned to `$route.current`.
- * If called with a string, the value maps to `redirectTo`.
- * @returns {Object} self
- */
- this.otherwise = function(params) {
- if (typeof params === 'string') {
- params = {redirectTo: params};
- }
- this.when(null, params);
- return this;
- };
-
-
- this.$get = ['$rootScope',
- '$location',
- '$routeParams',
- '$q',
- '$injector',
- '$templateRequest',
- '$sce',
- function($rootScope, $location, $routeParams, $q, $injector, $templateRequest, $sce) {
-
- /**
- * @ngdoc service
- * @name $route
- * @requires $location
- * @requires $routeParams
- *
- * @property {Object} current Reference to the current route definition.
- * The route definition contains:
- *
- * - `controller`: The controller constructor as define in route definition.
- * - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for
- * controller instantiation. The `locals` contain
- * the resolved values of the `resolve` map. Additionally the `locals` also contain:
- *
- * - `$scope` - The current route scope.
- * - `$template` - The current route template HTML.
- *
- * @property {Object} routes Object with all route configuration Objects as its properties.
- *
- * @description
- * `$route` is used for deep-linking URLs to controllers and views (HTML partials).
- * It watches `$location.url()` and tries to map the path to an existing route definition.
- *
- * Requires the {@link ngRoute `ngRoute`} module to be installed.
- *
- * You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API.
- *
- * The `$route` service is typically used in conjunction with the
- * {@link ngRoute.directive:ngView `ngView`} directive and the
- * {@link ngRoute.$routeParams `$routeParams`} service.
- *
- * @example
- * This example shows how changing the URL hash causes the `$route` to match a route against the
- * URL, and the `ngView` pulls in the partial.
- *
- * <example name="$route-service" module="ngRouteExample"
- * deps="angular-route.js" fixBase="true">
- * <file name="index.html">
- * <div ng-controller="MainController">
- * Choose:
- * <a href="Book/Moby">Moby</a> |
- * <a href="Book/Moby/ch/1">Moby: Ch1</a> |
- * <a href="Book/Gatsby">Gatsby</a> |
- * <a href="Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> |
- * <a href="Book/Scarlet">Scarlet Letter</a><br/>
- *
- * <div ng-view></div>
- *
- * <hr />
- *
- * <pre>$location.path() = {{$location.path()}}</pre>
- * <pre>$route.current.templateUrl = {{$route.current.templateUrl}}</pre>
- * <pre>$route.current.params = {{$route.current.params}}</pre>
- * <pre>$route.current.scope.name = {{$route.current.scope.name}}</pre>
- * <pre>$routeParams = {{$routeParams}}</pre>
- * </div>
- * </file>
- *
- * <file name="book.html">
- * controller: {{name}}<br />
- * Book Id: {{params.bookId}}<br />
- * </file>
- *
- * <file name="chapter.html">
- * controller: {{name}}<br />
- * Book Id: {{params.bookId}}<br />
- * Chapter Id: {{params.chapterId}}
- * </file>
- *
- * <file name="script.js">
- * angular.module('ngRouteExample', ['ngRoute'])
- *
- * .controller('MainController', function($scope, $route, $routeParams, $location) {
- * $scope.$route = $route;
- * $scope.$location = $location;
- * $scope.$routeParams = $routeParams;
- * })
- *
- * .controller('BookController', function($scope, $routeParams) {
- * $scope.name = "BookController";
- * $scope.params = $routeParams;
- * })
- *
- * .controller('ChapterController', function($scope, $routeParams) {
- * $scope.name = "ChapterController";
- * $scope.params = $routeParams;
- * })
- *
- * .config(function($routeProvider, $locationProvider) {
- * $routeProvider
- * .when('/Book/:bookId', {
- * templateUrl: 'book.html',
- * controller: 'BookController',
- * resolve: {
- * // I will cause a 1 second delay
- * delay: function($q, $timeout) {
- * var delay = $q.defer();
- * $timeout(delay.resolve, 1000);
- * return delay.promise;
- * }
- * }
- * })
- * .when('/Book/:bookId/ch/:chapterId', {
- * templateUrl: 'chapter.html',
- * controller: 'ChapterController'
- * });
- *
- * // configure html5 to get links working on jsfiddle
- * $locationProvider.html5Mode(true);
- * });
- *
- * </file>
- *
- * <file name="protractor.js" type="protractor">
- * it('should load and compile correct template', function() {
- * element(by.linkText('Moby: Ch1')).click();
- * var content = element(by.css('[ng-view]')).getText();
- * expect(content).toMatch(/controller\: ChapterController/);
- * expect(content).toMatch(/Book Id\: Moby/);
- * expect(content).toMatch(/Chapter Id\: 1/);
- *
- * element(by.partialLinkText('Scarlet')).click();
- *
- * content = element(by.css('[ng-view]')).getText();
- * expect(content).toMatch(/controller\: BookController/);
- * expect(content).toMatch(/Book Id\: Scarlet/);
- * });
- * </file>
- * </example>
- */
-
- /**
- * @ngdoc event
- * @name $route#$routeChangeStart
- * @eventType broadcast on root scope
- * @description
- * Broadcasted before a route change. At this point the route services starts
- * resolving all of the dependencies needed for the route change to occur.
- * Typically this involves fetching the view template as well as any dependencies
- * defined in `resolve` route property. Once all of the dependencies are resolved
- * `$routeChangeSuccess` is fired.
- *
- * The route change (and the `$location` change that triggered it) can be prevented
- * by calling `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on}
- * for more details about event object.
- *
- * @param {Object} angularEvent Synthetic event object.
- * @param {Route} next Future route information.
- * @param {Route} current Current route information.
- */
-
- /**
- * @ngdoc event
- * @name $route#$routeChangeSuccess
- * @eventType broadcast on root scope
- * @description
- * Broadcasted after a route dependencies are resolved.
- * {@link ngRoute.directive:ngView ngView} listens for the directive
- * to instantiate the controller and render the view.
- *
- * @param {Object} angularEvent Synthetic event object.
- * @param {Route} current Current route information.
- * @param {Route|Undefined} previous Previous route information, or undefined if current is
- * first route entered.
- */
-
- /**
- * @ngdoc event
- * @name $route#$routeChangeError
- * @eventType broadcast on root scope
- * @description
- * Broadcasted if any of the resolve promises are rejected.
- *
- * @param {Object} angularEvent Synthetic event object
- * @param {Route} current Current route information.
- * @param {Route} previous Previous route information.
- * @param {Route} rejection Rejection of the promise. Usually the error of the failed promise.
- */
-
- /**
- * @ngdoc event
- * @name $route#$routeUpdate
- * @eventType broadcast on root scope
- * @description
- *
- * The `reloadOnSearch` property has been set to false, and we are reusing the same
- * instance of the Controller.
- */
-
- var forceReload = false,
- preparedRoute,
- preparedRouteIsUpdateOnly,
- $route = {
- routes: routes,
-
- /**
- * @ngdoc method
- * @name $route#reload
- *
- * @description
- * Causes `$route` service to reload the current route even if
- * {@link ng.$location $location} hasn't changed.
- *
- * As a result of that, {@link ngRoute.directive:ngView ngView}
- * creates new scope and reinstantiates the controller.
- */
- reload: function() {
- forceReload = true;
- $rootScope.$evalAsync(function() {
- // Don't support cancellation of a reload for now...
- prepareRoute();
- commitRoute();
- });
- },
-
- /**
- * @ngdoc method
- * @name $route#updateParams
- *
- * @description
- * Causes `$route` service to update the current URL, replacing
- * current route parameters with those specified in `newParams`.
- * Provided property names that match the route's path segment
- * definitions will be interpolated into the location's path, while
- * remaining properties will be treated as query params.
- *
- * @param {Object} newParams mapping of URL parameter names to values
- */
- updateParams: function(newParams) {
- if (this.current && this.current.$$route) {
- var searchParams = {}, self=this;
-
- angular.forEach(Object.keys(newParams), function(key) {
- if (!self.current.pathParams[key]) searchParams[key] = newParams[key];
- });
-
- newParams = angular.extend({}, this.current.params, newParams);
- $location.path(interpolate(this.current.$$route.originalPath, newParams));
- $location.search(angular.extend({}, $location.search(), searchParams));
- }
- else {
- throw $routeMinErr('norout', 'Tried updating route when with no current route');
- }
- }
- };
-
- $rootScope.$on('$locationChangeStart', prepareRoute);
- $rootScope.$on('$locationChangeSuccess', commitRoute);
-
- return $route;
-
- /////////////////////////////////////////////////////
-
- /**
- * @param on {string} current url
- * @param route {Object} route regexp to match the url against
- * @return {?Object}
- *
- * @description
- * Check if the route matches the current url.
- *
- * Inspired by match in
- * visionmedia/express/lib/router/router.js.
- */
- function switchRouteMatcher(on, route) {
- var keys = route.keys,
- params = {};
-
- if (!route.regexp) return null;
-
- var m = route.regexp.exec(on);
- if (!m) return null;
-
- for (var i = 1, len = m.length; i < len; ++i) {
- var key = keys[i - 1];
-
- var val = m[i];
-
- if (key && val) {
- params[key.name] = val;
- }
- }
- return params;
- }
-
- function prepareRoute($locationEvent) {
- var lastRoute = $route.current;
-
- preparedRoute = parseRoute();
- preparedRouteIsUpdateOnly = preparedRoute && lastRoute && preparedRoute.$$route === lastRoute.$$route
- && angular.equals(preparedRoute.pathParams, lastRoute.pathParams)
- && !preparedRoute.reloadOnSearch && !forceReload;
-
- if (!preparedRouteIsUpdateOnly && (lastRoute || preparedRoute)) {
- if ($rootScope.$broadcast('$routeChangeStart', preparedRoute, lastRoute).defaultPrevented) {
- if ($locationEvent) {
- $locationEvent.preventDefault();
- }
- }
- }
- }
-
- function commitRoute() {
- var lastRoute = $route.current;
- var nextRoute = preparedRoute;
-
- if (preparedRouteIsUpdateOnly) {
- lastRoute.params = nextRoute.params;
- angular.copy(lastRoute.params, $routeParams);
- $rootScope.$broadcast('$routeUpdate', lastRoute);
- } else if (nextRoute || lastRoute) {
- forceReload = false;
- $route.current = nextRoute;
- if (nextRoute) {
- if (nextRoute.redirectTo) {
- if (angular.isString(nextRoute.redirectTo)) {
- $location.path(interpolate(nextRoute.redirectTo, nextRoute.params)).search(nextRoute.params)
- .replace();
- } else {
- $location.url(nextRoute.redirectTo(nextRoute.pathParams, $location.path(), $location.search()))
- .replace();
- }
- }
- }
-
- $q.when(nextRoute).
- then(function() {
- if (nextRoute) {
- var locals = angular.extend({}, nextRoute.resolve),
- template, templateUrl;
-
- angular.forEach(locals, function(value, key) {
- locals[key] = angular.isString(value) ?
- $injector.get(value) : $injector.invoke(value, null, null, key);
- });
-
- if (angular.isDefined(template = nextRoute.template)) {
- if (angular.isFunction(template)) {
- template = template(nextRoute.params);
- }
- } else if (angular.isDefined(templateUrl = nextRoute.templateUrl)) {
- if (angular.isFunction(templateUrl)) {
- templateUrl = templateUrl(nextRoute.params);
- }
- templateUrl = $sce.getTrustedResourceUrl(templateUrl);
- if (angular.isDefined(templateUrl)) {
- nextRoute.loadedTemplateUrl = templateUrl;
- template = $templateRequest(templateUrl);
- }
- }
- if (angular.isDefined(template)) {
- locals['$template'] = template;
- }
- return $q.all(locals);
- }
- }).
- // after route change
- then(function(locals) {
- if (nextRoute == $route.current) {
- if (nextRoute) {
- nextRoute.locals = locals;
- angular.copy(nextRoute.params, $routeParams);
- }
- $rootScope.$broadcast('$routeChangeSuccess', nextRoute, lastRoute);
- }
- }, function(error) {
- if (nextRoute == $route.current) {
- $rootScope.$broadcast('$routeChangeError', nextRoute, lastRoute, error);
- }
- });
- }
- }
-
-
- /**
- * @returns {Object} the current active route, by matching it against the URL
- */
- function parseRoute() {
- // Match a route
- var params, match;
- angular.forEach(routes, function(route, path) {
- if (!match && (params = switchRouteMatcher($location.path(), route))) {
- match = inherit(route, {
- params: angular.extend({}, $location.search(), params),
- pathParams: params});
- match.$$route = route;
- }
- });
- // No route matched; fallback to "otherwise" route
- return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}});
- }
-
- /**
- * @returns {string} interpolation of the redirect path with the parameters
- */
- function interpolate(string, params) {
- var result = [];
- angular.forEach((string || '').split(':'), function(segment, i) {
- if (i === 0) {
- result.push(segment);
- } else {
- var segmentMatch = segment.match(/(\w+)(?:[?*])?(.*)/);
- var key = segmentMatch[1];
- result.push(params[key]);
- result.push(segmentMatch[2] || '');
- delete params[key];
- }
- });
- return result.join('');
- }
- }];
-}
-
-ngRouteModule.provider('$routeParams', $RouteParamsProvider);
-
-
-/**
- * @ngdoc service
- * @name $routeParams
- * @requires $route
- *
- * @description
- * The `$routeParams` service allows you to retrieve the current set of route parameters.
- *
- * Requires the {@link ngRoute `ngRoute`} module to be installed.
- *
- * The route parameters are a combination of {@link ng.$location `$location`}'s
- * {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}.
- * The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched.
- *
- * In case of parameter name collision, `path` params take precedence over `search` params.
- *
- * The service guarantees that the identity of the `$routeParams` object will remain unchanged
- * (but its properties will likely change) even when a route change occurs.
- *
- * Note that the `$routeParams` are only updated *after* a route change completes successfully.
- * This means that you cannot rely on `$routeParams` being correct in route resolve functions.
- * Instead you can use `$route.current.params` to access the new route's parameters.
- *
- * @example
- * ```js
- * // Given:
- * // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby
- * // Route: /Chapter/:chapterId/Section/:sectionId
- * //
- * // Then
- * $routeParams ==> {chapterId:'1', sectionId:'2', search:'moby'}
- * ```
- */
-function $RouteParamsProvider() {
- this.$get = function() { return {}; };
-}
-
-ngRouteModule.directive('ngView', ngViewFactory);
-ngRouteModule.directive('ngView', ngViewFillContentFactory);
-
-
-/**
- * @ngdoc directive
- * @name ngView
- * @restrict ECA
- *
- * @description
- * # Overview
- * `ngView` is a directive that complements the {@link ngRoute.$route $route} service by
- * including the rendered template of the current route into the main layout (`index.html`) file.
- * Every time the current route changes, the included view changes with it according to the
- * configuration of the `$route` service.
- *
- * Requires the {@link ngRoute `ngRoute`} module to be installed.
- *
- * @animations
- * enter - animation is used to bring new content into the browser.
- * leave - animation is used to animate existing content away.
- *
- * The enter and leave animation occur concurrently.
- *
- * @scope
- * @priority 400
- * @param {string=} onload Expression to evaluate whenever the view updates.
- *
- * @param {string=} autoscroll Whether `ngView` should call {@link ng.$anchorScroll
- * $anchorScroll} to scroll the viewport after the view is updated.
- *
- * - If the attribute is not set, disable scrolling.
- * - If the attribute is set without value, enable scrolling.
- * - Otherwise enable scrolling only if the `autoscroll` attribute value evaluated
- * as an expression yields a truthy value.
- * @example
- <example name="ngView-directive" module="ngViewExample"
- deps="angular-route.js;angular-animate.js"
- animations="true" fixBase="true">
- <file name="index.html">
- <div ng-controller="MainCtrl as main">
- Choose:
- <a href="Book/Moby">Moby</a> |
- <a href="Book/Moby/ch/1">Moby: Ch1</a> |
- <a href="Book/Gatsby">Gatsby</a> |
- <a href="Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> |
- <a href="Book/Scarlet">Scarlet Letter</a><br/>
-
- <div class="view-animate-container">
- <div ng-view class="view-animate"></div>
- </div>
- <hr />
-
- <pre>$location.path() = {{main.$location.path()}}</pre>
- <pre>$route.current.templateUrl = {{main.$route.current.templateUrl}}</pre>
- <pre>$route.current.params = {{main.$route.current.params}}</pre>
- <pre>$routeParams = {{main.$routeParams}}</pre>
- </div>
- </file>
-
- <file name="book.html">
- <div>
- controller: {{book.name}}<br />
- Book Id: {{book.params.bookId}}<br />
- </div>
- </file>
-
- <file name="chapter.html">
- <div>
- controller: {{chapter.name}}<br />
- Book Id: {{chapter.params.bookId}}<br />
- Chapter Id: {{chapter.params.chapterId}}
- </div>
- </file>
-
- <file name="animations.css">
- .view-animate-container {
- position:relative;
- height:100px!important;
- position:relative;
- background:white;
- border:1px solid black;
- height:40px;
- overflow:hidden;
- }
-
- .view-animate {
- padding:10px;
- }
-
- .view-animate.ng-enter, .view-animate.ng-leave {
- -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
- transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
-
- display:block;
- width:100%;
- border-left:1px solid black;
-
- position:absolute;
- top:0;
- left:0;
- right:0;
- bottom:0;
- padding:10px;
- }
-
- .view-animate.ng-enter {
- left:100%;
- }
- .view-animate.ng-enter.ng-enter-active {
- left:0;
- }
- .view-animate.ng-leave.ng-leave-active {
- left:-100%;
- }
- </file>
-
- <file name="script.js">
- angular.module('ngViewExample', ['ngRoute', 'ngAnimate'])
- .config(['$routeProvider', '$locationProvider',
- function($routeProvider, $locationProvider) {
- $routeProvider
- .when('/Book/:bookId', {
- templateUrl: 'book.html',
- controller: 'BookCtrl',
- controllerAs: 'book'
- })
- .when('/Book/:bookId/ch/:chapterId', {
- templateUrl: 'chapter.html',
- controller: 'ChapterCtrl',
- controllerAs: 'chapter'
- });
-
- $locationProvider.html5Mode(true);
- }])
- .controller('MainCtrl', ['$route', '$routeParams', '$location',
- function($route, $routeParams, $location) {
- this.$route = $route;
- this.$location = $location;
- this.$routeParams = $routeParams;
- }])
- .controller('BookCtrl', ['$routeParams', function($routeParams) {
- this.name = "BookCtrl";
- this.params = $routeParams;
- }])
- .controller('ChapterCtrl', ['$routeParams', function($routeParams) {
- this.name = "ChapterCtrl";
- this.params = $routeParams;
- }]);
-
- </file>
-
- <file name="protractor.js" type="protractor">
- it('should load and compile correct template', function() {
- element(by.linkText('Moby: Ch1')).click();
- var content = element(by.css('[ng-view]')).getText();
- expect(content).toMatch(/controller\: ChapterCtrl/);
- expect(content).toMatch(/Book Id\: Moby/);
- expect(content).toMatch(/Chapter Id\: 1/);
-
- element(by.partialLinkText('Scarlet')).click();
-
- content = element(by.css('[ng-view]')).getText();
- expect(content).toMatch(/controller\: BookCtrl/);
- expect(content).toMatch(/Book Id\: Scarlet/);
- });
- </file>
- </example>
- */
-
-
-/**
- * @ngdoc event
- * @name ngView#$viewContentLoaded
- * @eventType emit on the current ngView scope
- * @description
- * Emitted every time the ngView content is reloaded.
- */
-ngViewFactory.$inject = ['$route', '$anchorScroll', '$animate'];
-function ngViewFactory($route, $anchorScroll, $animate) {
- return {
- restrict: 'ECA',
- terminal: true,
- priority: 400,
- transclude: 'element',
- link: function(scope, $element, attr, ctrl, $transclude) {
- var currentScope,
- currentElement,
- previousLeaveAnimation,
- autoScrollExp = attr.autoscroll,
- onloadExp = attr.onload || '';
-
- scope.$on('$routeChangeSuccess', update);
- update();
-
- function cleanupLastView() {
- if (previousLeaveAnimation) {
- $animate.cancel(previousLeaveAnimation);
- previousLeaveAnimation = null;
- }
-
- if (currentScope) {
- currentScope.$destroy();
- currentScope = null;
- }
- if (currentElement) {
- previousLeaveAnimation = $animate.leave(currentElement);
- previousLeaveAnimation.then(function() {
- previousLeaveAnimation = null;
- });
- currentElement = null;
- }
- }
-
- function update() {
- var locals = $route.current && $route.current.locals,
- template = locals && locals.$template;
-
- if (angular.isDefined(template)) {
- var newScope = scope.$new();
- var current = $route.current;
-
- // Note: This will also link all children of ng-view that were contained in the original
- // html. If that content contains controllers, ... they could pollute/change the scope.
- // However, using ng-view on an element with additional content does not make sense...
- // Note: We can't remove them in the cloneAttchFn of $transclude as that
- // function is called before linking the content, which would apply child
- // directives to non existing elements.
- var clone = $transclude(newScope, function(clone) {
- $animate.enter(clone, null, currentElement || $element).then(function onNgViewEnter() {
- if (angular.isDefined(autoScrollExp)
- && (!autoScrollExp || scope.$eval(autoScrollExp))) {
- $anchorScroll();
- }
- });
- cleanupLastView();
- });
-
- currentElement = clone;
- currentScope = current.scope = newScope;
- currentScope.$emit('$viewContentLoaded');
- currentScope.$eval(onloadExp);
- } else {
- cleanupLastView();
- }
- }
- }
- };
-}
-
-// This directive is called during the $transclude call of the first `ngView` directive.
-// It will replace and compile the content of the element with the loaded template.
-// We need this directive so that the element content is already filled when
-// the link function of another directive on the same element as ngView
-// is called.
-ngViewFillContentFactory.$inject = ['$compile', '$controller', '$route'];
-function ngViewFillContentFactory($compile, $controller, $route) {
- return {
- restrict: 'ECA',
- priority: -400,
- link: function(scope, $element) {
- var current = $route.current,
- locals = current.locals;
-
- $element.html(locals.$template);
-
- var link = $compile($element.contents());
-
- if (current.controller) {
- locals.$scope = scope;
- var controller = $controller(current.controller, locals);
- if (current.controllerAs) {
- scope[current.controllerAs] = controller;
- }
- $element.data('$ngControllerController', controller);
- $element.children().data('$ngControllerController', controller);
- }
-
- link(scope);
- }
- };
-}
-
-
-})(window, window.angular);
diff --git a/framework/src/onos/web/gui/src/main/webapp/tp/angular-route.min.js b/framework/src/onos/web/gui/src/main/webapp/tp/angular-route.min.js
deleted file mode 100644
index b03fc57a..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tp/angular-route.min.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- AngularJS v1.3.5
- (c) 2010-2014 Google, Inc. http://angularjs.org
- License: MIT
-*/
-(function(p,d,C){'use strict';function v(r,h,g){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,y){function z(){k&&(g.cancel(k),k=null);l&&(l.$destroy(),l=null);m&&(k=g.leave(m),k.then(function(){k=null}),m=null)}function x(){var b=r.current&&r.current.locals;if(d.isDefined(b&&b.$template)){var b=a.$new(),f=r.current;m=y(b,function(b){g.enter(b,null,m||c).then(function(){!d.isDefined(t)||t&&!a.$eval(t)||h()});z()});l=f.scope=b;l.$emit("$viewContentLoaded");
-l.$eval(w)}else z()}var l,m,k,t=b.autoscroll,w=b.onload||"";a.$on("$routeChangeSuccess",x);x()}}}function A(d,h,g){return{restrict:"ECA",priority:-400,link:function(a,c){var b=g.current,f=b.locals;c.html(f.$template);var y=d(c.contents());b.controller&&(f.$scope=a,f=h(b.controller,f),b.controllerAs&&(a[b.controllerAs]=f),c.data("$ngControllerController",f),c.children().data("$ngControllerController",f));y(a)}}}p=d.module("ngRoute",["ng"]).provider("$route",function(){function r(a,c){return d.extend(Object.create(a),
-c)}function h(a,d){var b=d.caseInsensitiveMatch,f={originalPath:a,regexp:a},g=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,function(a,d,b,c){a="?"===c?c:null;c="*"===c?c:null;g.push({name:b,optional:!!a});d=d||"";return""+(a?"":d)+"(?:"+(a?d:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=new RegExp("^"+a+"$",b?"i":"");return f}var g={};this.when=function(a,c){var b=d.copy(c);d.isUndefined(b.reloadOnSearch)&&(b.reloadOnSearch=!0);
-d.isUndefined(b.caseInsensitiveMatch)&&(b.caseInsensitiveMatch=this.caseInsensitiveMatch);g[a]=d.extend(b,a&&h(a,b));if(a){var f="/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";g[f]=d.extend({redirectTo:a},h(f,b))}return this};this.caseInsensitiveMatch=!1;this.otherwise=function(a){"string"===typeof a&&(a={redirectTo:a});this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$templateRequest","$sce",function(a,c,b,f,h,p,x){function l(b){var e=s.current;
-(v=(n=k())&&e&&n.$$route===e.$$route&&d.equals(n.pathParams,e.pathParams)&&!n.reloadOnSearch&&!w)||!e&&!n||a.$broadcast("$routeChangeStart",n,e).defaultPrevented&&b&&b.preventDefault()}function m(){var u=s.current,e=n;if(v)u.params=e.params,d.copy(u.params,b),a.$broadcast("$routeUpdate",u);else if(e||u)w=!1,(s.current=e)&&e.redirectTo&&(d.isString(e.redirectTo)?c.path(t(e.redirectTo,e.params)).search(e.params).replace():c.url(e.redirectTo(e.pathParams,c.path(),c.search())).replace()),f.when(e).then(function(){if(e){var a=
-d.extend({},e.resolve),b,c;d.forEach(a,function(b,e){a[e]=d.isString(b)?h.get(b):h.invoke(b,null,null,e)});d.isDefined(b=e.template)?d.isFunction(b)&&(b=b(e.params)):d.isDefined(c=e.templateUrl)&&(d.isFunction(c)&&(c=c(e.params)),c=x.getTrustedResourceUrl(c),d.isDefined(c)&&(e.loadedTemplateUrl=c,b=p(c)));d.isDefined(b)&&(a.$template=b);return f.all(a)}}).then(function(c){e==s.current&&(e&&(e.locals=c,d.copy(e.params,b)),a.$broadcast("$routeChangeSuccess",e,u))},function(b){e==s.current&&a.$broadcast("$routeChangeError",
-e,u,b)})}function k(){var a,b;d.forEach(g,function(f,g){var q;if(q=!b){var h=c.path();q=f.keys;var l={};if(f.regexp)if(h=f.regexp.exec(h)){for(var k=1,m=h.length;k<m;++k){var n=q[k-1],p=h[k];n&&p&&(l[n.name]=p)}q=l}else q=null;else q=null;q=a=q}q&&(b=r(f,{params:d.extend({},c.search(),a),pathParams:a}),b.$$route=f)});return b||g[null]&&r(g[null],{params:{},pathParams:{}})}function t(a,b){var c=[];d.forEach((a||"").split(":"),function(a,d){if(0===d)c.push(a);else{var f=a.match(/(\w+)(?:[?*])?(.*)/),
-g=f[1];c.push(b[g]);c.push(f[2]||"");delete b[g]}});return c.join("")}var w=!1,n,v,s={routes:g,reload:function(){w=!0;a.$evalAsync(function(){l();m()})},updateParams:function(a){if(this.current&&this.current.$$route){var b={},f=this;d.forEach(Object.keys(a),function(c){f.current.pathParams[c]||(b[c]=a[c])});a=d.extend({},this.current.params,a);c.path(t(this.current.$$route.originalPath,a));c.search(d.extend({},c.search(),b))}else throw B("norout");}};a.$on("$locationChangeStart",l);a.$on("$locationChangeSuccess",
-m);return s}]});var B=d.$$minErr("ngRoute");p.provider("$routeParams",function(){this.$get=function(){return{}}});p.directive("ngView",v);p.directive("ngView",A);v.$inject=["$route","$anchorScroll","$animate"];A.$inject=["$compile","$controller","$route"]})(window,window.angular);
-//# sourceMappingURL=angular-route.min.js.map
diff --git a/framework/src/onos/web/gui/src/main/webapp/tp/angular.js b/framework/src/onos/web/gui/src/main/webapp/tp/angular.js
deleted file mode 100644
index 754f9aaf..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tp/angular.js
+++ /dev/null
@@ -1,25917 +0,0 @@
-/**
- * @license AngularJS v1.3.5
- * (c) 2010-2014 Google, Inc. http://angularjs.org
- * License: MIT
- */
-(function(window, document, undefined) {'use strict';
-
-/**
- * @description
- *
- * This object provides a utility for producing rich Error messages within
- * Angular. It can be called as follows:
- *
- * var exampleMinErr = minErr('example');
- * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);
- *
- * The above creates an instance of minErr in the example namespace. The
- * resulting error will have a namespaced error code of example.one. The
- * resulting error will replace {0} with the value of foo, and {1} with the
- * value of bar. The object is not restricted in the number of arguments it can
- * take.
- *
- * If fewer arguments are specified than necessary for interpolation, the extra
- * interpolation markers will be preserved in the final string.
- *
- * Since data will be parsed statically during a build step, some restrictions
- * are applied with respect to how minErr instances are created and called.
- * Instances should have names of the form namespaceMinErr for a minErr created
- * using minErr('namespace') . Error codes, namespaces and template strings
- * should all be static strings, not variables or general expressions.
- *
- * @param {string} module The namespace to use for the new minErr instance.
- * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning
- * error from returned function, for cases when a particular type of error is useful.
- * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance
- */
-
-function minErr(module, ErrorConstructor) {
- ErrorConstructor = ErrorConstructor || Error;
- return function() {
- var code = arguments[0],
- prefix = '[' + (module ? module + ':' : '') + code + '] ',
- template = arguments[1],
- templateArgs = arguments,
-
- message, i;
-
- message = prefix + template.replace(/\{\d+\}/g, function(match) {
- var index = +match.slice(1, -1), arg;
-
- if (index + 2 < templateArgs.length) {
- return toDebugString(templateArgs[index + 2]);
- }
- return match;
- });
-
- message = message + '\nhttp://errors.angularjs.org/1.3.5/' +
- (module ? module + '/' : '') + code;
- for (i = 2; i < arguments.length; i++) {
- message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' +
- encodeURIComponent(toDebugString(arguments[i]));
- }
- return new ErrorConstructor(message);
- };
-}
-
-/* We need to tell jshint what variables are being exported */
-/* global angular: true,
- msie: true,
- jqLite: true,
- jQuery: true,
- slice: true,
- splice: true,
- push: true,
- toString: true,
- ngMinErr: true,
- angularModule: true,
- uid: true,
- REGEX_STRING_REGEXP: true,
- VALIDITY_STATE_PROPERTY: true,
-
- lowercase: true,
- uppercase: true,
- manualLowercase: true,
- manualUppercase: true,
- nodeName_: true,
- isArrayLike: true,
- forEach: true,
- sortedKeys: true,
- forEachSorted: true,
- reverseParams: true,
- nextUid: true,
- setHashKey: true,
- extend: true,
- int: true,
- inherit: true,
- noop: true,
- identity: true,
- valueFn: true,
- isUndefined: true,
- isDefined: true,
- isObject: true,
- isString: true,
- isNumber: true,
- isDate: true,
- isArray: true,
- isFunction: true,
- isRegExp: true,
- isWindow: true,
- isScope: true,
- isFile: true,
- isBlob: true,
- isBoolean: true,
- isPromiseLike: true,
- trim: true,
- escapeForRegexp: true,
- isElement: true,
- makeMap: true,
- includes: true,
- arrayRemove: true,
- copy: true,
- shallowCopy: true,
- equals: true,
- csp: true,
- concat: true,
- sliceArgs: true,
- bind: true,
- toJsonReplacer: true,
- toJson: true,
- fromJson: true,
- startingTag: true,
- tryDecodeURIComponent: true,
- parseKeyValue: true,
- toKeyValue: true,
- encodeUriSegment: true,
- encodeUriQuery: true,
- angularInit: true,
- bootstrap: true,
- getTestability: true,
- snake_case: true,
- bindJQuery: true,
- assertArg: true,
- assertArgFn: true,
- assertNotHasOwnProperty: true,
- getter: true,
- getBlockNodes: true,
- hasOwnProperty: true,
- createMap: true,
-
- NODE_TYPE_ELEMENT: true,
- NODE_TYPE_TEXT: true,
- NODE_TYPE_COMMENT: true,
- NODE_TYPE_DOCUMENT: true,
- NODE_TYPE_DOCUMENT_FRAGMENT: true,
-*/
-
-////////////////////////////////////
-
-/**
- * @ngdoc module
- * @name ng
- * @module ng
- * @description
- *
- * # ng (core module)
- * The ng module is loaded by default when an AngularJS application is started. The module itself
- * contains the essential components for an AngularJS application to function. The table below
- * lists a high level breakdown of each of the services/factories, filters, directives and testing
- * components available within this core module.
- *
- * <div doc-module-components="ng"></div>
- */
-
-var REGEX_STRING_REGEXP = /^\/(.+)\/([a-z]*)$/;
-
-// The name of a form control's ValidityState property.
-// This is used so that it's possible for internal tests to create mock ValidityStates.
-var VALIDITY_STATE_PROPERTY = 'validity';
-
-/**
- * @ngdoc function
- * @name angular.lowercase
- * @module ng
- * @kind function
- *
- * @description Converts the specified string to lowercase.
- * @param {string} string String to be converted to lowercase.
- * @returns {string} Lowercased string.
- */
-var lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;};
-var hasOwnProperty = Object.prototype.hasOwnProperty;
-
-/**
- * @ngdoc function
- * @name angular.uppercase
- * @module ng
- * @kind function
- *
- * @description Converts the specified string to uppercase.
- * @param {string} string String to be converted to uppercase.
- * @returns {string} Uppercased string.
- */
-var uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;};
-
-
-var manualLowercase = function(s) {
- /* jshint bitwise: false */
- return isString(s)
- ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})
- : s;
-};
-var manualUppercase = function(s) {
- /* jshint bitwise: false */
- return isString(s)
- ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})
- : s;
-};
-
-
-// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish
-// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods
-// with correct but slower alternatives.
-if ('i' !== 'I'.toLowerCase()) {
- lowercase = manualLowercase;
- uppercase = manualUppercase;
-}
-
-
-var
- msie, // holds major version number for IE, or NaN if UA is not IE.
- jqLite, // delay binding since jQuery could be loaded after us.
- jQuery, // delay binding
- slice = [].slice,
- splice = [].splice,
- push = [].push,
- toString = Object.prototype.toString,
- ngMinErr = minErr('ng'),
-
- /** @name angular */
- angular = window.angular || (window.angular = {}),
- angularModule,
- uid = 0;
-
-/**
- * documentMode is an IE-only property
- * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
- */
-msie = document.documentMode;
-
-
-/**
- * @private
- * @param {*} obj
- * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments,
- * String ...)
- */
-function isArrayLike(obj) {
- if (obj == null || isWindow(obj)) {
- return false;
- }
-
- var length = obj.length;
-
- if (obj.nodeType === NODE_TYPE_ELEMENT && length) {
- return true;
- }
-
- return isString(obj) || isArray(obj) || length === 0 ||
- typeof length === 'number' && length > 0 && (length - 1) in obj;
-}
-
-/**
- * @ngdoc function
- * @name angular.forEach
- * @module ng
- * @kind function
- *
- * @description
- * Invokes the `iterator` function once for each item in `obj` collection, which can be either an
- * object or an array. The `iterator` function is invoked with `iterator(value, key, obj)`, where `value`
- * is the value of an object property or an array element, `key` is the object property key or
- * array element index and obj is the `obj` itself. Specifying a `context` for the function is optional.
- *
- * It is worth noting that `.forEach` does not iterate over inherited properties because it filters
- * using the `hasOwnProperty` method.
- *
- * Unlike ES262's
- * [Array.prototype.forEach](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.18),
- * Providing 'undefined' or 'null' values for `obj` will not throw a TypeError, but rather just
- * return the value provided.
- *
- ```js
- var values = {name: 'misko', gender: 'male'};
- var log = [];
- angular.forEach(values, function(value, key) {
- this.push(key + ': ' + value);
- }, log);
- expect(log).toEqual(['name: misko', 'gender: male']);
- ```
- *
- * @param {Object|Array} obj Object to iterate over.
- * @param {Function} iterator Iterator function.
- * @param {Object=} context Object to become context (`this`) for the iterator function.
- * @returns {Object|Array} Reference to `obj`.
- */
-
-function forEach(obj, iterator, context) {
- var key, length;
- if (obj) {
- if (isFunction(obj)) {
- for (key in obj) {
- // Need to check if hasOwnProperty exists,
- // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function
- if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
- iterator.call(context, obj[key], key, obj);
- }
- }
- } else if (isArray(obj) || isArrayLike(obj)) {
- var isPrimitive = typeof obj !== 'object';
- for (key = 0, length = obj.length; key < length; key++) {
- if (isPrimitive || key in obj) {
- iterator.call(context, obj[key], key, obj);
- }
- }
- } else if (obj.forEach && obj.forEach !== forEach) {
- obj.forEach(iterator, context, obj);
- } else {
- for (key in obj) {
- if (obj.hasOwnProperty(key)) {
- iterator.call(context, obj[key], key, obj);
- }
- }
- }
- }
- return obj;
-}
-
-function sortedKeys(obj) {
- return Object.keys(obj).sort();
-}
-
-function forEachSorted(obj, iterator, context) {
- var keys = sortedKeys(obj);
- for (var i = 0; i < keys.length; i++) {
- iterator.call(context, obj[keys[i]], keys[i]);
- }
- return keys;
-}
-
-
-/**
- * when using forEach the params are value, key, but it is often useful to have key, value.
- * @param {function(string, *)} iteratorFn
- * @returns {function(*, string)}
- */
-function reverseParams(iteratorFn) {
- return function(value, key) { iteratorFn(key, value); };
-}
-
-/**
- * A consistent way of creating unique IDs in angular.
- *
- * Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before
- * we hit number precision issues in JavaScript.
- *
- * Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M
- *
- * @returns {number} an unique alpha-numeric string
- */
-function nextUid() {
- return ++uid;
-}
-
-
-/**
- * Set or clear the hashkey for an object.
- * @param obj object
- * @param h the hashkey (!truthy to delete the hashkey)
- */
-function setHashKey(obj, h) {
- if (h) {
- obj.$$hashKey = h;
- }
- else {
- delete obj.$$hashKey;
- }
-}
-
-/**
- * @ngdoc function
- * @name angular.extend
- * @module ng
- * @kind function
- *
- * @description
- * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
- * to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so
- * by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`.
- * Note: Keep in mind that `angular.extend` does not support recursive merge (deep copy).
- *
- * @param {Object} dst Destination object.
- * @param {...Object} src Source object(s).
- * @returns {Object} Reference to `dst`.
- */
-function extend(dst) {
- var h = dst.$$hashKey;
-
- for (var i = 1, ii = arguments.length; i < ii; i++) {
- var obj = arguments[i];
- if (obj) {
- var keys = Object.keys(obj);
- for (var j = 0, jj = keys.length; j < jj; j++) {
- var key = keys[j];
- dst[key] = obj[key];
- }
- }
- }
-
- setHashKey(dst, h);
- return dst;
-}
-
-function int(str) {
- return parseInt(str, 10);
-}
-
-
-function inherit(parent, extra) {
- return extend(Object.create(parent), extra);
-}
-
-/**
- * @ngdoc function
- * @name angular.noop
- * @module ng
- * @kind function
- *
- * @description
- * A function that performs no operations. This function can be useful when writing code in the
- * functional style.
- ```js
- function foo(callback) {
- var result = calculateResult();
- (callback || angular.noop)(result);
- }
- ```
- */
-function noop() {}
-noop.$inject = [];
-
-
-/**
- * @ngdoc function
- * @name angular.identity
- * @module ng
- * @kind function
- *
- * @description
- * A function that returns its first argument. This function is useful when writing code in the
- * functional style.
- *
- ```js
- function transformer(transformationFn, value) {
- return (transformationFn || angular.identity)(value);
- };
- ```
- */
-function identity($) {return $;}
-identity.$inject = [];
-
-
-function valueFn(value) {return function() {return value;};}
-
-/**
- * @ngdoc function
- * @name angular.isUndefined
- * @module ng
- * @kind function
- *
- * @description
- * Determines if a reference is undefined.
- *
- * @param {*} value Reference to check.
- * @returns {boolean} True if `value` is undefined.
- */
-function isUndefined(value) {return typeof value === 'undefined';}
-
-
-/**
- * @ngdoc function
- * @name angular.isDefined
- * @module ng
- * @kind function
- *
- * @description
- * Determines if a reference is defined.
- *
- * @param {*} value Reference to check.
- * @returns {boolean} True if `value` is defined.
- */
-function isDefined(value) {return typeof value !== 'undefined';}
-
-
-/**
- * @ngdoc function
- * @name angular.isObject
- * @module ng
- * @kind function
- *
- * @description
- * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not
- * considered to be objects. Note that JavaScript arrays are objects.
- *
- * @param {*} value Reference to check.
- * @returns {boolean} True if `value` is an `Object` but not `null`.
- */
-function isObject(value) {
- // http://jsperf.com/isobject4
- return value !== null && typeof value === 'object';
-}
-
-
-/**
- * @ngdoc function
- * @name angular.isString
- * @module ng
- * @kind function
- *
- * @description
- * Determines if a reference is a `String`.
- *
- * @param {*} value Reference to check.
- * @returns {boolean} True if `value` is a `String`.
- */
-function isString(value) {return typeof value === 'string';}
-
-
-/**
- * @ngdoc function
- * @name angular.isNumber
- * @module ng
- * @kind function
- *
- * @description
- * Determines if a reference is a `Number`.
- *
- * @param {*} value Reference to check.
- * @returns {boolean} True if `value` is a `Number`.
- */
-function isNumber(value) {return typeof value === 'number';}
-
-
-/**
- * @ngdoc function
- * @name angular.isDate
- * @module ng
- * @kind function
- *
- * @description
- * Determines if a value is a date.
- *
- * @param {*} value Reference to check.
- * @returns {boolean} True if `value` is a `Date`.
- */
-function isDate(value) {
- return toString.call(value) === '[object Date]';
-}
-
-
-/**
- * @ngdoc function
- * @name angular.isArray
- * @module ng
- * @kind function
- *
- * @description
- * Determines if a reference is an `Array`.
- *
- * @param {*} value Reference to check.
- * @returns {boolean} True if `value` is an `Array`.
- */
-var isArray = Array.isArray;
-
-/**
- * @ngdoc function
- * @name angular.isFunction
- * @module ng
- * @kind function
- *
- * @description
- * Determines if a reference is a `Function`.
- *
- * @param {*} value Reference to check.
- * @returns {boolean} True if `value` is a `Function`.
- */
-function isFunction(value) {return typeof value === 'function';}
-
-
-/**
- * Determines if a value is a regular expression object.
- *
- * @private
- * @param {*} value Reference to check.
- * @returns {boolean} True if `value` is a `RegExp`.
- */
-function isRegExp(value) {
- return toString.call(value) === '[object RegExp]';
-}
-
-
-/**
- * Checks if `obj` is a window object.
- *
- * @private
- * @param {*} obj Object to check
- * @returns {boolean} True if `obj` is a window obj.
- */
-function isWindow(obj) {
- return obj && obj.window === obj;
-}
-
-
-function isScope(obj) {
- return obj && obj.$evalAsync && obj.$watch;
-}
-
-
-function isFile(obj) {
- return toString.call(obj) === '[object File]';
-}
-
-
-function isBlob(obj) {
- return toString.call(obj) === '[object Blob]';
-}
-
-
-function isBoolean(value) {
- return typeof value === 'boolean';
-}
-
-
-function isPromiseLike(obj) {
- return obj && isFunction(obj.then);
-}
-
-
-var trim = function(value) {
- return isString(value) ? value.trim() : value;
-};
-
-// Copied from:
-// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021
-// Prereq: s is a string.
-var escapeForRegexp = function(s) {
- return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').
- replace(/\x08/g, '\\x08');
-};
-
-
-/**
- * @ngdoc function
- * @name angular.isElement
- * @module ng
- * @kind function
- *
- * @description
- * Determines if a reference is a DOM element (or wrapped jQuery element).
- *
- * @param {*} value Reference to check.
- * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element).
- */
-function isElement(node) {
- return !!(node &&
- (node.nodeName // we are a direct element
- || (node.prop && node.attr && node.find))); // we have an on and find method part of jQuery API
-}
-
-/**
- * @param str 'key1,key2,...'
- * @returns {object} in the form of {key1:true, key2:true, ...}
- */
-function makeMap(str) {
- var obj = {}, items = str.split(","), i;
- for (i = 0; i < items.length; i++)
- obj[ items[i] ] = true;
- return obj;
-}
-
-
-function nodeName_(element) {
- return lowercase(element.nodeName || (element[0] && element[0].nodeName));
-}
-
-function includes(array, obj) {
- return Array.prototype.indexOf.call(array, obj) != -1;
-}
-
-function arrayRemove(array, value) {
- var index = array.indexOf(value);
- if (index >= 0)
- array.splice(index, 1);
- return value;
-}
-
-/**
- * @ngdoc function
- * @name angular.copy
- * @module ng
- * @kind function
- *
- * @description
- * Creates a deep copy of `source`, which should be an object or an array.
- *
- * * If no destination is supplied, a copy of the object or array is created.
- * * If a destination is provided, all of its elements (for array) or properties (for objects)
- * are deleted and then all elements/properties from the source are copied to it.
- * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.
- * * If `source` is identical to 'destination' an exception will be thrown.
- *
- * @param {*} source The source that will be used to make a copy.
- * Can be any type, including primitives, `null`, and `undefined`.
- * @param {(Object|Array)=} destination Destination into which the source is copied. If
- * provided, must be of the same type as `source`.
- * @returns {*} The copy or updated `destination`, if `destination` was specified.
- *
- * @example
- <example module="copyExample">
- <file name="index.html">
- <div ng-controller="ExampleController">
- <form novalidate class="simple-form">
- Name: <input type="text" ng-model="user.name" /><br />
- E-mail: <input type="email" ng-model="user.email" /><br />
- Gender: <input type="radio" ng-model="user.gender" value="male" />male
- <input type="radio" ng-model="user.gender" value="female" />female<br />
- <button ng-click="reset()">RESET</button>
- <button ng-click="update(user)">SAVE</button>
- </form>
- <pre>form = {{user | json}}</pre>
- <pre>master = {{master | json}}</pre>
- </div>
-
- <script>
- angular.module('copyExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.master= {};
-
- $scope.update = function(user) {
- // Example with 1 argument
- $scope.master= angular.copy(user);
- };
-
- $scope.reset = function() {
- // Example with 2 arguments
- angular.copy($scope.master, $scope.user);
- };
-
- $scope.reset();
- }]);
- </script>
- </file>
- </example>
- */
-function copy(source, destination, stackSource, stackDest) {
- if (isWindow(source) || isScope(source)) {
- throw ngMinErr('cpws',
- "Can't copy! Making copies of Window or Scope instances is not supported.");
- }
-
- if (!destination) {
- destination = source;
- if (source) {
- if (isArray(source)) {
- destination = copy(source, [], stackSource, stackDest);
- } else if (isDate(source)) {
- destination = new Date(source.getTime());
- } else if (isRegExp(source)) {
- destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]);
- destination.lastIndex = source.lastIndex;
- } else if (isObject(source)) {
- var emptyObject = Object.create(Object.getPrototypeOf(source));
- destination = copy(source, emptyObject, stackSource, stackDest);
- }
- }
- } else {
- if (source === destination) throw ngMinErr('cpi',
- "Can't copy! Source and destination are identical.");
-
- stackSource = stackSource || [];
- stackDest = stackDest || [];
-
- if (isObject(source)) {
- var index = stackSource.indexOf(source);
- if (index !== -1) return stackDest[index];
-
- stackSource.push(source);
- stackDest.push(destination);
- }
-
- var result;
- if (isArray(source)) {
- destination.length = 0;
- for (var i = 0; i < source.length; i++) {
- result = copy(source[i], null, stackSource, stackDest);
- if (isObject(source[i])) {
- stackSource.push(source[i]);
- stackDest.push(result);
- }
- destination.push(result);
- }
- } else {
- var h = destination.$$hashKey;
- if (isArray(destination)) {
- destination.length = 0;
- } else {
- forEach(destination, function(value, key) {
- delete destination[key];
- });
- }
- for (var key in source) {
- if (source.hasOwnProperty(key)) {
- result = copy(source[key], null, stackSource, stackDest);
- if (isObject(source[key])) {
- stackSource.push(source[key]);
- stackDest.push(result);
- }
- destination[key] = result;
- }
- }
- setHashKey(destination,h);
- }
-
- }
- return destination;
-}
-
-/**
- * Creates a shallow copy of an object, an array or a primitive.
- *
- * Assumes that there are no proto properties for objects.
- */
-function shallowCopy(src, dst) {
- if (isArray(src)) {
- dst = dst || [];
-
- for (var i = 0, ii = src.length; i < ii; i++) {
- dst[i] = src[i];
- }
- } else if (isObject(src)) {
- dst = dst || {};
-
- for (var key in src) {
- if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {
- dst[key] = src[key];
- }
- }
- }
-
- return dst || src;
-}
-
-
-/**
- * @ngdoc function
- * @name angular.equals
- * @module ng
- * @kind function
- *
- * @description
- * Determines if two objects or two values are equivalent. Supports value types, regular
- * expressions, arrays and objects.
- *
- * Two objects or values are considered equivalent if at least one of the following is true:
- *
- * * Both objects or values pass `===` comparison.
- * * Both objects or values are of the same type and all of their properties are equal by
- * comparing them with `angular.equals`.
- * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal)
- * * Both values represent the same regular expression (In JavaScript,
- * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual
- * representation matches).
- *
- * During a property comparison, properties of `function` type and properties with names
- * that begin with `$` are ignored.
- *
- * Scope and DOMWindow objects are being compared only by identify (`===`).
- *
- * @param {*} o1 Object or value to compare.
- * @param {*} o2 Object or value to compare.
- * @returns {boolean} True if arguments are equal.
- */
-function equals(o1, o2) {
- if (o1 === o2) return true;
- if (o1 === null || o2 === null) return false;
- if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN
- var t1 = typeof o1, t2 = typeof o2, length, key, keySet;
- if (t1 == t2) {
- if (t1 == 'object') {
- if (isArray(o1)) {
- if (!isArray(o2)) return false;
- if ((length = o1.length) == o2.length) {
- for (key = 0; key < length; key++) {
- if (!equals(o1[key], o2[key])) return false;
- }
- return true;
- }
- } else if (isDate(o1)) {
- if (!isDate(o2)) return false;
- return equals(o1.getTime(), o2.getTime());
- } else if (isRegExp(o1) && isRegExp(o2)) {
- return o1.toString() == o2.toString();
- } else {
- if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false;
- keySet = {};
- for (key in o1) {
- if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
- if (!equals(o1[key], o2[key])) return false;
- keySet[key] = true;
- }
- for (key in o2) {
- if (!keySet.hasOwnProperty(key) &&
- key.charAt(0) !== '$' &&
- o2[key] !== undefined &&
- !isFunction(o2[key])) return false;
- }
- return true;
- }
- }
- }
- return false;
-}
-
-var csp = function() {
- if (isDefined(csp.isActive_)) return csp.isActive_;
-
- var active = !!(document.querySelector('[ng-csp]') ||
- document.querySelector('[data-ng-csp]'));
-
- if (!active) {
- try {
- /* jshint -W031, -W054 */
- new Function('');
- /* jshint +W031, +W054 */
- } catch (e) {
- active = true;
- }
- }
-
- return (csp.isActive_ = active);
-};
-
-
-
-function concat(array1, array2, index) {
- return array1.concat(slice.call(array2, index));
-}
-
-function sliceArgs(args, startIndex) {
- return slice.call(args, startIndex || 0);
-}
-
-
-/* jshint -W101 */
-/**
- * @ngdoc function
- * @name angular.bind
- * @module ng
- * @kind function
- *
- * @description
- * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for
- * `fn`). You can supply optional `args` that are prebound to the function. This feature is also
- * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as
- * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application).
- *
- * @param {Object} self Context which `fn` should be evaluated in.
- * @param {function()} fn Function to be bound.
- * @param {...*} args Optional arguments to be prebound to the `fn` function call.
- * @returns {function()} Function that wraps the `fn` with all the specified bindings.
- */
-/* jshint +W101 */
-function bind(self, fn) {
- var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];
- if (isFunction(fn) && !(fn instanceof RegExp)) {
- return curryArgs.length
- ? function() {
- return arguments.length
- ? fn.apply(self, concat(curryArgs, arguments, 0))
- : fn.apply(self, curryArgs);
- }
- : function() {
- return arguments.length
- ? fn.apply(self, arguments)
- : fn.call(self);
- };
- } else {
- // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)
- return fn;
- }
-}
-
-
-function toJsonReplacer(key, value) {
- var val = value;
-
- if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') {
- val = undefined;
- } else if (isWindow(value)) {
- val = '$WINDOW';
- } else if (value && document === value) {
- val = '$DOCUMENT';
- } else if (isScope(value)) {
- val = '$SCOPE';
- }
-
- return val;
-}
-
-
-/**
- * @ngdoc function
- * @name angular.toJson
- * @module ng
- * @kind function
- *
- * @description
- * Serializes input into a JSON-formatted string. Properties with leading $$ characters will be
- * stripped since angular uses this notation internally.
- *
- * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
- * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace.
- * @returns {string|undefined} JSON-ified string representing `obj`.
- */
-function toJson(obj, pretty) {
- if (typeof obj === 'undefined') return undefined;
- return JSON.stringify(obj, toJsonReplacer, pretty ? ' ' : null);
-}
-
-
-/**
- * @ngdoc function
- * @name angular.fromJson
- * @module ng
- * @kind function
- *
- * @description
- * Deserializes a JSON string.
- *
- * @param {string} json JSON string to deserialize.
- * @returns {Object|Array|string|number} Deserialized thingy.
- */
-function fromJson(json) {
- return isString(json)
- ? JSON.parse(json)
- : json;
-}
-
-
-/**
- * @returns {string} Returns the string representation of the element.
- */
-function startingTag(element) {
- element = jqLite(element).clone();
- try {
- // turns out IE does not let you set .html() on elements which
- // are not allowed to have children. So we just ignore it.
- element.empty();
- } catch (e) {}
- var elemHtml = jqLite('<div>').append(element).html();
- try {
- return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) :
- elemHtml.
- match(/^(<[^>]+>)/)[1].
- replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });
- } catch (e) {
- return lowercase(elemHtml);
- }
-
-}
-
-
-/////////////////////////////////////////////////
-
-/**
- * Tries to decode the URI component without throwing an exception.
- *
- * @private
- * @param str value potential URI component to check.
- * @returns {boolean} True if `value` can be decoded
- * with the decodeURIComponent function.
- */
-function tryDecodeURIComponent(value) {
- try {
- return decodeURIComponent(value);
- } catch (e) {
- // Ignore any invalid uri component
- }
-}
-
-
-/**
- * Parses an escaped url query string into key-value pairs.
- * @returns {Object.<string,boolean|Array>}
- */
-function parseKeyValue(/**string*/keyValue) {
- var obj = {}, key_value, key;
- forEach((keyValue || "").split('&'), function(keyValue) {
- if (keyValue) {
- key_value = keyValue.replace(/\+/g,'%20').split('=');
- key = tryDecodeURIComponent(key_value[0]);
- if (isDefined(key)) {
- var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;
- if (!hasOwnProperty.call(obj, key)) {
- obj[key] = val;
- } else if (isArray(obj[key])) {
- obj[key].push(val);
- } else {
- obj[key] = [obj[key],val];
- }
- }
- }
- });
- return obj;
-}
-
-function toKeyValue(obj) {
- var parts = [];
- forEach(obj, function(value, key) {
- if (isArray(value)) {
- forEach(value, function(arrayValue) {
- parts.push(encodeUriQuery(key, true) +
- (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));
- });
- } else {
- parts.push(encodeUriQuery(key, true) +
- (value === true ? '' : '=' + encodeUriQuery(value, true)));
- }
- });
- return parts.length ? parts.join('&') : '';
-}
-
-
-/**
- * We need our custom method because encodeURIComponent is too aggressive and doesn't follow
- * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path
- * segments:
- * segment = *pchar
- * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
- * pct-encoded = "%" HEXDIG HEXDIG
- * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
- * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
- * / "*" / "+" / "," / ";" / "="
- */
-function encodeUriSegment(val) {
- return encodeUriQuery(val, true).
- replace(/%26/gi, '&').
- replace(/%3D/gi, '=').
- replace(/%2B/gi, '+');
-}
-
-
-/**
- * This method is intended for encoding *key* or *value* parts of query component. We need a custom
- * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be
- * encoded per http://tools.ietf.org/html/rfc3986:
- * query = *( pchar / "/" / "?" )
- * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
- * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
- * pct-encoded = "%" HEXDIG HEXDIG
- * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
- * / "*" / "+" / "," / ";" / "="
- */
-function encodeUriQuery(val, pctEncodeSpaces) {
- return encodeURIComponent(val).
- replace(/%40/gi, '@').
- replace(/%3A/gi, ':').
- replace(/%24/g, '$').
- replace(/%2C/gi, ',').
- replace(/%3B/gi, ';').
- replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
-}
-
-var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-'];
-
-function getNgAttribute(element, ngAttr) {
- var attr, i, ii = ngAttrPrefixes.length;
- element = jqLite(element);
- for (i = 0; i < ii; ++i) {
- attr = ngAttrPrefixes[i] + ngAttr;
- if (isString(attr = element.attr(attr))) {
- return attr;
- }
- }
- return null;
-}
-
-/**
- * @ngdoc directive
- * @name ngApp
- * @module ng
- *
- * @element ANY
- * @param {angular.Module} ngApp an optional application
- * {@link angular.module module} name to load.
- * @param {boolean=} ngStrictDi if this attribute is present on the app element, the injector will be
- * created in "strict-di" mode. This means that the application will fail to invoke functions which
- * do not use explicit function annotation (and are thus unsuitable for minification), as described
- * in {@link guide/di the Dependency Injection guide}, and useful debugging info will assist in
- * tracking down the root of these bugs.
- *
- * @description
- *
- * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive
- * designates the **root element** of the application and is typically placed near the root element
- * of the page - e.g. on the `<body>` or `<html>` tags.
- *
- * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`
- * found in the document will be used to define the root element to auto-bootstrap as an
- * application. To run multiple applications in an HTML document you must manually bootstrap them using
- * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.
- *
- * You can specify an **AngularJS module** to be used as the root module for the application. This
- * module will be loaded into the {@link auto.$injector} when the application is bootstrapped and
- * should contain the application code needed or have dependencies on other modules that will
- * contain the code. See {@link angular.module} for more information.
- *
- * In the example below if the `ngApp` directive were not placed on the `html` element then the
- * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`
- * would not be resolved to `3`.
- *
- * `ngApp` is the easiest, and most common, way to bootstrap an application.
- *
- <example module="ngAppDemo">
- <file name="index.html">
- <div ng-controller="ngAppDemoController">
- I can add: {{a}} + {{b}} = {{ a+b }}
- </div>
- </file>
- <file name="script.js">
- angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {
- $scope.a = 1;
- $scope.b = 2;
- });
- </file>
- </example>
- *
- * Using `ngStrictDi`, you would see something like this:
- *
- <example ng-app-included="true">
- <file name="index.html">
- <div ng-app="ngAppStrictDemo" ng-strict-di>
- <div ng-controller="GoodController1">
- I can add: {{a}} + {{b}} = {{ a+b }}
-
- <p>This renders because the controller does not fail to
- instantiate, by using explicit annotation style (see
- script.js for details)
- </p>
- </div>
-
- <div ng-controller="GoodController2">
- Name: <input ng-model="name"><br />
- Hello, {{name}}!
-
- <p>This renders because the controller does not fail to
- instantiate, by using explicit annotation style
- (see script.js for details)
- </p>
- </div>
-
- <div ng-controller="BadController">
- I can add: {{a}} + {{b}} = {{ a+b }}
-
- <p>The controller could not be instantiated, due to relying
- on automatic function annotations (which are disabled in
- strict mode). As such, the content of this section is not
- interpolated, and there should be an error in your web console.
- </p>
- </div>
- </div>
- </file>
- <file name="script.js">
- angular.module('ngAppStrictDemo', [])
- // BadController will fail to instantiate, due to relying on automatic function annotation,
- // rather than an explicit annotation
- .controller('BadController', function($scope) {
- $scope.a = 1;
- $scope.b = 2;
- })
- // Unlike BadController, GoodController1 and GoodController2 will not fail to be instantiated,
- // due to using explicit annotations using the array style and $inject property, respectively.
- .controller('GoodController1', ['$scope', function($scope) {
- $scope.a = 1;
- $scope.b = 2;
- }])
- .controller('GoodController2', GoodController2);
- function GoodController2($scope) {
- $scope.name = "World";
- }
- GoodController2.$inject = ['$scope'];
- </file>
- <file name="style.css">
- div[ng-controller] {
- margin-bottom: 1em;
- -webkit-border-radius: 4px;
- border-radius: 4px;
- border: 1px solid;
- padding: .5em;
- }
- div[ng-controller^=Good] {
- border-color: #d6e9c6;
- background-color: #dff0d8;
- color: #3c763d;
- }
- div[ng-controller^=Bad] {
- border-color: #ebccd1;
- background-color: #f2dede;
- color: #a94442;
- margin-bottom: 0;
- }
- </file>
- </example>
- */
-function angularInit(element, bootstrap) {
- var appElement,
- module,
- config = {};
-
- // The element `element` has priority over any other element
- forEach(ngAttrPrefixes, function(prefix) {
- var name = prefix + 'app';
-
- if (!appElement && element.hasAttribute && element.hasAttribute(name)) {
- appElement = element;
- module = element.getAttribute(name);
- }
- });
- forEach(ngAttrPrefixes, function(prefix) {
- var name = prefix + 'app';
- var candidate;
-
- if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\:') + ']'))) {
- appElement = candidate;
- module = candidate.getAttribute(name);
- }
- });
- if (appElement) {
- config.strictDi = getNgAttribute(appElement, "strict-di") !== null;
- bootstrap(appElement, module ? [module] : [], config);
- }
-}
-
-/**
- * @ngdoc function
- * @name angular.bootstrap
- * @module ng
- * @description
- * Use this function to manually start up angular application.
- *
- * See: {@link guide/bootstrap Bootstrap}
- *
- * Note that Protractor based end-to-end tests cannot use this function to bootstrap manually.
- * They must use {@link ng.directive:ngApp ngApp}.
- *
- * Angular will detect if it has been loaded into the browser more than once and only allow the
- * first loaded script to be bootstrapped and will report a warning to the browser console for
- * each of the subsequent scripts. This prevents strange results in applications, where otherwise
- * multiple instances of Angular try to work on the DOM.
- *
- * ```html
- * <!doctype html>
- * <html>
- * <body>
- * <div ng-controller="WelcomeController">
- * {{greeting}}
- * </div>
- *
- * <script src="angular.js"></script>
- * <script>
- * var app = angular.module('demo', [])
- * .controller('WelcomeController', function($scope) {
- * $scope.greeting = 'Welcome!';
- * });
- * angular.bootstrap(document, ['demo']);
- * </script>
- * </body>
- * </html>
- * ```
- *
- * @param {DOMElement} element DOM element which is the root of angular application.
- * @param {Array<String|Function|Array>=} modules an array of modules to load into the application.
- * Each item in the array should be the name of a predefined module or a (DI annotated)
- * function that will be invoked by the injector as a run block.
- * See: {@link angular.module modules}
- * @param {Object=} config an object for defining configuration options for the application. The
- * following keys are supported:
- *
- * * `strictDi` - disable automatic function annotation for the application. This is meant to
- * assist in finding bugs which break minified code. Defaults to `false`.
- *
- * @returns {auto.$injector} Returns the newly created injector for this app.
- */
-function bootstrap(element, modules, config) {
- if (!isObject(config)) config = {};
- var defaultConfig = {
- strictDi: false
- };
- config = extend(defaultConfig, config);
- var doBootstrap = function() {
- element = jqLite(element);
-
- if (element.injector()) {
- var tag = (element[0] === document) ? 'document' : startingTag(element);
- //Encode angle brackets to prevent input from being sanitized to empty string #8683
- throw ngMinErr(
- 'btstrpd',
- "App Already Bootstrapped with this Element '{0}'",
- tag.replace(/</,'&lt;').replace(/>/,'&gt;'));
- }
-
- modules = modules || [];
- modules.unshift(['$provide', function($provide) {
- $provide.value('$rootElement', element);
- }]);
-
- if (config.debugInfoEnabled) {
- // Pushing so that this overrides `debugInfoEnabled` setting defined in user's `modules`.
- modules.push(['$compileProvider', function($compileProvider) {
- $compileProvider.debugInfoEnabled(true);
- }]);
- }
-
- modules.unshift('ng');
- var injector = createInjector(modules, config.strictDi);
- injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector',
- function bootstrapApply(scope, element, compile, injector) {
- scope.$apply(function() {
- element.data('$injector', injector);
- compile(element)(scope);
- });
- }]
- );
- return injector;
- };
-
- var NG_ENABLE_DEBUG_INFO = /^NG_ENABLE_DEBUG_INFO!/;
- var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;
-
- if (window && NG_ENABLE_DEBUG_INFO.test(window.name)) {
- config.debugInfoEnabled = true;
- window.name = window.name.replace(NG_ENABLE_DEBUG_INFO, '');
- }
-
- if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {
- return doBootstrap();
- }
-
- window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');
- angular.resumeBootstrap = function(extraModules) {
- forEach(extraModules, function(module) {
- modules.push(module);
- });
- doBootstrap();
- };
-}
-
-/**
- * @ngdoc function
- * @name angular.reloadWithDebugInfo
- * @module ng
- * @description
- * Use this function to reload the current application with debug information turned on.
- * This takes precedence over a call to `$compileProvider.debugInfoEnabled(false)`.
- *
- * See {@link ng.$compileProvider#debugInfoEnabled} for more.
- */
-function reloadWithDebugInfo() {
- window.name = 'NG_ENABLE_DEBUG_INFO!' + window.name;
- window.location.reload();
-}
-
-/**
- * @name angular.getTestability
- * @module ng
- * @description
- * Get the testability service for the instance of Angular on the given
- * element.
- * @param {DOMElement} element DOM element which is the root of angular application.
- */
-function getTestability(rootElement) {
- return angular.element(rootElement).injector().get('$$testability');
-}
-
-var SNAKE_CASE_REGEXP = /[A-Z]/g;
-function snake_case(name, separator) {
- separator = separator || '_';
- return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {
- return (pos ? separator : '') + letter.toLowerCase();
- });
-}
-
-var bindJQueryFired = false;
-var skipDestroyOnNextJQueryCleanData;
-function bindJQuery() {
- var originalCleanData;
-
- if (bindJQueryFired) {
- return;
- }
-
- // bind to jQuery if present;
- jQuery = window.jQuery;
- // Use jQuery if it exists with proper functionality, otherwise default to us.
- // Angular 1.2+ requires jQuery 1.7+ for on()/off() support.
- // Angular 1.3+ technically requires at least jQuery 2.1+ but it may work with older
- // versions. It will not work for sure with jQuery <1.7, though.
- if (jQuery && jQuery.fn.on) {
- jqLite = jQuery;
- extend(jQuery.fn, {
- scope: JQLitePrototype.scope,
- isolateScope: JQLitePrototype.isolateScope,
- controller: JQLitePrototype.controller,
- injector: JQLitePrototype.injector,
- inheritedData: JQLitePrototype.inheritedData
- });
-
- // All nodes removed from the DOM via various jQuery APIs like .remove()
- // are passed through jQuery.cleanData. Monkey-patch this method to fire
- // the $destroy event on all removed nodes.
- originalCleanData = jQuery.cleanData;
- jQuery.cleanData = function(elems) {
- var events;
- if (!skipDestroyOnNextJQueryCleanData) {
- for (var i = 0, elem; (elem = elems[i]) != null; i++) {
- events = jQuery._data(elem, "events");
- if (events && events.$destroy) {
- jQuery(elem).triggerHandler('$destroy');
- }
- }
- } else {
- skipDestroyOnNextJQueryCleanData = false;
- }
- originalCleanData(elems);
- };
- } else {
- jqLite = JQLite;
- }
-
- angular.element = jqLite;
-
- // Prevent double-proxying.
- bindJQueryFired = true;
-}
-
-/**
- * throw error if the argument is falsy.
- */
-function assertArg(arg, name, reason) {
- if (!arg) {
- throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required"));
- }
- return arg;
-}
-
-function assertArgFn(arg, name, acceptArrayAnnotation) {
- if (acceptArrayAnnotation && isArray(arg)) {
- arg = arg[arg.length - 1];
- }
-
- assertArg(isFunction(arg), name, 'not a function, got ' +
- (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg));
- return arg;
-}
-
-/**
- * throw error if the name given is hasOwnProperty
- * @param {String} name the name to test
- * @param {String} context the context in which the name is used, such as module or directive
- */
-function assertNotHasOwnProperty(name, context) {
- if (name === 'hasOwnProperty') {
- throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context);
- }
-}
-
-/**
- * Return the value accessible from the object by path. Any undefined traversals are ignored
- * @param {Object} obj starting object
- * @param {String} path path to traverse
- * @param {boolean} [bindFnToScope=true]
- * @returns {Object} value as accessible by path
- */
-//TODO(misko): this function needs to be removed
-function getter(obj, path, bindFnToScope) {
- if (!path) return obj;
- var keys = path.split('.');
- var key;
- var lastInstance = obj;
- var len = keys.length;
-
- for (var i = 0; i < len; i++) {
- key = keys[i];
- if (obj) {
- obj = (lastInstance = obj)[key];
- }
- }
- if (!bindFnToScope && isFunction(obj)) {
- return bind(lastInstance, obj);
- }
- return obj;
-}
-
-/**
- * Return the DOM siblings between the first and last node in the given array.
- * @param {Array} array like object
- * @returns {jqLite} jqLite collection containing the nodes
- */
-function getBlockNodes(nodes) {
- // TODO(perf): just check if all items in `nodes` are siblings and if they are return the original
- // collection, otherwise update the original collection.
- var node = nodes[0];
- var endNode = nodes[nodes.length - 1];
- var blockNodes = [node];
-
- do {
- node = node.nextSibling;
- if (!node) break;
- blockNodes.push(node);
- } while (node !== endNode);
-
- return jqLite(blockNodes);
-}
-
-
-/**
- * Creates a new object without a prototype. This object is useful for lookup without having to
- * guard against prototypically inherited properties via hasOwnProperty.
- *
- * Related micro-benchmarks:
- * - http://jsperf.com/object-create2
- * - http://jsperf.com/proto-map-lookup/2
- * - http://jsperf.com/for-in-vs-object-keys2
- *
- * @returns {Object}
- */
-function createMap() {
- return Object.create(null);
-}
-
-var NODE_TYPE_ELEMENT = 1;
-var NODE_TYPE_TEXT = 3;
-var NODE_TYPE_COMMENT = 8;
-var NODE_TYPE_DOCUMENT = 9;
-var NODE_TYPE_DOCUMENT_FRAGMENT = 11;
-
-/**
- * @ngdoc type
- * @name angular.Module
- * @module ng
- * @description
- *
- * Interface for configuring angular {@link angular.module modules}.
- */
-
-function setupModuleLoader(window) {
-
- var $injectorMinErr = minErr('$injector');
- var ngMinErr = minErr('ng');
-
- function ensure(obj, name, factory) {
- return obj[name] || (obj[name] = factory());
- }
-
- var angular = ensure(window, 'angular', Object);
-
- // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap
- angular.$$minErr = angular.$$minErr || minErr;
-
- return ensure(angular, 'module', function() {
- /** @type {Object.<string, angular.Module>} */
- var modules = {};
-
- /**
- * @ngdoc function
- * @name angular.module
- * @module ng
- * @description
- *
- * The `angular.module` is a global place for creating, registering and retrieving Angular
- * modules.
- * All modules (angular core or 3rd party) that should be available to an application must be
- * registered using this mechanism.
- *
- * When passed two or more arguments, a new module is created. If passed only one argument, an
- * existing module (the name passed as the first argument to `module`) is retrieved.
- *
- *
- * # Module
- *
- * A module is a collection of services, directives, controllers, filters, and configuration information.
- * `angular.module` is used to configure the {@link auto.$injector $injector}.
- *
- * ```js
- * // Create a new module
- * var myModule = angular.module('myModule', []);
- *
- * // register a new service
- * myModule.value('appName', 'MyCoolApp');
- *
- * // configure existing services inside initialization blocks.
- * myModule.config(['$locationProvider', function($locationProvider) {
- * // Configure existing providers
- * $locationProvider.hashPrefix('!');
- * }]);
- * ```
- *
- * Then you can create an injector and load your modules like this:
- *
- * ```js
- * var injector = angular.injector(['ng', 'myModule'])
- * ```
- *
- * However it's more likely that you'll just use
- * {@link ng.directive:ngApp ngApp} or
- * {@link angular.bootstrap} to simplify this process for you.
- *
- * @param {!string} name The name of the module to create or retrieve.
- * @param {!Array.<string>=} requires If specified then new module is being created. If
- * unspecified then the module is being retrieved for further configuration.
- * @param {Function=} configFn Optional configuration function for the module. Same as
- * {@link angular.Module#config Module#config()}.
- * @returns {module} new module with the {@link angular.Module} api.
- */
- return function module(name, requires, configFn) {
- var assertNotHasOwnProperty = function(name, context) {
- if (name === 'hasOwnProperty') {
- throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
- }
- };
-
- assertNotHasOwnProperty(name, 'module');
- if (requires && modules.hasOwnProperty(name)) {
- modules[name] = null;
- }
- return ensure(modules, name, function() {
- if (!requires) {
- throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
- "the module name or forgot to load it. If registering a module ensure that you " +
- "specify the dependencies as the second argument.", name);
- }
-
- /** @type {!Array.<Array.<*>>} */
- var invokeQueue = [];
-
- /** @type {!Array.<Function>} */
- var configBlocks = [];
-
- /** @type {!Array.<Function>} */
- var runBlocks = [];
-
- var config = invokeLater('$injector', 'invoke', 'push', configBlocks);
-
- /** @type {angular.Module} */
- var moduleInstance = {
- // Private state
- _invokeQueue: invokeQueue,
- _configBlocks: configBlocks,
- _runBlocks: runBlocks,
-
- /**
- * @ngdoc property
- * @name angular.Module#requires
- * @module ng
- *
- * @description
- * Holds the list of modules which the injector will load before the current module is
- * loaded.
- */
- requires: requires,
-
- /**
- * @ngdoc property
- * @name angular.Module#name
- * @module ng
- *
- * @description
- * Name of the module.
- */
- name: name,
-
-
- /**
- * @ngdoc method
- * @name angular.Module#provider
- * @module ng
- * @param {string} name service name
- * @param {Function} providerType Construction function for creating new instance of the
- * service.
- * @description
- * See {@link auto.$provide#provider $provide.provider()}.
- */
- provider: invokeLater('$provide', 'provider'),
-
- /**
- * @ngdoc method
- * @name angular.Module#factory
- * @module ng
- * @param {string} name service name
- * @param {Function} providerFunction Function for creating new instance of the service.
- * @description
- * See {@link auto.$provide#factory $provide.factory()}.
- */
- factory: invokeLater('$provide', 'factory'),
-
- /**
- * @ngdoc method
- * @name angular.Module#service
- * @module ng
- * @param {string} name service name
- * @param {Function} constructor A constructor function that will be instantiated.
- * @description
- * See {@link auto.$provide#service $provide.service()}.
- */
- service: invokeLater('$provide', 'service'),
-
- /**
- * @ngdoc method
- * @name angular.Module#value
- * @module ng
- * @param {string} name service name
- * @param {*} object Service instance object.
- * @description
- * See {@link auto.$provide#value $provide.value()}.
- */
- value: invokeLater('$provide', 'value'),
-
- /**
- * @ngdoc method
- * @name angular.Module#constant
- * @module ng
- * @param {string} name constant name
- * @param {*} object Constant value.
- * @description
- * Because the constant are fixed, they get applied before other provide methods.
- * See {@link auto.$provide#constant $provide.constant()}.
- */
- constant: invokeLater('$provide', 'constant', 'unshift'),
-
- /**
- * @ngdoc method
- * @name angular.Module#animation
- * @module ng
- * @param {string} name animation name
- * @param {Function} animationFactory Factory function for creating new instance of an
- * animation.
- * @description
- *
- * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.
- *
- *
- * Defines an animation hook that can be later used with
- * {@link ngAnimate.$animate $animate} service and directives that use this service.
- *
- * ```js
- * module.animation('.animation-name', function($inject1, $inject2) {
- * return {
- * eventName : function(element, done) {
- * //code to run the animation
- * //once complete, then run done()
- * return function cancellationFunction(element) {
- * //code to cancel the animation
- * }
- * }
- * }
- * })
- * ```
- *
- * See {@link ng.$animateProvider#register $animateProvider.register()} and
- * {@link ngAnimate ngAnimate module} for more information.
- */
- animation: invokeLater('$animateProvider', 'register'),
-
- /**
- * @ngdoc method
- * @name angular.Module#filter
- * @module ng
- * @param {string} name Filter name.
- * @param {Function} filterFactory Factory function for creating new instance of filter.
- * @description
- * See {@link ng.$filterProvider#register $filterProvider.register()}.
- */
- filter: invokeLater('$filterProvider', 'register'),
-
- /**
- * @ngdoc method
- * @name angular.Module#controller
- * @module ng
- * @param {string|Object} name Controller name, or an object map of controllers where the
- * keys are the names and the values are the constructors.
- * @param {Function} constructor Controller constructor function.
- * @description
- * See {@link ng.$controllerProvider#register $controllerProvider.register()}.
- */
- controller: invokeLater('$controllerProvider', 'register'),
-
- /**
- * @ngdoc method
- * @name angular.Module#directive
- * @module ng
- * @param {string|Object} name Directive name, or an object map of directives where the
- * keys are the names and the values are the factories.
- * @param {Function} directiveFactory Factory function for creating new instance of
- * directives.
- * @description
- * See {@link ng.$compileProvider#directive $compileProvider.directive()}.
- */
- directive: invokeLater('$compileProvider', 'directive'),
-
- /**
- * @ngdoc method
- * @name angular.Module#config
- * @module ng
- * @param {Function} configFn Execute this function on module load. Useful for service
- * configuration.
- * @description
- * Use this method to register work which needs to be performed on module loading.
- * For more about how to configure services, see
- * {@link providers#provider-recipe Provider Recipe}.
- */
- config: config,
-
- /**
- * @ngdoc method
- * @name angular.Module#run
- * @module ng
- * @param {Function} initializationFn Execute this function after injector creation.
- * Useful for application initialization.
- * @description
- * Use this method to register work which should be performed when the injector is done
- * loading all modules.
- */
- run: function(block) {
- runBlocks.push(block);
- return this;
- }
- };
-
- if (configFn) {
- config(configFn);
- }
-
- return moduleInstance;
-
- /**
- * @param {string} provider
- * @param {string} method
- * @param {String=} insertMethod
- * @returns {angular.Module}
- */
- function invokeLater(provider, method, insertMethod, queue) {
- if (!queue) queue = invokeQueue;
- return function() {
- queue[insertMethod || 'push']([provider, method, arguments]);
- return moduleInstance;
- };
- }
- });
- };
- });
-
-}
-
-/* global: toDebugString: true */
-
-function serializeObject(obj) {
- var seen = [];
-
- return JSON.stringify(obj, function(key, val) {
- val = toJsonReplacer(key, val);
- if (isObject(val)) {
-
- if (seen.indexOf(val) >= 0) return '<<already seen>>';
-
- seen.push(val);
- }
- return val;
- });
-}
-
-function toDebugString(obj) {
- if (typeof obj === 'function') {
- return obj.toString().replace(/ \{[\s\S]*$/, '');
- } else if (typeof obj === 'undefined') {
- return 'undefined';
- } else if (typeof obj !== 'string') {
- return serializeObject(obj);
- }
- return obj;
-}
-
-/* global angularModule: true,
- version: true,
-
- $LocaleProvider,
- $CompileProvider,
-
- htmlAnchorDirective,
- inputDirective,
- inputDirective,
- formDirective,
- scriptDirective,
- selectDirective,
- styleDirective,
- optionDirective,
- ngBindDirective,
- ngBindHtmlDirective,
- ngBindTemplateDirective,
- ngClassDirective,
- ngClassEvenDirective,
- ngClassOddDirective,
- ngCspDirective,
- ngCloakDirective,
- ngControllerDirective,
- ngFormDirective,
- ngHideDirective,
- ngIfDirective,
- ngIncludeDirective,
- ngIncludeFillContentDirective,
- ngInitDirective,
- ngNonBindableDirective,
- ngPluralizeDirective,
- ngRepeatDirective,
- ngShowDirective,
- ngStyleDirective,
- ngSwitchDirective,
- ngSwitchWhenDirective,
- ngSwitchDefaultDirective,
- ngOptionsDirective,
- ngTranscludeDirective,
- ngModelDirective,
- ngListDirective,
- ngChangeDirective,
- patternDirective,
- patternDirective,
- requiredDirective,
- requiredDirective,
- minlengthDirective,
- minlengthDirective,
- maxlengthDirective,
- maxlengthDirective,
- ngValueDirective,
- ngModelOptionsDirective,
- ngAttributeAliasDirectives,
- ngEventDirectives,
-
- $AnchorScrollProvider,
- $AnimateProvider,
- $BrowserProvider,
- $CacheFactoryProvider,
- $ControllerProvider,
- $DocumentProvider,
- $ExceptionHandlerProvider,
- $FilterProvider,
- $InterpolateProvider,
- $IntervalProvider,
- $HttpProvider,
- $HttpBackendProvider,
- $LocationProvider,
- $LogProvider,
- $ParseProvider,
- $RootScopeProvider,
- $QProvider,
- $$QProvider,
- $$SanitizeUriProvider,
- $SceProvider,
- $SceDelegateProvider,
- $SnifferProvider,
- $TemplateCacheProvider,
- $TemplateRequestProvider,
- $$TestabilityProvider,
- $TimeoutProvider,
- $$RAFProvider,
- $$AsyncCallbackProvider,
- $WindowProvider
-*/
-
-
-/**
- * @ngdoc object
- * @name angular.version
- * @module ng
- * @description
- * An object that contains information about the current AngularJS version. This object has the
- * following properties:
- *
- * - `full` – `{string}` – Full version string, such as "0.9.18".
- * - `major` – `{number}` – Major version number, such as "0".
- * - `minor` – `{number}` – Minor version number, such as "9".
- * - `dot` – `{number}` – Dot version number, such as "18".
- * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
- */
-var version = {
- full: '1.3.5', // all of these placeholder strings will be replaced by grunt's
- major: 1, // package task
- minor: 3,
- dot: 5,
- codeName: 'cybernetic-mercantilism'
-};
-
-
-function publishExternalAPI(angular) {
- extend(angular, {
- 'bootstrap': bootstrap,
- 'copy': copy,
- 'extend': extend,
- 'equals': equals,
- 'element': jqLite,
- 'forEach': forEach,
- 'injector': createInjector,
- 'noop': noop,
- 'bind': bind,
- 'toJson': toJson,
- 'fromJson': fromJson,
- 'identity': identity,
- 'isUndefined': isUndefined,
- 'isDefined': isDefined,
- 'isString': isString,
- 'isFunction': isFunction,
- 'isObject': isObject,
- 'isNumber': isNumber,
- 'isElement': isElement,
- 'isArray': isArray,
- 'version': version,
- 'isDate': isDate,
- 'lowercase': lowercase,
- 'uppercase': uppercase,
- 'callbacks': {counter: 0},
- 'getTestability': getTestability,
- '$$minErr': minErr,
- '$$csp': csp,
- 'reloadWithDebugInfo': reloadWithDebugInfo
- });
-
- angularModule = setupModuleLoader(window);
- try {
- angularModule('ngLocale');
- } catch (e) {
- angularModule('ngLocale', []).provider('$locale', $LocaleProvider);
- }
-
- angularModule('ng', ['ngLocale'], ['$provide',
- function ngModule($provide) {
- // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it.
- $provide.provider({
- $$sanitizeUri: $$SanitizeUriProvider
- });
- $provide.provider('$compile', $CompileProvider).
- directive({
- a: htmlAnchorDirective,
- input: inputDirective,
- textarea: inputDirective,
- form: formDirective,
- script: scriptDirective,
- select: selectDirective,
- style: styleDirective,
- option: optionDirective,
- ngBind: ngBindDirective,
- ngBindHtml: ngBindHtmlDirective,
- ngBindTemplate: ngBindTemplateDirective,
- ngClass: ngClassDirective,
- ngClassEven: ngClassEvenDirective,
- ngClassOdd: ngClassOddDirective,
- ngCloak: ngCloakDirective,
- ngController: ngControllerDirective,
- ngForm: ngFormDirective,
- ngHide: ngHideDirective,
- ngIf: ngIfDirective,
- ngInclude: ngIncludeDirective,
- ngInit: ngInitDirective,
- ngNonBindable: ngNonBindableDirective,
- ngPluralize: ngPluralizeDirective,
- ngRepeat: ngRepeatDirective,
- ngShow: ngShowDirective,
- ngStyle: ngStyleDirective,
- ngSwitch: ngSwitchDirective,
- ngSwitchWhen: ngSwitchWhenDirective,
- ngSwitchDefault: ngSwitchDefaultDirective,
- ngOptions: ngOptionsDirective,
- ngTransclude: ngTranscludeDirective,
- ngModel: ngModelDirective,
- ngList: ngListDirective,
- ngChange: ngChangeDirective,
- pattern: patternDirective,
- ngPattern: patternDirective,
- required: requiredDirective,
- ngRequired: requiredDirective,
- minlength: minlengthDirective,
- ngMinlength: minlengthDirective,
- maxlength: maxlengthDirective,
- ngMaxlength: maxlengthDirective,
- ngValue: ngValueDirective,
- ngModelOptions: ngModelOptionsDirective
- }).
- directive({
- ngInclude: ngIncludeFillContentDirective
- }).
- directive(ngAttributeAliasDirectives).
- directive(ngEventDirectives);
- $provide.provider({
- $anchorScroll: $AnchorScrollProvider,
- $animate: $AnimateProvider,
- $browser: $BrowserProvider,
- $cacheFactory: $CacheFactoryProvider,
- $controller: $ControllerProvider,
- $document: $DocumentProvider,
- $exceptionHandler: $ExceptionHandlerProvider,
- $filter: $FilterProvider,
- $interpolate: $InterpolateProvider,
- $interval: $IntervalProvider,
- $http: $HttpProvider,
- $httpBackend: $HttpBackendProvider,
- $location: $LocationProvider,
- $log: $LogProvider,
- $parse: $ParseProvider,
- $rootScope: $RootScopeProvider,
- $q: $QProvider,
- $$q: $$QProvider,
- $sce: $SceProvider,
- $sceDelegate: $SceDelegateProvider,
- $sniffer: $SnifferProvider,
- $templateCache: $TemplateCacheProvider,
- $templateRequest: $TemplateRequestProvider,
- $$testability: $$TestabilityProvider,
- $timeout: $TimeoutProvider,
- $window: $WindowProvider,
- $$rAF: $$RAFProvider,
- $$asyncCallback: $$AsyncCallbackProvider
- });
- }
- ]);
-}
-
-/* global JQLitePrototype: true,
- addEventListenerFn: true,
- removeEventListenerFn: true,
- BOOLEAN_ATTR: true,
- ALIASED_ATTR: true,
-*/
-
-//////////////////////////////////
-//JQLite
-//////////////////////////////////
-
-/**
- * @ngdoc function
- * @name angular.element
- * @module ng
- * @kind function
- *
- * @description
- * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.
- *
- * If jQuery is available, `angular.element` is an alias for the
- * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element`
- * delegates to Angular's built-in subset of jQuery, called "jQuery lite" or "jqLite."
- *
- * <div class="alert alert-success">jqLite is a tiny, API-compatible subset of jQuery that allows
- * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most
- * commonly needed functionality with the goal of having a very small footprint.</div>
- *
- * To use jQuery, simply load it before `DOMContentLoaded` event fired.
- *
- * <div class="alert">**Note:** all element references in Angular are always wrapped with jQuery or
- * jqLite; they are never raw DOM references.</div>
- *
- * ## Angular's jqLite
- * jqLite provides only the following jQuery methods:
- *
- * - [`addClass()`](http://api.jquery.com/addClass/)
- * - [`after()`](http://api.jquery.com/after/)
- * - [`append()`](http://api.jquery.com/append/)
- * - [`attr()`](http://api.jquery.com/attr/) - Does not support functions as parameters
- * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData
- * - [`children()`](http://api.jquery.com/children/) - Does not support selectors
- * - [`clone()`](http://api.jquery.com/clone/)
- * - [`contents()`](http://api.jquery.com/contents/)
- * - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()`
- * - [`data()`](http://api.jquery.com/data/)
- * - [`detach()`](http://api.jquery.com/detach/)
- * - [`empty()`](http://api.jquery.com/empty/)
- * - [`eq()`](http://api.jquery.com/eq/)
- * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name
- * - [`hasClass()`](http://api.jquery.com/hasClass/)
- * - [`html()`](http://api.jquery.com/html/)
- * - [`next()`](http://api.jquery.com/next/) - Does not support selectors
- * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData
- * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors
- * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors
- * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors
- * - [`prepend()`](http://api.jquery.com/prepend/)
- * - [`prop()`](http://api.jquery.com/prop/)
- * - [`ready()`](http://api.jquery.com/ready/)
- * - [`remove()`](http://api.jquery.com/remove/)
- * - [`removeAttr()`](http://api.jquery.com/removeAttr/)
- * - [`removeClass()`](http://api.jquery.com/removeClass/)
- * - [`removeData()`](http://api.jquery.com/removeData/)
- * - [`replaceWith()`](http://api.jquery.com/replaceWith/)
- * - [`text()`](http://api.jquery.com/text/)
- * - [`toggleClass()`](http://api.jquery.com/toggleClass/)
- * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.
- * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces
- * - [`val()`](http://api.jquery.com/val/)
- * - [`wrap()`](http://api.jquery.com/wrap/)
- *
- * ## jQuery/jqLite Extras
- * Angular also provides the following additional methods and events to both jQuery and jqLite:
- *
- * ### Events
- * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event
- * on all DOM nodes being removed. This can be used to clean up any 3rd party bindings to the DOM
- * element before it is removed.
- *
- * ### Methods
- * - `controller(name)` - retrieves the controller of the current element or its parent. By default
- * retrieves controller associated with the `ngController` directive. If `name` is provided as
- * camelCase directive name, then the controller for this directive will be retrieved (e.g.
- * `'ngModel'`).
- * - `injector()` - retrieves the injector of the current element or its parent.
- * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current
- * element or its parent. Requires {@link guide/production#disabling-debug-data Debug Data} to
- * be enabled.
- * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the
- * current element. This getter should be used only on elements that contain a directive which starts a new isolate
- * scope. Calling `scope()` on this element always returns the original non-isolate scope.
- * Requires {@link guide/production#disabling-debug-data Debug Data} to be enabled.
- * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top
- * parent element is reached.
- *
- * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.
- * @returns {Object} jQuery object.
- */
-
-JQLite.expando = 'ng339';
-
-var jqCache = JQLite.cache = {},
- jqId = 1,
- addEventListenerFn = function(element, type, fn) {
- element.addEventListener(type, fn, false);
- },
- removeEventListenerFn = function(element, type, fn) {
- element.removeEventListener(type, fn, false);
- };
-
-/*
- * !!! This is an undocumented "private" function !!!
- */
-JQLite._data = function(node) {
- //jQuery always returns an object on cache miss
- return this.cache[node[this.expando]] || {};
-};
-
-function jqNextId() { return ++jqId; }
-
-
-var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
-var MOZ_HACK_REGEXP = /^moz([A-Z])/;
-var MOUSE_EVENT_MAP= { mouseleave: "mouseout", mouseenter: "mouseover"};
-var jqLiteMinErr = minErr('jqLite');
-
-/**
- * Converts snake_case to camelCase.
- * Also there is special case for Moz prefix starting with upper case letter.
- * @param name Name to normalize
- */
-function camelCase(name) {
- return name.
- replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
- return offset ? letter.toUpperCase() : letter;
- }).
- replace(MOZ_HACK_REGEXP, 'Moz$1');
-}
-
-var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/;
-var HTML_REGEXP = /<|&#?\w+;/;
-var TAG_NAME_REGEXP = /<([\w:]+)/;
-var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi;
-
-var wrapMap = {
- 'option': [1, '<select multiple="multiple">', '</select>'],
-
- 'thead': [1, '<table>', '</table>'],
- 'col': [2, '<table><colgroup>', '</colgroup></table>'],
- 'tr': [2, '<table><tbody>', '</tbody></table>'],
- 'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'],
- '_default': [0, "", ""]
-};
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-
-function jqLiteIsTextNode(html) {
- return !HTML_REGEXP.test(html);
-}
-
-function jqLiteAcceptsData(node) {
- // The window object can accept data but has no nodeType
- // Otherwise we are only interested in elements (1) and documents (9)
- var nodeType = node.nodeType;
- return nodeType === NODE_TYPE_ELEMENT || !nodeType || nodeType === NODE_TYPE_DOCUMENT;
-}
-
-function jqLiteBuildFragment(html, context) {
- var tmp, tag, wrap,
- fragment = context.createDocumentFragment(),
- nodes = [], i;
-
- if (jqLiteIsTextNode(html)) {
- // Convert non-html into a text node
- nodes.push(context.createTextNode(html));
- } else {
- // Convert html into DOM nodes
- tmp = tmp || fragment.appendChild(context.createElement("div"));
- tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase();
- wrap = wrapMap[tag] || wrapMap._default;
- tmp.innerHTML = wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1></$2>") + wrap[2];
-
- // Descend through wrappers to the right content
- i = wrap[0];
- while (i--) {
- tmp = tmp.lastChild;
- }
-
- nodes = concat(nodes, tmp.childNodes);
-
- tmp = fragment.firstChild;
- tmp.textContent = "";
- }
-
- // Remove wrapper from fragment
- fragment.textContent = "";
- fragment.innerHTML = ""; // Clear inner HTML
- forEach(nodes, function(node) {
- fragment.appendChild(node);
- });
-
- return fragment;
-}
-
-function jqLiteParseHTML(html, context) {
- context = context || document;
- var parsed;
-
- if ((parsed = SINGLE_TAG_REGEXP.exec(html))) {
- return [context.createElement(parsed[1])];
- }
-
- if ((parsed = jqLiteBuildFragment(html, context))) {
- return parsed.childNodes;
- }
-
- return [];
-}
-
-/////////////////////////////////////////////
-function JQLite(element) {
- if (element instanceof JQLite) {
- return element;
- }
-
- var argIsString;
-
- if (isString(element)) {
- element = trim(element);
- argIsString = true;
- }
- if (!(this instanceof JQLite)) {
- if (argIsString && element.charAt(0) != '<') {
- throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element');
- }
- return new JQLite(element);
- }
-
- if (argIsString) {
- jqLiteAddNodes(this, jqLiteParseHTML(element));
- } else {
- jqLiteAddNodes(this, element);
- }
-}
-
-function jqLiteClone(element) {
- return element.cloneNode(true);
-}
-
-function jqLiteDealoc(element, onlyDescendants) {
- if (!onlyDescendants) jqLiteRemoveData(element);
-
- if (element.querySelectorAll) {
- var descendants = element.querySelectorAll('*');
- for (var i = 0, l = descendants.length; i < l; i++) {
- jqLiteRemoveData(descendants[i]);
- }
- }
-}
-
-function jqLiteOff(element, type, fn, unsupported) {
- if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument');
-
- var expandoStore = jqLiteExpandoStore(element);
- var events = expandoStore && expandoStore.events;
- var handle = expandoStore && expandoStore.handle;
-
- if (!handle) return; //no listeners registered
-
- if (!type) {
- for (type in events) {
- if (type !== '$destroy') {
- removeEventListenerFn(element, type, handle);
- }
- delete events[type];
- }
- } else {
- forEach(type.split(' '), function(type) {
- if (isDefined(fn)) {
- var listenerFns = events[type];
- arrayRemove(listenerFns || [], fn);
- if (listenerFns && listenerFns.length > 0) {
- return;
- }
- }
-
- removeEventListenerFn(element, type, handle);
- delete events[type];
- });
- }
-}
-
-function jqLiteRemoveData(element, name) {
- var expandoId = element.ng339;
- var expandoStore = expandoId && jqCache[expandoId];
-
- if (expandoStore) {
- if (name) {
- delete expandoStore.data[name];
- return;
- }
-
- if (expandoStore.handle) {
- if (expandoStore.events.$destroy) {
- expandoStore.handle({}, '$destroy');
- }
- jqLiteOff(element);
- }
- delete jqCache[expandoId];
- element.ng339 = undefined; // don't delete DOM expandos. IE and Chrome don't like it
- }
-}
-
-
-function jqLiteExpandoStore(element, createIfNecessary) {
- var expandoId = element.ng339,
- expandoStore = expandoId && jqCache[expandoId];
-
- if (createIfNecessary && !expandoStore) {
- element.ng339 = expandoId = jqNextId();
- expandoStore = jqCache[expandoId] = {events: {}, data: {}, handle: undefined};
- }
-
- return expandoStore;
-}
-
-
-function jqLiteData(element, key, value) {
- if (jqLiteAcceptsData(element)) {
-
- var isSimpleSetter = isDefined(value);
- var isSimpleGetter = !isSimpleSetter && key && !isObject(key);
- var massGetter = !key;
- var expandoStore = jqLiteExpandoStore(element, !isSimpleGetter);
- var data = expandoStore && expandoStore.data;
-
- if (isSimpleSetter) { // data('key', value)
- data[key] = value;
- } else {
- if (massGetter) { // data()
- return data;
- } else {
- if (isSimpleGetter) { // data('key')
- // don't force creation of expandoStore if it doesn't exist yet
- return data && data[key];
- } else { // mass-setter: data({key1: val1, key2: val2})
- extend(data, key);
- }
- }
- }
- }
-}
-
-function jqLiteHasClass(element, selector) {
- if (!element.getAttribute) return false;
- return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " ").
- indexOf(" " + selector + " ") > -1);
-}
-
-function jqLiteRemoveClass(element, cssClasses) {
- if (cssClasses && element.setAttribute) {
- forEach(cssClasses.split(' '), function(cssClass) {
- element.setAttribute('class', trim(
- (" " + (element.getAttribute('class') || '') + " ")
- .replace(/[\n\t]/g, " ")
- .replace(" " + trim(cssClass) + " ", " "))
- );
- });
- }
-}
-
-function jqLiteAddClass(element, cssClasses) {
- if (cssClasses && element.setAttribute) {
- var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')
- .replace(/[\n\t]/g, " ");
-
- forEach(cssClasses.split(' '), function(cssClass) {
- cssClass = trim(cssClass);
- if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {
- existingClasses += cssClass + ' ';
- }
- });
-
- element.setAttribute('class', trim(existingClasses));
- }
-}
-
-
-function jqLiteAddNodes(root, elements) {
- // THIS CODE IS VERY HOT. Don't make changes without benchmarking.
-
- if (elements) {
-
- // if a Node (the most common case)
- if (elements.nodeType) {
- root[root.length++] = elements;
- } else {
- var length = elements.length;
-
- // if an Array or NodeList and not a Window
- if (typeof length === 'number' && elements.window !== elements) {
- if (length) {
- for (var i = 0; i < length; i++) {
- root[root.length++] = elements[i];
- }
- }
- } else {
- root[root.length++] = elements;
- }
- }
- }
-}
-
-
-function jqLiteController(element, name) {
- return jqLiteInheritedData(element, '$' + (name || 'ngController') + 'Controller');
-}
-
-function jqLiteInheritedData(element, name, value) {
- // if element is the document object work with the html element instead
- // this makes $(document).scope() possible
- if (element.nodeType == NODE_TYPE_DOCUMENT) {
- element = element.documentElement;
- }
- var names = isArray(name) ? name : [name];
-
- while (element) {
- for (var i = 0, ii = names.length; i < ii; i++) {
- if ((value = jqLite.data(element, names[i])) !== undefined) return value;
- }
-
- // If dealing with a document fragment node with a host element, and no parent, use the host
- // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM
- // to lookup parent controllers.
- element = element.parentNode || (element.nodeType === NODE_TYPE_DOCUMENT_FRAGMENT && element.host);
- }
-}
-
-function jqLiteEmpty(element) {
- jqLiteDealoc(element, true);
- while (element.firstChild) {
- element.removeChild(element.firstChild);
- }
-}
-
-function jqLiteRemove(element, keepData) {
- if (!keepData) jqLiteDealoc(element);
- var parent = element.parentNode;
- if (parent) parent.removeChild(element);
-}
-
-
-function jqLiteDocumentLoaded(action, win) {
- win = win || window;
- if (win.document.readyState === 'complete') {
- // Force the action to be run async for consistent behaviour
- // from the action's point of view
- // i.e. it will definitely not be in a $apply
- win.setTimeout(action);
- } else {
- // No need to unbind this handler as load is only ever called once
- jqLite(win).on('load', action);
- }
-}
-
-//////////////////////////////////////////
-// Functions which are declared directly.
-//////////////////////////////////////////
-var JQLitePrototype = JQLite.prototype = {
- ready: function(fn) {
- var fired = false;
-
- function trigger() {
- if (fired) return;
- fired = true;
- fn();
- }
-
- // check if document is already loaded
- if (document.readyState === 'complete') {
- setTimeout(trigger);
- } else {
- this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9
- // we can not use jqLite since we are not done loading and jQuery could be loaded later.
- // jshint -W064
- JQLite(window).on('load', trigger); // fallback to window.onload for others
- // jshint +W064
- }
- },
- toString: function() {
- var value = [];
- forEach(this, function(e) { value.push('' + e);});
- return '[' + value.join(', ') + ']';
- },
-
- eq: function(index) {
- return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]);
- },
-
- length: 0,
- push: push,
- sort: [].sort,
- splice: [].splice
-};
-
-//////////////////////////////////////////
-// Functions iterating getter/setters.
-// these functions return self on setter and
-// value on get.
-//////////////////////////////////////////
-var BOOLEAN_ATTR = {};
-forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) {
- BOOLEAN_ATTR[lowercase(value)] = value;
-});
-var BOOLEAN_ELEMENTS = {};
-forEach('input,select,option,textarea,button,form,details'.split(','), function(value) {
- BOOLEAN_ELEMENTS[value] = true;
-});
-var ALIASED_ATTR = {
- 'ngMinlength': 'minlength',
- 'ngMaxlength': 'maxlength',
- 'ngMin': 'min',
- 'ngMax': 'max',
- 'ngPattern': 'pattern'
-};
-
-function getBooleanAttrName(element, name) {
- // check dom last since we will most likely fail on name
- var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()];
-
- // booleanAttr is here twice to minimize DOM access
- return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr;
-}
-
-function getAliasedAttrName(element, name) {
- var nodeName = element.nodeName;
- return (nodeName === 'INPUT' || nodeName === 'TEXTAREA') && ALIASED_ATTR[name];
-}
-
-forEach({
- data: jqLiteData,
- removeData: jqLiteRemoveData
-}, function(fn, name) {
- JQLite[name] = fn;
-});
-
-forEach({
- data: jqLiteData,
- inheritedData: jqLiteInheritedData,
-
- scope: function(element) {
- // Can't use jqLiteData here directly so we stay compatible with jQuery!
- return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']);
- },
-
- isolateScope: function(element) {
- // Can't use jqLiteData here directly so we stay compatible with jQuery!
- return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate');
- },
-
- controller: jqLiteController,
-
- injector: function(element) {
- return jqLiteInheritedData(element, '$injector');
- },
-
- removeAttr: function(element, name) {
- element.removeAttribute(name);
- },
-
- hasClass: jqLiteHasClass,
-
- css: function(element, name, value) {
- name = camelCase(name);
-
- if (isDefined(value)) {
- element.style[name] = value;
- } else {
- return element.style[name];
- }
- },
-
- attr: function(element, name, value) {
- var lowercasedName = lowercase(name);
- if (BOOLEAN_ATTR[lowercasedName]) {
- if (isDefined(value)) {
- if (!!value) {
- element[name] = true;
- element.setAttribute(name, lowercasedName);
- } else {
- element[name] = false;
- element.removeAttribute(lowercasedName);
- }
- } else {
- return (element[name] ||
- (element.attributes.getNamedItem(name) || noop).specified)
- ? lowercasedName
- : undefined;
- }
- } else if (isDefined(value)) {
- element.setAttribute(name, value);
- } else if (element.getAttribute) {
- // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code
- // some elements (e.g. Document) don't have get attribute, so return undefined
- var ret = element.getAttribute(name, 2);
- // normalize non-existing attributes to undefined (as jQuery)
- return ret === null ? undefined : ret;
- }
- },
-
- prop: function(element, name, value) {
- if (isDefined(value)) {
- element[name] = value;
- } else {
- return element[name];
- }
- },
-
- text: (function() {
- getText.$dv = '';
- return getText;
-
- function getText(element, value) {
- if (isUndefined(value)) {
- var nodeType = element.nodeType;
- return (nodeType === NODE_TYPE_ELEMENT || nodeType === NODE_TYPE_TEXT) ? element.textContent : '';
- }
- element.textContent = value;
- }
- })(),
-
- val: function(element, value) {
- if (isUndefined(value)) {
- if (element.multiple && nodeName_(element) === 'select') {
- var result = [];
- forEach(element.options, function(option) {
- if (option.selected) {
- result.push(option.value || option.text);
- }
- });
- return result.length === 0 ? null : result;
- }
- return element.value;
- }
- element.value = value;
- },
-
- html: function(element, value) {
- if (isUndefined(value)) {
- return element.innerHTML;
- }
- jqLiteDealoc(element, true);
- element.innerHTML = value;
- },
-
- empty: jqLiteEmpty
-}, function(fn, name) {
- /**
- * Properties: writes return selection, reads return first value
- */
- JQLite.prototype[name] = function(arg1, arg2) {
- var i, key;
- var nodeCount = this.length;
-
- // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it
- // in a way that survives minification.
- // jqLiteEmpty takes no arguments but is a setter.
- if (fn !== jqLiteEmpty &&
- (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) {
- if (isObject(arg1)) {
-
- // we are a write, but the object properties are the key/values
- for (i = 0; i < nodeCount; i++) {
- if (fn === jqLiteData) {
- // data() takes the whole object in jQuery
- fn(this[i], arg1);
- } else {
- for (key in arg1) {
- fn(this[i], key, arg1[key]);
- }
- }
- }
- // return self for chaining
- return this;
- } else {
- // we are a read, so read the first child.
- // TODO: do we still need this?
- var value = fn.$dv;
- // Only if we have $dv do we iterate over all, otherwise it is just the first element.
- var jj = (value === undefined) ? Math.min(nodeCount, 1) : nodeCount;
- for (var j = 0; j < jj; j++) {
- var nodeValue = fn(this[j], arg1, arg2);
- value = value ? value + nodeValue : nodeValue;
- }
- return value;
- }
- } else {
- // we are a write, so apply to all children
- for (i = 0; i < nodeCount; i++) {
- fn(this[i], arg1, arg2);
- }
- // return self for chaining
- return this;
- }
- };
-});
-
-function createEventHandler(element, events) {
- var eventHandler = function(event, type) {
- // jQuery specific api
- event.isDefaultPrevented = function() {
- return event.defaultPrevented;
- };
-
- var eventFns = events[type || event.type];
- var eventFnsLength = eventFns ? eventFns.length : 0;
-
- if (!eventFnsLength) return;
-
- if (isUndefined(event.immediatePropagationStopped)) {
- var originalStopImmediatePropagation = event.stopImmediatePropagation;
- event.stopImmediatePropagation = function() {
- event.immediatePropagationStopped = true;
-
- if (event.stopPropagation) {
- event.stopPropagation();
- }
-
- if (originalStopImmediatePropagation) {
- originalStopImmediatePropagation.call(event);
- }
- };
- }
-
- event.isImmediatePropagationStopped = function() {
- return event.immediatePropagationStopped === true;
- };
-
- // Copy event handlers in case event handlers array is modified during execution.
- if ((eventFnsLength > 1)) {
- eventFns = shallowCopy(eventFns);
- }
-
- for (var i = 0; i < eventFnsLength; i++) {
- if (!event.isImmediatePropagationStopped()) {
- eventFns[i].call(element, event);
- }
- }
- };
-
- // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all
- // events on `element`
- eventHandler.elem = element;
- return eventHandler;
-}
-
-//////////////////////////////////////////
-// Functions iterating traversal.
-// These functions chain results into a single
-// selector.
-//////////////////////////////////////////
-forEach({
- removeData: jqLiteRemoveData,
-
- on: function jqLiteOn(element, type, fn, unsupported) {
- if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters');
-
- // Do not add event handlers to non-elements because they will not be cleaned up.
- if (!jqLiteAcceptsData(element)) {
- return;
- }
-
- var expandoStore = jqLiteExpandoStore(element, true);
- var events = expandoStore.events;
- var handle = expandoStore.handle;
-
- if (!handle) {
- handle = expandoStore.handle = createEventHandler(element, events);
- }
-
- // http://jsperf.com/string-indexof-vs-split
- var types = type.indexOf(' ') >= 0 ? type.split(' ') : [type];
- var i = types.length;
-
- while (i--) {
- type = types[i];
- var eventFns = events[type];
-
- if (!eventFns) {
- events[type] = [];
-
- if (type === 'mouseenter' || type === 'mouseleave') {
- // Refer to jQuery's implementation of mouseenter & mouseleave
- // Read about mouseenter and mouseleave:
- // http://www.quirksmode.org/js/events_mouse.html#link8
-
- jqLiteOn(element, MOUSE_EVENT_MAP[type], function(event) {
- var target = this, related = event.relatedTarget;
- // For mousenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if (!related || (related !== target && !target.contains(related))) {
- handle(event, type);
- }
- });
-
- } else {
- if (type !== '$destroy') {
- addEventListenerFn(element, type, handle);
- }
- }
- eventFns = events[type];
- }
- eventFns.push(fn);
- }
- },
-
- off: jqLiteOff,
-
- one: function(element, type, fn) {
- element = jqLite(element);
-
- //add the listener twice so that when it is called
- //you can remove the original function and still be
- //able to call element.off(ev, fn) normally
- element.on(type, function onFn() {
- element.off(type, fn);
- element.off(type, onFn);
- });
- element.on(type, fn);
- },
-
- replaceWith: function(element, replaceNode) {
- var index, parent = element.parentNode;
- jqLiteDealoc(element);
- forEach(new JQLite(replaceNode), function(node) {
- if (index) {
- parent.insertBefore(node, index.nextSibling);
- } else {
- parent.replaceChild(node, element);
- }
- index = node;
- });
- },
-
- children: function(element) {
- var children = [];
- forEach(element.childNodes, function(element) {
- if (element.nodeType === NODE_TYPE_ELEMENT)
- children.push(element);
- });
- return children;
- },
-
- contents: function(element) {
- return element.contentDocument || element.childNodes || [];
- },
-
- append: function(element, node) {
- var nodeType = element.nodeType;
- if (nodeType !== NODE_TYPE_ELEMENT && nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT) return;
-
- node = new JQLite(node);
-
- for (var i = 0, ii = node.length; i < ii; i++) {
- var child = node[i];
- element.appendChild(child);
- }
- },
-
- prepend: function(element, node) {
- if (element.nodeType === NODE_TYPE_ELEMENT) {
- var index = element.firstChild;
- forEach(new JQLite(node), function(child) {
- element.insertBefore(child, index);
- });
- }
- },
-
- wrap: function(element, wrapNode) {
- wrapNode = jqLite(wrapNode).eq(0).clone()[0];
- var parent = element.parentNode;
- if (parent) {
- parent.replaceChild(wrapNode, element);
- }
- wrapNode.appendChild(element);
- },
-
- remove: jqLiteRemove,
-
- detach: function(element) {
- jqLiteRemove(element, true);
- },
-
- after: function(element, newElement) {
- var index = element, parent = element.parentNode;
- newElement = new JQLite(newElement);
-
- for (var i = 0, ii = newElement.length; i < ii; i++) {
- var node = newElement[i];
- parent.insertBefore(node, index.nextSibling);
- index = node;
- }
- },
-
- addClass: jqLiteAddClass,
- removeClass: jqLiteRemoveClass,
-
- toggleClass: function(element, selector, condition) {
- if (selector) {
- forEach(selector.split(' '), function(className) {
- var classCondition = condition;
- if (isUndefined(classCondition)) {
- classCondition = !jqLiteHasClass(element, className);
- }
- (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className);
- });
- }
- },
-
- parent: function(element) {
- var parent = element.parentNode;
- return parent && parent.nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT ? parent : null;
- },
-
- next: function(element) {
- return element.nextElementSibling;
- },
-
- find: function(element, selector) {
- if (element.getElementsByTagName) {
- return element.getElementsByTagName(selector);
- } else {
- return [];
- }
- },
-
- clone: jqLiteClone,
-
- triggerHandler: function(element, event, extraParameters) {
-
- var dummyEvent, eventFnsCopy, handlerArgs;
- var eventName = event.type || event;
- var expandoStore = jqLiteExpandoStore(element);
- var events = expandoStore && expandoStore.events;
- var eventFns = events && events[eventName];
-
- if (eventFns) {
- // Create a dummy event to pass to the handlers
- dummyEvent = {
- preventDefault: function() { this.defaultPrevented = true; },
- isDefaultPrevented: function() { return this.defaultPrevented === true; },
- stopImmediatePropagation: function() { this.immediatePropagationStopped = true; },
- isImmediatePropagationStopped: function() { return this.immediatePropagationStopped === true; },
- stopPropagation: noop,
- type: eventName,
- target: element
- };
-
- // If a custom event was provided then extend our dummy event with it
- if (event.type) {
- dummyEvent = extend(dummyEvent, event);
- }
-
- // Copy event handlers in case event handlers array is modified during execution.
- eventFnsCopy = shallowCopy(eventFns);
- handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent];
-
- forEach(eventFnsCopy, function(fn) {
- if (!dummyEvent.isImmediatePropagationStopped()) {
- fn.apply(element, handlerArgs);
- }
- });
- }
- }
-}, function(fn, name) {
- /**
- * chaining functions
- */
- JQLite.prototype[name] = function(arg1, arg2, arg3) {
- var value;
-
- for (var i = 0, ii = this.length; i < ii; i++) {
- if (isUndefined(value)) {
- value = fn(this[i], arg1, arg2, arg3);
- if (isDefined(value)) {
- // any function which returns a value needs to be wrapped
- value = jqLite(value);
- }
- } else {
- jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3));
- }
- }
- return isDefined(value) ? value : this;
- };
-
- // bind legacy bind/unbind to on/off
- JQLite.prototype.bind = JQLite.prototype.on;
- JQLite.prototype.unbind = JQLite.prototype.off;
-});
-
-/**
- * Computes a hash of an 'obj'.
- * Hash of a:
- * string is string
- * number is number as string
- * object is either result of calling $$hashKey function on the object or uniquely generated id,
- * that is also assigned to the $$hashKey property of the object.
- *
- * @param obj
- * @returns {string} hash string such that the same input will have the same hash string.
- * The resulting string key is in 'type:hashKey' format.
- */
-function hashKey(obj, nextUidFn) {
- var key = obj && obj.$$hashKey;
-
- if (key) {
- if (typeof key === 'function') {
- key = obj.$$hashKey();
- }
- return key;
- }
-
- var objType = typeof obj;
- if (objType == 'function' || (objType == 'object' && obj !== null)) {
- key = obj.$$hashKey = objType + ':' + (nextUidFn || nextUid)();
- } else {
- key = objType + ':' + obj;
- }
-
- return key;
-}
-
-/**
- * HashMap which can use objects as keys
- */
-function HashMap(array, isolatedUid) {
- if (isolatedUid) {
- var uid = 0;
- this.nextUid = function() {
- return ++uid;
- };
- }
- forEach(array, this.put, this);
-}
-HashMap.prototype = {
- /**
- * Store key value pair
- * @param key key to store can be any type
- * @param value value to store can be any type
- */
- put: function(key, value) {
- this[hashKey(key, this.nextUid)] = value;
- },
-
- /**
- * @param key
- * @returns {Object} the value for the key
- */
- get: function(key) {
- return this[hashKey(key, this.nextUid)];
- },
-
- /**
- * Remove the key/value pair
- * @param key
- */
- remove: function(key) {
- var value = this[key = hashKey(key, this.nextUid)];
- delete this[key];
- return value;
- }
-};
-
-/**
- * @ngdoc function
- * @module ng
- * @name angular.injector
- * @kind function
- *
- * @description
- * Creates an injector object that can be used for retrieving services as well as for
- * dependency injection (see {@link guide/di dependency injection}).
- *
- * @param {Array.<string|Function>} modules A list of module functions or their aliases. See
- * {@link angular.module}. The `ng` module must be explicitly added.
- * @param {boolean=} [strictDi=false] Whether the injector should be in strict mode, which
- * disallows argument name annotation inference.
- * @returns {injector} Injector object. See {@link auto.$injector $injector}.
- *
- * @example
- * Typical usage
- * ```js
- * // create an injector
- * var $injector = angular.injector(['ng']);
- *
- * // use the injector to kick off your application
- * // use the type inference to auto inject arguments, or use implicit injection
- * $injector.invoke(function($rootScope, $compile, $document) {
- * $compile($document)($rootScope);
- * $rootScope.$digest();
- * });
- * ```
- *
- * Sometimes you want to get access to the injector of a currently running Angular app
- * from outside Angular. Perhaps, you want to inject and compile some markup after the
- * application has been bootstrapped. You can do this using the extra `injector()` added
- * to JQuery/jqLite elements. See {@link angular.element}.
- *
- * *This is fairly rare but could be the case if a third party library is injecting the
- * markup.*
- *
- * In the following example a new block of HTML containing a `ng-controller`
- * directive is added to the end of the document body by JQuery. We then compile and link
- * it into the current AngularJS scope.
- *
- * ```js
- * var $div = $('<div ng-controller="MyCtrl">{{content.label}}</div>');
- * $(document.body).append($div);
- *
- * angular.element(document).injector().invoke(function($compile) {
- * var scope = angular.element($div).scope();
- * $compile($div)(scope);
- * });
- * ```
- */
-
-
-/**
- * @ngdoc module
- * @name auto
- * @description
- *
- * Implicit module which gets automatically added to each {@link auto.$injector $injector}.
- */
-
-var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
-var FN_ARG_SPLIT = /,/;
-var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/;
-var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
-var $injectorMinErr = minErr('$injector');
-
-function anonFn(fn) {
- // For anonymous functions, showing at the very least the function signature can help in
- // debugging.
- var fnText = fn.toString().replace(STRIP_COMMENTS, ''),
- args = fnText.match(FN_ARGS);
- if (args) {
- return 'function(' + (args[1] || '').replace(/[\s\r\n]+/, ' ') + ')';
- }
- return 'fn';
-}
-
-function annotate(fn, strictDi, name) {
- var $inject,
- fnText,
- argDecl,
- last;
-
- if (typeof fn === 'function') {
- if (!($inject = fn.$inject)) {
- $inject = [];
- if (fn.length) {
- if (strictDi) {
- if (!isString(name) || !name) {
- name = fn.name || anonFn(fn);
- }
- throw $injectorMinErr('strictdi',
- '{0} is not using explicit annotation and cannot be invoked in strict mode', name);
- }
- fnText = fn.toString().replace(STRIP_COMMENTS, '');
- argDecl = fnText.match(FN_ARGS);
- forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) {
- arg.replace(FN_ARG, function(all, underscore, name) {
- $inject.push(name);
- });
- });
- }
- fn.$inject = $inject;
- }
- } else if (isArray(fn)) {
- last = fn.length - 1;
- assertArgFn(fn[last], 'fn');
- $inject = fn.slice(0, last);
- } else {
- assertArgFn(fn, 'fn', true);
- }
- return $inject;
-}
-
-///////////////////////////////////////
-
-/**
- * @ngdoc service
- * @name $injector
- *
- * @description
- *
- * `$injector` is used to retrieve object instances as defined by
- * {@link auto.$provide provider}, instantiate types, invoke methods,
- * and load modules.
- *
- * The following always holds true:
- *
- * ```js
- * var $injector = angular.injector();
- * expect($injector.get('$injector')).toBe($injector);
- * expect($injector.invoke(function($injector) {
- * return $injector;
- * })).toBe($injector);
- * ```
- *
- * # Injection Function Annotation
- *
- * JavaScript does not have annotations, and annotations are needed for dependency injection. The
- * following are all valid ways of annotating function with injection arguments and are equivalent.
- *
- * ```js
- * // inferred (only works if code not minified/obfuscated)
- * $injector.invoke(function(serviceA){});
- *
- * // annotated
- * function explicit(serviceA) {};
- * explicit.$inject = ['serviceA'];
- * $injector.invoke(explicit);
- *
- * // inline
- * $injector.invoke(['serviceA', function(serviceA){}]);
- * ```
- *
- * ## Inference
- *
- * In JavaScript calling `toString()` on a function returns the function definition. The definition
- * can then be parsed and the function arguments can be extracted. This method of discovering
- * annotations is disallowed when the injector is in strict mode.
- * *NOTE:* This does not work with minification, and obfuscation tools since these tools change the
- * argument names.
- *
- * ## `$inject` Annotation
- * By adding an `$inject` property onto a function the injection parameters can be specified.
- *
- * ## Inline
- * As an array of injection names, where the last item in the array is the function to call.
- */
-
-/**
- * @ngdoc method
- * @name $injector#get
- *
- * @description
- * Return an instance of the service.
- *
- * @param {string} name The name of the instance to retrieve.
- * @return {*} The instance.
- */
-
-/**
- * @ngdoc method
- * @name $injector#invoke
- *
- * @description
- * Invoke the method and supply the method arguments from the `$injector`.
- *
- * @param {!Function} fn The function to invoke. Function parameters are injected according to the
- * {@link guide/di $inject Annotation} rules.
- * @param {Object=} self The `this` for the invoked method.
- * @param {Object=} locals Optional object. If preset then any argument names are read from this
- * object first, before the `$injector` is consulted.
- * @returns {*} the value returned by the invoked `fn` function.
- */
-
-/**
- * @ngdoc method
- * @name $injector#has
- *
- * @description
- * Allows the user to query if the particular service exists.
- *
- * @param {string} name Name of the service to query.
- * @returns {boolean} `true` if injector has given service.
- */
-
-/**
- * @ngdoc method
- * @name $injector#instantiate
- * @description
- * Create a new instance of JS type. The method takes a constructor function, invokes the new
- * operator, and supplies all of the arguments to the constructor function as specified by the
- * constructor annotation.
- *
- * @param {Function} Type Annotated constructor function.
- * @param {Object=} locals Optional object. If preset then any argument names are read from this
- * object first, before the `$injector` is consulted.
- * @returns {Object} new instance of `Type`.
- */
-
-/**
- * @ngdoc method
- * @name $injector#annotate
- *
- * @description
- * Returns an array of service names which the function is requesting for injection. This API is
- * used by the injector to determine which services need to be injected into the function when the
- * function is invoked. There are three ways in which the function can be annotated with the needed
- * dependencies.
- *
- * # Argument names
- *
- * The simplest form is to extract the dependencies from the arguments of the function. This is done
- * by converting the function into a string using `toString()` method and extracting the argument
- * names.
- * ```js
- * // Given
- * function MyController($scope, $route) {
- * // ...
- * }
- *
- * // Then
- * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
- * ```
- *
- * You can disallow this method by using strict injection mode.
- *
- * This method does not work with code minification / obfuscation. For this reason the following
- * annotation strategies are supported.
- *
- * # The `$inject` property
- *
- * If a function has an `$inject` property and its value is an array of strings, then the strings
- * represent names of services to be injected into the function.
- * ```js
- * // Given
- * var MyController = function(obfuscatedScope, obfuscatedRoute) {
- * // ...
- * }
- * // Define function dependencies
- * MyController['$inject'] = ['$scope', '$route'];
- *
- * // Then
- * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
- * ```
- *
- * # The array notation
- *
- * It is often desirable to inline Injected functions and that's when setting the `$inject` property
- * is very inconvenient. In these situations using the array notation to specify the dependencies in
- * a way that survives minification is a better choice:
- *
- * ```js
- * // We wish to write this (not minification / obfuscation safe)
- * injector.invoke(function($compile, $rootScope) {
- * // ...
- * });
- *
- * // We are forced to write break inlining
- * var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {
- * // ...
- * };
- * tmpFn.$inject = ['$compile', '$rootScope'];
- * injector.invoke(tmpFn);
- *
- * // To better support inline function the inline annotation is supported
- * injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {
- * // ...
- * }]);
- *
- * // Therefore
- * expect(injector.annotate(
- * ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])
- * ).toEqual(['$compile', '$rootScope']);
- * ```
- *
- * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to
- * be retrieved as described above.
- *
- * @param {boolean=} [strictDi=false] Disallow argument name annotation inference.
- *
- * @returns {Array.<string>} The names of the services which the function requires.
- */
-
-
-
-
-/**
- * @ngdoc service
- * @name $provide
- *
- * @description
- *
- * The {@link auto.$provide $provide} service has a number of methods for registering components
- * with the {@link auto.$injector $injector}. Many of these functions are also exposed on
- * {@link angular.Module}.
- *
- * An Angular **service** is a singleton object created by a **service factory**. These **service
- * factories** are functions which, in turn, are created by a **service provider**.
- * The **service providers** are constructor functions. When instantiated they must contain a
- * property called `$get`, which holds the **service factory** function.
- *
- * When you request a service, the {@link auto.$injector $injector} is responsible for finding the
- * correct **service provider**, instantiating it and then calling its `$get` **service factory**
- * function to get the instance of the **service**.
- *
- * Often services have no configuration options and there is no need to add methods to the service
- * provider. The provider will be no more than a constructor function with a `$get` property. For
- * these cases the {@link auto.$provide $provide} service has additional helper methods to register
- * services without specifying a provider.
- *
- * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the
- * {@link auto.$injector $injector}
- * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by
- * providers and services.
- * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by
- * services, not providers.
- * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`,
- * that will be wrapped in a **service provider** object, whose `$get` property will contain the
- * given factory function.
- * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class`
- * that will be wrapped in a **service provider** object, whose `$get` property will instantiate
- * a new object using the given constructor function.
- *
- * See the individual methods for more information and examples.
- */
-
-/**
- * @ngdoc method
- * @name $provide#provider
- * @description
- *
- * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions
- * are constructor functions, whose instances are responsible for "providing" a factory for a
- * service.
- *
- * Service provider names start with the name of the service they provide followed by `Provider`.
- * For example, the {@link ng.$log $log} service has a provider called
- * {@link ng.$logProvider $logProvider}.
- *
- * Service provider objects can have additional methods which allow configuration of the provider
- * and its service. Importantly, you can configure what kind of service is created by the `$get`
- * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a
- * method {@link ng.$logProvider#debugEnabled debugEnabled}
- * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the
- * console or not.
- *
- * @param {string} name The name of the instance. NOTE: the provider will be available under `name +
- 'Provider'` key.
- * @param {(Object|function())} provider If the provider is:
- *
- * - `Object`: then it should have a `$get` method. The `$get` method will be invoked using
- * {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created.
- * - `Constructor`: a new instance of the provider will be created using
- * {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`.
- *
- * @returns {Object} registered provider instance
-
- * @example
- *
- * The following example shows how to create a simple event tracking service and register it using
- * {@link auto.$provide#provider $provide.provider()}.
- *
- * ```js
- * // Define the eventTracker provider
- * function EventTrackerProvider() {
- * var trackingUrl = '/track';
- *
- * // A provider method for configuring where the tracked events should been saved
- * this.setTrackingUrl = function(url) {
- * trackingUrl = url;
- * };
- *
- * // The service factory function
- * this.$get = ['$http', function($http) {
- * var trackedEvents = {};
- * return {
- * // Call this to track an event
- * event: function(event) {
- * var count = trackedEvents[event] || 0;
- * count += 1;
- * trackedEvents[event] = count;
- * return count;
- * },
- * // Call this to save the tracked events to the trackingUrl
- * save: function() {
- * $http.post(trackingUrl, trackedEvents);
- * }
- * };
- * }];
- * }
- *
- * describe('eventTracker', function() {
- * var postSpy;
- *
- * beforeEach(module(function($provide) {
- * // Register the eventTracker provider
- * $provide.provider('eventTracker', EventTrackerProvider);
- * }));
- *
- * beforeEach(module(function(eventTrackerProvider) {
- * // Configure eventTracker provider
- * eventTrackerProvider.setTrackingUrl('/custom-track');
- * }));
- *
- * it('tracks events', inject(function(eventTracker) {
- * expect(eventTracker.event('login')).toEqual(1);
- * expect(eventTracker.event('login')).toEqual(2);
- * }));
- *
- * it('saves to the tracking url', inject(function(eventTracker, $http) {
- * postSpy = spyOn($http, 'post');
- * eventTracker.event('login');
- * eventTracker.save();
- * expect(postSpy).toHaveBeenCalled();
- * expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track');
- * expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track');
- * expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 });
- * }));
- * });
- * ```
- */
-
-/**
- * @ngdoc method
- * @name $provide#factory
- * @description
- *
- * Register a **service factory**, which will be called to return the service instance.
- * This is short for registering a service where its provider consists of only a `$get` property,
- * which is the given service factory function.
- * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to
- * configure your service in a provider.
- *
- * @param {string} name The name of the instance.
- * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand
- * for `$provide.provider(name, {$get: $getFn})`.
- * @returns {Object} registered provider instance
- *
- * @example
- * Here is an example of registering a service
- * ```js
- * $provide.factory('ping', ['$http', function($http) {
- * return function ping() {
- * return $http.send('/ping');
- * };
- * }]);
- * ```
- * You would then inject and use this service like this:
- * ```js
- * someModule.controller('Ctrl', ['ping', function(ping) {
- * ping();
- * }]);
- * ```
- */
-
-
-/**
- * @ngdoc method
- * @name $provide#service
- * @description
- *
- * Register a **service constructor**, which will be invoked with `new` to create the service
- * instance.
- * This is short for registering a service where its provider's `$get` property is the service
- * constructor function that will be used to instantiate the service instance.
- *
- * You should use {@link auto.$provide#service $provide.service(class)} if you define your service
- * as a type/class.
- *
- * @param {string} name The name of the instance.
- * @param {Function} constructor A class (constructor function) that will be instantiated.
- * @returns {Object} registered provider instance
- *
- * @example
- * Here is an example of registering a service using
- * {@link auto.$provide#service $provide.service(class)}.
- * ```js
- * var Ping = function($http) {
- * this.$http = $http;
- * };
- *
- * Ping.$inject = ['$http'];
- *
- * Ping.prototype.send = function() {
- * return this.$http.get('/ping');
- * };
- * $provide.service('ping', Ping);
- * ```
- * You would then inject and use this service like this:
- * ```js
- * someModule.controller('Ctrl', ['ping', function(ping) {
- * ping.send();
- * }]);
- * ```
- */
-
-
-/**
- * @ngdoc method
- * @name $provide#value
- * @description
- *
- * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a
- * number, an array, an object or a function. This is short for registering a service where its
- * provider's `$get` property is a factory function that takes no arguments and returns the **value
- * service**.
- *
- * Value services are similar to constant services, except that they cannot be injected into a
- * module configuration function (see {@link angular.Module#config}) but they can be overridden by
- * an Angular
- * {@link auto.$provide#decorator decorator}.
- *
- * @param {string} name The name of the instance.
- * @param {*} value The value.
- * @returns {Object} registered provider instance
- *
- * @example
- * Here are some examples of creating value services.
- * ```js
- * $provide.value('ADMIN_USER', 'admin');
- *
- * $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 });
- *
- * $provide.value('halfOf', function(value) {
- * return value / 2;
- * });
- * ```
- */
-
-
-/**
- * @ngdoc method
- * @name $provide#constant
- * @description
- *
- * Register a **constant service**, such as a string, a number, an array, an object or a function,
- * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be
- * injected into a module configuration function (see {@link angular.Module#config}) and it cannot
- * be overridden by an Angular {@link auto.$provide#decorator decorator}.
- *
- * @param {string} name The name of the constant.
- * @param {*} value The constant value.
- * @returns {Object} registered instance
- *
- * @example
- * Here a some examples of creating constants:
- * ```js
- * $provide.constant('SHARD_HEIGHT', 306);
- *
- * $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']);
- *
- * $provide.constant('double', function(value) {
- * return value * 2;
- * });
- * ```
- */
-
-
-/**
- * @ngdoc method
- * @name $provide#decorator
- * @description
- *
- * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator
- * intercepts the creation of a service, allowing it to override or modify the behaviour of the
- * service. The object returned by the decorator may be the original service, or a new service
- * object which replaces or wraps and delegates to the original service.
- *
- * @param {string} name The name of the service to decorate.
- * @param {function()} decorator This function will be invoked when the service needs to be
- * instantiated and should return the decorated service instance. The function is called using
- * the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.
- * Local injection arguments:
- *
- * * `$delegate` - The original service instance, which can be monkey patched, configured,
- * decorated or delegated to.
- *
- * @example
- * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting
- * calls to {@link ng.$log#error $log.warn()}.
- * ```js
- * $provide.decorator('$log', ['$delegate', function($delegate) {
- * $delegate.warn = $delegate.error;
- * return $delegate;
- * }]);
- * ```
- */
-
-
-function createInjector(modulesToLoad, strictDi) {
- strictDi = (strictDi === true);
- var INSTANTIATING = {},
- providerSuffix = 'Provider',
- path = [],
- loadedModules = new HashMap([], true),
- providerCache = {
- $provide: {
- provider: supportObject(provider),
- factory: supportObject(factory),
- service: supportObject(service),
- value: supportObject(value),
- constant: supportObject(constant),
- decorator: decorator
- }
- },
- providerInjector = (providerCache.$injector =
- createInternalInjector(providerCache, function() {
- throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- '));
- })),
- instanceCache = {},
- instanceInjector = (instanceCache.$injector =
- createInternalInjector(instanceCache, function(servicename) {
- var provider = providerInjector.get(servicename + providerSuffix);
- return instanceInjector.invoke(provider.$get, provider, undefined, servicename);
- }));
-
-
- forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); });
-
- return instanceInjector;
-
- ////////////////////////////////////
- // $provider
- ////////////////////////////////////
-
- function supportObject(delegate) {
- return function(key, value) {
- if (isObject(key)) {
- forEach(key, reverseParams(delegate));
- } else {
- return delegate(key, value);
- }
- };
- }
-
- function provider(name, provider_) {
- assertNotHasOwnProperty(name, 'service');
- if (isFunction(provider_) || isArray(provider_)) {
- provider_ = providerInjector.instantiate(provider_);
- }
- if (!provider_.$get) {
- throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name);
- }
- return providerCache[name + providerSuffix] = provider_;
- }
-
- function enforceReturnValue(name, factory) {
- return function enforcedReturnValue() {
- var result = instanceInjector.invoke(factory, this, undefined, name);
- if (isUndefined(result)) {
- throw $injectorMinErr('undef', "Provider '{0}' must return a value from $get factory method.", name);
- }
- return result;
- };
- }
-
- function factory(name, factoryFn, enforce) {
- return provider(name, {
- $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn
- });
- }
-
- function service(name, constructor) {
- return factory(name, ['$injector', function($injector) {
- return $injector.instantiate(constructor);
- }]);
- }
-
- function value(name, val) { return factory(name, valueFn(val), false); }
-
- function constant(name, value) {
- assertNotHasOwnProperty(name, 'constant');
- providerCache[name] = value;
- instanceCache[name] = value;
- }
-
- function decorator(serviceName, decorFn) {
- var origProvider = providerInjector.get(serviceName + providerSuffix),
- orig$get = origProvider.$get;
-
- origProvider.$get = function() {
- var origInstance = instanceInjector.invoke(orig$get, origProvider);
- return instanceInjector.invoke(decorFn, null, {$delegate: origInstance});
- };
- }
-
- ////////////////////////////////////
- // Module Loading
- ////////////////////////////////////
- function loadModules(modulesToLoad) {
- var runBlocks = [], moduleFn;
- forEach(modulesToLoad, function(module) {
- if (loadedModules.get(module)) return;
- loadedModules.put(module, true);
-
- function runInvokeQueue(queue) {
- var i, ii;
- for (i = 0, ii = queue.length; i < ii; i++) {
- var invokeArgs = queue[i],
- provider = providerInjector.get(invokeArgs[0]);
-
- provider[invokeArgs[1]].apply(provider, invokeArgs[2]);
- }
- }
-
- try {
- if (isString(module)) {
- moduleFn = angularModule(module);
- runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);
- runInvokeQueue(moduleFn._invokeQueue);
- runInvokeQueue(moduleFn._configBlocks);
- } else if (isFunction(module)) {
- runBlocks.push(providerInjector.invoke(module));
- } else if (isArray(module)) {
- runBlocks.push(providerInjector.invoke(module));
- } else {
- assertArgFn(module, 'module');
- }
- } catch (e) {
- if (isArray(module)) {
- module = module[module.length - 1];
- }
- if (e.message && e.stack && e.stack.indexOf(e.message) == -1) {
- // Safari & FF's stack traces don't contain error.message content
- // unlike those of Chrome and IE
- // So if stack doesn't contain message, we create a new string that contains both.
- // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here.
- /* jshint -W022 */
- e = e.message + '\n' + e.stack;
- }
- throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}",
- module, e.stack || e.message || e);
- }
- });
- return runBlocks;
- }
-
- ////////////////////////////////////
- // internal Injector
- ////////////////////////////////////
-
- function createInternalInjector(cache, factory) {
-
- function getService(serviceName) {
- if (cache.hasOwnProperty(serviceName)) {
- if (cache[serviceName] === INSTANTIATING) {
- throw $injectorMinErr('cdep', 'Circular dependency found: {0}',
- serviceName + ' <- ' + path.join(' <- '));
- }
- return cache[serviceName];
- } else {
- try {
- path.unshift(serviceName);
- cache[serviceName] = INSTANTIATING;
- return cache[serviceName] = factory(serviceName);
- } catch (err) {
- if (cache[serviceName] === INSTANTIATING) {
- delete cache[serviceName];
- }
- throw err;
- } finally {
- path.shift();
- }
- }
- }
-
- function invoke(fn, self, locals, serviceName) {
- if (typeof locals === 'string') {
- serviceName = locals;
- locals = null;
- }
-
- var args = [],
- $inject = annotate(fn, strictDi, serviceName),
- length, i,
- key;
-
- for (i = 0, length = $inject.length; i < length; i++) {
- key = $inject[i];
- if (typeof key !== 'string') {
- throw $injectorMinErr('itkn',
- 'Incorrect injection token! Expected service name as string, got {0}', key);
- }
- args.push(
- locals && locals.hasOwnProperty(key)
- ? locals[key]
- : getService(key)
- );
- }
- if (isArray(fn)) {
- fn = fn[length];
- }
-
- // http://jsperf.com/angularjs-invoke-apply-vs-switch
- // #5388
- return fn.apply(self, args);
- }
-
- function instantiate(Type, locals, serviceName) {
- // Check if Type is annotated and use just the given function at n-1 as parameter
- // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);
- // Object creation: http://jsperf.com/create-constructor/2
- var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype);
- var returnedValue = invoke(Type, instance, locals, serviceName);
-
- return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;
- }
-
- return {
- invoke: invoke,
- instantiate: instantiate,
- get: getService,
- annotate: annotate,
- has: function(name) {
- return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name);
- }
- };
- }
-}
-
-createInjector.$$annotate = annotate;
-
-/**
- * @ngdoc provider
- * @name $anchorScrollProvider
- *
- * @description
- * Use `$anchorScrollProvider` to disable automatic scrolling whenever
- * {@link ng.$location#hash $location.hash()} changes.
- */
-function $AnchorScrollProvider() {
-
- var autoScrollingEnabled = true;
-
- /**
- * @ngdoc method
- * @name $anchorScrollProvider#disableAutoScrolling
- *
- * @description
- * By default, {@link ng.$anchorScroll $anchorScroll()} will automatically detect changes to
- * {@link ng.$location#hash $location.hash()} and scroll to the element matching the new hash.<br />
- * Use this method to disable automatic scrolling.
- *
- * If automatic scrolling is disabled, one must explicitly call
- * {@link ng.$anchorScroll $anchorScroll()} in order to scroll to the element related to the
- * current hash.
- */
- this.disableAutoScrolling = function() {
- autoScrollingEnabled = false;
- };
-
- /**
- * @ngdoc service
- * @name $anchorScroll
- * @kind function
- * @requires $window
- * @requires $location
- * @requires $rootScope
- *
- * @description
- * When called, it checks the current value of {@link ng.$location#hash $location.hash()} and
- * scrolls to the related element, according to the rules specified in the
- * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document).
- *
- * It also watches the {@link ng.$location#hash $location.hash()} and automatically scrolls to
- * match any anchor whenever it changes. This can be disabled by calling
- * {@link ng.$anchorScrollProvider#disableAutoScrolling $anchorScrollProvider.disableAutoScrolling()}.
- *
- * Additionally, you can use its {@link ng.$anchorScroll#yOffset yOffset} property to specify a
- * vertical scroll-offset (either fixed or dynamic).
- *
- * @property {(number|function|jqLite)} yOffset
- * If set, specifies a vertical scroll-offset. This is often useful when there are fixed
- * positioned elements at the top of the page, such as navbars, headers etc.
- *
- * `yOffset` can be specified in various ways:
- * - **number**: A fixed number of pixels to be used as offset.<br /><br />
- * - **function**: A getter function called everytime `$anchorScroll()` is executed. Must return
- * a number representing the offset (in pixels).<br /><br />
- * - **jqLite**: A jqLite/jQuery element to be used for specifying the offset. The distance from
- * the top of the page to the element's bottom will be used as offset.<br />
- * **Note**: The element will be taken into account only as long as its `position` is set to
- * `fixed`. This option is useful, when dealing with responsive navbars/headers that adjust
- * their height and/or positioning according to the viewport's size.
- *
- * <br />
- * <div class="alert alert-warning">
- * In order for `yOffset` to work properly, scrolling should take place on the document's root and
- * not some child element.
- * </div>
- *
- * @example
- <example module="anchorScrollExample">
- <file name="index.html">
- <div id="scrollArea" ng-controller="ScrollController">
- <a ng-click="gotoBottom()">Go to bottom</a>
- <a id="bottom"></a> You're at the bottom!
- </div>
- </file>
- <file name="script.js">
- angular.module('anchorScrollExample', [])
- .controller('ScrollController', ['$scope', '$location', '$anchorScroll',
- function ($scope, $location, $anchorScroll) {
- $scope.gotoBottom = function() {
- // set the location.hash to the id of
- // the element you wish to scroll to.
- $location.hash('bottom');
-
- // call $anchorScroll()
- $anchorScroll();
- };
- }]);
- </file>
- <file name="style.css">
- #scrollArea {
- height: 280px;
- overflow: auto;
- }
-
- #bottom {
- display: block;
- margin-top: 2000px;
- }
- </file>
- </example>
- *
- * <hr />
- * The example below illustrates the use of a vertical scroll-offset (specified as a fixed value).
- * See {@link ng.$anchorScroll#yOffset $anchorScroll.yOffset} for more details.
- *
- * @example
- <example module="anchorScrollOffsetExample">
- <file name="index.html">
- <div class="fixed-header" ng-controller="headerCtrl">
- <a href="" ng-click="gotoAnchor(x)" ng-repeat="x in [1,2,3,4,5]">
- Go to anchor {{x}}
- </a>
- </div>
- <div id="anchor{{x}}" class="anchor" ng-repeat="x in [1,2,3,4,5]">
- Anchor {{x}} of 5
- </div>
- </file>
- <file name="script.js">
- angular.module('anchorScrollOffsetExample', [])
- .run(['$anchorScroll', function($anchorScroll) {
- $anchorScroll.yOffset = 50; // always scroll by 50 extra pixels
- }])
- .controller('headerCtrl', ['$anchorScroll', '$location', '$scope',
- function ($anchorScroll, $location, $scope) {
- $scope.gotoAnchor = function(x) {
- var newHash = 'anchor' + x;
- if ($location.hash() !== newHash) {
- // set the $location.hash to `newHash` and
- // $anchorScroll will automatically scroll to it
- $location.hash('anchor' + x);
- } else {
- // call $anchorScroll() explicitly,
- // since $location.hash hasn't changed
- $anchorScroll();
- }
- };
- }
- ]);
- </file>
- <file name="style.css">
- body {
- padding-top: 50px;
- }
-
- .anchor {
- border: 2px dashed DarkOrchid;
- padding: 10px 10px 200px 10px;
- }
-
- .fixed-header {
- background-color: rgba(0, 0, 0, 0.2);
- height: 50px;
- position: fixed;
- top: 0; left: 0; right: 0;
- }
-
- .fixed-header > a {
- display: inline-block;
- margin: 5px 15px;
- }
- </file>
- </example>
- */
- this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) {
- var document = $window.document;
-
- // Helper function to get first anchor from a NodeList
- // (using `Array#some()` instead of `angular#forEach()` since it's more performant
- // and working in all supported browsers.)
- function getFirstAnchor(list) {
- var result = null;
- Array.prototype.some.call(list, function(element) {
- if (nodeName_(element) === 'a') {
- result = element;
- return true;
- }
- });
- return result;
- }
-
- function getYOffset() {
-
- var offset = scroll.yOffset;
-
- if (isFunction(offset)) {
- offset = offset();
- } else if (isElement(offset)) {
- var elem = offset[0];
- var style = $window.getComputedStyle(elem);
- if (style.position !== 'fixed') {
- offset = 0;
- } else {
- offset = elem.getBoundingClientRect().bottom;
- }
- } else if (!isNumber(offset)) {
- offset = 0;
- }
-
- return offset;
- }
-
- function scrollTo(elem) {
- if (elem) {
- elem.scrollIntoView();
-
- var offset = getYOffset();
-
- if (offset) {
- // `offset` is the number of pixels we should scroll UP in order to align `elem` properly.
- // This is true ONLY if the call to `elem.scrollIntoView()` initially aligns `elem` at the
- // top of the viewport.
- //
- // IF the number of pixels from the top of `elem` to the end of the page's content is less
- // than the height of the viewport, then `elem.scrollIntoView()` will align the `elem` some
- // way down the page.
- //
- // This is often the case for elements near the bottom of the page.
- //
- // In such cases we do not need to scroll the whole `offset` up, just the difference between
- // the top of the element and the offset, which is enough to align the top of `elem` at the
- // desired position.
- var elemTop = elem.getBoundingClientRect().top;
- $window.scrollBy(0, elemTop - offset);
- }
- } else {
- $window.scrollTo(0, 0);
- }
- }
-
- function scroll() {
- var hash = $location.hash(), elm;
-
- // empty hash, scroll to the top of the page
- if (!hash) scrollTo(null);
-
- // element with given id
- else if ((elm = document.getElementById(hash))) scrollTo(elm);
-
- // first anchor with given name :-D
- else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) scrollTo(elm);
-
- // no element and hash == 'top', scroll to the top of the page
- else if (hash === 'top') scrollTo(null);
- }
-
- // does not scroll when user clicks on anchor link that is currently on
- // (no url change, no $location.hash() change), browser native does scroll
- if (autoScrollingEnabled) {
- $rootScope.$watch(function autoScrollWatch() {return $location.hash();},
- function autoScrollWatchAction(newVal, oldVal) {
- // skip the initial scroll if $location.hash is empty
- if (newVal === oldVal && newVal === '') return;
-
- jqLiteDocumentLoaded(function() {
- $rootScope.$evalAsync(scroll);
- });
- });
- }
-
- return scroll;
- }];
-}
-
-var $animateMinErr = minErr('$animate');
-
-/**
- * @ngdoc provider
- * @name $animateProvider
- *
- * @description
- * Default implementation of $animate that doesn't perform any animations, instead just
- * synchronously performs DOM
- * updates and calls done() callbacks.
- *
- * In order to enable animations the ngAnimate module has to be loaded.
- *
- * To see the functional implementation check out src/ngAnimate/animate.js
- */
-var $AnimateProvider = ['$provide', function($provide) {
-
-
- this.$$selectors = {};
-
-
- /**
- * @ngdoc method
- * @name $animateProvider#register
- *
- * @description
- * Registers a new injectable animation factory function. The factory function produces the
- * animation object which contains callback functions for each event that is expected to be
- * animated.
- *
- * * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction`
- * must be called once the element animation is complete. If a function is returned then the
- * animation service will use this function to cancel the animation whenever a cancel event is
- * triggered.
- *
- *
- * ```js
- * return {
- * eventFn : function(element, done) {
- * //code to run the animation
- * //once complete, then run done()
- * return function cancellationFunction() {
- * //code to cancel the animation
- * }
- * }
- * }
- * ```
- *
- * @param {string} name The name of the animation.
- * @param {Function} factory The factory function that will be executed to return the animation
- * object.
- */
- this.register = function(name, factory) {
- var key = name + '-animation';
- if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel',
- "Expecting class selector starting with '.' got '{0}'.", name);
- this.$$selectors[name.substr(1)] = key;
- $provide.factory(key, factory);
- };
-
- /**
- * @ngdoc method
- * @name $animateProvider#classNameFilter
- *
- * @description
- * Sets and/or returns the CSS class regular expression that is checked when performing
- * an animation. Upon bootstrap the classNameFilter value is not set at all and will
- * therefore enable $animate to attempt to perform an animation on any element.
- * When setting the classNameFilter value, animations will only be performed on elements
- * that successfully match the filter expression. This in turn can boost performance
- * for low-powered devices as well as applications containing a lot of structural operations.
- * @param {RegExp=} expression The className expression which will be checked against all animations
- * @return {RegExp} The current CSS className expression value. If null then there is no expression value
- */
- this.classNameFilter = function(expression) {
- if (arguments.length === 1) {
- this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;
- }
- return this.$$classNameFilter;
- };
-
- this.$get = ['$$q', '$$asyncCallback', '$rootScope', function($$q, $$asyncCallback, $rootScope) {
-
- var currentDefer;
-
- function runAnimationPostDigest(fn) {
- var cancelFn, defer = $$q.defer();
- defer.promise.$$cancelFn = function ngAnimateMaybeCancel() {
- cancelFn && cancelFn();
- };
-
- $rootScope.$$postDigest(function ngAnimatePostDigest() {
- cancelFn = fn(function ngAnimateNotifyComplete() {
- defer.resolve();
- });
- });
-
- return defer.promise;
- }
-
- function resolveElementClasses(element, classes) {
- var toAdd = [], toRemove = [];
-
- var hasClasses = createMap();
- forEach((element.attr('class') || '').split(/\s+/), function(className) {
- hasClasses[className] = true;
- });
-
- forEach(classes, function(status, className) {
- var hasClass = hasClasses[className];
-
- // If the most recent class manipulation (via $animate) was to remove the class, and the
- // element currently has the class, the class is scheduled for removal. Otherwise, if
- // the most recent class manipulation (via $animate) was to add the class, and the
- // element does not currently have the class, the class is scheduled to be added.
- if (status === false && hasClass) {
- toRemove.push(className);
- } else if (status === true && !hasClass) {
- toAdd.push(className);
- }
- });
-
- return (toAdd.length + toRemove.length) > 0 &&
- [toAdd.length ? toAdd : null, toRemove.length ? toRemove : null];
- }
-
- function cachedClassManipulation(cache, classes, op) {
- for (var i=0, ii = classes.length; i < ii; ++i) {
- var className = classes[i];
- cache[className] = op;
- }
- }
-
- function asyncPromise() {
- // only serve one instance of a promise in order to save CPU cycles
- if (!currentDefer) {
- currentDefer = $$q.defer();
- $$asyncCallback(function() {
- currentDefer.resolve();
- currentDefer = null;
- });
- }
- return currentDefer.promise;
- }
-
- function applyStyles(element, options) {
- if (angular.isObject(options)) {
- var styles = extend(options.from || {}, options.to || {});
- element.css(styles);
- }
- }
-
- /**
- *
- * @ngdoc service
- * @name $animate
- * @description The $animate service provides rudimentary DOM manipulation functions to
- * insert, remove and move elements within the DOM, as well as adding and removing classes.
- * This service is the core service used by the ngAnimate $animator service which provides
- * high-level animation hooks for CSS and JavaScript.
- *
- * $animate is available in the AngularJS core, however, the ngAnimate module must be included
- * to enable full out animation support. Otherwise, $animate will only perform simple DOM
- * manipulation operations.
- *
- * To learn more about enabling animation support, click here to visit the {@link ngAnimate
- * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service
- * page}.
- */
- return {
- animate: function(element, from, to) {
- applyStyles(element, { from: from, to: to });
- return asyncPromise();
- },
-
- /**
- *
- * @ngdoc method
- * @name $animate#enter
- * @kind function
- * @description Inserts the element into the DOM either after the `after` element or
- * as the first child within the `parent` element. When the function is called a promise
- * is returned that will be resolved at a later time.
- * @param {DOMElement} element the element which will be inserted into the DOM
- * @param {DOMElement} parent the parent element which will append the element as
- * a child (if the after element is not present)
- * @param {DOMElement} after the sibling element which will append the element
- * after itself
- * @param {object=} options an optional collection of styles that will be applied to the element.
- * @return {Promise} the animation callback promise
- */
- enter: function(element, parent, after, options) {
- applyStyles(element, options);
- after ? after.after(element)
- : parent.prepend(element);
- return asyncPromise();
- },
-
- /**
- *
- * @ngdoc method
- * @name $animate#leave
- * @kind function
- * @description Removes the element from the DOM. When the function is called a promise
- * is returned that will be resolved at a later time.
- * @param {DOMElement} element the element which will be removed from the DOM
- * @param {object=} options an optional collection of options that will be applied to the element.
- * @return {Promise} the animation callback promise
- */
- leave: function(element, options) {
- element.remove();
- return asyncPromise();
- },
-
- /**
- *
- * @ngdoc method
- * @name $animate#move
- * @kind function
- * @description Moves the position of the provided element within the DOM to be placed
- * either after the `after` element or inside of the `parent` element. When the function
- * is called a promise is returned that will be resolved at a later time.
- *
- * @param {DOMElement} element the element which will be moved around within the
- * DOM
- * @param {DOMElement} parent the parent element where the element will be
- * inserted into (if the after element is not present)
- * @param {DOMElement} after the sibling element where the element will be
- * positioned next to
- * @param {object=} options an optional collection of options that will be applied to the element.
- * @return {Promise} the animation callback promise
- */
- move: function(element, parent, after, options) {
- // Do not remove element before insert. Removing will cause data associated with the
- // element to be dropped. Insert will implicitly do the remove.
- return this.enter(element, parent, after, options);
- },
-
- /**
- *
- * @ngdoc method
- * @name $animate#addClass
- * @kind function
- * @description Adds the provided className CSS class value to the provided element.
- * When the function is called a promise is returned that will be resolved at a later time.
- * @param {DOMElement} element the element which will have the className value
- * added to it
- * @param {string} className the CSS class which will be added to the element
- * @param {object=} options an optional collection of options that will be applied to the element.
- * @return {Promise} the animation callback promise
- */
- addClass: function(element, className, options) {
- return this.setClass(element, className, [], options);
- },
-
- $$addClassImmediately: function(element, className, options) {
- element = jqLite(element);
- className = !isString(className)
- ? (isArray(className) ? className.join(' ') : '')
- : className;
- forEach(element, function(element) {
- jqLiteAddClass(element, className);
- });
- applyStyles(element, options);
- return asyncPromise();
- },
-
- /**
- *
- * @ngdoc method
- * @name $animate#removeClass
- * @kind function
- * @description Removes the provided className CSS class value from the provided element.
- * When the function is called a promise is returned that will be resolved at a later time.
- * @param {DOMElement} element the element which will have the className value
- * removed from it
- * @param {string} className the CSS class which will be removed from the element
- * @param {object=} options an optional collection of options that will be applied to the element.
- * @return {Promise} the animation callback promise
- */
- removeClass: function(element, className, options) {
- return this.setClass(element, [], className, options);
- },
-
- $$removeClassImmediately: function(element, className, options) {
- element = jqLite(element);
- className = !isString(className)
- ? (isArray(className) ? className.join(' ') : '')
- : className;
- forEach(element, function(element) {
- jqLiteRemoveClass(element, className);
- });
- applyStyles(element, options);
- return asyncPromise();
- },
-
- /**
- *
- * @ngdoc method
- * @name $animate#setClass
- * @kind function
- * @description Adds and/or removes the given CSS classes to and from the element.
- * When the function is called a promise is returned that will be resolved at a later time.
- * @param {DOMElement} element the element which will have its CSS classes changed
- * removed from it
- * @param {string} add the CSS classes which will be added to the element
- * @param {string} remove the CSS class which will be removed from the element
- * @param {object=} options an optional collection of options that will be applied to the element.
- * @return {Promise} the animation callback promise
- */
- setClass: function(element, add, remove, options) {
- var self = this;
- var STORAGE_KEY = '$$animateClasses';
- var createdCache = false;
- element = jqLite(element);
-
- var cache = element.data(STORAGE_KEY);
- if (!cache) {
- cache = {
- classes: {},
- options: options
- };
- createdCache = true;
- } else if (options && cache.options) {
- cache.options = angular.extend(cache.options || {}, options);
- }
-
- var classes = cache.classes;
-
- add = isArray(add) ? add : add.split(' ');
- remove = isArray(remove) ? remove : remove.split(' ');
- cachedClassManipulation(classes, add, true);
- cachedClassManipulation(classes, remove, false);
-
- if (createdCache) {
- cache.promise = runAnimationPostDigest(function(done) {
- var cache = element.data(STORAGE_KEY);
- element.removeData(STORAGE_KEY);
-
- // in the event that the element is removed before postDigest
- // is run then the cache will be undefined and there will be
- // no need anymore to add or remove and of the element classes
- if (cache) {
- var classes = resolveElementClasses(element, cache.classes);
- if (classes) {
- self.$$setClassImmediately(element, classes[0], classes[1], cache.options);
- }
- }
-
- done();
- });
- element.data(STORAGE_KEY, cache);
- }
-
- return cache.promise;
- },
-
- $$setClassImmediately: function(element, add, remove, options) {
- add && this.$$addClassImmediately(element, add);
- remove && this.$$removeClassImmediately(element, remove);
- applyStyles(element, options);
- return asyncPromise();
- },
-
- enabled: noop,
- cancel: noop
- };
- }];
-}];
-
-function $$AsyncCallbackProvider() {
- this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) {
- return $$rAF.supported
- ? function(fn) { return $$rAF(fn); }
- : function(fn) {
- return $timeout(fn, 0, false);
- };
- }];
-}
-
-/* global stripHash: true */
-
-/**
- * ! This is a private undocumented service !
- *
- * @name $browser
- * @requires $log
- * @description
- * This object has two goals:
- *
- * - hide all the global state in the browser caused by the window object
- * - abstract away all the browser specific features and inconsistencies
- *
- * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser`
- * service, which can be used for convenient testing of the application without the interaction with
- * the real browser apis.
- */
-/**
- * @param {object} window The global window object.
- * @param {object} document jQuery wrapped document.
- * @param {object} $log window.console or an object with the same interface.
- * @param {object} $sniffer $sniffer service
- */
-function Browser(window, document, $log, $sniffer) {
- var self = this,
- rawDocument = document[0],
- location = window.location,
- history = window.history,
- setTimeout = window.setTimeout,
- clearTimeout = window.clearTimeout,
- pendingDeferIds = {};
-
- self.isMock = false;
-
- var outstandingRequestCount = 0;
- var outstandingRequestCallbacks = [];
-
- // TODO(vojta): remove this temporary api
- self.$$completeOutstandingRequest = completeOutstandingRequest;
- self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; };
-
- /**
- * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks`
- * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed.
- */
- function completeOutstandingRequest(fn) {
- try {
- fn.apply(null, sliceArgs(arguments, 1));
- } finally {
- outstandingRequestCount--;
- if (outstandingRequestCount === 0) {
- while (outstandingRequestCallbacks.length) {
- try {
- outstandingRequestCallbacks.pop()();
- } catch (e) {
- $log.error(e);
- }
- }
- }
- }
- }
-
- /**
- * @private
- * Note: this method is used only by scenario runner
- * TODO(vojta): prefix this method with $$ ?
- * @param {function()} callback Function that will be called when no outstanding request
- */
- self.notifyWhenNoOutstandingRequests = function(callback) {
- // force browser to execute all pollFns - this is needed so that cookies and other pollers fire
- // at some deterministic time in respect to the test runner's actions. Leaving things up to the
- // regular poller would result in flaky tests.
- forEach(pollFns, function(pollFn) { pollFn(); });
-
- if (outstandingRequestCount === 0) {
- callback();
- } else {
- outstandingRequestCallbacks.push(callback);
- }
- };
-
- //////////////////////////////////////////////////////////////
- // Poll Watcher API
- //////////////////////////////////////////////////////////////
- var pollFns = [],
- pollTimeout;
-
- /**
- * @name $browser#addPollFn
- *
- * @param {function()} fn Poll function to add
- *
- * @description
- * Adds a function to the list of functions that poller periodically executes,
- * and starts polling if not started yet.
- *
- * @returns {function()} the added function
- */
- self.addPollFn = function(fn) {
- if (isUndefined(pollTimeout)) startPoller(100, setTimeout);
- pollFns.push(fn);
- return fn;
- };
-
- /**
- * @param {number} interval How often should browser call poll functions (ms)
- * @param {function()} setTimeout Reference to a real or fake `setTimeout` function.
- *
- * @description
- * Configures the poller to run in the specified intervals, using the specified
- * setTimeout fn and kicks it off.
- */
- function startPoller(interval, setTimeout) {
- (function check() {
- forEach(pollFns, function(pollFn) { pollFn(); });
- pollTimeout = setTimeout(check, interval);
- })();
- }
-
- //////////////////////////////////////////////////////////////
- // URL API
- //////////////////////////////////////////////////////////////
-
- var cachedState, lastHistoryState,
- lastBrowserUrl = location.href,
- baseElement = document.find('base'),
- reloadLocation = null;
-
- cacheState();
- lastHistoryState = cachedState;
-
- /**
- * @name $browser#url
- *
- * @description
- * GETTER:
- * Without any argument, this method just returns current value of location.href.
- *
- * SETTER:
- * With at least one argument, this method sets url to new value.
- * If html5 history api supported, pushState/replaceState is used, otherwise
- * location.href/location.replace is used.
- * Returns its own instance to allow chaining
- *
- * NOTE: this api is intended for use only by the $location service. Please use the
- * {@link ng.$location $location service} to change url.
- *
- * @param {string} url New url (when used as setter)
- * @param {boolean=} replace Should new url replace current history record?
- * @param {object=} state object to use with pushState/replaceState
- */
- self.url = function(url, replace, state) {
- // In modern browsers `history.state` is `null` by default; treating it separately
- // from `undefined` would cause `$browser.url('/foo')` to change `history.state`
- // to undefined via `pushState`. Instead, let's change `undefined` to `null` here.
- if (isUndefined(state)) {
- state = null;
- }
-
- // Android Browser BFCache causes location, history reference to become stale.
- if (location !== window.location) location = window.location;
- if (history !== window.history) history = window.history;
-
- // setter
- if (url) {
- var sameState = lastHistoryState === state;
-
- // Don't change anything if previous and current URLs and states match. This also prevents
- // IE<10 from getting into redirect loop when in LocationHashbangInHtml5Url mode.
- // See https://github.com/angular/angular.js/commit/ffb2701
- if (lastBrowserUrl === url && (!$sniffer.history || sameState)) {
- return self;
- }
- var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url);
- lastBrowserUrl = url;
- lastHistoryState = state;
- // Don't use history API if only the hash changed
- // due to a bug in IE10/IE11 which leads
- // to not firing a `hashchange` nor `popstate` event
- // in some cases (see #9143).
- if ($sniffer.history && (!sameBase || !sameState)) {
- history[replace ? 'replaceState' : 'pushState'](state, '', url);
- cacheState();
- // Do the assignment again so that those two variables are referentially identical.
- lastHistoryState = cachedState;
- } else {
- if (!sameBase) {
- reloadLocation = url;
- }
- if (replace) {
- location.replace(url);
- } else {
- location.href = url;
- }
- }
- return self;
- // getter
- } else {
- // - reloadLocation is needed as browsers don't allow to read out
- // the new location.href if a reload happened.
- // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172
- return reloadLocation || location.href.replace(/%27/g,"'");
- }
- };
-
- /**
- * @name $browser#state
- *
- * @description
- * This method is a getter.
- *
- * Return history.state or null if history.state is undefined.
- *
- * @returns {object} state
- */
- self.state = function() {
- return cachedState;
- };
-
- var urlChangeListeners = [],
- urlChangeInit = false;
-
- function cacheStateAndFireUrlChange() {
- cacheState();
- fireUrlChange();
- }
-
- // This variable should be used *only* inside the cacheState function.
- var lastCachedState = null;
- function cacheState() {
- // This should be the only place in $browser where `history.state` is read.
- cachedState = window.history.state;
- cachedState = isUndefined(cachedState) ? null : cachedState;
-
- // Prevent callbacks fo fire twice if both hashchange & popstate were fired.
- if (equals(cachedState, lastCachedState)) {
- cachedState = lastCachedState;
- }
- lastCachedState = cachedState;
- }
-
- function fireUrlChange() {
- if (lastBrowserUrl === self.url() && lastHistoryState === cachedState) {
- return;
- }
-
- lastBrowserUrl = self.url();
- lastHistoryState = cachedState;
- forEach(urlChangeListeners, function(listener) {
- listener(self.url(), cachedState);
- });
- }
-
- /**
- * @name $browser#onUrlChange
- *
- * @description
- * Register callback function that will be called, when url changes.
- *
- * It's only called when the url is changed from outside of angular:
- * - user types different url into address bar
- * - user clicks on history (forward/back) button
- * - user clicks on a link
- *
- * It's not called when url is changed by $browser.url() method
- *
- * The listener gets called with new url as parameter.
- *
- * NOTE: this api is intended for use only by the $location service. Please use the
- * {@link ng.$location $location service} to monitor url changes in angular apps.
- *
- * @param {function(string)} listener Listener function to be called when url changes.
- * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous.
- */
- self.onUrlChange = function(callback) {
- // TODO(vojta): refactor to use node's syntax for events
- if (!urlChangeInit) {
- // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera)
- // don't fire popstate when user change the address bar and don't fire hashchange when url
- // changed by push/replaceState
-
- // html5 history api - popstate event
- if ($sniffer.history) jqLite(window).on('popstate', cacheStateAndFireUrlChange);
- // hashchange event
- jqLite(window).on('hashchange', cacheStateAndFireUrlChange);
-
- urlChangeInit = true;
- }
-
- urlChangeListeners.push(callback);
- return callback;
- };
-
- /**
- * Checks whether the url has changed outside of Angular.
- * Needs to be exported to be able to check for changes that have been done in sync,
- * as hashchange/popstate events fire in async.
- */
- self.$$checkUrlChange = fireUrlChange;
-
- //////////////////////////////////////////////////////////////
- // Misc API
- //////////////////////////////////////////////////////////////
-
- /**
- * @name $browser#baseHref
- *
- * @description
- * Returns current <base href>
- * (always relative - without domain)
- *
- * @returns {string} The current base href
- */
- self.baseHref = function() {
- var href = baseElement.attr('href');
- return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : '';
- };
-
- //////////////////////////////////////////////////////////////
- // Cookies API
- //////////////////////////////////////////////////////////////
- var lastCookies = {};
- var lastCookieString = '';
- var cookiePath = self.baseHref();
-
- function safeDecodeURIComponent(str) {
- try {
- return decodeURIComponent(str);
- } catch (e) {
- return str;
- }
- }
-
- /**
- * @name $browser#cookies
- *
- * @param {string=} name Cookie name
- * @param {string=} value Cookie value
- *
- * @description
- * The cookies method provides a 'private' low level access to browser cookies.
- * It is not meant to be used directly, use the $cookie service instead.
- *
- * The return values vary depending on the arguments that the method was called with as follows:
- *
- * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify
- * it
- * - cookies(name, value) -> set name to value, if value is undefined delete the cookie
- * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that
- * way)
- *
- * @returns {Object} Hash of all cookies (if called without any parameter)
- */
- self.cookies = function(name, value) {
- var cookieLength, cookieArray, cookie, i, index;
-
- if (name) {
- if (value === undefined) {
- rawDocument.cookie = encodeURIComponent(name) + "=;path=" + cookiePath +
- ";expires=Thu, 01 Jan 1970 00:00:00 GMT";
- } else {
- if (isString(value)) {
- cookieLength = (rawDocument.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value) +
- ';path=' + cookiePath).length + 1;
-
- // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:
- // - 300 cookies
- // - 20 cookies per unique domain
- // - 4096 bytes per cookie
- if (cookieLength > 4096) {
- $log.warn("Cookie '" + name +
- "' possibly not set or overflowed because it was too large (" +
- cookieLength + " > 4096 bytes)!");
- }
- }
- }
- } else {
- if (rawDocument.cookie !== lastCookieString) {
- lastCookieString = rawDocument.cookie;
- cookieArray = lastCookieString.split("; ");
- lastCookies = {};
-
- for (i = 0; i < cookieArray.length; i++) {
- cookie = cookieArray[i];
- index = cookie.indexOf('=');
- if (index > 0) { //ignore nameless cookies
- name = safeDecodeURIComponent(cookie.substring(0, index));
- // the first value that is seen for a cookie is the most
- // specific one. values for the same cookie name that
- // follow are for less specific paths.
- if (lastCookies[name] === undefined) {
- lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1));
- }
- }
- }
- }
- return lastCookies;
- }
- };
-
-
- /**
- * @name $browser#defer
- * @param {function()} fn A function, who's execution should be deferred.
- * @param {number=} [delay=0] of milliseconds to defer the function execution.
- * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`.
- *
- * @description
- * Executes a fn asynchronously via `setTimeout(fn, delay)`.
- *
- * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using
- * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed
- * via `$browser.defer.flush()`.
- *
- */
- self.defer = function(fn, delay) {
- var timeoutId;
- outstandingRequestCount++;
- timeoutId = setTimeout(function() {
- delete pendingDeferIds[timeoutId];
- completeOutstandingRequest(fn);
- }, delay || 0);
- pendingDeferIds[timeoutId] = true;
- return timeoutId;
- };
-
-
- /**
- * @name $browser#defer.cancel
- *
- * @description
- * Cancels a deferred task identified with `deferId`.
- *
- * @param {*} deferId Token returned by the `$browser.defer` function.
- * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully
- * canceled.
- */
- self.defer.cancel = function(deferId) {
- if (pendingDeferIds[deferId]) {
- delete pendingDeferIds[deferId];
- clearTimeout(deferId);
- completeOutstandingRequest(noop);
- return true;
- }
- return false;
- };
-
-}
-
-function $BrowserProvider() {
- this.$get = ['$window', '$log', '$sniffer', '$document',
- function($window, $log, $sniffer, $document) {
- return new Browser($window, $document, $log, $sniffer);
- }];
-}
-
-/**
- * @ngdoc service
- * @name $cacheFactory
- *
- * @description
- * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to
- * them.
- *
- * ```js
- *
- * var cache = $cacheFactory('cacheId');
- * expect($cacheFactory.get('cacheId')).toBe(cache);
- * expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();
- *
- * cache.put("key", "value");
- * cache.put("another key", "another value");
- *
- * // We've specified no options on creation
- * expect(cache.info()).toEqual({id: 'cacheId', size: 2});
- *
- * ```
- *
- *
- * @param {string} cacheId Name or id of the newly created cache.
- * @param {object=} options Options object that specifies the cache behavior. Properties:
- *
- * - `{number=}` `capacity` — turns the cache into LRU cache.
- *
- * @returns {object} Newly created cache object with the following set of methods:
- *
- * - `{object}` `info()` — Returns id, size, and options of cache.
- * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns
- * it.
- * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.
- * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache.
- * - `{void}` `removeAll()` — Removes all cached values.
- * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.
- *
- * @example
- <example module="cacheExampleApp">
- <file name="index.html">
- <div ng-controller="CacheController">
- <input ng-model="newCacheKey" placeholder="Key">
- <input ng-model="newCacheValue" placeholder="Value">
- <button ng-click="put(newCacheKey, newCacheValue)">Cache</button>
-
- <p ng-if="keys.length">Cached Values</p>
- <div ng-repeat="key in keys">
- <span ng-bind="key"></span>
- <span>: </span>
- <b ng-bind="cache.get(key)"></b>
- </div>
-
- <p>Cache Info</p>
- <div ng-repeat="(key, value) in cache.info()">
- <span ng-bind="key"></span>
- <span>: </span>
- <b ng-bind="value"></b>
- </div>
- </div>
- </file>
- <file name="script.js">
- angular.module('cacheExampleApp', []).
- controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) {
- $scope.keys = [];
- $scope.cache = $cacheFactory('cacheId');
- $scope.put = function(key, value) {
- if ($scope.cache.get(key) === undefined) {
- $scope.keys.push(key);
- }
- $scope.cache.put(key, value === undefined ? null : value);
- };
- }]);
- </file>
- <file name="style.css">
- p {
- margin: 10px 0 3px;
- }
- </file>
- </example>
- */
-function $CacheFactoryProvider() {
-
- this.$get = function() {
- var caches = {};
-
- function cacheFactory(cacheId, options) {
- if (cacheId in caches) {
- throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId);
- }
-
- var size = 0,
- stats = extend({}, options, {id: cacheId}),
- data = {},
- capacity = (options && options.capacity) || Number.MAX_VALUE,
- lruHash = {},
- freshEnd = null,
- staleEnd = null;
-
- /**
- * @ngdoc type
- * @name $cacheFactory.Cache
- *
- * @description
- * A cache object used to store and retrieve data, primarily used by
- * {@link $http $http} and the {@link ng.directive:script script} directive to cache
- * templates and other data.
- *
- * ```js
- * angular.module('superCache')
- * .factory('superCache', ['$cacheFactory', function($cacheFactory) {
- * return $cacheFactory('super-cache');
- * }]);
- * ```
- *
- * Example test:
- *
- * ```js
- * it('should behave like a cache', inject(function(superCache) {
- * superCache.put('key', 'value');
- * superCache.put('another key', 'another value');
- *
- * expect(superCache.info()).toEqual({
- * id: 'super-cache',
- * size: 2
- * });
- *
- * superCache.remove('another key');
- * expect(superCache.get('another key')).toBeUndefined();
- *
- * superCache.removeAll();
- * expect(superCache.info()).toEqual({
- * id: 'super-cache',
- * size: 0
- * });
- * }));
- * ```
- */
- return caches[cacheId] = {
-
- /**
- * @ngdoc method
- * @name $cacheFactory.Cache#put
- * @kind function
- *
- * @description
- * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be
- * retrieved later, and incrementing the size of the cache if the key was not already
- * present in the cache. If behaving like an LRU cache, it will also remove stale
- * entries from the set.
- *
- * It will not insert undefined values into the cache.
- *
- * @param {string} key the key under which the cached data is stored.
- * @param {*} value the value to store alongside the key. If it is undefined, the key
- * will not be stored.
- * @returns {*} the value stored.
- */
- put: function(key, value) {
- if (capacity < Number.MAX_VALUE) {
- var lruEntry = lruHash[key] || (lruHash[key] = {key: key});
-
- refresh(lruEntry);
- }
-
- if (isUndefined(value)) return;
- if (!(key in data)) size++;
- data[key] = value;
-
- if (size > capacity) {
- this.remove(staleEnd.key);
- }
-
- return value;
- },
-
- /**
- * @ngdoc method
- * @name $cacheFactory.Cache#get
- * @kind function
- *
- * @description
- * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object.
- *
- * @param {string} key the key of the data to be retrieved
- * @returns {*} the value stored.
- */
- get: function(key) {
- if (capacity < Number.MAX_VALUE) {
- var lruEntry = lruHash[key];
-
- if (!lruEntry) return;
-
- refresh(lruEntry);
- }
-
- return data[key];
- },
-
-
- /**
- * @ngdoc method
- * @name $cacheFactory.Cache#remove
- * @kind function
- *
- * @description
- * Removes an entry from the {@link $cacheFactory.Cache Cache} object.
- *
- * @param {string} key the key of the entry to be removed
- */
- remove: function(key) {
- if (capacity < Number.MAX_VALUE) {
- var lruEntry = lruHash[key];
-
- if (!lruEntry) return;
-
- if (lruEntry == freshEnd) freshEnd = lruEntry.p;
- if (lruEntry == staleEnd) staleEnd = lruEntry.n;
- link(lruEntry.n,lruEntry.p);
-
- delete lruHash[key];
- }
-
- delete data[key];
- size--;
- },
-
-
- /**
- * @ngdoc method
- * @name $cacheFactory.Cache#removeAll
- * @kind function
- *
- * @description
- * Clears the cache object of any entries.
- */
- removeAll: function() {
- data = {};
- size = 0;
- lruHash = {};
- freshEnd = staleEnd = null;
- },
-
-
- /**
- * @ngdoc method
- * @name $cacheFactory.Cache#destroy
- * @kind function
- *
- * @description
- * Destroys the {@link $cacheFactory.Cache Cache} object entirely,
- * removing it from the {@link $cacheFactory $cacheFactory} set.
- */
- destroy: function() {
- data = null;
- stats = null;
- lruHash = null;
- delete caches[cacheId];
- },
-
-
- /**
- * @ngdoc method
- * @name $cacheFactory.Cache#info
- * @kind function
- *
- * @description
- * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}.
- *
- * @returns {object} an object with the following properties:
- * <ul>
- * <li>**id**: the id of the cache instance</li>
- * <li>**size**: the number of entries kept in the cache instance</li>
- * <li>**...**: any additional properties from the options object when creating the
- * cache.</li>
- * </ul>
- */
- info: function() {
- return extend({}, stats, {size: size});
- }
- };
-
-
- /**
- * makes the `entry` the freshEnd of the LRU linked list
- */
- function refresh(entry) {
- if (entry != freshEnd) {
- if (!staleEnd) {
- staleEnd = entry;
- } else if (staleEnd == entry) {
- staleEnd = entry.n;
- }
-
- link(entry.n, entry.p);
- link(entry, freshEnd);
- freshEnd = entry;
- freshEnd.n = null;
- }
- }
-
-
- /**
- * bidirectionally links two entries of the LRU linked list
- */
- function link(nextEntry, prevEntry) {
- if (nextEntry != prevEntry) {
- if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify
- if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify
- }
- }
- }
-
-
- /**
- * @ngdoc method
- * @name $cacheFactory#info
- *
- * @description
- * Get information about all the caches that have been created
- *
- * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`
- */
- cacheFactory.info = function() {
- var info = {};
- forEach(caches, function(cache, cacheId) {
- info[cacheId] = cache.info();
- });
- return info;
- };
-
-
- /**
- * @ngdoc method
- * @name $cacheFactory#get
- *
- * @description
- * Get access to a cache object by the `cacheId` used when it was created.
- *
- * @param {string} cacheId Name or id of a cache to access.
- * @returns {object} Cache object identified by the cacheId or undefined if no such cache.
- */
- cacheFactory.get = function(cacheId) {
- return caches[cacheId];
- };
-
-
- return cacheFactory;
- };
-}
-
-/**
- * @ngdoc service
- * @name $templateCache
- *
- * @description
- * The first time a template is used, it is loaded in the template cache for quick retrieval. You
- * can load templates directly into the cache in a `script` tag, or by consuming the
- * `$templateCache` service directly.
- *
- * Adding via the `script` tag:
- *
- * ```html
- * <script type="text/ng-template" id="templateId.html">
- * <p>This is the content of the template</p>
- * </script>
- * ```
- *
- * **Note:** the `script` tag containing the template does not need to be included in the `head` of
- * the document, but it must be a descendent of the {@link ng.$rootElement $rootElement} (IE,
- * element with ng-app attribute), otherwise the template will be ignored.
- *
- * Adding via the $templateCache service:
- *
- * ```js
- * var myApp = angular.module('myApp', []);
- * myApp.run(function($templateCache) {
- * $templateCache.put('templateId.html', 'This is the content of the template');
- * });
- * ```
- *
- * To retrieve the template later, simply use it in your HTML:
- * ```html
- * <div ng-include=" 'templateId.html' "></div>
- * ```
- *
- * or get it via Javascript:
- * ```js
- * $templateCache.get('templateId.html')
- * ```
- *
- * See {@link ng.$cacheFactory $cacheFactory}.
- *
- */
-function $TemplateCacheProvider() {
- this.$get = ['$cacheFactory', function($cacheFactory) {
- return $cacheFactory('templates');
- }];
-}
-
-/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE!
- *
- * DOM-related variables:
- *
- * - "node" - DOM Node
- * - "element" - DOM Element or Node
- * - "$node" or "$element" - jqLite-wrapped node or element
- *
- *
- * Compiler related stuff:
- *
- * - "linkFn" - linking fn of a single directive
- * - "nodeLinkFn" - function that aggregates all linking fns for a particular node
- * - "childLinkFn" - function that aggregates all linking fns for child nodes of a particular node
- * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList)
- */
-
-
-/**
- * @ngdoc service
- * @name $compile
- * @kind function
- *
- * @description
- * Compiles an HTML string or DOM into a template and produces a template function, which
- * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.
- *
- * The compilation is a process of walking the DOM tree and matching DOM elements to
- * {@link ng.$compileProvider#directive directives}.
- *
- * <div class="alert alert-warning">
- * **Note:** This document is an in-depth reference of all directive options.
- * For a gentle introduction to directives with examples of common use cases,
- * see the {@link guide/directive directive guide}.
- * </div>
- *
- * ## Comprehensive Directive API
- *
- * There are many different options for a directive.
- *
- * The difference resides in the return value of the factory function.
- * You can either return a "Directive Definition Object" (see below) that defines the directive properties,
- * or just the `postLink` function (all other properties will have the default values).
- *
- * <div class="alert alert-success">
- * **Best Practice:** It's recommended to use the "directive definition object" form.
- * </div>
- *
- * Here's an example directive declared with a Directive Definition Object:
- *
- * ```js
- * var myModule = angular.module(...);
- *
- * myModule.directive('directiveName', function factory(injectables) {
- * var directiveDefinitionObject = {
- * priority: 0,
- * template: '<div></div>', // or // function(tElement, tAttrs) { ... },
- * // or
- * // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... },
- * transclude: false,
- * restrict: 'A',
- * templateNamespace: 'html',
- * scope: false,
- * controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },
- * controllerAs: 'stringAlias',
- * require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],
- * compile: function compile(tElement, tAttrs, transclude) {
- * return {
- * pre: function preLink(scope, iElement, iAttrs, controller) { ... },
- * post: function postLink(scope, iElement, iAttrs, controller) { ... }
- * }
- * // or
- * // return function postLink( ... ) { ... }
- * },
- * // or
- * // link: {
- * // pre: function preLink(scope, iElement, iAttrs, controller) { ... },
- * // post: function postLink(scope, iElement, iAttrs, controller) { ... }
- * // }
- * // or
- * // link: function postLink( ... ) { ... }
- * };
- * return directiveDefinitionObject;
- * });
- * ```
- *
- * <div class="alert alert-warning">
- * **Note:** Any unspecified options will use the default value. You can see the default values below.
- * </div>
- *
- * Therefore the above can be simplified as:
- *
- * ```js
- * var myModule = angular.module(...);
- *
- * myModule.directive('directiveName', function factory(injectables) {
- * var directiveDefinitionObject = {
- * link: function postLink(scope, iElement, iAttrs) { ... }
- * };
- * return directiveDefinitionObject;
- * // or
- * // return function postLink(scope, iElement, iAttrs) { ... }
- * });
- * ```
- *
- *
- *
- * ### Directive Definition Object
- *
- * The directive definition object provides instructions to the {@link ng.$compile
- * compiler}. The attributes are:
- *
- * #### `multiElement`
- * When this property is set to true, the HTML compiler will collect DOM nodes between
- * nodes with the attributes `directive-name-start` and `directive-name-end`, and group them
- * together as the directive elements. It is recomended that this feature be used on directives
- * which are not strictly behavioural (such as {@link ngClick}), and which
- * do not manipulate or replace child nodes (such as {@link ngInclude}).
- *
- * #### `priority`
- * When there are multiple directives defined on a single DOM element, sometimes it
- * is necessary to specify the order in which the directives are applied. The `priority` is used
- * to sort the directives before their `compile` functions get called. Priority is defined as a
- * number. Directives with greater numerical `priority` are compiled first. Pre-link functions
- * are also run in priority order, but post-link functions are run in reverse order. The order
- * of directives with the same priority is undefined. The default priority is `0`.
- *
- * #### `terminal`
- * If set to true then the current `priority` will be the last set of directives
- * which will execute (any directives at the current priority will still execute
- * as the order of execution on same `priority` is undefined). Note that expressions
- * and other directives used in the directive's template will also be excluded from execution.
- *
- * #### `scope`
- * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the
- * same element request a new scope, only one new scope is created. The new scope rule does not
- * apply for the root of the template since the root of the template always gets a new scope.
- *
- * **If set to `{}` (object hash),** then a new "isolate" scope is created. The 'isolate' scope differs from
- * normal scope in that it does not prototypically inherit from the parent scope. This is useful
- * when creating reusable components, which should not accidentally read or modify data in the
- * parent scope.
- *
- * The 'isolate' scope takes an object hash which defines a set of local scope properties
- * derived from the parent scope. These local properties are useful for aliasing values for
- * templates. Locals definition is a hash of local scope property to its source:
- *
- * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is
- * always a string since DOM attributes are strings. If no `attr` name is specified then the
- * attribute name is assumed to be the same as the local name.
- * Given `<widget my-attr="hello {{name}}">` and widget definition
- * of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect
- * the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the
- * `localName` property on the widget scope. The `name` is read from the parent scope (not
- * component scope).
- *
- * * `=` or `=attr` - set up bi-directional binding between a local scope property and the
- * parent scope property of name defined via the value of the `attr` attribute. If no `attr`
- * name is specified then the attribute name is assumed to be the same as the local name.
- * Given `<widget my-attr="parentModel">` and widget definition of
- * `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the
- * value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected
- * in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent
- * scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You
- * can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. If
- * you want to shallow watch for changes (i.e. $watchCollection instead of $watch) you can use
- * `=*` or `=*attr` (`=*?` or `=*?attr` if the property is optional).
- *
- * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope.
- * If no `attr` name is specified then the attribute name is assumed to be the same as the
- * local name. Given `<widget my-attr="count = count + value">` and widget definition of
- * `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to
- * a function wrapper for the `count = count + value` expression. Often it's desirable to
- * pass data from the isolated scope via an expression to the parent scope, this can be
- * done by passing a map of local variable names and values into the expression wrapper fn.
- * For example, if the expression is `increment(amount)` then we can specify the amount value
- * by calling the `localFn` as `localFn({amount: 22})`.
- *
- *
- * #### `bindToController`
- * When an isolate scope is used for a component (see above), and `controllerAs` is used, `bindToController: true` will
- * allow a component to have its properties bound to the controller, rather than to scope. When the controller
- * is instantiated, the initial values of the isolate scope bindings are already available.
- *
- * #### `controller`
- * Controller constructor function. The controller is instantiated before the
- * pre-linking phase and it is shared with other directives (see
- * `require` attribute). This allows the directives to communicate with each other and augment
- * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals:
- *
- * * `$scope` - Current scope associated with the element
- * * `$element` - Current element
- * * `$attrs` - Current attributes object for the element
- * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope:
- * `function([scope], cloneLinkingFn, futureParentElement)`.
- * * `scope`: optional argument to override the scope.
- * * `cloneLinkingFn`: optional argument to create clones of the original transcluded content.
- * * `futureParentElement`:
- * * defines the parent to which the `cloneLinkingFn` will add the cloned elements.
- * * default: `$element.parent()` resp. `$element` for `transclude:'element'` resp. `transclude:true`.
- * * only needed for transcludes that are allowed to contain non html elements (e.g. SVG elements)
- * and when the `cloneLinkinFn` is passed,
- * as those elements need to created and cloned in a special way when they are defined outside their
- * usual containers (e.g. like `<svg>`).
- * * See also the `directive.templateNamespace` property.
- *
- *
- * #### `require`
- * Require another directive and inject its controller as the fourth argument to the linking function. The
- * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the
- * injected argument will be an array in corresponding order. If no such directive can be
- * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with:
- *
- * * (no prefix) - Locate the required controller on the current element. Throw an error if not found.
- * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found.
- * * `^` - Locate the required controller by searching the element and its parents. Throw an error if not found.
- * * `^^` - Locate the required controller by searching the element's parents. Throw an error if not found.
- * * `?^` - Attempt to locate the required controller by searching the element and its parents or pass
- * `null` to the `link` fn if not found.
- * * `?^^` - Attempt to locate the required controller by searching the element's parents, or pass
- * `null` to the `link` fn if not found.
- *
- *
- * #### `controllerAs`
- * Controller alias at the directive scope. An alias for the controller so it
- * can be referenced at the directive template. The directive needs to define a scope for this
- * configuration to be used. Useful in the case when directive is used as component.
- *
- *
- * #### `restrict`
- * String of subset of `EACM` which restricts the directive to a specific directive
- * declaration style. If omitted, the defaults (elements and attributes) are used.
- *
- * * `E` - Element name (default): `<my-directive></my-directive>`
- * * `A` - Attribute (default): `<div my-directive="exp"></div>`
- * * `C` - Class: `<div class="my-directive: exp;"></div>`
- * * `M` - Comment: `<!-- directive: my-directive exp -->`
- *
- *
- * #### `templateNamespace`
- * String representing the document type used by the markup in the template.
- * AngularJS needs this information as those elements need to be created and cloned
- * in a special way when they are defined outside their usual containers like `<svg>` and `<math>`.
- *
- * * `html` - All root nodes in the template are HTML. Root nodes may also be
- * top-level elements such as `<svg>` or `<math>`.
- * * `svg` - The root nodes in the template are SVG elements (excluding `<math>`).
- * * `math` - The root nodes in the template are MathML elements (excluding `<svg>`).
- *
- * If no `templateNamespace` is specified, then the namespace is considered to be `html`.
- *
- * #### `template`
- * HTML markup that may:
- * * Replace the contents of the directive's element (default).
- * * Replace the directive's element itself (if `replace` is true - DEPRECATED).
- * * Wrap the contents of the directive's element (if `transclude` is true).
- *
- * Value may be:
- *
- * * A string. For example `<div red-on-hover>{{delete_str}}</div>`.
- * * A function which takes two arguments `tElement` and `tAttrs` (described in the `compile`
- * function api below) and returns a string value.
- *
- *
- * #### `templateUrl`
- * This is similar to `template` but the template is loaded from the specified URL, asynchronously.
- *
- * Because template loading is asynchronous the compiler will suspend compilation of directives on that element
- * for later when the template has been resolved. In the meantime it will continue to compile and link
- * sibling and parent elements as though this element had not contained any directives.
- *
- * The compiler does not suspend the entire compilation to wait for templates to be loaded because this
- * would result in the whole app "stalling" until all templates are loaded asynchronously - even in the
- * case when only one deeply nested directive has `templateUrl`.
- *
- * Template loading is asynchronous even if the template has been preloaded into the {@link $templateCache}
- *
- * You can specify `templateUrl` as a string representing the URL or as a function which takes two
- * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns
- * a string value representing the url. In either case, the template URL is passed through {@link
- * $sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}.
- *
- *
- * #### `replace` ([*DEPRECATED*!], will be removed in next major release - i.e. v2.0)
- * specify what the template should replace. Defaults to `false`.
- *
- * * `true` - the template will replace the directive's element.
- * * `false` - the template will replace the contents of the directive's element.
- *
- * The replacement process migrates all of the attributes / classes from the old element to the new
- * one. See the {@link guide/directive#template-expanding-directive
- * Directives Guide} for an example.
- *
- * There are very few scenarios where element replacement is required for the application function,
- * the main one being reusable custom components that are used within SVG contexts
- * (because SVG doesn't work with custom elements in the DOM tree).
- *
- * #### `transclude`
- * Extract the contents of the element where the directive appears and make it available to the directive.
- * The contents are compiled and provided to the directive as a **transclusion function**. See the
- * {@link $compile#transclusion Transclusion} section below.
- *
- * There are two kinds of transclusion depending upon whether you want to transclude just the contents of the
- * directive's element or the entire element:
- *
- * * `true` - transclude the content (i.e. the child nodes) of the directive's element.
- * * `'element'` - transclude the whole of the directive's element including any directives on this
- * element that defined at a lower priority than this directive. When used, the `template`
- * property is ignored.
- *
- *
- * #### `compile`
- *
- * ```js
- * function compile(tElement, tAttrs, transclude) { ... }
- * ```
- *
- * The compile function deals with transforming the template DOM. Since most directives do not do
- * template transformation, it is not used often. The compile function takes the following arguments:
- *
- * * `tElement` - template element - The element where the directive has been declared. It is
- * safe to do template transformation on the element and child elements only.
- *
- * * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared
- * between all directive compile functions.
- *
- * * `transclude` - [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)`
- *
- * <div class="alert alert-warning">
- * **Note:** The template instance and the link instance may be different objects if the template has
- * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that
- * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration
- * should be done in a linking function rather than in a compile function.
- * </div>
-
- * <div class="alert alert-warning">
- * **Note:** The compile function cannot handle directives that recursively use themselves in their
- * own templates or compile functions. Compiling these directives results in an infinite loop and a
- * stack overflow errors.
- *
- * This can be avoided by manually using $compile in the postLink function to imperatively compile
- * a directive's template instead of relying on automatic template compilation via `template` or
- * `templateUrl` declaration or manual compilation inside the compile function.
- * </div>
- *
- * <div class="alert alert-error">
- * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it
- * e.g. does not know about the right outer scope. Please use the transclude function that is passed
- * to the link function instead.
- * </div>
-
- * A compile function can have a return value which can be either a function or an object.
- *
- * * returning a (post-link) function - is equivalent to registering the linking function via the
- * `link` property of the config object when the compile function is empty.
- *
- * * returning an object with function(s) registered via `pre` and `post` properties - allows you to
- * control when a linking function should be called during the linking phase. See info about
- * pre-linking and post-linking functions below.
- *
- *
- * #### `link`
- * This property is used only if the `compile` property is not defined.
- *
- * ```js
- * function link(scope, iElement, iAttrs, controller, transcludeFn) { ... }
- * ```
- *
- * The link function is responsible for registering DOM listeners as well as updating the DOM. It is
- * executed after the template has been cloned. This is where most of the directive logic will be
- * put.
- *
- * * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the
- * directive for registering {@link ng.$rootScope.Scope#$watch watches}.
- *
- * * `iElement` - instance element - The element where the directive is to be used. It is safe to
- * manipulate the children of the element only in `postLink` function since the children have
- * already been linked.
- *
- * * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared
- * between all directive linking functions.
- *
- * * `controller` - a controller instance - A controller instance if at least one directive on the
- * element defines a controller. The controller is shared among all the directives, which allows
- * the directives to use the controllers as a communication channel.
- *
- * * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope.
- * This is the same as the `$transclude`
- * parameter of directive controllers, see there for details.
- * `function([scope], cloneLinkingFn, futureParentElement)`.
- *
- * #### Pre-linking function
- *
- * Executed before the child elements are linked. Not safe to do DOM transformation since the
- * compiler linking function will fail to locate the correct elements for linking.
- *
- * #### Post-linking function
- *
- * Executed after the child elements are linked.
- *
- * Note that child elements that contain `templateUrl` directives will not have been compiled
- * and linked since they are waiting for their template to load asynchronously and their own
- * compilation and linking has been suspended until that occurs.
- *
- * It is safe to do DOM transformation in the post-linking function on elements that are not waiting
- * for their async templates to be resolved.
- *
- *
- * ### Transclusion
- *
- * Transclusion is the process of extracting a collection of DOM element from one part of the DOM and
- * copying them to another part of the DOM, while maintaining their connection to the original AngularJS
- * scope from where they were taken.
- *
- * Transclusion is used (often with {@link ngTransclude}) to insert the
- * original contents of a directive's element into a specified place in the template of the directive.
- * The benefit of transclusion, over simply moving the DOM elements manually, is that the transcluded
- * content has access to the properties on the scope from which it was taken, even if the directive
- * has isolated scope.
- * See the {@link guide/directive#creating-a-directive-that-wraps-other-elements Directives Guide}.
- *
- * This makes it possible for the widget to have private state for its template, while the transcluded
- * content has access to its originating scope.
- *
- * <div class="alert alert-warning">
- * **Note:** When testing an element transclude directive you must not place the directive at the root of the
- * DOM fragment that is being compiled. See {@link guide/unit-testing#testing-transclusion-directives
- * Testing Transclusion Directives}.
- * </div>
- *
- * #### Transclusion Functions
- *
- * When a directive requests transclusion, the compiler extracts its contents and provides a **transclusion
- * function** to the directive's `link` function and `controller`. This transclusion function is a special
- * **linking function** that will return the compiled contents linked to a new transclusion scope.
- *
- * <div class="alert alert-info">
- * If you are just using {@link ngTransclude} then you don't need to worry about this function, since
- * ngTransclude will deal with it for us.
- * </div>
- *
- * If you want to manually control the insertion and removal of the transcluded content in your directive
- * then you must use this transclude function. When you call a transclude function it returns a a jqLite/JQuery
- * object that contains the compiled DOM, which is linked to the correct transclusion scope.
- *
- * When you call a transclusion function you can pass in a **clone attach function**. This function accepts
- * two parameters, `function(clone, scope) { ... }`, where the `clone` is a fresh compiled copy of your transcluded
- * content and the `scope` is the newly created transclusion scope, to which the clone is bound.
- *
- * <div class="alert alert-info">
- * **Best Practice**: Always provide a `cloneFn` (clone attach function) when you call a translude function
- * since you then get a fresh clone of the original DOM and also have access to the new transclusion scope.
- * </div>
- *
- * It is normal practice to attach your transcluded content (`clone`) to the DOM inside your **clone
- * attach function**:
- *
- * ```js
- * var transcludedContent, transclusionScope;
- *
- * $transclude(function(clone, scope) {
- * element.append(clone);
- * transcludedContent = clone;
- * transclusionScope = scope;
- * });
- * ```
- *
- * Later, if you want to remove the transcluded content from your DOM then you should also destroy the
- * associated transclusion scope:
- *
- * ```js
- * transcludedContent.remove();
- * transclusionScope.$destroy();
- * ```
- *
- * <div class="alert alert-info">
- * **Best Practice**: if you intend to add and remove transcluded content manually in your directive
- * (by calling the transclude function to get the DOM and and calling `element.remove()` to remove it),
- * then you are also responsible for calling `$destroy` on the transclusion scope.
- * </div>
- *
- * The built-in DOM manipulation directives, such as {@link ngIf}, {@link ngSwitch} and {@link ngRepeat}
- * automatically destroy their transluded clones as necessary so you do not need to worry about this if
- * you are simply using {@link ngTransclude} to inject the transclusion into your directive.
- *
- *
- * #### Transclusion Scopes
- *
- * When you call a transclude function it returns a DOM fragment that is pre-bound to a **transclusion
- * scope**. This scope is special, in that it is a child of the directive's scope (and so gets destroyed
- * when the directive's scope gets destroyed) but it inherits the properties of the scope from which it
- * was taken.
- *
- * For example consider a directive that uses transclusion and isolated scope. The DOM hierarchy might look
- * like this:
- *
- * ```html
- * <div ng-app>
- * <div isolate>
- * <div transclusion>
- * </div>
- * </div>
- * </div>
- * ```
- *
- * The `$parent` scope hierarchy will look like this:
- *
- * ```
- * - $rootScope
- * - isolate
- * - transclusion
- * ```
- *
- * but the scopes will inherit prototypically from different scopes to their `$parent`.
- *
- * ```
- * - $rootScope
- * - transclusion
- * - isolate
- * ```
- *
- *
- * ### Attributes
- *
- * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the
- * `link()` or `compile()` functions. It has a variety of uses.
- *
- * accessing *Normalized attribute names:*
- * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'.
- * the attributes object allows for normalized access to
- * the attributes.
- *
- * * *Directive inter-communication:* All directives share the same instance of the attributes
- * object which allows the directives to use the attributes object as inter directive
- * communication.
- *
- * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object
- * allowing other directives to read the interpolated value.
- *
- * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes
- * that contain interpolation (e.g. `src="{{bar}}"`). Not only is this very efficient but it's also
- * the only way to easily get the actual value because during the linking phase the interpolation
- * hasn't been evaluated yet and so the value is at this time set to `undefined`.
- *
- * ```js
- * function linkingFn(scope, elm, attrs, ctrl) {
- * // get the attribute value
- * console.log(attrs.ngModel);
- *
- * // change the attribute
- * attrs.$set('ngModel', 'new value');
- *
- * // observe changes to interpolated attribute
- * attrs.$observe('ngModel', function(value) {
- * console.log('ngModel has changed value to ' + value);
- * });
- * }
- * ```
- *
- * ## Example
- *
- * <div class="alert alert-warning">
- * **Note**: Typically directives are registered with `module.directive`. The example below is
- * to illustrate how `$compile` works.
- * </div>
- *
- <example module="compileExample">
- <file name="index.html">
- <script>
- angular.module('compileExample', [], function($compileProvider) {
- // configure new 'compile' directive by passing a directive
- // factory function. The factory function injects the '$compile'
- $compileProvider.directive('compile', function($compile) {
- // directive factory creates a link function
- return function(scope, element, attrs) {
- scope.$watch(
- function(scope) {
- // watch the 'compile' expression for changes
- return scope.$eval(attrs.compile);
- },
- function(value) {
- // when the 'compile' expression changes
- // assign it into the current DOM
- element.html(value);
-
- // compile the new DOM and link it to the current
- // scope.
- // NOTE: we only compile .childNodes so that
- // we don't get into infinite loop compiling ourselves
- $compile(element.contents())(scope);
- }
- );
- };
- });
- })
- .controller('GreeterController', ['$scope', function($scope) {
- $scope.name = 'Angular';
- $scope.html = 'Hello {{name}}';
- }]);
- </script>
- <div ng-controller="GreeterController">
- <input ng-model="name"> <br>
- <textarea ng-model="html"></textarea> <br>
- <div compile="html"></div>
- </div>
- </file>
- <file name="protractor.js" type="protractor">
- it('should auto compile', function() {
- var textarea = $('textarea');
- var output = $('div[compile]');
- // The initial state reads 'Hello Angular'.
- expect(output.getText()).toBe('Hello Angular');
- textarea.clear();
- textarea.sendKeys('{{name}}!');
- expect(output.getText()).toBe('Angular!');
- });
- </file>
- </example>
-
- *
- *
- * @param {string|DOMElement} element Element or HTML string to compile into a template function.
- * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives - DEPRECATED.
- *
- * <div class="alert alert-error">
- * **Note:** Passing a `transclude` function to the $compile function is deprecated, as it
- * e.g. will not use the right outer scope. Please pass the transclude function as a
- * `parentBoundTranscludeFn` to the link function instead.
- * </div>
- *
- * @param {number} maxPriority only apply directives lower than given priority (Only effects the
- * root element(s), not their children)
- * @returns {function(scope, cloneAttachFn=, options=)} a link function which is used to bind template
- * (a DOM element/tree) to a scope. Where:
- *
- * * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to.
- * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the
- * `template` and call the `cloneAttachFn` function allowing the caller to attach the
- * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is
- * called as: <br> `cloneAttachFn(clonedElement, scope)` where:
- *
- * * `clonedElement` - is a clone of the original `element` passed into the compiler.
- * * `scope` - is the current scope with which the linking function is working with.
- *
- * * `options` - An optional object hash with linking options. If `options` is provided, then the following
- * keys may be used to control linking behavior:
- *
- * * `parentBoundTranscludeFn` - the transclude function made available to
- * directives; if given, it will be passed through to the link functions of
- * directives found in `element` during compilation.
- * * `transcludeControllers` - an object hash with keys that map controller names
- * to controller instances; if given, it will make the controllers
- * available to directives.
- * * `futureParentElement` - defines the parent to which the `cloneAttachFn` will add
- * the cloned elements; only needed for transcludes that are allowed to contain non html
- * elements (e.g. SVG elements). See also the directive.controller property.
- *
- * Calling the linking function returns the element of the template. It is either the original
- * element passed in, or the clone of the element if the `cloneAttachFn` is provided.
- *
- * After linking the view is not updated until after a call to $digest which typically is done by
- * Angular automatically.
- *
- * If you need access to the bound view, there are two ways to do it:
- *
- * - If you are not asking the linking function to clone the template, create the DOM element(s)
- * before you send them to the compiler and keep this reference around.
- * ```js
- * var element = $compile('<p>{{total}}</p>')(scope);
- * ```
- *
- * - if on the other hand, you need the element to be cloned, the view reference from the original
- * example would not point to the clone, but rather to the original template that was cloned. In
- * this case, you can access the clone via the cloneAttachFn:
- * ```js
- * var templateElement = angular.element('<p>{{total}}</p>'),
- * scope = ....;
- *
- * var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) {
- * //attach the clone to DOM document at the right place
- * });
- *
- * //now we have reference to the cloned DOM via `clonedElement`
- * ```
- *
- *
- * For information on how the compiler works, see the
- * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide.
- */
-
-var $compileMinErr = minErr('$compile');
-
-/**
- * @ngdoc provider
- * @name $compileProvider
- *
- * @description
- */
-$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider'];
-function $CompileProvider($provide, $$sanitizeUriProvider) {
- var hasDirectives = {},
- Suffix = 'Directive',
- COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\w\-]+)\s+(.*)$/,
- CLASS_DIRECTIVE_REGEXP = /(([\w\-]+)(?:\:([^;]+))?;?)/,
- ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'),
- REQUIRE_PREFIX_REGEXP = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/;
-
- // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes
- // The assumption is that future DOM event attribute names will begin with
- // 'on' and be composed of only English letters.
- var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/;
-
- function parseIsolateBindings(scope, directiveName) {
- var LOCAL_REGEXP = /^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/;
-
- var bindings = {};
-
- forEach(scope, function(definition, scopeName) {
- var match = definition.match(LOCAL_REGEXP);
-
- if (!match) {
- throw $compileMinErr('iscp',
- "Invalid isolate scope definition for directive '{0}'." +
- " Definition: {... {1}: '{2}' ...}",
- directiveName, scopeName, definition);
- }
-
- bindings[scopeName] = {
- mode: match[1][0],
- collection: match[2] === '*',
- optional: match[3] === '?',
- attrName: match[4] || scopeName
- };
- });
-
- return bindings;
- }
-
- /**
- * @ngdoc method
- * @name $compileProvider#directive
- * @kind function
- *
- * @description
- * Register a new directive with the compiler.
- *
- * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which
- * will match as <code>ng-bind</code>), or an object map of directives where the keys are the
- * names and the values are the factories.
- * @param {Function|Array} directiveFactory An injectable directive factory function. See
- * {@link guide/directive} for more info.
- * @returns {ng.$compileProvider} Self for chaining.
- */
- this.directive = function registerDirective(name, directiveFactory) {
- assertNotHasOwnProperty(name, 'directive');
- if (isString(name)) {
- assertArg(directiveFactory, 'directiveFactory');
- if (!hasDirectives.hasOwnProperty(name)) {
- hasDirectives[name] = [];
- $provide.factory(name + Suffix, ['$injector', '$exceptionHandler',
- function($injector, $exceptionHandler) {
- var directives = [];
- forEach(hasDirectives[name], function(directiveFactory, index) {
- try {
- var directive = $injector.invoke(directiveFactory);
- if (isFunction(directive)) {
- directive = { compile: valueFn(directive) };
- } else if (!directive.compile && directive.link) {
- directive.compile = valueFn(directive.link);
- }
- directive.priority = directive.priority || 0;
- directive.index = index;
- directive.name = directive.name || name;
- directive.require = directive.require || (directive.controller && directive.name);
- directive.restrict = directive.restrict || 'EA';
- if (isObject(directive.scope)) {
- directive.$$isolateBindings = parseIsolateBindings(directive.scope, directive.name);
- }
- directives.push(directive);
- } catch (e) {
- $exceptionHandler(e);
- }
- });
- return directives;
- }]);
- }
- hasDirectives[name].push(directiveFactory);
- } else {
- forEach(name, reverseParams(registerDirective));
- }
- return this;
- };
-
-
- /**
- * @ngdoc method
- * @name $compileProvider#aHrefSanitizationWhitelist
- * @kind function
- *
- * @description
- * Retrieves or overrides the default regular expression that is used for whitelisting of safe
- * urls during a[href] sanitization.
- *
- * The sanitization is a security measure aimed at preventing XSS attacks via html links.
- *
- * Any url about to be assigned to a[href] via data-binding is first normalized and turned into
- * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`
- * regular expression. If a match is found, the original url is written into the dom. Otherwise,
- * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
- *
- * @param {RegExp=} regexp New regexp to whitelist urls with.
- * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
- * chaining otherwise.
- */
- this.aHrefSanitizationWhitelist = function(regexp) {
- if (isDefined(regexp)) {
- $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp);
- return this;
- } else {
- return $$sanitizeUriProvider.aHrefSanitizationWhitelist();
- }
- };
-
-
- /**
- * @ngdoc method
- * @name $compileProvider#imgSrcSanitizationWhitelist
- * @kind function
- *
- * @description
- * Retrieves or overrides the default regular expression that is used for whitelisting of safe
- * urls during img[src] sanitization.
- *
- * The sanitization is a security measure aimed at prevent XSS attacks via html links.
- *
- * Any url about to be assigned to img[src] via data-binding is first normalized and turned into
- * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`
- * regular expression. If a match is found, the original url is written into the dom. Otherwise,
- * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
- *
- * @param {RegExp=} regexp New regexp to whitelist urls with.
- * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
- * chaining otherwise.
- */
- this.imgSrcSanitizationWhitelist = function(regexp) {
- if (isDefined(regexp)) {
- $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp);
- return this;
- } else {
- return $$sanitizeUriProvider.imgSrcSanitizationWhitelist();
- }
- };
-
- /**
- * @ngdoc method
- * @name $compileProvider#debugInfoEnabled
- *
- * @param {boolean=} enabled update the debugInfoEnabled state if provided, otherwise just return the
- * current debugInfoEnabled state
- * @returns {*} current value if used as getter or itself (chaining) if used as setter
- *
- * @kind function
- *
- * @description
- * Call this method to enable/disable various debug runtime information in the compiler such as adding
- * binding information and a reference to the current scope on to DOM elements.
- * If enabled, the compiler will add the following to DOM elements that have been bound to the scope
- * * `ng-binding` CSS class
- * * `$binding` data property containing an array of the binding expressions
- *
- * You may want to disable this in production for a significant performance boost. See
- * {@link guide/production#disabling-debug-data Disabling Debug Data} for more.
- *
- * The default value is true.
- */
- var debugInfoEnabled = true;
- this.debugInfoEnabled = function(enabled) {
- if (isDefined(enabled)) {
- debugInfoEnabled = enabled;
- return this;
- }
- return debugInfoEnabled;
- };
-
- this.$get = [
- '$injector', '$interpolate', '$exceptionHandler', '$templateRequest', '$parse',
- '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri',
- function($injector, $interpolate, $exceptionHandler, $templateRequest, $parse,
- $controller, $rootScope, $document, $sce, $animate, $$sanitizeUri) {
-
- var Attributes = function(element, attributesToCopy) {
- if (attributesToCopy) {
- var keys = Object.keys(attributesToCopy);
- var i, l, key;
-
- for (i = 0, l = keys.length; i < l; i++) {
- key = keys[i];
- this[key] = attributesToCopy[key];
- }
- } else {
- this.$attr = {};
- }
-
- this.$$element = element;
- };
-
- Attributes.prototype = {
- $normalize: directiveNormalize,
-
-
- /**
- * @ngdoc method
- * @name $compile.directive.Attributes#$addClass
- * @kind function
- *
- * @description
- * Adds the CSS class value specified by the classVal parameter to the element. If animations
- * are enabled then an animation will be triggered for the class addition.
- *
- * @param {string} classVal The className value that will be added to the element
- */
- $addClass: function(classVal) {
- if (classVal && classVal.length > 0) {
- $animate.addClass(this.$$element, classVal);
- }
- },
-
- /**
- * @ngdoc method
- * @name $compile.directive.Attributes#$removeClass
- * @kind function
- *
- * @description
- * Removes the CSS class value specified by the classVal parameter from the element. If
- * animations are enabled then an animation will be triggered for the class removal.
- *
- * @param {string} classVal The className value that will be removed from the element
- */
- $removeClass: function(classVal) {
- if (classVal && classVal.length > 0) {
- $animate.removeClass(this.$$element, classVal);
- }
- },
-
- /**
- * @ngdoc method
- * @name $compile.directive.Attributes#$updateClass
- * @kind function
- *
- * @description
- * Adds and removes the appropriate CSS class values to the element based on the difference
- * between the new and old CSS class values (specified as newClasses and oldClasses).
- *
- * @param {string} newClasses The current CSS className value
- * @param {string} oldClasses The former CSS className value
- */
- $updateClass: function(newClasses, oldClasses) {
- var toAdd = tokenDifference(newClasses, oldClasses);
- if (toAdd && toAdd.length) {
- $animate.addClass(this.$$element, toAdd);
- }
-
- var toRemove = tokenDifference(oldClasses, newClasses);
- if (toRemove && toRemove.length) {
- $animate.removeClass(this.$$element, toRemove);
- }
- },
-
- /**
- * Set a normalized attribute on the element in a way such that all directives
- * can share the attribute. This function properly handles boolean attributes.
- * @param {string} key Normalized key. (ie ngAttribute)
- * @param {string|boolean} value The value to set. If `null` attribute will be deleted.
- * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute.
- * Defaults to true.
- * @param {string=} attrName Optional none normalized name. Defaults to key.
- */
- $set: function(key, value, writeAttr, attrName) {
- // TODO: decide whether or not to throw an error if "class"
- //is set through this function since it may cause $updateClass to
- //become unstable.
-
- var node = this.$$element[0],
- booleanKey = getBooleanAttrName(node, key),
- aliasedKey = getAliasedAttrName(node, key),
- observer = key,
- nodeName;
-
- if (booleanKey) {
- this.$$element.prop(key, value);
- attrName = booleanKey;
- } else if (aliasedKey) {
- this[aliasedKey] = value;
- observer = aliasedKey;
- }
-
- this[key] = value;
-
- // translate normalized key to actual key
- if (attrName) {
- this.$attr[key] = attrName;
- } else {
- attrName = this.$attr[key];
- if (!attrName) {
- this.$attr[key] = attrName = snake_case(key, '-');
- }
- }
-
- nodeName = nodeName_(this.$$element);
-
- if ((nodeName === 'a' && key === 'href') ||
- (nodeName === 'img' && key === 'src')) {
- // sanitize a[href] and img[src] values
- this[key] = value = $$sanitizeUri(value, key === 'src');
- } else if (nodeName === 'img' && key === 'srcset') {
- // sanitize img[srcset] values
- var result = "";
-
- // first check if there are spaces because it's not the same pattern
- var trimmedSrcset = trim(value);
- // ( 999x ,| 999w ,| ,|, )
- var srcPattern = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/;
- var pattern = /\s/.test(trimmedSrcset) ? srcPattern : /(,)/;
-
- // split srcset into tuple of uri and descriptor except for the last item
- var rawUris = trimmedSrcset.split(pattern);
-
- // for each tuples
- var nbrUrisWith2parts = Math.floor(rawUris.length / 2);
- for (var i = 0; i < nbrUrisWith2parts; i++) {
- var innerIdx = i * 2;
- // sanitize the uri
- result += $$sanitizeUri(trim(rawUris[innerIdx]), true);
- // add the descriptor
- result += (" " + trim(rawUris[innerIdx + 1]));
- }
-
- // split the last item into uri and descriptor
- var lastTuple = trim(rawUris[i * 2]).split(/\s/);
-
- // sanitize the last uri
- result += $$sanitizeUri(trim(lastTuple[0]), true);
-
- // and add the last descriptor if any
- if (lastTuple.length === 2) {
- result += (" " + trim(lastTuple[1]));
- }
- this[key] = value = result;
- }
-
- if (writeAttr !== false) {
- if (value === null || value === undefined) {
- this.$$element.removeAttr(attrName);
- } else {
- this.$$element.attr(attrName, value);
- }
- }
-
- // fire observers
- var $$observers = this.$$observers;
- $$observers && forEach($$observers[observer], function(fn) {
- try {
- fn(value);
- } catch (e) {
- $exceptionHandler(e);
- }
- });
- },
-
-
- /**
- * @ngdoc method
- * @name $compile.directive.Attributes#$observe
- * @kind function
- *
- * @description
- * Observes an interpolated attribute.
- *
- * The observer function will be invoked once during the next `$digest` following
- * compilation. The observer is then invoked whenever the interpolated value
- * changes.
- *
- * @param {string} key Normalized key. (ie ngAttribute) .
- * @param {function(interpolatedValue)} fn Function that will be called whenever
- the interpolated value of the attribute changes.
- * See the {@link guide/directive#text-and-attribute-bindings Directives} guide for more info.
- * @returns {function()} Returns a deregistration function for this observer.
- */
- $observe: function(key, fn) {
- var attrs = this,
- $$observers = (attrs.$$observers || (attrs.$$observers = createMap())),
- listeners = ($$observers[key] || ($$observers[key] = []));
-
- listeners.push(fn);
- $rootScope.$evalAsync(function() {
- if (!listeners.$$inter && attrs.hasOwnProperty(key)) {
- // no one registered attribute interpolation function, so lets call it manually
- fn(attrs[key]);
- }
- });
-
- return function() {
- arrayRemove(listeners, fn);
- };
- }
- };
-
-
- function safeAddClass($element, className) {
- try {
- $element.addClass(className);
- } catch (e) {
- // ignore, since it means that we are trying to set class on
- // SVG element, where class name is read-only.
- }
- }
-
-
- var startSymbol = $interpolate.startSymbol(),
- endSymbol = $interpolate.endSymbol(),
- denormalizeTemplate = (startSymbol == '{{' || endSymbol == '}}')
- ? identity
- : function denormalizeTemplate(template) {
- return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol);
- },
- NG_ATTR_BINDING = /^ngAttr[A-Z]/;
-
- compile.$$addBindingInfo = debugInfoEnabled ? function $$addBindingInfo($element, binding) {
- var bindings = $element.data('$binding') || [];
-
- if (isArray(binding)) {
- bindings = bindings.concat(binding);
- } else {
- bindings.push(binding);
- }
-
- $element.data('$binding', bindings);
- } : noop;
-
- compile.$$addBindingClass = debugInfoEnabled ? function $$addBindingClass($element) {
- safeAddClass($element, 'ng-binding');
- } : noop;
-
- compile.$$addScopeInfo = debugInfoEnabled ? function $$addScopeInfo($element, scope, isolated, noTemplate) {
- var dataName = isolated ? (noTemplate ? '$isolateScopeNoTemplate' : '$isolateScope') : '$scope';
- $element.data(dataName, scope);
- } : noop;
-
- compile.$$addScopeClass = debugInfoEnabled ? function $$addScopeClass($element, isolated) {
- safeAddClass($element, isolated ? 'ng-isolate-scope' : 'ng-scope');
- } : noop;
-
- return compile;
-
- //================================
-
- function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective,
- previousCompileContext) {
- if (!($compileNodes instanceof jqLite)) {
- // jquery always rewraps, whereas we need to preserve the original selector so that we can
- // modify it.
- $compileNodes = jqLite($compileNodes);
- }
- // We can not compile top level text elements since text nodes can be merged and we will
- // not be able to attach scope data to them, so we will wrap them in <span>
- forEach($compileNodes, function(node, index) {
- if (node.nodeType == NODE_TYPE_TEXT && node.nodeValue.match(/\S+/) /* non-empty */ ) {
- $compileNodes[index] = jqLite(node).wrap('<span></span>').parent()[0];
- }
- });
- var compositeLinkFn =
- compileNodes($compileNodes, transcludeFn, $compileNodes,
- maxPriority, ignoreDirective, previousCompileContext);
- compile.$$addScopeClass($compileNodes);
- var namespace = null;
- return function publicLinkFn(scope, cloneConnectFn, options) {
- assertArg(scope, 'scope');
-
- options = options || {};
- var parentBoundTranscludeFn = options.parentBoundTranscludeFn,
- transcludeControllers = options.transcludeControllers,
- futureParentElement = options.futureParentElement;
-
- // When `parentBoundTranscludeFn` is passed, it is a
- // `controllersBoundTransclude` function (it was previously passed
- // as `transclude` to directive.link) so we must unwrap it to get
- // its `boundTranscludeFn`
- if (parentBoundTranscludeFn && parentBoundTranscludeFn.$$boundTransclude) {
- parentBoundTranscludeFn = parentBoundTranscludeFn.$$boundTransclude;
- }
-
- if (!namespace) {
- namespace = detectNamespaceForChildElements(futureParentElement);
- }
- var $linkNode;
- if (namespace !== 'html') {
- // When using a directive with replace:true and templateUrl the $compileNodes
- // (or a child element inside of them)
- // might change, so we need to recreate the namespace adapted compileNodes
- // for call to the link function.
- // Note: This will already clone the nodes...
- $linkNode = jqLite(
- wrapTemplate(namespace, jqLite('<div>').append($compileNodes).html())
- );
- } else if (cloneConnectFn) {
- // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart
- // and sometimes changes the structure of the DOM.
- $linkNode = JQLitePrototype.clone.call($compileNodes);
- } else {
- $linkNode = $compileNodes;
- }
-
- if (transcludeControllers) {
- for (var controllerName in transcludeControllers) {
- $linkNode.data('$' + controllerName + 'Controller', transcludeControllers[controllerName].instance);
- }
- }
-
- compile.$$addScopeInfo($linkNode, scope);
-
- if (cloneConnectFn) cloneConnectFn($linkNode, scope);
- if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn);
- return $linkNode;
- };
- }
-
- function detectNamespaceForChildElements(parentElement) {
- // TODO: Make this detect MathML as well...
- var node = parentElement && parentElement[0];
- if (!node) {
- return 'html';
- } else {
- return nodeName_(node) !== 'foreignobject' && node.toString().match(/SVG/) ? 'svg' : 'html';
- }
- }
-
- /**
- * Compile function matches each node in nodeList against the directives. Once all directives
- * for a particular node are collected their compile functions are executed. The compile
- * functions return values - the linking functions - are combined into a composite linking
- * function, which is the a linking function for the node.
- *
- * @param {NodeList} nodeList an array of nodes or NodeList to compile
- * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the
- * scope argument is auto-generated to the new child of the transcluded parent scope.
- * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then
- * the rootElement must be set the jqLite collection of the compile root. This is
- * needed so that the jqLite collection items can be replaced with widgets.
- * @param {number=} maxPriority Max directive priority.
- * @returns {Function} A composite linking function of all of the matched directives or null.
- */
- function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective,
- previousCompileContext) {
- var linkFns = [],
- attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound, nodeLinkFnFound;
-
- for (var i = 0; i < nodeList.length; i++) {
- attrs = new Attributes();
-
- // we must always refer to nodeList[i] since the nodes can be replaced underneath us.
- directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined,
- ignoreDirective);
-
- nodeLinkFn = (directives.length)
- ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement,
- null, [], [], previousCompileContext)
- : null;
-
- if (nodeLinkFn && nodeLinkFn.scope) {
- compile.$$addScopeClass(attrs.$$element);
- }
-
- childLinkFn = (nodeLinkFn && nodeLinkFn.terminal ||
- !(childNodes = nodeList[i].childNodes) ||
- !childNodes.length)
- ? null
- : compileNodes(childNodes,
- nodeLinkFn ? (
- (nodeLinkFn.transcludeOnThisElement || !nodeLinkFn.templateOnThisElement)
- && nodeLinkFn.transclude) : transcludeFn);
-
- if (nodeLinkFn || childLinkFn) {
- linkFns.push(i, nodeLinkFn, childLinkFn);
- linkFnFound = true;
- nodeLinkFnFound = nodeLinkFnFound || nodeLinkFn;
- }
-
- //use the previous context only for the first element in the virtual group
- previousCompileContext = null;
- }
-
- // return a linking function if we have found anything, null otherwise
- return linkFnFound ? compositeLinkFn : null;
-
- function compositeLinkFn(scope, nodeList, $rootElement, parentBoundTranscludeFn) {
- var nodeLinkFn, childLinkFn, node, childScope, i, ii, idx, childBoundTranscludeFn;
- var stableNodeList;
-
-
- if (nodeLinkFnFound) {
- // copy nodeList so that if a nodeLinkFn removes or adds an element at this DOM level our
- // offsets don't get screwed up
- var nodeListLength = nodeList.length;
- stableNodeList = new Array(nodeListLength);
-
- // create a sparse array by only copying the elements which have a linkFn
- for (i = 0; i < linkFns.length; i+=3) {
- idx = linkFns[i];
- stableNodeList[idx] = nodeList[idx];
- }
- } else {
- stableNodeList = nodeList;
- }
-
- for (i = 0, ii = linkFns.length; i < ii;) {
- node = stableNodeList[linkFns[i++]];
- nodeLinkFn = linkFns[i++];
- childLinkFn = linkFns[i++];
-
- if (nodeLinkFn) {
- if (nodeLinkFn.scope) {
- childScope = scope.$new();
- compile.$$addScopeInfo(jqLite(node), childScope);
- } else {
- childScope = scope;
- }
-
- if (nodeLinkFn.transcludeOnThisElement) {
- childBoundTranscludeFn = createBoundTranscludeFn(
- scope, nodeLinkFn.transclude, parentBoundTranscludeFn,
- nodeLinkFn.elementTranscludeOnThisElement);
-
- } else if (!nodeLinkFn.templateOnThisElement && parentBoundTranscludeFn) {
- childBoundTranscludeFn = parentBoundTranscludeFn;
-
- } else if (!parentBoundTranscludeFn && transcludeFn) {
- childBoundTranscludeFn = createBoundTranscludeFn(scope, transcludeFn);
-
- } else {
- childBoundTranscludeFn = null;
- }
-
- nodeLinkFn(childLinkFn, childScope, node, $rootElement, childBoundTranscludeFn);
-
- } else if (childLinkFn) {
- childLinkFn(scope, node.childNodes, undefined, parentBoundTranscludeFn);
- }
- }
- }
- }
-
- function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn, elementTransclusion) {
-
- var boundTranscludeFn = function(transcludedScope, cloneFn, controllers, futureParentElement, containingScope) {
-
- if (!transcludedScope) {
- transcludedScope = scope.$new(false, containingScope);
- transcludedScope.$$transcluded = true;
- }
-
- return transcludeFn(transcludedScope, cloneFn, {
- parentBoundTranscludeFn: previousBoundTranscludeFn,
- transcludeControllers: controllers,
- futureParentElement: futureParentElement
- });
- };
-
- return boundTranscludeFn;
- }
-
- /**
- * Looks for directives on the given node and adds them to the directive collection which is
- * sorted.
- *
- * @param node Node to search.
- * @param directives An array to which the directives are added to. This array is sorted before
- * the function returns.
- * @param attrs The shared attrs object which is used to populate the normalized attributes.
- * @param {number=} maxPriority Max directive priority.
- */
- function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) {
- var nodeType = node.nodeType,
- attrsMap = attrs.$attr,
- match,
- className;
-
- switch (nodeType) {
- case NODE_TYPE_ELEMENT: /* Element */
- // use the node name: <directive>
- addDirective(directives,
- directiveNormalize(nodeName_(node)), 'E', maxPriority, ignoreDirective);
-
- // iterate over the attributes
- for (var attr, name, nName, ngAttrName, value, isNgAttr, nAttrs = node.attributes,
- j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {
- var attrStartName = false;
- var attrEndName = false;
-
- attr = nAttrs[j];
- name = attr.name;
- value = trim(attr.value);
-
- // support ngAttr attribute binding
- ngAttrName = directiveNormalize(name);
- if (isNgAttr = NG_ATTR_BINDING.test(ngAttrName)) {
- name = snake_case(ngAttrName.substr(6), '-');
- }
-
- var directiveNName = ngAttrName.replace(/(Start|End)$/, '');
- if (directiveIsMultiElement(directiveNName)) {
- if (ngAttrName === directiveNName + 'Start') {
- attrStartName = name;
- attrEndName = name.substr(0, name.length - 5) + 'end';
- name = name.substr(0, name.length - 6);
- }
- }
-
- nName = directiveNormalize(name.toLowerCase());
- attrsMap[nName] = name;
- if (isNgAttr || !attrs.hasOwnProperty(nName)) {
- attrs[nName] = value;
- if (getBooleanAttrName(node, nName)) {
- attrs[nName] = true; // presence means true
- }
- }
- addAttrInterpolateDirective(node, directives, value, nName, isNgAttr);
- addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName,
- attrEndName);
- }
-
- // use class as directive
- className = node.className;
- if (isString(className) && className !== '') {
- while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {
- nName = directiveNormalize(match[2]);
- if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) {
- attrs[nName] = trim(match[3]);
- }
- className = className.substr(match.index + match[0].length);
- }
- }
- break;
- case NODE_TYPE_TEXT: /* Text Node */
- addTextInterpolateDirective(directives, node.nodeValue);
- break;
- case NODE_TYPE_COMMENT: /* Comment */
- try {
- match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue);
- if (match) {
- nName = directiveNormalize(match[1]);
- if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) {
- attrs[nName] = trim(match[2]);
- }
- }
- } catch (e) {
- // turns out that under some circumstances IE9 throws errors when one attempts to read
- // comment's node value.
- // Just ignore it and continue. (Can't seem to reproduce in test case.)
- }
- break;
- }
-
- directives.sort(byPriority);
- return directives;
- }
-
- /**
- * Given a node with an directive-start it collects all of the siblings until it finds
- * directive-end.
- * @param node
- * @param attrStart
- * @param attrEnd
- * @returns {*}
- */
- function groupScan(node, attrStart, attrEnd) {
- var nodes = [];
- var depth = 0;
- if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) {
- do {
- if (!node) {
- throw $compileMinErr('uterdir',
- "Unterminated attribute, found '{0}' but no matching '{1}' found.",
- attrStart, attrEnd);
- }
- if (node.nodeType == NODE_TYPE_ELEMENT) {
- if (node.hasAttribute(attrStart)) depth++;
- if (node.hasAttribute(attrEnd)) depth--;
- }
- nodes.push(node);
- node = node.nextSibling;
- } while (depth > 0);
- } else {
- nodes.push(node);
- }
-
- return jqLite(nodes);
- }
-
- /**
- * Wrapper for linking function which converts normal linking function into a grouped
- * linking function.
- * @param linkFn
- * @param attrStart
- * @param attrEnd
- * @returns {Function}
- */
- function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) {
- return function(scope, element, attrs, controllers, transcludeFn) {
- element = groupScan(element[0], attrStart, attrEnd);
- return linkFn(scope, element, attrs, controllers, transcludeFn);
- };
- }
-
- /**
- * Once the directives have been collected, their compile functions are executed. This method
- * is responsible for inlining directive templates as well as terminating the application
- * of the directives if the terminal directive has been reached.
- *
- * @param {Array} directives Array of collected directives to execute their compile function.
- * this needs to be pre-sorted by priority order.
- * @param {Node} compileNode The raw DOM node to apply the compile functions to
- * @param {Object} templateAttrs The shared attribute function
- * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the
- * scope argument is auto-generated to the new
- * child of the transcluded parent scope.
- * @param {JQLite} jqCollection If we are working on the root of the compile tree then this
- * argument has the root jqLite array so that we can replace nodes
- * on it.
- * @param {Object=} originalReplaceDirective An optional directive that will be ignored when
- * compiling the transclusion.
- * @param {Array.<Function>} preLinkFns
- * @param {Array.<Function>} postLinkFns
- * @param {Object} previousCompileContext Context used for previous compilation of the current
- * node
- * @returns {Function} linkFn
- */
- function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn,
- jqCollection, originalReplaceDirective, preLinkFns, postLinkFns,
- previousCompileContext) {
- previousCompileContext = previousCompileContext || {};
-
- var terminalPriority = -Number.MAX_VALUE,
- newScopeDirective,
- controllerDirectives = previousCompileContext.controllerDirectives,
- controllers,
- newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective,
- templateDirective = previousCompileContext.templateDirective,
- nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective,
- hasTranscludeDirective = false,
- hasTemplate = false,
- hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective,
- $compileNode = templateAttrs.$$element = jqLite(compileNode),
- directive,
- directiveName,
- $template,
- replaceDirective = originalReplaceDirective,
- childTranscludeFn = transcludeFn,
- linkFn,
- directiveValue;
-
- // executes all directives on the current element
- for (var i = 0, ii = directives.length; i < ii; i++) {
- directive = directives[i];
- var attrStart = directive.$$start;
- var attrEnd = directive.$$end;
-
- // collect multiblock sections
- if (attrStart) {
- $compileNode = groupScan(compileNode, attrStart, attrEnd);
- }
- $template = undefined;
-
- if (terminalPriority > directive.priority) {
- break; // prevent further processing of directives
- }
-
- if (directiveValue = directive.scope) {
-
- // skip the check for directives with async templates, we'll check the derived sync
- // directive when the template arrives
- if (!directive.templateUrl) {
- if (isObject(directiveValue)) {
- // This directive is trying to add an isolated scope.
- // Check that there is no scope of any kind already
- assertNoDuplicate('new/isolated scope', newIsolateScopeDirective || newScopeDirective,
- directive, $compileNode);
- newIsolateScopeDirective = directive;
- } else {
- // This directive is trying to add a child scope.
- // Check that there is no isolated scope already
- assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive,
- $compileNode);
- }
- }
-
- newScopeDirective = newScopeDirective || directive;
- }
-
- directiveName = directive.name;
-
- if (!directive.templateUrl && directive.controller) {
- directiveValue = directive.controller;
- controllerDirectives = controllerDirectives || {};
- assertNoDuplicate("'" + directiveName + "' controller",
- controllerDirectives[directiveName], directive, $compileNode);
- controllerDirectives[directiveName] = directive;
- }
-
- if (directiveValue = directive.transclude) {
- hasTranscludeDirective = true;
-
- // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion.
- // This option should only be used by directives that know how to safely handle element transclusion,
- // where the transcluded nodes are added or replaced after linking.
- if (!directive.$$tlb) {
- assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode);
- nonTlbTranscludeDirective = directive;
- }
-
- if (directiveValue == 'element') {
- hasElementTranscludeDirective = true;
- terminalPriority = directive.priority;
- $template = $compileNode;
- $compileNode = templateAttrs.$$element =
- jqLite(document.createComment(' ' + directiveName + ': ' +
- templateAttrs[directiveName] + ' '));
- compileNode = $compileNode[0];
- replaceWith(jqCollection, sliceArgs($template), compileNode);
-
- childTranscludeFn = compile($template, transcludeFn, terminalPriority,
- replaceDirective && replaceDirective.name, {
- // Don't pass in:
- // - controllerDirectives - otherwise we'll create duplicates controllers
- // - newIsolateScopeDirective or templateDirective - combining templates with
- // element transclusion doesn't make sense.
- //
- // We need only nonTlbTranscludeDirective so that we prevent putting transclusion
- // on the same element more than once.
- nonTlbTranscludeDirective: nonTlbTranscludeDirective
- });
- } else {
- $template = jqLite(jqLiteClone(compileNode)).contents();
- $compileNode.empty(); // clear contents
- childTranscludeFn = compile($template, transcludeFn);
- }
- }
-
- if (directive.template) {
- hasTemplate = true;
- assertNoDuplicate('template', templateDirective, directive, $compileNode);
- templateDirective = directive;
-
- directiveValue = (isFunction(directive.template))
- ? directive.template($compileNode, templateAttrs)
- : directive.template;
-
- directiveValue = denormalizeTemplate(directiveValue);
-
- if (directive.replace) {
- replaceDirective = directive;
- if (jqLiteIsTextNode(directiveValue)) {
- $template = [];
- } else {
- $template = removeComments(wrapTemplate(directive.templateNamespace, trim(directiveValue)));
- }
- compileNode = $template[0];
-
- if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
- throw $compileMinErr('tplrt',
- "Template for directive '{0}' must have exactly one root element. {1}",
- directiveName, '');
- }
-
- replaceWith(jqCollection, $compileNode, compileNode);
-
- var newTemplateAttrs = {$attr: {}};
-
- // combine directives from the original node and from the template:
- // - take the array of directives for this element
- // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed)
- // - collect directives from the template and sort them by priority
- // - combine directives as: processed + template + unprocessed
- var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs);
- var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1));
-
- if (newIsolateScopeDirective) {
- markDirectivesAsIsolate(templateDirectives);
- }
- directives = directives.concat(templateDirectives).concat(unprocessedDirectives);
- mergeTemplateAttributes(templateAttrs, newTemplateAttrs);
-
- ii = directives.length;
- } else {
- $compileNode.html(directiveValue);
- }
- }
-
- if (directive.templateUrl) {
- hasTemplate = true;
- assertNoDuplicate('template', templateDirective, directive, $compileNode);
- templateDirective = directive;
-
- if (directive.replace) {
- replaceDirective = directive;
- }
-
- nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode,
- templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, {
- controllerDirectives: controllerDirectives,
- newIsolateScopeDirective: newIsolateScopeDirective,
- templateDirective: templateDirective,
- nonTlbTranscludeDirective: nonTlbTranscludeDirective
- });
- ii = directives.length;
- } else if (directive.compile) {
- try {
- linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn);
- if (isFunction(linkFn)) {
- addLinkFns(null, linkFn, attrStart, attrEnd);
- } else if (linkFn) {
- addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd);
- }
- } catch (e) {
- $exceptionHandler(e, startingTag($compileNode));
- }
- }
-
- if (directive.terminal) {
- nodeLinkFn.terminal = true;
- terminalPriority = Math.max(terminalPriority, directive.priority);
- }
-
- }
-
- nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true;
- nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective;
- nodeLinkFn.elementTranscludeOnThisElement = hasElementTranscludeDirective;
- nodeLinkFn.templateOnThisElement = hasTemplate;
- nodeLinkFn.transclude = childTranscludeFn;
-
- previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective;
-
- // might be normal or delayed nodeLinkFn depending on if templateUrl is present
- return nodeLinkFn;
-
- ////////////////////
-
- function addLinkFns(pre, post, attrStart, attrEnd) {
- if (pre) {
- if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd);
- pre.require = directive.require;
- pre.directiveName = directiveName;
- if (newIsolateScopeDirective === directive || directive.$$isolateScope) {
- pre = cloneAndAnnotateFn(pre, {isolateScope: true});
- }
- preLinkFns.push(pre);
- }
- if (post) {
- if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd);
- post.require = directive.require;
- post.directiveName = directiveName;
- if (newIsolateScopeDirective === directive || directive.$$isolateScope) {
- post = cloneAndAnnotateFn(post, {isolateScope: true});
- }
- postLinkFns.push(post);
- }
- }
-
-
- function getControllers(directiveName, require, $element, elementControllers) {
- var value, retrievalMethod = 'data', optional = false;
- var $searchElement = $element;
- var match;
- if (isString(require)) {
- match = require.match(REQUIRE_PREFIX_REGEXP);
- require = require.substring(match[0].length);
-
- if (match[3]) {
- if (match[1]) match[3] = null;
- else match[1] = match[3];
- }
- if (match[1] === '^') {
- retrievalMethod = 'inheritedData';
- } else if (match[1] === '^^') {
- retrievalMethod = 'inheritedData';
- $searchElement = $element.parent();
- }
- if (match[2] === '?') {
- optional = true;
- }
-
- value = null;
-
- if (elementControllers && retrievalMethod === 'data') {
- if (value = elementControllers[require]) {
- value = value.instance;
- }
- }
- value = value || $searchElement[retrievalMethod]('$' + require + 'Controller');
-
- if (!value && !optional) {
- throw $compileMinErr('ctreq',
- "Controller '{0}', required by directive '{1}', can't be found!",
- require, directiveName);
- }
- return value || null;
- } else if (isArray(require)) {
- value = [];
- forEach(require, function(require) {
- value.push(getControllers(directiveName, require, $element, elementControllers));
- });
- }
- return value;
- }
-
-
- function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) {
- var i, ii, linkFn, controller, isolateScope, elementControllers, transcludeFn, $element,
- attrs;
-
- if (compileNode === linkNode) {
- attrs = templateAttrs;
- $element = templateAttrs.$$element;
- } else {
- $element = jqLite(linkNode);
- attrs = new Attributes($element, templateAttrs);
- }
-
- if (newIsolateScopeDirective) {
- isolateScope = scope.$new(true);
- }
-
- if (boundTranscludeFn) {
- // track `boundTranscludeFn` so it can be unwrapped if `transcludeFn`
- // is later passed as `parentBoundTranscludeFn` to `publicLinkFn`
- transcludeFn = controllersBoundTransclude;
- transcludeFn.$$boundTransclude = boundTranscludeFn;
- }
-
- if (controllerDirectives) {
- // TODO: merge `controllers` and `elementControllers` into single object.
- controllers = {};
- elementControllers = {};
- forEach(controllerDirectives, function(directive) {
- var locals = {
- $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,
- $element: $element,
- $attrs: attrs,
- $transclude: transcludeFn
- }, controllerInstance;
-
- controller = directive.controller;
- if (controller == '@') {
- controller = attrs[directive.name];
- }
-
- controllerInstance = $controller(controller, locals, true, directive.controllerAs);
-
- // For directives with element transclusion the element is a comment,
- // but jQuery .data doesn't support attaching data to comment nodes as it's hard to
- // clean up (http://bugs.jquery.com/ticket/8335).
- // Instead, we save the controllers for the element in a local hash and attach to .data
- // later, once we have the actual element.
- elementControllers[directive.name] = controllerInstance;
- if (!hasElementTranscludeDirective) {
- $element.data('$' + directive.name + 'Controller', controllerInstance.instance);
- }
-
- controllers[directive.name] = controllerInstance;
- });
- }
-
- if (newIsolateScopeDirective) {
- compile.$$addScopeInfo($element, isolateScope, true, !(templateDirective && (templateDirective === newIsolateScopeDirective ||
- templateDirective === newIsolateScopeDirective.$$originalDirective)));
- compile.$$addScopeClass($element, true);
-
- var isolateScopeController = controllers && controllers[newIsolateScopeDirective.name];
- var isolateBindingContext = isolateScope;
- if (isolateScopeController && isolateScopeController.identifier &&
- newIsolateScopeDirective.bindToController === true) {
- isolateBindingContext = isolateScopeController.instance;
- }
-
- forEach(isolateScope.$$isolateBindings = newIsolateScopeDirective.$$isolateBindings, function(definition, scopeName) {
- var attrName = definition.attrName,
- optional = definition.optional,
- mode = definition.mode, // @, =, or &
- lastValue,
- parentGet, parentSet, compare;
-
- switch (mode) {
-
- case '@':
- attrs.$observe(attrName, function(value) {
- isolateBindingContext[scopeName] = value;
- });
- attrs.$$observers[attrName].$$scope = scope;
- if (attrs[attrName]) {
- // If the attribute has been provided then we trigger an interpolation to ensure
- // the value is there for use in the link fn
- isolateBindingContext[scopeName] = $interpolate(attrs[attrName])(scope);
- }
- break;
-
- case '=':
- if (optional && !attrs[attrName]) {
- return;
- }
- parentGet = $parse(attrs[attrName]);
- if (parentGet.literal) {
- compare = equals;
- } else {
- compare = function(a, b) { return a === b || (a !== a && b !== b); };
- }
- parentSet = parentGet.assign || function() {
- // reset the change, or we will throw this exception on every $digest
- lastValue = isolateBindingContext[scopeName] = parentGet(scope);
- throw $compileMinErr('nonassign',
- "Expression '{0}' used with directive '{1}' is non-assignable!",
- attrs[attrName], newIsolateScopeDirective.name);
- };
- lastValue = isolateBindingContext[scopeName] = parentGet(scope);
- var parentValueWatch = function parentValueWatch(parentValue) {
- if (!compare(parentValue, isolateBindingContext[scopeName])) {
- // we are out of sync and need to copy
- if (!compare(parentValue, lastValue)) {
- // parent changed and it has precedence
- isolateBindingContext[scopeName] = parentValue;
- } else {
- // if the parent can be assigned then do so
- parentSet(scope, parentValue = isolateBindingContext[scopeName]);
- }
- }
- return lastValue = parentValue;
- };
- parentValueWatch.$stateful = true;
- var unwatch;
- if (definition.collection) {
- unwatch = scope.$watchCollection(attrs[attrName], parentValueWatch);
- } else {
- unwatch = scope.$watch($parse(attrs[attrName], parentValueWatch), null, parentGet.literal);
- }
- isolateScope.$on('$destroy', unwatch);
- break;
-
- case '&':
- parentGet = $parse(attrs[attrName]);
- isolateBindingContext[scopeName] = function(locals) {
- return parentGet(scope, locals);
- };
- break;
- }
- });
- }
- if (controllers) {
- forEach(controllers, function(controller) {
- controller();
- });
- controllers = null;
- }
-
- // PRELINKING
- for (i = 0, ii = preLinkFns.length; i < ii; i++) {
- linkFn = preLinkFns[i];
- invokeLinkFn(linkFn,
- linkFn.isolateScope ? isolateScope : scope,
- $element,
- attrs,
- linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),
- transcludeFn
- );
- }
-
- // RECURSION
- // We only pass the isolate scope, if the isolate directive has a template,
- // otherwise the child elements do not belong to the isolate directive.
- var scopeToChild = scope;
- if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) {
- scopeToChild = isolateScope;
- }
- childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);
-
- // POSTLINKING
- for (i = postLinkFns.length - 1; i >= 0; i--) {
- linkFn = postLinkFns[i];
- invokeLinkFn(linkFn,
- linkFn.isolateScope ? isolateScope : scope,
- $element,
- attrs,
- linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),
- transcludeFn
- );
- }
-
- // This is the function that is injected as `$transclude`.
- // Note: all arguments are optional!
- function controllersBoundTransclude(scope, cloneAttachFn, futureParentElement) {
- var transcludeControllers;
-
- // No scope passed in:
- if (!isScope(scope)) {
- futureParentElement = cloneAttachFn;
- cloneAttachFn = scope;
- scope = undefined;
- }
-
- if (hasElementTranscludeDirective) {
- transcludeControllers = elementControllers;
- }
- if (!futureParentElement) {
- futureParentElement = hasElementTranscludeDirective ? $element.parent() : $element;
- }
- return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild);
- }
- }
- }
-
- function markDirectivesAsIsolate(directives) {
- // mark all directives as needing isolate scope.
- for (var j = 0, jj = directives.length; j < jj; j++) {
- directives[j] = inherit(directives[j], {$$isolateScope: true});
- }
- }
-
- /**
- * looks up the directive and decorates it with exception handling and proper parameters. We
- * call this the boundDirective.
- *
- * @param {string} name name of the directive to look up.
- * @param {string} location The directive must be found in specific format.
- * String containing any of theses characters:
- *
- * * `E`: element name
- * * `A': attribute
- * * `C`: class
- * * `M`: comment
- * @returns {boolean} true if directive was added.
- */
- function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName,
- endAttrName) {
- if (name === ignoreDirective) return null;
- var match = null;
- if (hasDirectives.hasOwnProperty(name)) {
- for (var directive, directives = $injector.get(name + Suffix),
- i = 0, ii = directives.length; i < ii; i++) {
- try {
- directive = directives[i];
- if ((maxPriority === undefined || maxPriority > directive.priority) &&
- directive.restrict.indexOf(location) != -1) {
- if (startAttrName) {
- directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});
- }
- tDirectives.push(directive);
- match = directive;
- }
- } catch (e) { $exceptionHandler(e); }
- }
- }
- return match;
- }
-
-
- /**
- * looks up the directive and returns true if it is a multi-element directive,
- * and therefore requires DOM nodes between -start and -end markers to be grouped
- * together.
- *
- * @param {string} name name of the directive to look up.
- * @returns true if directive was registered as multi-element.
- */
- function directiveIsMultiElement(name) {
- if (hasDirectives.hasOwnProperty(name)) {
- for (var directive, directives = $injector.get(name + Suffix),
- i = 0, ii = directives.length; i < ii; i++) {
- directive = directives[i];
- if (directive.multiElement) {
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * When the element is replaced with HTML template then the new attributes
- * on the template need to be merged with the existing attributes in the DOM.
- * The desired effect is to have both of the attributes present.
- *
- * @param {object} dst destination attributes (original DOM)
- * @param {object} src source attributes (from the directive template)
- */
- function mergeTemplateAttributes(dst, src) {
- var srcAttr = src.$attr,
- dstAttr = dst.$attr,
- $element = dst.$$element;
-
- // reapply the old attributes to the new element
- forEach(dst, function(value, key) {
- if (key.charAt(0) != '$') {
- if (src[key] && src[key] !== value) {
- value += (key === 'style' ? ';' : ' ') + src[key];
- }
- dst.$set(key, value, true, srcAttr[key]);
- }
- });
-
- // copy the new attributes on the old attrs object
- forEach(src, function(value, key) {
- if (key == 'class') {
- safeAddClass($element, value);
- dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value;
- } else if (key == 'style') {
- $element.attr('style', $element.attr('style') + ';' + value);
- dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value;
- // `dst` will never contain hasOwnProperty as DOM parser won't let it.
- // You will get an "InvalidCharacterError: DOM Exception 5" error if you
- // have an attribute like "has-own-property" or "data-has-own-property", etc.
- } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) {
- dst[key] = value;
- dstAttr[key] = srcAttr[key];
- }
- });
- }
-
-
- function compileTemplateUrl(directives, $compileNode, tAttrs,
- $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {
- var linkQueue = [],
- afterTemplateNodeLinkFn,
- afterTemplateChildLinkFn,
- beforeTemplateCompileNode = $compileNode[0],
- origAsyncDirective = directives.shift(),
- // The fact that we have to copy and patch the directive seems wrong!
- derivedSyncDirective = extend({}, origAsyncDirective, {
- templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective
- }),
- templateUrl = (isFunction(origAsyncDirective.templateUrl))
- ? origAsyncDirective.templateUrl($compileNode, tAttrs)
- : origAsyncDirective.templateUrl,
- templateNamespace = origAsyncDirective.templateNamespace;
-
- $compileNode.empty();
-
- $templateRequest($sce.getTrustedResourceUrl(templateUrl))
- .then(function(content) {
- var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn;
-
- content = denormalizeTemplate(content);
-
- if (origAsyncDirective.replace) {
- if (jqLiteIsTextNode(content)) {
- $template = [];
- } else {
- $template = removeComments(wrapTemplate(templateNamespace, trim(content)));
- }
- compileNode = $template[0];
-
- if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
- throw $compileMinErr('tplrt',
- "Template for directive '{0}' must have exactly one root element. {1}",
- origAsyncDirective.name, templateUrl);
- }
-
- tempTemplateAttrs = {$attr: {}};
- replaceWith($rootElement, $compileNode, compileNode);
- var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs);
-
- if (isObject(origAsyncDirective.scope)) {
- markDirectivesAsIsolate(templateDirectives);
- }
- directives = templateDirectives.concat(directives);
- mergeTemplateAttributes(tAttrs, tempTemplateAttrs);
- } else {
- compileNode = beforeTemplateCompileNode;
- $compileNode.html(content);
- }
-
- directives.unshift(derivedSyncDirective);
-
- afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs,
- childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns,
- previousCompileContext);
- forEach($rootElement, function(node, i) {
- if (node == compileNode) {
- $rootElement[i] = $compileNode[0];
- }
- });
- afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn);
-
- while (linkQueue.length) {
- var scope = linkQueue.shift(),
- beforeTemplateLinkNode = linkQueue.shift(),
- linkRootElement = linkQueue.shift(),
- boundTranscludeFn = linkQueue.shift(),
- linkNode = $compileNode[0];
-
- if (scope.$$destroyed) continue;
-
- if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {
- var oldClasses = beforeTemplateLinkNode.className;
-
- if (!(previousCompileContext.hasElementTranscludeDirective &&
- origAsyncDirective.replace)) {
- // it was cloned therefore we have to clone as well.
- linkNode = jqLiteClone(compileNode);
- }
- replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode);
-
- // Copy in CSS classes from original node
- safeAddClass(jqLite(linkNode), oldClasses);
- }
- if (afterTemplateNodeLinkFn.transcludeOnThisElement) {
- childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);
- } else {
- childBoundTranscludeFn = boundTranscludeFn;
- }
- afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement,
- childBoundTranscludeFn);
- }
- linkQueue = null;
- });
-
- return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) {
- var childBoundTranscludeFn = boundTranscludeFn;
- if (scope.$$destroyed) return;
- if (linkQueue) {
- linkQueue.push(scope,
- node,
- rootElement,
- childBoundTranscludeFn);
- } else {
- if (afterTemplateNodeLinkFn.transcludeOnThisElement) {
- childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);
- }
- afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, childBoundTranscludeFn);
- }
- };
- }
-
-
- /**
- * Sorting function for bound directives.
- */
- function byPriority(a, b) {
- var diff = b.priority - a.priority;
- if (diff !== 0) return diff;
- if (a.name !== b.name) return (a.name < b.name) ? -1 : 1;
- return a.index - b.index;
- }
-
-
- function assertNoDuplicate(what, previousDirective, directive, element) {
- if (previousDirective) {
- throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}',
- previousDirective.name, directive.name, what, startingTag(element));
- }
- }
-
-
- function addTextInterpolateDirective(directives, text) {
- var interpolateFn = $interpolate(text, true);
- if (interpolateFn) {
- directives.push({
- priority: 0,
- compile: function textInterpolateCompileFn(templateNode) {
- var templateNodeParent = templateNode.parent(),
- hasCompileParent = !!templateNodeParent.length;
-
- // When transcluding a template that has bindings in the root
- // we don't have a parent and thus need to add the class during linking fn.
- if (hasCompileParent) compile.$$addBindingClass(templateNodeParent);
-
- return function textInterpolateLinkFn(scope, node) {
- var parent = node.parent();
- if (!hasCompileParent) compile.$$addBindingClass(parent);
- compile.$$addBindingInfo(parent, interpolateFn.expressions);
- scope.$watch(interpolateFn, function interpolateFnWatchAction(value) {
- node[0].nodeValue = value;
- });
- };
- }
- });
- }
- }
-
-
- function wrapTemplate(type, template) {
- type = lowercase(type || 'html');
- switch (type) {
- case 'svg':
- case 'math':
- var wrapper = document.createElement('div');
- wrapper.innerHTML = '<' + type + '>' + template + '</' + type + '>';
- return wrapper.childNodes[0].childNodes;
- default:
- return template;
- }
- }
-
-
- function getTrustedContext(node, attrNormalizedName) {
- if (attrNormalizedName == "srcdoc") {
- return $sce.HTML;
- }
- var tag = nodeName_(node);
- // maction[xlink:href] can source SVG. It's not limited to <maction>.
- if (attrNormalizedName == "xlinkHref" ||
- (tag == "form" && attrNormalizedName == "action") ||
- (tag != "img" && (attrNormalizedName == "src" ||
- attrNormalizedName == "ngSrc"))) {
- return $sce.RESOURCE_URL;
- }
- }
-
-
- function addAttrInterpolateDirective(node, directives, value, name, allOrNothing) {
- var interpolateFn = $interpolate(value, true);
-
- // no interpolation found -> ignore
- if (!interpolateFn) return;
-
-
- if (name === "multiple" && nodeName_(node) === "select") {
- throw $compileMinErr("selmulti",
- "Binding to the 'multiple' attribute is not supported. Element: {0}",
- startingTag(node));
- }
-
- directives.push({
- priority: 100,
- compile: function() {
- return {
- pre: function attrInterpolatePreLinkFn(scope, element, attr) {
- var $$observers = (attr.$$observers || (attr.$$observers = {}));
-
- if (EVENT_HANDLER_ATTR_REGEXP.test(name)) {
- throw $compileMinErr('nodomevents',
- "Interpolations for HTML DOM event attributes are disallowed. Please use the " +
- "ng- versions (such as ng-click instead of onclick) instead.");
- }
-
- // If the attribute was removed, then we are done
- if (!attr[name]) {
- return;
- }
-
- // we need to interpolate again, in case the attribute value has been updated
- // (e.g. by another directive's compile function)
- interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name),
- ALL_OR_NOTHING_ATTRS[name] || allOrNothing);
-
- // if attribute was updated so that there is no interpolation going on we don't want to
- // register any observers
- if (!interpolateFn) return;
-
- // initialize attr object so that it's ready in case we need the value for isolate
- // scope initialization, otherwise the value would not be available from isolate
- // directive's linking fn during linking phase
- attr[name] = interpolateFn(scope);
-
- ($$observers[name] || ($$observers[name] = [])).$$inter = true;
- (attr.$$observers && attr.$$observers[name].$$scope || scope).
- $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) {
- //special case for class attribute addition + removal
- //so that class changes can tap into the animation
- //hooks provided by the $animate service. Be sure to
- //skip animations when the first digest occurs (when
- //both the new and the old values are the same) since
- //the CSS classes are the non-interpolated values
- if (name === 'class' && newValue != oldValue) {
- attr.$updateClass(newValue, oldValue);
- } else {
- attr.$set(name, newValue);
- }
- });
- }
- };
- }
- });
- }
-
-
- /**
- * This is a special jqLite.replaceWith, which can replace items which
- * have no parents, provided that the containing jqLite collection is provided.
- *
- * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes
- * in the root of the tree.
- * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep
- * the shell, but replace its DOM node reference.
- * @param {Node} newNode The new DOM node.
- */
- function replaceWith($rootElement, elementsToRemove, newNode) {
- var firstElementToRemove = elementsToRemove[0],
- removeCount = elementsToRemove.length,
- parent = firstElementToRemove.parentNode,
- i, ii;
-
- if ($rootElement) {
- for (i = 0, ii = $rootElement.length; i < ii; i++) {
- if ($rootElement[i] == firstElementToRemove) {
- $rootElement[i++] = newNode;
- for (var j = i, j2 = j + removeCount - 1,
- jj = $rootElement.length;
- j < jj; j++, j2++) {
- if (j2 < jj) {
- $rootElement[j] = $rootElement[j2];
- } else {
- delete $rootElement[j];
- }
- }
- $rootElement.length -= removeCount - 1;
-
- // If the replaced element is also the jQuery .context then replace it
- // .context is a deprecated jQuery api, so we should set it only when jQuery set it
- // http://api.jquery.com/context/
- if ($rootElement.context === firstElementToRemove) {
- $rootElement.context = newNode;
- }
- break;
- }
- }
- }
-
- if (parent) {
- parent.replaceChild(newNode, firstElementToRemove);
- }
-
- // TODO(perf): what's this document fragment for? is it needed? can we at least reuse it?
- var fragment = document.createDocumentFragment();
- fragment.appendChild(firstElementToRemove);
-
- // Copy over user data (that includes Angular's $scope etc.). Don't copy private
- // data here because there's no public interface in jQuery to do that and copying over
- // event listeners (which is the main use of private data) wouldn't work anyway.
- jqLite(newNode).data(jqLite(firstElementToRemove).data());
-
- // Remove data of the replaced element. We cannot just call .remove()
- // on the element it since that would deallocate scope that is needed
- // for the new node. Instead, remove the data "manually".
- if (!jQuery) {
- delete jqLite.cache[firstElementToRemove[jqLite.expando]];
- } else {
- // jQuery 2.x doesn't expose the data storage. Use jQuery.cleanData to clean up after
- // the replaced element. The cleanData version monkey-patched by Angular would cause
- // the scope to be trashed and we do need the very same scope to work with the new
- // element. However, we cannot just cache the non-patched version and use it here as
- // that would break if another library patches the method after Angular does (one
- // example is jQuery UI). Instead, set a flag indicating scope destroying should be
- // skipped this one time.
- skipDestroyOnNextJQueryCleanData = true;
- jQuery.cleanData([firstElementToRemove]);
- }
-
- for (var k = 1, kk = elementsToRemove.length; k < kk; k++) {
- var element = elementsToRemove[k];
- jqLite(element).remove(); // must do this way to clean up expando
- fragment.appendChild(element);
- delete elementsToRemove[k];
- }
-
- elementsToRemove[0] = newNode;
- elementsToRemove.length = 1;
- }
-
-
- function cloneAndAnnotateFn(fn, annotation) {
- return extend(function() { return fn.apply(null, arguments); }, fn, annotation);
- }
-
-
- function invokeLinkFn(linkFn, scope, $element, attrs, controllers, transcludeFn) {
- try {
- linkFn(scope, $element, attrs, controllers, transcludeFn);
- } catch (e) {
- $exceptionHandler(e, startingTag($element));
- }
- }
- }];
-}
-
-var PREFIX_REGEXP = /^((?:x|data)[\:\-_])/i;
-/**
- * Converts all accepted directives format into proper directive name.
- * All of these will become 'myDirective':
- * my:Directive
- * my-directive
- * x-my-directive
- * data-my:directive
- *
- * Also there is special case for Moz prefix starting with upper case letter.
- * @param name Name to normalize
- */
-function directiveNormalize(name) {
- return camelCase(name.replace(PREFIX_REGEXP, ''));
-}
-
-/**
- * @ngdoc type
- * @name $compile.directive.Attributes
- *
- * @description
- * A shared object between directive compile / linking functions which contains normalized DOM
- * element attributes. The values reflect current binding state `{{ }}`. The normalization is
- * needed since all of these are treated as equivalent in Angular:
- *
- * ```
- * <span ng:bind="a" ng-bind="a" data-ng-bind="a" x-ng-bind="a">
- * ```
- */
-
-/**
- * @ngdoc property
- * @name $compile.directive.Attributes#$attr
- *
- * @description
- * A map of DOM element attribute names to the normalized name. This is
- * needed to do reverse lookup from normalized name back to actual name.
- */
-
-
-/**
- * @ngdoc method
- * @name $compile.directive.Attributes#$set
- * @kind function
- *
- * @description
- * Set DOM element attribute value.
- *
- *
- * @param {string} name Normalized element attribute name of the property to modify. The name is
- * reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr}
- * property to the original name.
- * @param {string} value Value to set the attribute to. The value can be an interpolated string.
- */
-
-
-
-/**
- * Closure compiler type information
- */
-
-function nodesetLinkingFn(
- /* angular.Scope */ scope,
- /* NodeList */ nodeList,
- /* Element */ rootElement,
- /* function(Function) */ boundTranscludeFn
-) {}
-
-function directiveLinkingFn(
- /* nodesetLinkingFn */ nodesetLinkingFn,
- /* angular.Scope */ scope,
- /* Node */ node,
- /* Element */ rootElement,
- /* function(Function) */ boundTranscludeFn
-) {}
-
-function tokenDifference(str1, str2) {
- var values = '',
- tokens1 = str1.split(/\s+/),
- tokens2 = str2.split(/\s+/);
-
- outer:
- for (var i = 0; i < tokens1.length; i++) {
- var token = tokens1[i];
- for (var j = 0; j < tokens2.length; j++) {
- if (token == tokens2[j]) continue outer;
- }
- values += (values.length > 0 ? ' ' : '') + token;
- }
- return values;
-}
-
-function removeComments(jqNodes) {
- jqNodes = jqLite(jqNodes);
- var i = jqNodes.length;
-
- if (i <= 1) {
- return jqNodes;
- }
-
- while (i--) {
- var node = jqNodes[i];
- if (node.nodeType === NODE_TYPE_COMMENT) {
- splice.call(jqNodes, i, 1);
- }
- }
- return jqNodes;
-}
-
-/**
- * @ngdoc provider
- * @name $controllerProvider
- * @description
- * The {@link ng.$controller $controller service} is used by Angular to create new
- * controllers.
- *
- * This provider allows controller registration via the
- * {@link ng.$controllerProvider#register register} method.
- */
-function $ControllerProvider() {
- var controllers = {},
- globals = false,
- CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/;
-
-
- /**
- * @ngdoc method
- * @name $controllerProvider#register
- * @param {string|Object} name Controller name, or an object map of controllers where the keys are
- * the names and the values are the constructors.
- * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI
- * annotations in the array notation).
- */
- this.register = function(name, constructor) {
- assertNotHasOwnProperty(name, 'controller');
- if (isObject(name)) {
- extend(controllers, name);
- } else {
- controllers[name] = constructor;
- }
- };
-
- /**
- * @ngdoc method
- * @name $controllerProvider#allowGlobals
- * @description If called, allows `$controller` to find controller constructors on `window`
- */
- this.allowGlobals = function() {
- globals = true;
- };
-
-
- this.$get = ['$injector', '$window', function($injector, $window) {
-
- /**
- * @ngdoc service
- * @name $controller
- * @requires $injector
- *
- * @param {Function|string} constructor If called with a function then it's considered to be the
- * controller constructor function. Otherwise it's considered to be a string which is used
- * to retrieve the controller constructor using the following steps:
- *
- * * check if a controller with given name is registered via `$controllerProvider`
- * * check if evaluating the string on the current scope returns a constructor
- * * if $controllerProvider#allowGlobals, check `window[constructor]` on the global
- * `window` object (not recommended)
- *
- * The string can use the `controller as property` syntax, where the controller instance is published
- * as the specified property on the `scope`; the `scope` must be injected into `locals` param for this
- * to work correctly.
- *
- * @param {Object} locals Injection locals for Controller.
- * @return {Object} Instance of given controller.
- *
- * @description
- * `$controller` service is responsible for instantiating controllers.
- *
- * It's just a simple call to {@link auto.$injector $injector}, but extracted into
- * a service, so that one can override this service with [BC version](https://gist.github.com/1649788).
- */
- return function(expression, locals, later, ident) {
- // PRIVATE API:
- // param `later` --- indicates that the controller's constructor is invoked at a later time.
- // If true, $controller will allocate the object with the correct
- // prototype chain, but will not invoke the controller until a returned
- // callback is invoked.
- // param `ident` --- An optional label which overrides the label parsed from the controller
- // expression, if any.
- var instance, match, constructor, identifier;
- later = later === true;
- if (ident && isString(ident)) {
- identifier = ident;
- }
-
- if (isString(expression)) {
- match = expression.match(CNTRL_REG),
- constructor = match[1],
- identifier = identifier || match[3];
- expression = controllers.hasOwnProperty(constructor)
- ? controllers[constructor]
- : getter(locals.$scope, constructor, true) ||
- (globals ? getter($window, constructor, true) : undefined);
-
- assertArgFn(expression, constructor, true);
- }
-
- if (later) {
- // Instantiate controller later:
- // This machinery is used to create an instance of the object before calling the
- // controller's constructor itself.
- //
- // This allows properties to be added to the controller before the constructor is
- // invoked. Primarily, this is used for isolate scope bindings in $compile.
- //
- // This feature is not intended for use by applications, and is thus not documented
- // publicly.
- // Object creation: http://jsperf.com/create-constructor/2
- var controllerPrototype = (isArray(expression) ?
- expression[expression.length - 1] : expression).prototype;
- instance = Object.create(controllerPrototype);
-
- if (identifier) {
- addIdentifier(locals, identifier, instance, constructor || expression.name);
- }
-
- return extend(function() {
- $injector.invoke(expression, instance, locals, constructor);
- return instance;
- }, {
- instance: instance,
- identifier: identifier
- });
- }
-
- instance = $injector.instantiate(expression, locals, constructor);
-
- if (identifier) {
- addIdentifier(locals, identifier, instance, constructor || expression.name);
- }
-
- return instance;
- };
-
- function addIdentifier(locals, identifier, instance, name) {
- if (!(locals && isObject(locals.$scope))) {
- throw minErr('$controller')('noscp',
- "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.",
- name, identifier);
- }
-
- locals.$scope[identifier] = instance;
- }
- }];
-}
-
-/**
- * @ngdoc service
- * @name $document
- * @requires $window
- *
- * @description
- * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object.
- *
- * @example
- <example module="documentExample">
- <file name="index.html">
- <div ng-controller="ExampleController">
- <p>$document title: <b ng-bind="title"></b></p>
- <p>window.document title: <b ng-bind="windowTitle"></b></p>
- </div>
- </file>
- <file name="script.js">
- angular.module('documentExample', [])
- .controller('ExampleController', ['$scope', '$document', function($scope, $document) {
- $scope.title = $document[0].title;
- $scope.windowTitle = angular.element(window.document)[0].title;
- }]);
- </file>
- </example>
- */
-function $DocumentProvider() {
- this.$get = ['$window', function(window) {
- return jqLite(window.document);
- }];
-}
-
-/**
- * @ngdoc service
- * @name $exceptionHandler
- * @requires ng.$log
- *
- * @description
- * Any uncaught exception in angular expressions is delegated to this service.
- * The default implementation simply delegates to `$log.error` which logs it into
- * the browser console.
- *
- * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by
- * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing.
- *
- * ## Example:
- *
- * ```js
- * angular.module('exceptionOverride', []).factory('$exceptionHandler', function() {
- * return function(exception, cause) {
- * exception.message += ' (caused by "' + cause + '")';
- * throw exception;
- * };
- * });
- * ```
- *
- * This example will override the normal action of `$exceptionHandler`, to make angular
- * exceptions fail hard when they happen, instead of just logging to the console.
- *
- * <hr />
- * Note, that code executed in event-listeners (even those registered using jqLite's `on`/`bind`
- * methods) does not delegate exceptions to the {@link ng.$exceptionHandler $exceptionHandler}
- * (unless executed during a digest).
- *
- * If you wish, you can manually delegate exceptions, e.g.
- * `try { ... } catch(e) { $exceptionHandler(e); }`
- *
- * @param {Error} exception Exception associated with the error.
- * @param {string=} cause optional information about the context in which
- * the error was thrown.
- *
- */
-function $ExceptionHandlerProvider() {
- this.$get = ['$log', function($log) {
- return function(exception, cause) {
- $log.error.apply($log, arguments);
- };
- }];
-}
-
-var APPLICATION_JSON = 'application/json';
-var CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'};
-var JSON_START = /^\s*(\[|\{[^\{])/;
-var JSON_END = /[\}\]]\s*$/;
-var JSON_PROTECTION_PREFIX = /^\)\]\}',?\n/;
-
-function defaultHttpResponseTransform(data, headers) {
- if (isString(data)) {
- // strip json vulnerability protection prefix
- data = data.replace(JSON_PROTECTION_PREFIX, '');
- var contentType = headers('Content-Type');
- if ((contentType && contentType.indexOf(APPLICATION_JSON) === 0 && data.trim()) ||
- (JSON_START.test(data) && JSON_END.test(data))) {
- data = fromJson(data);
- }
- }
- return data;
-}
-
-/**
- * Parse headers into key value object
- *
- * @param {string} headers Raw headers as a string
- * @returns {Object} Parsed headers as key value object
- */
-function parseHeaders(headers) {
- var parsed = createMap(), key, val, i;
-
- if (!headers) return parsed;
-
- forEach(headers.split('\n'), function(line) {
- i = line.indexOf(':');
- key = lowercase(trim(line.substr(0, i)));
- val = trim(line.substr(i + 1));
-
- if (key) {
- parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
- }
- });
-
- return parsed;
-}
-
-
-/**
- * Returns a function that provides access to parsed headers.
- *
- * Headers are lazy parsed when first requested.
- * @see parseHeaders
- *
- * @param {(string|Object)} headers Headers to provide access to.
- * @returns {function(string=)} Returns a getter function which if called with:
- *
- * - if called with single an argument returns a single header value or null
- * - if called with no arguments returns an object containing all headers.
- */
-function headersGetter(headers) {
- var headersObj = isObject(headers) ? headers : undefined;
-
- return function(name) {
- if (!headersObj) headersObj = parseHeaders(headers);
-
- if (name) {
- var value = headersObj[lowercase(name)];
- if (value === void 0) {
- value = null;
- }
- return value;
- }
-
- return headersObj;
- };
-}
-
-
-/**
- * Chain all given functions
- *
- * This function is used for both request and response transforming
- *
- * @param {*} data Data to transform.
- * @param {function(string=)} headers Http headers getter fn.
- * @param {(Function|Array.<Function>)} fns Function or an array of functions.
- * @returns {*} Transformed data.
- */
-function transformData(data, headers, fns) {
- if (isFunction(fns))
- return fns(data, headers);
-
- forEach(fns, function(fn) {
- data = fn(data, headers);
- });
-
- return data;
-}
-
-
-function isSuccess(status) {
- return 200 <= status && status < 300;
-}
-
-
-/**
- * @ngdoc provider
- * @name $httpProvider
- * @description
- * Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service.
- * */
-function $HttpProvider() {
- /**
- * @ngdoc property
- * @name $httpProvider#defaults
- * @description
- *
- * Object containing default values for all {@link ng.$http $http} requests.
- *
- * - **`defaults.cache`** - {Object} - an object built with {@link ng.$cacheFactory `$cacheFactory`}
- * that will provide the cache for all requests who set their `cache` property to `true`.
- * If you set the `default.cache = false` then only requests that specify their own custom
- * cache object will be cached. See {@link $http#caching $http Caching} for more information.
- *
- * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token.
- * Defaults value is `'XSRF-TOKEN'`.
- *
- * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the
- * XSRF token. Defaults value is `'X-XSRF-TOKEN'`.
- *
- * - **`defaults.headers`** - {Object} - Default headers for all $http requests.
- * Refer to {@link ng.$http#setting-http-headers $http} for documentation on
- * setting default headers.
- * - **`defaults.headers.common`**
- * - **`defaults.headers.post`**
- * - **`defaults.headers.put`**
- * - **`defaults.headers.patch`**
- *
- **/
- var defaults = this.defaults = {
- // transform incoming response data
- transformResponse: [defaultHttpResponseTransform],
-
- // transform outgoing request data
- transformRequest: [function(d) {
- return isObject(d) && !isFile(d) && !isBlob(d) ? toJson(d) : d;
- }],
-
- // default headers
- headers: {
- common: {
- 'Accept': 'application/json, text/plain, */*'
- },
- post: shallowCopy(CONTENT_TYPE_APPLICATION_JSON),
- put: shallowCopy(CONTENT_TYPE_APPLICATION_JSON),
- patch: shallowCopy(CONTENT_TYPE_APPLICATION_JSON)
- },
-
- xsrfCookieName: 'XSRF-TOKEN',
- xsrfHeaderName: 'X-XSRF-TOKEN'
- };
-
- var useApplyAsync = false;
- /**
- * @ngdoc method
- * @name $httpProvider#useApplyAsync
- * @description
- *
- * Configure $http service to combine processing of multiple http responses received at around
- * the same time via {@link ng.$rootScope.Scope#$applyAsync $rootScope.$applyAsync}. This can result in
- * significant performance improvement for bigger applications that make many HTTP requests
- * concurrently (common during application bootstrap).
- *
- * Defaults to false. If no value is specifed, returns the current configured value.
- *
- * @param {boolean=} value If true, when requests are loaded, they will schedule a deferred
- * "apply" on the next tick, giving time for subsequent requests in a roughly ~10ms window
- * to load and share the same digest cycle.
- *
- * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining.
- * otherwise, returns the current configured value.
- **/
- this.useApplyAsync = function(value) {
- if (isDefined(value)) {
- useApplyAsync = !!value;
- return this;
- }
- return useApplyAsync;
- };
-
- /**
- * @ngdoc property
- * @name $httpProvider#interceptors
- * @description
- *
- * Array containing service factories for all synchronous or asynchronous {@link ng.$http $http}
- * pre-processing of request or postprocessing of responses.
- *
- * These service factories are ordered by request, i.e. they are applied in the same order as the
- * array, on request, but reverse order, on response.
- *
- * {@link ng.$http#interceptors Interceptors detailed info}
- **/
- var interceptorFactories = this.interceptors = [];
-
- this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector',
- function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) {
-
- var defaultCache = $cacheFactory('$http');
-
- /**
- * Interceptors stored in reverse order. Inner interceptors before outer interceptors.
- * The reversal is needed so that we can build up the interception chain around the
- * server request.
- */
- var reversedInterceptors = [];
-
- forEach(interceptorFactories, function(interceptorFactory) {
- reversedInterceptors.unshift(isString(interceptorFactory)
- ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory));
- });
-
- /**
- * @ngdoc service
- * @kind function
- * @name $http
- * @requires ng.$httpBackend
- * @requires $cacheFactory
- * @requires $rootScope
- * @requires $q
- * @requires $injector
- *
- * @description
- * The `$http` service is a core Angular service that facilitates communication with the remote
- * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest)
- * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP).
- *
- * For unit testing applications that use `$http` service, see
- * {@link ngMock.$httpBackend $httpBackend mock}.
- *
- * For a higher level of abstraction, please check out the {@link ngResource.$resource
- * $resource} service.
- *
- * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by
- * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage
- * it is important to familiarize yourself with these APIs and the guarantees they provide.
- *
- *
- * ## General usage
- * The `$http` service is a function which takes a single argument — a configuration object —
- * that is used to generate an HTTP request and returns a {@link ng.$q promise}
- * with two $http specific methods: `success` and `error`.
- *
- * ```js
- * // Simple GET request example :
- * $http.get('/someUrl').
- * success(function(data, status, headers, config) {
- * // this callback will be called asynchronously
- * // when the response is available
- * }).
- * error(function(data, status, headers, config) {
- * // called asynchronously if an error occurs
- * // or server returns response with an error status.
- * });
- * ```
- *
- * ```js
- * // Simple POST request example (passing data) :
- * $http.post('/someUrl', {msg:'hello word!'}).
- * success(function(data, status, headers, config) {
- * // this callback will be called asynchronously
- * // when the response is available
- * }).
- * error(function(data, status, headers, config) {
- * // called asynchronously if an error occurs
- * // or server returns response with an error status.
- * });
- * ```
- *
- *
- * Since the returned value of calling the $http function is a `promise`, you can also use
- * the `then` method to register callbacks, and these callbacks will receive a single argument –
- * an object representing the response. See the API signature and type info below for more
- * details.
- *
- * A response status code between 200 and 299 is considered a success status and
- * will result in the success callback being called. Note that if the response is a redirect,
- * XMLHttpRequest will transparently follow it, meaning that the error callback will not be
- * called for such responses.
- *
- * ## Writing Unit Tests that use $http
- * When unit testing (using {@link ngMock ngMock}), it is necessary to call
- * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending
- * request using trained responses.
- *
- * ```
- * $httpBackend.expectGET(...);
- * $http.get(...);
- * $httpBackend.flush();
- * ```
- *
- * ## Shortcut methods
- *
- * Shortcut methods are also available. All shortcut methods require passing in the URL, and
- * request data must be passed in for POST/PUT requests.
- *
- * ```js
- * $http.get('/someUrl').success(successCallback);
- * $http.post('/someUrl', data).success(successCallback);
- * ```
- *
- * Complete list of shortcut methods:
- *
- * - {@link ng.$http#get $http.get}
- * - {@link ng.$http#head $http.head}
- * - {@link ng.$http#post $http.post}
- * - {@link ng.$http#put $http.put}
- * - {@link ng.$http#delete $http.delete}
- * - {@link ng.$http#jsonp $http.jsonp}
- * - {@link ng.$http#patch $http.patch}
- *
- *
- * ## Setting HTTP Headers
- *
- * The $http service will automatically add certain HTTP headers to all requests. These defaults
- * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration
- * object, which currently contains this default configuration:
- *
- * - `$httpProvider.defaults.headers.common` (headers that are common for all requests):
- * - `Accept: application/json, text/plain, * / *`
- * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests)
- * - `Content-Type: application/json`
- * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests)
- * - `Content-Type: application/json`
- *
- * To add or overwrite these defaults, simply add or remove a property from these configuration
- * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object
- * with the lowercased HTTP method name as the key, e.g.
- * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }.
- *
- * The defaults can also be set at runtime via the `$http.defaults` object in the same
- * fashion. For example:
- *
- * ```
- * module.run(function($http) {
- * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'
- * });
- * ```
- *
- * In addition, you can supply a `headers` property in the config object passed when
- * calling `$http(config)`, which overrides the defaults without changing them globally.
- *
- * To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis,
- * Use the `headers` property, setting the desired header to `undefined`. For example:
- *
- * ```js
- * var req = {
- * method: 'POST',
- * url: 'http://example.com',
- * headers: {
- * 'Content-Type': undefined
- * },
- * data: { test: 'test' },
- * }
- *
- * $http(req).success(function(){...}).error(function(){...});
- * ```
- *
- * ## Transforming Requests and Responses
- *
- * Both requests and responses can be transformed using transformation functions: `transformRequest`
- * and `transformResponse`. These properties can be a single function that returns
- * the transformed value (`{function(data, headersGetter)`) or an array of such transformation functions,
- * which allows you to `push` or `unshift` a new transformation function into the transformation chain.
- *
- * ### Default Transformations
- *
- * The `$httpProvider` provider and `$http` service expose `defaults.transformRequest` and
- * `defaults.transformResponse` properties. If a request does not provide its own transformations
- * then these will be applied.
- *
- * You can augment or replace the default transformations by modifying these properties by adding to or
- * replacing the array.
- *
- * Angular provides the following default transformations:
- *
- * Request transformations (`$httpProvider.defaults.transformRequest` and `$http.defaults.transformRequest`):
- *
- * - If the `data` property of the request configuration object contains an object, serialize it
- * into JSON format.
- *
- * Response transformations (`$httpProvider.defaults.transformResponse` and `$http.defaults.transformResponse`):
- *
- * - If XSRF prefix is detected, strip it (see Security Considerations section below).
- * - If JSON response is detected, deserialize it using a JSON parser.
- *
- *
- * ### Overriding the Default Transformations Per Request
- *
- * If you wish override the request/response transformations only for a single request then provide
- * `transformRequest` and/or `transformResponse` properties on the configuration object passed
- * into `$http`.
- *
- * Note that if you provide these properties on the config object the default transformations will be
- * overwritten. If you wish to augment the default transformations then you must include them in your
- * local transformation array.
- *
- * The following code demonstrates adding a new response transformation to be run after the default response
- * transformations have been run.
- *
- * ```js
- * function appendTransform(defaults, transform) {
- *
- * // We can't guarantee that the default transformation is an array
- * defaults = angular.isArray(defaults) ? defaults : [defaults];
- *
- * // Append the new transformation to the defaults
- * return defaults.concat(transform);
- * }
- *
- * $http({
- * url: '...',
- * method: 'GET',
- * transformResponse: appendTransform($http.defaults.transformResponse, function(value) {
- * return doTransform(value);
- * })
- * });
- * ```
- *
- *
- * ## Caching
- *
- * To enable caching, set the request configuration `cache` property to `true` (to use default
- * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}).
- * When the cache is enabled, `$http` stores the response from the server in the specified
- * cache. The next time the same request is made, the response is served from the cache without
- * sending a request to the server.
- *
- * Note that even if the response is served from cache, delivery of the data is asynchronous in
- * the same way that real requests are.
- *
- * If there are multiple GET requests for the same URL that should be cached using the same
- * cache, but the cache is not populated yet, only one request to the server will be made and
- * the remaining requests will be fulfilled using the response from the first request.
- *
- * You can change the default cache to a new object (built with
- * {@link ng.$cacheFactory `$cacheFactory`}) by updating the
- * {@link ng.$http#defaults `$http.defaults.cache`} property. All requests who set
- * their `cache` property to `true` will now use this cache object.
- *
- * If you set the default cache to `false` then only requests that specify their own custom
- * cache object will be cached.
- *
- * ## Interceptors
- *
- * Before you start creating interceptors, be sure to understand the
- * {@link ng.$q $q and deferred/promise APIs}.
- *
- * For purposes of global error handling, authentication, or any kind of synchronous or
- * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be
- * able to intercept requests before they are handed to the server and
- * responses before they are handed over to the application code that
- * initiated these requests. The interceptors leverage the {@link ng.$q
- * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing.
- *
- * The interceptors are service factories that are registered with the `$httpProvider` by
- * adding them to the `$httpProvider.interceptors` array. The factory is called and
- * injected with dependencies (if specified) and returns the interceptor.
- *
- * There are two kinds of interceptors (and two kinds of rejection interceptors):
- *
- * * `request`: interceptors get called with a http `config` object. The function is free to
- * modify the `config` object or create a new one. The function needs to return the `config`
- * object directly, or a promise containing the `config` or a new `config` object.
- * * `requestError`: interceptor gets called when a previous interceptor threw an error or
- * resolved with a rejection.
- * * `response`: interceptors get called with http `response` object. The function is free to
- * modify the `response` object or create a new one. The function needs to return the `response`
- * object directly, or as a promise containing the `response` or a new `response` object.
- * * `responseError`: interceptor gets called when a previous interceptor threw an error or
- * resolved with a rejection.
- *
- *
- * ```js
- * // register the interceptor as a service
- * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
- * return {
- * // optional method
- * 'request': function(config) {
- * // do something on success
- * return config;
- * },
- *
- * // optional method
- * 'requestError': function(rejection) {
- * // do something on error
- * if (canRecover(rejection)) {
- * return responseOrNewPromise
- * }
- * return $q.reject(rejection);
- * },
- *
- *
- *
- * // optional method
- * 'response': function(response) {
- * // do something on success
- * return response;
- * },
- *
- * // optional method
- * 'responseError': function(rejection) {
- * // do something on error
- * if (canRecover(rejection)) {
- * return responseOrNewPromise
- * }
- * return $q.reject(rejection);
- * }
- * };
- * });
- *
- * $httpProvider.interceptors.push('myHttpInterceptor');
- *
- *
- * // alternatively, register the interceptor via an anonymous factory
- * $httpProvider.interceptors.push(function($q, dependency1, dependency2) {
- * return {
- * 'request': function(config) {
- * // same as above
- * },
- *
- * 'response': function(response) {
- * // same as above
- * }
- * };
- * });
- * ```
- *
- * ## Security Considerations
- *
- * When designing web applications, consider security threats from:
- *
- * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)
- * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)
- *
- * Both server and the client must cooperate in order to eliminate these threats. Angular comes
- * pre-configured with strategies that address these issues, but for this to work backend server
- * cooperation is required.
- *
- * ### JSON Vulnerability Protection
- *
- * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)
- * allows third party website to turn your JSON resource URL into
- * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To
- * counter this your server can prefix all JSON requests with following string `")]}',\n"`.
- * Angular will automatically strip the prefix before processing it as JSON.
- *
- * For example if your server needs to return:
- * ```js
- * ['one','two']
- * ```
- *
- * which is vulnerable to attack, your server can return:
- * ```js
- * )]}',
- * ['one','two']
- * ```
- *
- * Angular will strip the prefix, before processing the JSON.
- *
- *
- * ### Cross Site Request Forgery (XSRF) Protection
- *
- * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which
- * an unauthorized site can gain your user's private data. Angular provides a mechanism
- * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie
- * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only
- * JavaScript that runs on your domain could read the cookie, your server can be assured that
- * the XHR came from JavaScript running on your domain. The header will not be set for
- * cross-domain requests.
- *
- * To take advantage of this, your server needs to set a token in a JavaScript readable session
- * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the
- * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure
- * that only JavaScript running on your domain could have sent the request. The token must be
- * unique for each user and must be verifiable by the server (to prevent the JavaScript from
- * making up its own tokens). We recommend that the token is a digest of your site's
- * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography&#41;)
- * for added security.
- *
- * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName
- * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time,
- * or the per-request config object.
- *
- *
- * @param {object} config Object describing the request to be made and how it should be
- * processed. The object has following properties:
- *
- * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc)
- * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested.
- * - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned
- * to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be
- * JSONified.
- * - **data** – `{string|Object}` – Data to be sent as the request message data.
- * - **headers** – `{Object}` – Map of strings or functions which return strings representing
- * HTTP headers to send to the server. If the return value of a function is null, the
- * header will not be sent.
- * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token.
- * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token.
- * - **transformRequest** –
- * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
- * transform function or an array of such functions. The transform function takes the http
- * request body and headers and returns its transformed (typically serialized) version.
- * See {@link ng.$http#overriding-the-default-transformations-per-request
- * Overriding the Default Transformations}
- * - **transformResponse** –
- * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
- * transform function or an array of such functions. The transform function takes the http
- * response body and headers and returns its transformed (typically deserialized) version.
- * See {@link ng.$http#overriding-the-default-transformations-per-request
- * Overriding the Default Transformations}
- * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
- * GET request, otherwise if a cache instance built with
- * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
- * caching.
- * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise}
- * that should abort the request when resolved.
- * - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the
- * XHR object. See [requests with credentials](https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials)
- * for more information.
- * - **responseType** - `{string}` - see
- * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType).
- *
- * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the
- * standard `then` method and two http specific methods: `success` and `error`. The `then`
- * method takes two arguments a success and an error callback which will be called with a
- * response object. The `success` and `error` methods take a single argument - a function that
- * will be called when the request succeeds or fails respectively. The arguments passed into
- * these functions are destructured representation of the response object passed into the
- * `then` method. The response object has these properties:
- *
- * - **data** – `{string|Object}` – The response body transformed with the transform
- * functions.
- * - **status** – `{number}` – HTTP status code of the response.
- * - **headers** – `{function([headerName])}` – Header getter function.
- * - **config** – `{Object}` – The configuration object that was used to generate the request.
- * - **statusText** – `{string}` – HTTP status text of the response.
- *
- * @property {Array.<Object>} pendingRequests Array of config objects for currently pending
- * requests. This is primarily meant to be used for debugging purposes.
- *
- *
- * @example
-<example module="httpExample">
-<file name="index.html">
- <div ng-controller="FetchController">
- <select ng-model="method">
- <option>GET</option>
- <option>JSONP</option>
- </select>
- <input type="text" ng-model="url" size="80"/>
- <button id="fetchbtn" ng-click="fetch()">fetch</button><br>
- <button id="samplegetbtn" ng-click="updateModel('GET', 'http-hello.html')">Sample GET</button>
- <button id="samplejsonpbtn"
- ng-click="updateModel('JSONP',
- 'https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')">
- Sample JSONP
- </button>
- <button id="invalidjsonpbtn"
- ng-click="updateModel('JSONP', 'https://angularjs.org/doesntexist&callback=JSON_CALLBACK')">
- Invalid JSONP
- </button>
- <pre>http status code: {{status}}</pre>
- <pre>http response data: {{data}}</pre>
- </div>
-</file>
-<file name="script.js">
- angular.module('httpExample', [])
- .controller('FetchController', ['$scope', '$http', '$templateCache',
- function($scope, $http, $templateCache) {
- $scope.method = 'GET';
- $scope.url = 'http-hello.html';
-
- $scope.fetch = function() {
- $scope.code = null;
- $scope.response = null;
-
- $http({method: $scope.method, url: $scope.url, cache: $templateCache}).
- success(function(data, status) {
- $scope.status = status;
- $scope.data = data;
- }).
- error(function(data, status) {
- $scope.data = data || "Request failed";
- $scope.status = status;
- });
- };
-
- $scope.updateModel = function(method, url) {
- $scope.method = method;
- $scope.url = url;
- };
- }]);
-</file>
-<file name="http-hello.html">
- Hello, $http!
-</file>
-<file name="protractor.js" type="protractor">
- var status = element(by.binding('status'));
- var data = element(by.binding('data'));
- var fetchBtn = element(by.id('fetchbtn'));
- var sampleGetBtn = element(by.id('samplegetbtn'));
- var sampleJsonpBtn = element(by.id('samplejsonpbtn'));
- var invalidJsonpBtn = element(by.id('invalidjsonpbtn'));
-
- it('should make an xhr GET request', function() {
- sampleGetBtn.click();
- fetchBtn.click();
- expect(status.getText()).toMatch('200');
- expect(data.getText()).toMatch(/Hello, \$http!/);
- });
-
-// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185
-// it('should make a JSONP request to angularjs.org', function() {
-// sampleJsonpBtn.click();
-// fetchBtn.click();
-// expect(status.getText()).toMatch('200');
-// expect(data.getText()).toMatch(/Super Hero!/);
-// });
-
- it('should make JSONP request to invalid URL and invoke the error handler',
- function() {
- invalidJsonpBtn.click();
- fetchBtn.click();
- expect(status.getText()).toMatch('0');
- expect(data.getText()).toMatch('Request failed');
- });
-</file>
-</example>
- */
- function $http(requestConfig) {
- var config = {
- method: 'get',
- transformRequest: defaults.transformRequest,
- transformResponse: defaults.transformResponse
- };
- var headers = mergeHeaders(requestConfig);
-
- if (!angular.isObject(requestConfig)) {
- throw minErr('$http')('badreq', 'Http request configuration must be an object. Received: {0}', requestConfig);
- }
-
- extend(config, requestConfig);
- config.headers = headers;
- config.method = uppercase(config.method);
-
- var serverRequest = function(config) {
- headers = config.headers;
- var reqData = transformData(config.data, headersGetter(headers), config.transformRequest);
-
- // strip content-type if data is undefined
- if (isUndefined(reqData)) {
- forEach(headers, function(value, header) {
- if (lowercase(header) === 'content-type') {
- delete headers[header];
- }
- });
- }
-
- if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {
- config.withCredentials = defaults.withCredentials;
- }
-
- // send request
- return sendReq(config, reqData, headers).then(transformResponse, transformResponse);
- };
-
- var chain = [serverRequest, undefined];
- var promise = $q.when(config);
-
- // apply interceptors
- forEach(reversedInterceptors, function(interceptor) {
- if (interceptor.request || interceptor.requestError) {
- chain.unshift(interceptor.request, interceptor.requestError);
- }
- if (interceptor.response || interceptor.responseError) {
- chain.push(interceptor.response, interceptor.responseError);
- }
- });
-
- while (chain.length) {
- var thenFn = chain.shift();
- var rejectFn = chain.shift();
-
- promise = promise.then(thenFn, rejectFn);
- }
-
- promise.success = function(fn) {
- promise.then(function(response) {
- fn(response.data, response.status, response.headers, config);
- });
- return promise;
- };
-
- promise.error = function(fn) {
- promise.then(null, function(response) {
- fn(response.data, response.status, response.headers, config);
- });
- return promise;
- };
-
- return promise;
-
- function transformResponse(response) {
- // make a copy since the response must be cacheable
- var resp = extend({}, response);
- if (!response.data) {
- resp.data = response.data;
- } else {
- resp.data = transformData(response.data, response.headers, config.transformResponse);
- }
- return (isSuccess(response.status))
- ? resp
- : $q.reject(resp);
- }
-
- function mergeHeaders(config) {
- var defHeaders = defaults.headers,
- reqHeaders = extend({}, config.headers),
- defHeaderName, lowercaseDefHeaderName, reqHeaderName;
-
- defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]);
-
- // using for-in instead of forEach to avoid unecessary iteration after header has been found
- defaultHeadersIteration:
- for (defHeaderName in defHeaders) {
- lowercaseDefHeaderName = lowercase(defHeaderName);
-
- for (reqHeaderName in reqHeaders) {
- if (lowercase(reqHeaderName) === lowercaseDefHeaderName) {
- continue defaultHeadersIteration;
- }
- }
-
- reqHeaders[defHeaderName] = defHeaders[defHeaderName];
- }
-
- // execute if header value is a function for merged headers
- execHeaders(reqHeaders);
- return reqHeaders;
-
- function execHeaders(headers) {
- var headerContent;
-
- forEach(headers, function(headerFn, header) {
- if (isFunction(headerFn)) {
- headerContent = headerFn();
- if (headerContent != null) {
- headers[header] = headerContent;
- } else {
- delete headers[header];
- }
- }
- });
- }
- }
- }
-
- $http.pendingRequests = [];
-
- /**
- * @ngdoc method
- * @name $http#get
- *
- * @description
- * Shortcut method to perform `GET` request.
- *
- * @param {string} url Relative or absolute URL specifying the destination of the request
- * @param {Object=} config Optional configuration object
- * @returns {HttpPromise} Future object
- */
-
- /**
- * @ngdoc method
- * @name $http#delete
- *
- * @description
- * Shortcut method to perform `DELETE` request.
- *
- * @param {string} url Relative or absolute URL specifying the destination of the request
- * @param {Object=} config Optional configuration object
- * @returns {HttpPromise} Future object
- */
-
- /**
- * @ngdoc method
- * @name $http#head
- *
- * @description
- * Shortcut method to perform `HEAD` request.
- *
- * @param {string} url Relative or absolute URL specifying the destination of the request
- * @param {Object=} config Optional configuration object
- * @returns {HttpPromise} Future object
- */
-
- /**
- * @ngdoc method
- * @name $http#jsonp
- *
- * @description
- * Shortcut method to perform `JSONP` request.
- *
- * @param {string} url Relative or absolute URL specifying the destination of the request.
- * The name of the callback should be the string `JSON_CALLBACK`.
- * @param {Object=} config Optional configuration object
- * @returns {HttpPromise} Future object
- */
- createShortMethods('get', 'delete', 'head', 'jsonp');
-
- /**
- * @ngdoc method
- * @name $http#post
- *
- * @description
- * Shortcut method to perform `POST` request.
- *
- * @param {string} url Relative or absolute URL specifying the destination of the request
- * @param {*} data Request content
- * @param {Object=} config Optional configuration object
- * @returns {HttpPromise} Future object
- */
-
- /**
- * @ngdoc method
- * @name $http#put
- *
- * @description
- * Shortcut method to perform `PUT` request.
- *
- * @param {string} url Relative or absolute URL specifying the destination of the request
- * @param {*} data Request content
- * @param {Object=} config Optional configuration object
- * @returns {HttpPromise} Future object
- */
-
- /**
- * @ngdoc method
- * @name $http#patch
- *
- * @description
- * Shortcut method to perform `PATCH` request.
- *
- * @param {string} url Relative or absolute URL specifying the destination of the request
- * @param {*} data Request content
- * @param {Object=} config Optional configuration object
- * @returns {HttpPromise} Future object
- */
- createShortMethodsWithData('post', 'put', 'patch');
-
- /**
- * @ngdoc property
- * @name $http#defaults
- *
- * @description
- * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of
- * default headers, withCredentials as well as request and response transformations.
- *
- * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above.
- */
- $http.defaults = defaults;
-
-
- return $http;
-
-
- function createShortMethods(names) {
- forEach(arguments, function(name) {
- $http[name] = function(url, config) {
- return $http(extend(config || {}, {
- method: name,
- url: url
- }));
- };
- });
- }
-
-
- function createShortMethodsWithData(name) {
- forEach(arguments, function(name) {
- $http[name] = function(url, data, config) {
- return $http(extend(config || {}, {
- method: name,
- url: url,
- data: data
- }));
- };
- });
- }
-
-
- /**
- * Makes the request.
- *
- * !!! ACCESSES CLOSURE VARS:
- * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests
- */
- function sendReq(config, reqData, reqHeaders) {
- var deferred = $q.defer(),
- promise = deferred.promise,
- cache,
- cachedResp,
- url = buildUrl(config.url, config.params);
-
- $http.pendingRequests.push(config);
- promise.then(removePendingReq, removePendingReq);
-
-
- if ((config.cache || defaults.cache) && config.cache !== false &&
- (config.method === 'GET' || config.method === 'JSONP')) {
- cache = isObject(config.cache) ? config.cache
- : isObject(defaults.cache) ? defaults.cache
- : defaultCache;
- }
-
- if (cache) {
- cachedResp = cache.get(url);
- if (isDefined(cachedResp)) {
- if (isPromiseLike(cachedResp)) {
- // cached request has already been sent, but there is no response yet
- cachedResp.then(removePendingReq, removePendingReq);
- return cachedResp;
- } else {
- // serving from cache
- if (isArray(cachedResp)) {
- resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]);
- } else {
- resolvePromise(cachedResp, 200, {}, 'OK');
- }
- }
- } else {
- // put the promise for the non-transformed response into cache as a placeholder
- cache.put(url, promise);
- }
- }
-
-
- // if we won't have the response in cache, set the xsrf headers and
- // send the request to the backend
- if (isUndefined(cachedResp)) {
- var xsrfValue = urlIsSameOrigin(config.url)
- ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName]
- : undefined;
- if (xsrfValue) {
- reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;
- }
-
- $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,
- config.withCredentials, config.responseType);
- }
-
- return promise;
-
-
- /**
- * Callback registered to $httpBackend():
- * - caches the response if desired
- * - resolves the raw $http promise
- * - calls $apply
- */
- function done(status, response, headersString, statusText) {
- if (cache) {
- if (isSuccess(status)) {
- cache.put(url, [status, response, parseHeaders(headersString), statusText]);
- } else {
- // remove promise from the cache
- cache.remove(url);
- }
- }
-
- function resolveHttpPromise() {
- resolvePromise(response, status, headersString, statusText);
- }
-
- if (useApplyAsync) {
- $rootScope.$applyAsync(resolveHttpPromise);
- } else {
- resolveHttpPromise();
- if (!$rootScope.$$phase) $rootScope.$apply();
- }
- }
-
-
- /**
- * Resolves the raw $http promise.
- */
- function resolvePromise(response, status, headers, statusText) {
- // normalize internal statuses to 0
- status = Math.max(status, 0);
-
- (isSuccess(status) ? deferred.resolve : deferred.reject)({
- data: response,
- status: status,
- headers: headersGetter(headers),
- config: config,
- statusText: statusText
- });
- }
-
-
- function removePendingReq() {
- var idx = $http.pendingRequests.indexOf(config);
- if (idx !== -1) $http.pendingRequests.splice(idx, 1);
- }
- }
-
-
- function buildUrl(url, params) {
- if (!params) return url;
- var parts = [];
- forEachSorted(params, function(value, key) {
- if (value === null || isUndefined(value)) return;
- if (!isArray(value)) value = [value];
-
- forEach(value, function(v) {
- if (isObject(v)) {
- if (isDate(v)) {
- v = v.toISOString();
- } else {
- v = toJson(v);
- }
- }
- parts.push(encodeUriQuery(key) + '=' +
- encodeUriQuery(v));
- });
- });
- if (parts.length > 0) {
- url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&');
- }
- return url;
- }
- }];
-}
-
-function createXhr() {
- return new window.XMLHttpRequest();
-}
-
-/**
- * @ngdoc service
- * @name $httpBackend
- * @requires $window
- * @requires $document
- *
- * @description
- * HTTP backend used by the {@link ng.$http service} that delegates to
- * XMLHttpRequest object or JSONP and deals with browser incompatibilities.
- *
- * You should never need to use this service directly, instead use the higher-level abstractions:
- * {@link ng.$http $http} or {@link ngResource.$resource $resource}.
- *
- * During testing this implementation is swapped with {@link ngMock.$httpBackend mock
- * $httpBackend} which can be trained with responses.
- */
-function $HttpBackendProvider() {
- this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) {
- return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]);
- }];
-}
-
-function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {
- // TODO(vojta): fix the signature
- return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {
- $browser.$$incOutstandingRequestCount();
- url = url || $browser.url();
-
- if (lowercase(method) == 'jsonp') {
- var callbackId = '_' + (callbacks.counter++).toString(36);
- callbacks[callbackId] = function(data) {
- callbacks[callbackId].data = data;
- callbacks[callbackId].called = true;
- };
-
- var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),
- callbackId, function(status, text) {
- completeRequest(callback, status, callbacks[callbackId].data, "", text);
- callbacks[callbackId] = noop;
- });
- } else {
-
- var xhr = createXhr();
-
- xhr.open(method, url, true);
- forEach(headers, function(value, key) {
- if (isDefined(value)) {
- xhr.setRequestHeader(key, value);
- }
- });
-
- xhr.onload = function requestLoaded() {
- var statusText = xhr.statusText || '';
-
- // responseText is the old-school way of retrieving response (supported by IE8 & 9)
- // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)
- var response = ('response' in xhr) ? xhr.response : xhr.responseText;
-
- // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)
- var status = xhr.status === 1223 ? 204 : xhr.status;
-
- // fix status code when it is 0 (0 status is undocumented).
- // Occurs when accessing file resources or on Android 4.1 stock browser
- // while retrieving files from application cache.
- if (status === 0) {
- status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0;
- }
-
- completeRequest(callback,
- status,
- response,
- xhr.getAllResponseHeaders(),
- statusText);
- };
-
- var requestError = function() {
- // The response is always empty
- // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error
- completeRequest(callback, -1, null, null, '');
- };
-
- xhr.onerror = requestError;
- xhr.onabort = requestError;
-
- if (withCredentials) {
- xhr.withCredentials = true;
- }
-
- if (responseType) {
- try {
- xhr.responseType = responseType;
- } catch (e) {
- // WebKit added support for the json responseType value on 09/03/2013
- // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are
- // known to throw when setting the value "json" as the response type. Other older
- // browsers implementing the responseType
- //
- // The json response type can be ignored if not supported, because JSON payloads are
- // parsed on the client-side regardless.
- if (responseType !== 'json') {
- throw e;
- }
- }
- }
-
- xhr.send(post || null);
- }
-
- if (timeout > 0) {
- var timeoutId = $browserDefer(timeoutRequest, timeout);
- } else if (isPromiseLike(timeout)) {
- timeout.then(timeoutRequest);
- }
-
-
- function timeoutRequest() {
- jsonpDone && jsonpDone();
- xhr && xhr.abort();
- }
-
- function completeRequest(callback, status, response, headersString, statusText) {
- // cancel timeout and subsequent timeout promise resolution
- if (timeoutId !== undefined) {
- $browserDefer.cancel(timeoutId);
- }
- jsonpDone = xhr = null;
-
- callback(status, response, headersString, statusText);
- $browser.$$completeOutstandingRequest(noop);
- }
- };
-
- function jsonpReq(url, callbackId, done) {
- // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.:
- // - fetches local scripts via XHR and evals them
- // - adds and immediately removes script elements from the document
- var script = rawDocument.createElement('script'), callback = null;
- script.type = "text/javascript";
- script.src = url;
- script.async = true;
-
- callback = function(event) {
- removeEventListenerFn(script, "load", callback);
- removeEventListenerFn(script, "error", callback);
- rawDocument.body.removeChild(script);
- script = null;
- var status = -1;
- var text = "unknown";
-
- if (event) {
- if (event.type === "load" && !callbacks[callbackId].called) {
- event = { type: "error" };
- }
- text = event.type;
- status = event.type === "error" ? 404 : 200;
- }
-
- if (done) {
- done(status, text);
- }
- };
-
- addEventListenerFn(script, "load", callback);
- addEventListenerFn(script, "error", callback);
- rawDocument.body.appendChild(script);
- return callback;
- }
-}
-
-var $interpolateMinErr = minErr('$interpolate');
-
-/**
- * @ngdoc provider
- * @name $interpolateProvider
- *
- * @description
- *
- * Used for configuring the interpolation markup. Defaults to `{{` and `}}`.
- *
- * @example
-<example module="customInterpolationApp">
-<file name="index.html">
-<script>
- var customInterpolationApp = angular.module('customInterpolationApp', []);
-
- customInterpolationApp.config(function($interpolateProvider) {
- $interpolateProvider.startSymbol('//');
- $interpolateProvider.endSymbol('//');
- });
-
-
- customInterpolationApp.controller('DemoController', function() {
- this.label = "This binding is brought you by // interpolation symbols.";
- });
-</script>
-<div ng-app="App" ng-controller="DemoController as demo">
- //demo.label//
-</div>
-</file>
-<file name="protractor.js" type="protractor">
- it('should interpolate binding with custom symbols', function() {
- expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.');
- });
-</file>
-</example>
- */
-function $InterpolateProvider() {
- var startSymbol = '{{';
- var endSymbol = '}}';
-
- /**
- * @ngdoc method
- * @name $interpolateProvider#startSymbol
- * @description
- * Symbol to denote start of expression in the interpolated string. Defaults to `{{`.
- *
- * @param {string=} value new value to set the starting symbol to.
- * @returns {string|self} Returns the symbol when used as getter and self if used as setter.
- */
- this.startSymbol = function(value) {
- if (value) {
- startSymbol = value;
- return this;
- } else {
- return startSymbol;
- }
- };
-
- /**
- * @ngdoc method
- * @name $interpolateProvider#endSymbol
- * @description
- * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
- *
- * @param {string=} value new value to set the ending symbol to.
- * @returns {string|self} Returns the symbol when used as getter and self if used as setter.
- */
- this.endSymbol = function(value) {
- if (value) {
- endSymbol = value;
- return this;
- } else {
- return endSymbol;
- }
- };
-
-
- this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) {
- var startSymbolLength = startSymbol.length,
- endSymbolLength = endSymbol.length,
- escapedStartRegexp = new RegExp(startSymbol.replace(/./g, escape), 'g'),
- escapedEndRegexp = new RegExp(endSymbol.replace(/./g, escape), 'g');
-
- function escape(ch) {
- return '\\\\\\' + ch;
- }
-
- /**
- * @ngdoc service
- * @name $interpolate
- * @kind function
- *
- * @requires $parse
- * @requires $sce
- *
- * @description
- *
- * Compiles a string with markup into an interpolation function. This service is used by the
- * HTML {@link ng.$compile $compile} service for data binding. See
- * {@link ng.$interpolateProvider $interpolateProvider} for configuring the
- * interpolation markup.
- *
- *
- * ```js
- * var $interpolate = ...; // injected
- * var exp = $interpolate('Hello {{name | uppercase}}!');
- * expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!');
- * ```
- *
- * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is
- * `true`, the interpolation function will return `undefined` unless all embedded expressions
- * evaluate to a value other than `undefined`.
- *
- * ```js
- * var $interpolate = ...; // injected
- * var context = {greeting: 'Hello', name: undefined };
- *
- * // default "forgiving" mode
- * var exp = $interpolate('{{greeting}} {{name}}!');
- * expect(exp(context)).toEqual('Hello !');
- *
- * // "allOrNothing" mode
- * exp = $interpolate('{{greeting}} {{name}}!', false, null, true);
- * expect(exp(context)).toBeUndefined();
- * context.name = 'Angular';
- * expect(exp(context)).toEqual('Hello Angular!');
- * ```
- *
- * `allOrNothing` is useful for interpolating URLs. `ngSrc` and `ngSrcset` use this behavior.
- *
- * ####Escaped Interpolation
- * $interpolate provides a mechanism for escaping interpolation markers. Start and end markers
- * can be escaped by preceding each of their characters with a REVERSE SOLIDUS U+005C (backslash).
- * It will be rendered as a regular start/end marker, and will not be interpreted as an expression
- * or binding.
- *
- * This enables web-servers to prevent script injection attacks and defacing attacks, to some
- * degree, while also enabling code examples to work without relying on the
- * {@link ng.directive:ngNonBindable ngNonBindable} directive.
- *
- * **For security purposes, it is strongly encouraged that web servers escape user-supplied data,
- * replacing angle brackets (&lt;, &gt;) with &amp;lt; and &amp;gt; respectively, and replacing all
- * interpolation start/end markers with their escaped counterparts.**
- *
- * Escaped interpolation markers are only replaced with the actual interpolation markers in rendered
- * output when the $interpolate service processes the text. So, for HTML elements interpolated
- * by {@link ng.$compile $compile}, or otherwise interpolated with the `mustHaveExpression` parameter
- * set to `true`, the interpolated text must contain an unescaped interpolation expression. As such,
- * this is typically useful only when user-data is used in rendering a template from the server, or
- * when otherwise untrusted data is used by a directive.
- *
- * <example>
- * <file name="index.html">
- * <div ng-init="username='A user'">
- * <p ng-init="apptitle='Escaping demo'">{{apptitle}}: \{\{ username = "defaced value"; \}\}
- * </p>
- * <p><strong>{{username}}</strong> attempts to inject code which will deface the
- * application, but fails to accomplish their task, because the server has correctly
- * escaped the interpolation start/end markers with REVERSE SOLIDUS U+005C (backslash)
- * characters.</p>
- * <p>Instead, the result of the attempted script injection is visible, and can be removed
- * from the database by an administrator.</p>
- * </div>
- * </file>
- * </example>
- *
- * @param {string} text The text with markup to interpolate.
- * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have
- * embedded expression in order to return an interpolation function. Strings with no
- * embedded expression will return null for the interpolation function.
- * @param {string=} trustedContext when provided, the returned function passes the interpolated
- * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult,
- * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that
- * provides Strict Contextual Escaping for details.
- * @param {boolean=} allOrNothing if `true`, then the returned function returns undefined
- * unless all embedded expressions evaluate to a value other than `undefined`.
- * @returns {function(context)} an interpolation function which is used to compute the
- * interpolated string. The function has these parameters:
- *
- * - `context`: evaluation context for all expressions embedded in the interpolated text
- */
- function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) {
- allOrNothing = !!allOrNothing;
- var startIndex,
- endIndex,
- index = 0,
- expressions = [],
- parseFns = [],
- textLength = text.length,
- exp,
- concat = [],
- expressionPositions = [];
-
- while (index < textLength) {
- if (((startIndex = text.indexOf(startSymbol, index)) != -1) &&
- ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1)) {
- if (index !== startIndex) {
- concat.push(unescapeText(text.substring(index, startIndex)));
- }
- exp = text.substring(startIndex + startSymbolLength, endIndex);
- expressions.push(exp);
- parseFns.push($parse(exp, parseStringifyInterceptor));
- index = endIndex + endSymbolLength;
- expressionPositions.push(concat.length);
- concat.push('');
- } else {
- // we did not find an interpolation, so we have to add the remainder to the separators array
- if (index !== textLength) {
- concat.push(unescapeText(text.substring(index)));
- }
- break;
- }
- }
-
- // Concatenating expressions makes it hard to reason about whether some combination of
- // concatenated values are unsafe to use and could easily lead to XSS. By requiring that a
- // single expression be used for iframe[src], object[src], etc., we ensure that the value
- // that's used is assigned or constructed by some JS code somewhere that is more testable or
- // make it obvious that you bound the value to some user controlled value. This helps reduce
- // the load when auditing for XSS issues.
- if (trustedContext && concat.length > 1) {
- throw $interpolateMinErr('noconcat',
- "Error while interpolating: {0}\nStrict Contextual Escaping disallows " +
- "interpolations that concatenate multiple expressions when a trusted value is " +
- "required. See http://docs.angularjs.org/api/ng.$sce", text);
- }
-
- if (!mustHaveExpression || expressions.length) {
- var compute = function(values) {
- for (var i = 0, ii = expressions.length; i < ii; i++) {
- if (allOrNothing && isUndefined(values[i])) return;
- concat[expressionPositions[i]] = values[i];
- }
- return concat.join('');
- };
-
- var getValue = function(value) {
- return trustedContext ?
- $sce.getTrusted(trustedContext, value) :
- $sce.valueOf(value);
- };
-
- var stringify = function(value) {
- if (value == null) { // null || undefined
- return '';
- }
- switch (typeof value) {
- case 'string':
- break;
- case 'number':
- value = '' + value;
- break;
- default:
- value = toJson(value);
- }
-
- return value;
- };
-
- return extend(function interpolationFn(context) {
- var i = 0;
- var ii = expressions.length;
- var values = new Array(ii);
-
- try {
- for (; i < ii; i++) {
- values[i] = parseFns[i](context);
- }
-
- return compute(values);
- } catch (err) {
- var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text,
- err.toString());
- $exceptionHandler(newErr);
- }
-
- }, {
- // all of these properties are undocumented for now
- exp: text, //just for compatibility with regular watchers created via $watch
- expressions: expressions,
- $$watchDelegate: function(scope, listener, objectEquality) {
- var lastValue;
- return scope.$watchGroup(parseFns, function interpolateFnWatcher(values, oldValues) {
- var currValue = compute(values);
- if (isFunction(listener)) {
- listener.call(this, currValue, values !== oldValues ? lastValue : currValue, scope);
- }
- lastValue = currValue;
- }, objectEquality);
- }
- });
- }
-
- function unescapeText(text) {
- return text.replace(escapedStartRegexp, startSymbol).
- replace(escapedEndRegexp, endSymbol);
- }
-
- function parseStringifyInterceptor(value) {
- try {
- value = getValue(value);
- return allOrNothing && !isDefined(value) ? value : stringify(value);
- } catch (err) {
- var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text,
- err.toString());
- $exceptionHandler(newErr);
- }
- }
- }
-
-
- /**
- * @ngdoc method
- * @name $interpolate#startSymbol
- * @description
- * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`.
- *
- * Use {@link ng.$interpolateProvider#startSymbol `$interpolateProvider.startSymbol`} to change
- * the symbol.
- *
- * @returns {string} start symbol.
- */
- $interpolate.startSymbol = function() {
- return startSymbol;
- };
-
-
- /**
- * @ngdoc method
- * @name $interpolate#endSymbol
- * @description
- * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
- *
- * Use {@link ng.$interpolateProvider#endSymbol `$interpolateProvider.endSymbol`} to change
- * the symbol.
- *
- * @returns {string} end symbol.
- */
- $interpolate.endSymbol = function() {
- return endSymbol;
- };
-
- return $interpolate;
- }];
-}
-
-function $IntervalProvider() {
- this.$get = ['$rootScope', '$window', '$q', '$$q',
- function($rootScope, $window, $q, $$q) {
- var intervals = {};
-
-
- /**
- * @ngdoc service
- * @name $interval
- *
- * @description
- * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay`
- * milliseconds.
- *
- * The return value of registering an interval function is a promise. This promise will be
- * notified upon each tick of the interval, and will be resolved after `count` iterations, or
- * run indefinitely if `count` is not defined. The value of the notification will be the
- * number of iterations that have run.
- * To cancel an interval, call `$interval.cancel(promise)`.
- *
- * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to
- * move forward by `millis` milliseconds and trigger any functions scheduled to run in that
- * time.
- *
- * <div class="alert alert-warning">
- * **Note**: Intervals created by this service must be explicitly destroyed when you are finished
- * with them. In particular they are not automatically destroyed when a controller's scope or a
- * directive's element are destroyed.
- * You should take this into consideration and make sure to always cancel the interval at the
- * appropriate moment. See the example below for more details on how and when to do this.
- * </div>
- *
- * @param {function()} fn A function that should be called repeatedly.
- * @param {number} delay Number of milliseconds between each function call.
- * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat
- * indefinitely.
- * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
- * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
- * @returns {promise} A promise which will be notified on each iteration.
- *
- * @example
- * <example module="intervalExample">
- * <file name="index.html">
- * <script>
- * angular.module('intervalExample', [])
- * .controller('ExampleController', ['$scope', '$interval',
- * function($scope, $interval) {
- * $scope.format = 'M/d/yy h:mm:ss a';
- * $scope.blood_1 = 100;
- * $scope.blood_2 = 120;
- *
- * var stop;
- * $scope.fight = function() {
- * // Don't start a new fight if we are already fighting
- * if ( angular.isDefined(stop) ) return;
- *
- * stop = $interval(function() {
- * if ($scope.blood_1 > 0 && $scope.blood_2 > 0) {
- * $scope.blood_1 = $scope.blood_1 - 3;
- * $scope.blood_2 = $scope.blood_2 - 4;
- * } else {
- * $scope.stopFight();
- * }
- * }, 100);
- * };
- *
- * $scope.stopFight = function() {
- * if (angular.isDefined(stop)) {
- * $interval.cancel(stop);
- * stop = undefined;
- * }
- * };
- *
- * $scope.resetFight = function() {
- * $scope.blood_1 = 100;
- * $scope.blood_2 = 120;
- * };
- *
- * $scope.$on('$destroy', function() {
- * // Make sure that the interval is destroyed too
- * $scope.stopFight();
- * });
- * }])
- * // Register the 'myCurrentTime' directive factory method.
- * // We inject $interval and dateFilter service since the factory method is DI.
- * .directive('myCurrentTime', ['$interval', 'dateFilter',
- * function($interval, dateFilter) {
- * // return the directive link function. (compile function not needed)
- * return function(scope, element, attrs) {
- * var format, // date format
- * stopTime; // so that we can cancel the time updates
- *
- * // used to update the UI
- * function updateTime() {
- * element.text(dateFilter(new Date(), format));
- * }
- *
- * // watch the expression, and update the UI on change.
- * scope.$watch(attrs.myCurrentTime, function(value) {
- * format = value;
- * updateTime();
- * });
- *
- * stopTime = $interval(updateTime, 1000);
- *
- * // listen on DOM destroy (removal) event, and cancel the next UI update
- * // to prevent updating time after the DOM element was removed.
- * element.on('$destroy', function() {
- * $interval.cancel(stopTime);
- * });
- * }
- * }]);
- * </script>
- *
- * <div>
- * <div ng-controller="ExampleController">
- * Date format: <input ng-model="format"> <hr/>
- * Current time is: <span my-current-time="format"></span>
- * <hr/>
- * Blood 1 : <font color='red'>{{blood_1}}</font>
- * Blood 2 : <font color='red'>{{blood_2}}</font>
- * <button type="button" data-ng-click="fight()">Fight</button>
- * <button type="button" data-ng-click="stopFight()">StopFight</button>
- * <button type="button" data-ng-click="resetFight()">resetFight</button>
- * </div>
- * </div>
- *
- * </file>
- * </example>
- */
- function interval(fn, delay, count, invokeApply) {
- var setInterval = $window.setInterval,
- clearInterval = $window.clearInterval,
- iteration = 0,
- skipApply = (isDefined(invokeApply) && !invokeApply),
- deferred = (skipApply ? $$q : $q).defer(),
- promise = deferred.promise;
-
- count = isDefined(count) ? count : 0;
-
- promise.then(null, null, fn);
-
- promise.$$intervalId = setInterval(function tick() {
- deferred.notify(iteration++);
-
- if (count > 0 && iteration >= count) {
- deferred.resolve(iteration);
- clearInterval(promise.$$intervalId);
- delete intervals[promise.$$intervalId];
- }
-
- if (!skipApply) $rootScope.$apply();
-
- }, delay);
-
- intervals[promise.$$intervalId] = deferred;
-
- return promise;
- }
-
-
- /**
- * @ngdoc method
- * @name $interval#cancel
- *
- * @description
- * Cancels a task associated with the `promise`.
- *
- * @param {promise} promise returned by the `$interval` function.
- * @returns {boolean} Returns `true` if the task was successfully canceled.
- */
- interval.cancel = function(promise) {
- if (promise && promise.$$intervalId in intervals) {
- intervals[promise.$$intervalId].reject('canceled');
- $window.clearInterval(promise.$$intervalId);
- delete intervals[promise.$$intervalId];
- return true;
- }
- return false;
- };
-
- return interval;
- }];
-}
-
-/**
- * @ngdoc service
- * @name $locale
- *
- * @description
- * $locale service provides localization rules for various Angular components. As of right now the
- * only public api is:
- *
- * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)
- */
-function $LocaleProvider() {
- this.$get = function() {
- return {
- id: 'en-us',
-
- NUMBER_FORMATS: {
- DECIMAL_SEP: '.',
- GROUP_SEP: ',',
- PATTERNS: [
- { // Decimal Pattern
- minInt: 1,
- minFrac: 0,
- maxFrac: 3,
- posPre: '',
- posSuf: '',
- negPre: '-',
- negSuf: '',
- gSize: 3,
- lgSize: 3
- },{ //Currency Pattern
- minInt: 1,
- minFrac: 2,
- maxFrac: 2,
- posPre: '\u00A4',
- posSuf: '',
- negPre: '(\u00A4',
- negSuf: ')',
- gSize: 3,
- lgSize: 3
- }
- ],
- CURRENCY_SYM: '$'
- },
-
- DATETIME_FORMATS: {
- MONTH:
- 'January,February,March,April,May,June,July,August,September,October,November,December'
- .split(','),
- SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),
- DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),
- SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','),
- AMPMS: ['AM','PM'],
- medium: 'MMM d, y h:mm:ss a',
- 'short': 'M/d/yy h:mm a',
- fullDate: 'EEEE, MMMM d, y',
- longDate: 'MMMM d, y',
- mediumDate: 'MMM d, y',
- shortDate: 'M/d/yy',
- mediumTime: 'h:mm:ss a',
- shortTime: 'h:mm a'
- },
-
- pluralCat: function(num) {
- if (num === 1) {
- return 'one';
- }
- return 'other';
- }
- };
- };
-}
-
-var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
- DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};
-var $locationMinErr = minErr('$location');
-
-
-/**
- * Encode path using encodeUriSegment, ignoring forward slashes
- *
- * @param {string} path Path to encode
- * @returns {string}
- */
-function encodePath(path) {
- var segments = path.split('/'),
- i = segments.length;
-
- while (i--) {
- segments[i] = encodeUriSegment(segments[i]);
- }
-
- return segments.join('/');
-}
-
-function parseAbsoluteUrl(absoluteUrl, locationObj) {
- var parsedUrl = urlResolve(absoluteUrl);
-
- locationObj.$$protocol = parsedUrl.protocol;
- locationObj.$$host = parsedUrl.hostname;
- locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;
-}
-
-
-function parseAppUrl(relativeUrl, locationObj) {
- var prefixed = (relativeUrl.charAt(0) !== '/');
- if (prefixed) {
- relativeUrl = '/' + relativeUrl;
- }
- var match = urlResolve(relativeUrl);
- locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ?
- match.pathname.substring(1) : match.pathname);
- locationObj.$$search = parseKeyValue(match.search);
- locationObj.$$hash = decodeURIComponent(match.hash);
-
- // make sure path starts with '/';
- if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') {
- locationObj.$$path = '/' + locationObj.$$path;
- }
-}
-
-
-/**
- *
- * @param {string} begin
- * @param {string} whole
- * @returns {string} returns text from whole after begin or undefined if it does not begin with
- * expected string.
- */
-function beginsWith(begin, whole) {
- if (whole.indexOf(begin) === 0) {
- return whole.substr(begin.length);
- }
-}
-
-
-function stripHash(url) {
- var index = url.indexOf('#');
- return index == -1 ? url : url.substr(0, index);
-}
-
-
-function stripFile(url) {
- return url.substr(0, stripHash(url).lastIndexOf('/') + 1);
-}
-
-/* return the server only (scheme://host:port) */
-function serverBase(url) {
- return url.substring(0, url.indexOf('/', url.indexOf('//') + 2));
-}
-
-
-/**
- * LocationHtml5Url represents an url
- * This object is exposed as $location service when HTML5 mode is enabled and supported
- *
- * @constructor
- * @param {string} appBase application base URL
- * @param {string} basePrefix url path prefix
- */
-function LocationHtml5Url(appBase, basePrefix) {
- this.$$html5 = true;
- basePrefix = basePrefix || '';
- var appBaseNoFile = stripFile(appBase);
- parseAbsoluteUrl(appBase, this);
-
-
- /**
- * Parse given html5 (regular) url string into properties
- * @param {string} url HTML5 url
- * @private
- */
- this.$$parse = function(url) {
- var pathUrl = beginsWith(appBaseNoFile, url);
- if (!isString(pathUrl)) {
- throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url,
- appBaseNoFile);
- }
-
- parseAppUrl(pathUrl, this);
-
- if (!this.$$path) {
- this.$$path = '/';
- }
-
- this.$$compose();
- };
-
- /**
- * Compose url and update `absUrl` property
- * @private
- */
- this.$$compose = function() {
- var search = toKeyValue(this.$$search),
- hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
-
- this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
- this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/'
- };
-
- this.$$parseLinkUrl = function(url, relHref) {
- if (relHref && relHref[0] === '#') {
- // special case for links to hash fragments:
- // keep the old url and only replace the hash fragment
- this.hash(relHref.slice(1));
- return true;
- }
- var appUrl, prevAppUrl;
- var rewrittenUrl;
-
- if ((appUrl = beginsWith(appBase, url)) !== undefined) {
- prevAppUrl = appUrl;
- if ((appUrl = beginsWith(basePrefix, appUrl)) !== undefined) {
- rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl);
- } else {
- rewrittenUrl = appBase + prevAppUrl;
- }
- } else if ((appUrl = beginsWith(appBaseNoFile, url)) !== undefined) {
- rewrittenUrl = appBaseNoFile + appUrl;
- } else if (appBaseNoFile == url + '/') {
- rewrittenUrl = appBaseNoFile;
- }
- if (rewrittenUrl) {
- this.$$parse(rewrittenUrl);
- }
- return !!rewrittenUrl;
- };
-}
-
-
-/**
- * LocationHashbangUrl represents url
- * This object is exposed as $location service when developer doesn't opt into html5 mode.
- * It also serves as the base class for html5 mode fallback on legacy browsers.
- *
- * @constructor
- * @param {string} appBase application base URL
- * @param {string} hashPrefix hashbang prefix
- */
-function LocationHashbangUrl(appBase, hashPrefix) {
- var appBaseNoFile = stripFile(appBase);
-
- parseAbsoluteUrl(appBase, this);
-
-
- /**
- * Parse given hashbang url into properties
- * @param {string} url Hashbang url
- * @private
- */
- this.$$parse = function(url) {
- var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url);
- var withoutHashUrl = withoutBaseUrl.charAt(0) == '#'
- ? beginsWith(hashPrefix, withoutBaseUrl)
- : (this.$$html5)
- ? withoutBaseUrl
- : '';
-
- if (!isString(withoutHashUrl)) {
- throw $locationMinErr('ihshprfx', 'Invalid url "{0}", missing hash prefix "{1}".', url,
- hashPrefix);
- }
- parseAppUrl(withoutHashUrl, this);
-
- this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase);
-
- this.$$compose();
-
- /*
- * In Windows, on an anchor node on documents loaded from
- * the filesystem, the browser will return a pathname
- * prefixed with the drive name ('/C:/path') when a
- * pathname without a drive is set:
- * * a.setAttribute('href', '/foo')
- * * a.pathname === '/C:/foo' //true
- *
- * Inside of Angular, we're always using pathnames that
- * do not include drive names for routing.
- */
- function removeWindowsDriveName(path, url, base) {
- /*
- Matches paths for file protocol on windows,
- such as /C:/foo/bar, and captures only /foo/bar.
- */
- var windowsFilePathExp = /^\/[A-Z]:(\/.*)/;
-
- var firstPathSegmentMatch;
-
- //Get the relative path from the input URL.
- if (url.indexOf(base) === 0) {
- url = url.replace(base, '');
- }
-
- // The input URL intentionally contains a first path segment that ends with a colon.
- if (windowsFilePathExp.exec(url)) {
- return path;
- }
-
- firstPathSegmentMatch = windowsFilePathExp.exec(path);
- return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path;
- }
- };
-
- /**
- * Compose hashbang url and update `absUrl` property
- * @private
- */
- this.$$compose = function() {
- var search = toKeyValue(this.$$search),
- hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
-
- this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
- this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : '');
- };
-
- this.$$parseLinkUrl = function(url, relHref) {
- if (stripHash(appBase) == stripHash(url)) {
- this.$$parse(url);
- return true;
- }
- return false;
- };
-}
-
-
-/**
- * LocationHashbangUrl represents url
- * This object is exposed as $location service when html5 history api is enabled but the browser
- * does not support it.
- *
- * @constructor
- * @param {string} appBase application base URL
- * @param {string} hashPrefix hashbang prefix
- */
-function LocationHashbangInHtml5Url(appBase, hashPrefix) {
- this.$$html5 = true;
- LocationHashbangUrl.apply(this, arguments);
-
- var appBaseNoFile = stripFile(appBase);
-
- this.$$parseLinkUrl = function(url, relHref) {
- if (relHref && relHref[0] === '#') {
- // special case for links to hash fragments:
- // keep the old url and only replace the hash fragment
- this.hash(relHref.slice(1));
- return true;
- }
-
- var rewrittenUrl;
- var appUrl;
-
- if (appBase == stripHash(url)) {
- rewrittenUrl = url;
- } else if ((appUrl = beginsWith(appBaseNoFile, url))) {
- rewrittenUrl = appBase + hashPrefix + appUrl;
- } else if (appBaseNoFile === url + '/') {
- rewrittenUrl = appBaseNoFile;
- }
- if (rewrittenUrl) {
- this.$$parse(rewrittenUrl);
- }
- return !!rewrittenUrl;
- };
-
- this.$$compose = function() {
- var search = toKeyValue(this.$$search),
- hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
-
- this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
- // include hashPrefix in $$absUrl when $$url is empty so IE8 & 9 do not reload page because of removal of '#'
- this.$$absUrl = appBase + hashPrefix + this.$$url;
- };
-
-}
-
-
-var locationPrototype = {
-
- /**
- * Are we in html5 mode?
- * @private
- */
- $$html5: false,
-
- /**
- * Has any change been replacing?
- * @private
- */
- $$replace: false,
-
- /**
- * @ngdoc method
- * @name $location#absUrl
- *
- * @description
- * This method is getter only.
- *
- * Return full url representation with all segments encoded according to rules specified in
- * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt).
- *
- *
- * ```js
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
- * var absUrl = $location.absUrl();
- * // => "http://example.com/#/some/path?foo=bar&baz=xoxo"
- * ```
- *
- * @return {string} full url
- */
- absUrl: locationGetter('$$absUrl'),
-
- /**
- * @ngdoc method
- * @name $location#url
- *
- * @description
- * This method is getter / setter.
- *
- * Return url (e.g. `/path?a=b#hash`) when called without any parameter.
- *
- * Change path, search and hash, when called with parameter and return `$location`.
- *
- *
- * ```js
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
- * var url = $location.url();
- * // => "/some/path?foo=bar&baz=xoxo"
- * ```
- *
- * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)
- * @return {string} url
- */
- url: function(url) {
- if (isUndefined(url))
- return this.$$url;
-
- var match = PATH_MATCH.exec(url);
- if (match[1] || url === '') this.path(decodeURIComponent(match[1]));
- if (match[2] || match[1] || url === '') this.search(match[3] || '');
- this.hash(match[5] || '');
-
- return this;
- },
-
- /**
- * @ngdoc method
- * @name $location#protocol
- *
- * @description
- * This method is getter only.
- *
- * Return protocol of current url.
- *
- *
- * ```js
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
- * var protocol = $location.protocol();
- * // => "http"
- * ```
- *
- * @return {string} protocol of current url
- */
- protocol: locationGetter('$$protocol'),
-
- /**
- * @ngdoc method
- * @name $location#host
- *
- * @description
- * This method is getter only.
- *
- * Return host of current url.
- *
- *
- * ```js
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
- * var host = $location.host();
- * // => "example.com"
- * ```
- *
- * @return {string} host of current url.
- */
- host: locationGetter('$$host'),
-
- /**
- * @ngdoc method
- * @name $location#port
- *
- * @description
- * This method is getter only.
- *
- * Return port of current url.
- *
- *
- * ```js
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
- * var port = $location.port();
- * // => 80
- * ```
- *
- * @return {Number} port
- */
- port: locationGetter('$$port'),
-
- /**
- * @ngdoc method
- * @name $location#path
- *
- * @description
- * This method is getter / setter.
- *
- * Return path of current url when called without any parameter.
- *
- * Change path when called with parameter and return `$location`.
- *
- * Note: Path should always begin with forward slash (/), this method will add the forward slash
- * if it is missing.
- *
- *
- * ```js
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
- * var path = $location.path();
- * // => "/some/path"
- * ```
- *
- * @param {(string|number)=} path New path
- * @return {string} path
- */
- path: locationGetterSetter('$$path', function(path) {
- path = path !== null ? path.toString() : '';
- return path.charAt(0) == '/' ? path : '/' + path;
- }),
-
- /**
- * @ngdoc method
- * @name $location#search
- *
- * @description
- * This method is getter / setter.
- *
- * Return search part (as object) of current url when called without any parameter.
- *
- * Change search part when called with parameter and return `$location`.
- *
- *
- * ```js
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
- * var searchObject = $location.search();
- * // => {foo: 'bar', baz: 'xoxo'}
- *
- * // set foo to 'yipee'
- * $location.search('foo', 'yipee');
- * // $location.search() => {foo: 'yipee', baz: 'xoxo'}
- * ```
- *
- * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or
- * hash object.
- *
- * When called with a single argument the method acts as a setter, setting the `search` component
- * of `$location` to the specified value.
- *
- * If the argument is a hash object containing an array of values, these values will be encoded
- * as duplicate search parameters in the url.
- *
- * @param {(string|Number|Array<string>|boolean)=} paramValue If `search` is a string or number, then `paramValue`
- * will override only a single search property.
- *
- * If `paramValue` is an array, it will override the property of the `search` component of
- * `$location` specified via the first argument.
- *
- * If `paramValue` is `null`, the property specified via the first argument will be deleted.
- *
- * If `paramValue` is `true`, the property specified via the first argument will be added with no
- * value nor trailing equal sign.
- *
- * @return {Object} If called with no arguments returns the parsed `search` object. If called with
- * one or more arguments returns `$location` object itself.
- */
- search: function(search, paramValue) {
- switch (arguments.length) {
- case 0:
- return this.$$search;
- case 1:
- if (isString(search) || isNumber(search)) {
- search = search.toString();
- this.$$search = parseKeyValue(search);
- } else if (isObject(search)) {
- search = copy(search, {});
- // remove object undefined or null properties
- forEach(search, function(value, key) {
- if (value == null) delete search[key];
- });
-
- this.$$search = search;
- } else {
- throw $locationMinErr('isrcharg',
- 'The first argument of the `$location#search()` call must be a string or an object.');
- }
- break;
- default:
- if (isUndefined(paramValue) || paramValue === null) {
- delete this.$$search[search];
- } else {
- this.$$search[search] = paramValue;
- }
- }
-
- this.$$compose();
- return this;
- },
-
- /**
- * @ngdoc method
- * @name $location#hash
- *
- * @description
- * This method is getter / setter.
- *
- * Return hash fragment when called without any parameter.
- *
- * Change hash fragment when called with parameter and return `$location`.
- *
- *
- * ```js
- * // given url http://example.com/some/path?foo=bar&baz=xoxo#hashValue
- * var hash = $location.hash();
- * // => "hashValue"
- * ```
- *
- * @param {(string|number)=} hash New hash fragment
- * @return {string} hash
- */
- hash: locationGetterSetter('$$hash', function(hash) {
- return hash !== null ? hash.toString() : '';
- }),
-
- /**
- * @ngdoc method
- * @name $location#replace
- *
- * @description
- * If called, all changes to $location during current `$digest` will be replacing current history
- * record, instead of adding new one.
- */
- replace: function() {
- this.$$replace = true;
- return this;
- }
-};
-
-forEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], function(Location) {
- Location.prototype = Object.create(locationPrototype);
-
- /**
- * @ngdoc method
- * @name $location#state
- *
- * @description
- * This method is getter / setter.
- *
- * Return the history state object when called without any parameter.
- *
- * Change the history state object when called with one parameter and return `$location`.
- * The state object is later passed to `pushState` or `replaceState`.
- *
- * NOTE: This method is supported only in HTML5 mode and only in browsers supporting
- * the HTML5 History API (i.e. methods `pushState` and `replaceState`). If you need to support
- * older browsers (like IE9 or Android < 4.0), don't use this method.
- *
- * @param {object=} state State object for pushState or replaceState
- * @return {object} state
- */
- Location.prototype.state = function(state) {
- if (!arguments.length)
- return this.$$state;
-
- if (Location !== LocationHtml5Url || !this.$$html5) {
- throw $locationMinErr('nostate', 'History API state support is available only ' +
- 'in HTML5 mode and only in browsers supporting HTML5 History API');
- }
- // The user might modify `stateObject` after invoking `$location.state(stateObject)`
- // but we're changing the $$state reference to $browser.state() during the $digest
- // so the modification window is narrow.
- this.$$state = isUndefined(state) ? null : state;
-
- return this;
- };
-});
-
-
-function locationGetter(property) {
- return function() {
- return this[property];
- };
-}
-
-
-function locationGetterSetter(property, preprocess) {
- return function(value) {
- if (isUndefined(value))
- return this[property];
-
- this[property] = preprocess(value);
- this.$$compose();
-
- return this;
- };
-}
-
-
-/**
- * @ngdoc service
- * @name $location
- *
- * @requires $rootElement
- *
- * @description
- * The $location service parses the URL in the browser address bar (based on the
- * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL
- * available to your application. Changes to the URL in the address bar are reflected into
- * $location service and changes to $location are reflected into the browser address bar.
- *
- * **The $location service:**
- *
- * - Exposes the current URL in the browser address bar, so you can
- * - Watch and observe the URL.
- * - Change the URL.
- * - Synchronizes the URL with the browser when the user
- * - Changes the address bar.
- * - Clicks the back or forward button (or clicks a History link).
- * - Clicks on a link.
- * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash).
- *
- * For more information see {@link guide/$location Developer Guide: Using $location}
- */
-
-/**
- * @ngdoc provider
- * @name $locationProvider
- * @description
- * Use the `$locationProvider` to configure how the application deep linking paths are stored.
- */
-function $LocationProvider() {
- var hashPrefix = '',
- html5Mode = {
- enabled: false,
- requireBase: true,
- rewriteLinks: true
- };
-
- /**
- * @ngdoc method
- * @name $locationProvider#hashPrefix
- * @description
- * @param {string=} prefix Prefix for hash part (containing path and search)
- * @returns {*} current value if used as getter or itself (chaining) if used as setter
- */
- this.hashPrefix = function(prefix) {
- if (isDefined(prefix)) {
- hashPrefix = prefix;
- return this;
- } else {
- return hashPrefix;
- }
- };
-
- /**
- * @ngdoc method
- * @name $locationProvider#html5Mode
- * @description
- * @param {(boolean|Object)=} mode If boolean, sets `html5Mode.enabled` to value.
- * If object, sets `enabled`, `requireBase` and `rewriteLinks` to respective values. Supported
- * properties:
- * - **enabled** – `{boolean}` – (default: false) If true, will rely on `history.pushState` to
- * change urls where supported. Will fall back to hash-prefixed paths in browsers that do not
- * support `pushState`.
- * - **requireBase** - `{boolean}` - (default: `true`) When html5Mode is enabled, specifies
- * whether or not a <base> tag is required to be present. If `enabled` and `requireBase` are
- * true, and a base tag is not present, an error will be thrown when `$location` is injected.
- * See the {@link guide/$location $location guide for more information}
- * - **rewriteLinks** - `{boolean}` - (default: `true`) When html5Mode is enabled,
- * enables/disables url rewriting for relative links.
- *
- * @returns {Object} html5Mode object if used as getter or itself (chaining) if used as setter
- */
- this.html5Mode = function(mode) {
- if (isBoolean(mode)) {
- html5Mode.enabled = mode;
- return this;
- } else if (isObject(mode)) {
-
- if (isBoolean(mode.enabled)) {
- html5Mode.enabled = mode.enabled;
- }
-
- if (isBoolean(mode.requireBase)) {
- html5Mode.requireBase = mode.requireBase;
- }
-
- if (isBoolean(mode.rewriteLinks)) {
- html5Mode.rewriteLinks = mode.rewriteLinks;
- }
-
- return this;
- } else {
- return html5Mode;
- }
- };
-
- /**
- * @ngdoc event
- * @name $location#$locationChangeStart
- * @eventType broadcast on root scope
- * @description
- * Broadcasted before a URL will change.
- *
- * This change can be prevented by calling
- * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more
- * details about event object. Upon successful change
- * {@link ng.$location#$locationChangeSuccess $locationChangeSuccess} is fired.
- *
- * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when
- * the browser supports the HTML5 History API.
- *
- * @param {Object} angularEvent Synthetic event object.
- * @param {string} newUrl New URL
- * @param {string=} oldUrl URL that was before it was changed.
- * @param {string=} newState New history state object
- * @param {string=} oldState History state object that was before it was changed.
- */
-
- /**
- * @ngdoc event
- * @name $location#$locationChangeSuccess
- * @eventType broadcast on root scope
- * @description
- * Broadcasted after a URL was changed.
- *
- * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when
- * the browser supports the HTML5 History API.
- *
- * @param {Object} angularEvent Synthetic event object.
- * @param {string} newUrl New URL
- * @param {string=} oldUrl URL that was before it was changed.
- * @param {string=} newState New history state object
- * @param {string=} oldState History state object that was before it was changed.
- */
-
- this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement',
- function($rootScope, $browser, $sniffer, $rootElement) {
- var $location,
- LocationMode,
- baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''
- initialUrl = $browser.url(),
- appBase;
-
- if (html5Mode.enabled) {
- if (!baseHref && html5Mode.requireBase) {
- throw $locationMinErr('nobase',
- "$location in HTML5 mode requires a <base> tag to be present!");
- }
- appBase = serverBase(initialUrl) + (baseHref || '/');
- LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;
- } else {
- appBase = stripHash(initialUrl);
- LocationMode = LocationHashbangUrl;
- }
- $location = new LocationMode(appBase, '#' + hashPrefix);
- $location.$$parseLinkUrl(initialUrl, initialUrl);
-
- $location.$$state = $browser.state();
-
- var IGNORE_URI_REGEXP = /^\s*(javascript|mailto):/i;
-
- function setBrowserUrlWithFallback(url, replace, state) {
- var oldUrl = $location.url();
- var oldState = $location.$$state;
- try {
- $browser.url(url, replace, state);
-
- // Make sure $location.state() returns referentially identical (not just deeply equal)
- // state object; this makes possible quick checking if the state changed in the digest
- // loop. Checking deep equality would be too expensive.
- $location.$$state = $browser.state();
- } catch (e) {
- // Restore old values if pushState fails
- $location.url(oldUrl);
- $location.$$state = oldState;
-
- throw e;
- }
- }
-
- $rootElement.on('click', function(event) {
- // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)
- // currently we open nice url link and redirect then
-
- if (!html5Mode.rewriteLinks || event.ctrlKey || event.metaKey || event.which == 2) return;
-
- var elm = jqLite(event.target);
-
- // traverse the DOM up to find first A tag
- while (nodeName_(elm[0]) !== 'a') {
- // ignore rewriting if no A tag (reached root element, or no parent - removed from document)
- if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;
- }
-
- var absHref = elm.prop('href');
- // get the actual href attribute - see
- // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx
- var relHref = elm.attr('href') || elm.attr('xlink:href');
-
- if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') {
- // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during
- // an animation.
- absHref = urlResolve(absHref.animVal).href;
- }
-
- // Ignore when url is started with javascript: or mailto:
- if (IGNORE_URI_REGEXP.test(absHref)) return;
-
- if (absHref && !elm.attr('target') && !event.isDefaultPrevented()) {
- if ($location.$$parseLinkUrl(absHref, relHref)) {
- // We do a preventDefault for all urls that are part of the angular application,
- // in html5mode and also without, so that we are able to abort navigation without
- // getting double entries in the location history.
- event.preventDefault();
- // update location manually
- if ($location.absUrl() != $browser.url()) {
- $rootScope.$apply();
- // hack to work around FF6 bug 684208 when scenario runner clicks on links
- window.angular['ff-684208-preventDefault'] = true;
- }
- }
- }
- });
-
-
- // rewrite hashbang url <> html5 url
- if ($location.absUrl() != initialUrl) {
- $browser.url($location.absUrl(), true);
- }
-
- var initializing = true;
-
- // update $location when $browser url changes
- $browser.onUrlChange(function(newUrl, newState) {
- $rootScope.$evalAsync(function() {
- var oldUrl = $location.absUrl();
- var oldState = $location.$$state;
- var defaultPrevented;
-
- $location.$$parse(newUrl);
- $location.$$state = newState;
-
- defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,
- newState, oldState).defaultPrevented;
-
- // if the location was changed by a `$locationChangeStart` handler then stop
- // processing this location change
- if ($location.absUrl() !== newUrl) return;
-
- if (defaultPrevented) {
- $location.$$parse(oldUrl);
- $location.$$state = oldState;
- setBrowserUrlWithFallback(oldUrl, false, oldState);
- } else {
- initializing = false;
- afterLocationChange(oldUrl, oldState);
- }
- });
- if (!$rootScope.$$phase) $rootScope.$digest();
- });
-
- // update browser
- $rootScope.$watch(function $locationWatch() {
- var oldUrl = $browser.url();
- var oldState = $browser.state();
- var currentReplace = $location.$$replace;
- var urlOrStateChanged = oldUrl !== $location.absUrl() ||
- ($location.$$html5 && $sniffer.history && oldState !== $location.$$state);
-
- if (initializing || urlOrStateChanged) {
- initializing = false;
-
- $rootScope.$evalAsync(function() {
- var newUrl = $location.absUrl();
- var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,
- $location.$$state, oldState).defaultPrevented;
-
- // if the location was changed by a `$locationChangeStart` handler then stop
- // processing this location change
- if ($location.absUrl() !== newUrl) return;
-
- if (defaultPrevented) {
- $location.$$parse(oldUrl);
- $location.$$state = oldState;
- } else {
- if (urlOrStateChanged) {
- setBrowserUrlWithFallback(newUrl, currentReplace,
- oldState === $location.$$state ? null : $location.$$state);
- }
- afterLocationChange(oldUrl, oldState);
- }
- });
- }
-
- $location.$$replace = false;
-
- // we don't need to return anything because $evalAsync will make the digest loop dirty when
- // there is a change
- });
-
- return $location;
-
- function afterLocationChange(oldUrl, oldState) {
- $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl,
- $location.$$state, oldState);
- }
-}];
-}
-
-/**
- * @ngdoc service
- * @name $log
- * @requires $window
- *
- * @description
- * Simple service for logging. Default implementation safely writes the message
- * into the browser's console (if present).
- *
- * The main purpose of this service is to simplify debugging and troubleshooting.
- *
- * The default is to log `debug` messages. You can use
- * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this.
- *
- * @example
- <example module="logExample">
- <file name="script.js">
- angular.module('logExample', [])
- .controller('LogController', ['$scope', '$log', function($scope, $log) {
- $scope.$log = $log;
- $scope.message = 'Hello World!';
- }]);
- </file>
- <file name="index.html">
- <div ng-controller="LogController">
- <p>Reload this page with open console, enter text and hit the log button...</p>
- Message:
- <input type="text" ng-model="message"/>
- <button ng-click="$log.log(message)">log</button>
- <button ng-click="$log.warn(message)">warn</button>
- <button ng-click="$log.info(message)">info</button>
- <button ng-click="$log.error(message)">error</button>
- </div>
- </file>
- </example>
- */
-
-/**
- * @ngdoc provider
- * @name $logProvider
- * @description
- * Use the `$logProvider` to configure how the application logs messages
- */
-function $LogProvider() {
- var debug = true,
- self = this;
-
- /**
- * @ngdoc method
- * @name $logProvider#debugEnabled
- * @description
- * @param {boolean=} flag enable or disable debug level messages
- * @returns {*} current value if used as getter or itself (chaining) if used as setter
- */
- this.debugEnabled = function(flag) {
- if (isDefined(flag)) {
- debug = flag;
- return this;
- } else {
- return debug;
- }
- };
-
- this.$get = ['$window', function($window) {
- return {
- /**
- * @ngdoc method
- * @name $log#log
- *
- * @description
- * Write a log message
- */
- log: consoleLog('log'),
-
- /**
- * @ngdoc method
- * @name $log#info
- *
- * @description
- * Write an information message
- */
- info: consoleLog('info'),
-
- /**
- * @ngdoc method
- * @name $log#warn
- *
- * @description
- * Write a warning message
- */
- warn: consoleLog('warn'),
-
- /**
- * @ngdoc method
- * @name $log#error
- *
- * @description
- * Write an error message
- */
- error: consoleLog('error'),
-
- /**
- * @ngdoc method
- * @name $log#debug
- *
- * @description
- * Write a debug message
- */
- debug: (function() {
- var fn = consoleLog('debug');
-
- return function() {
- if (debug) {
- fn.apply(self, arguments);
- }
- };
- }())
- };
-
- function formatError(arg) {
- if (arg instanceof Error) {
- if (arg.stack) {
- arg = (arg.message && arg.stack.indexOf(arg.message) === -1)
- ? 'Error: ' + arg.message + '\n' + arg.stack
- : arg.stack;
- } else if (arg.sourceURL) {
- arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line;
- }
- }
- return arg;
- }
-
- function consoleLog(type) {
- var console = $window.console || {},
- logFn = console[type] || console.log || noop,
- hasApply = false;
-
- // Note: reading logFn.apply throws an error in IE11 in IE8 document mode.
- // The reason behind this is that console.log has type "object" in IE8...
- try {
- hasApply = !!logFn.apply;
- } catch (e) {}
-
- if (hasApply) {
- return function() {
- var args = [];
- forEach(arguments, function(arg) {
- args.push(formatError(arg));
- });
- return logFn.apply(console, args);
- };
- }
-
- // we are IE which either doesn't have window.console => this is noop and we do nothing,
- // or we are IE where console.log doesn't have apply so we log at least first 2 args
- return function(arg1, arg2) {
- logFn(arg1, arg2 == null ? '' : arg2);
- };
- }
- }];
-}
-
-var $parseMinErr = minErr('$parse');
-
-// Sandboxing Angular Expressions
-// ------------------------------
-// Angular expressions are generally considered safe because these expressions only have direct
-// access to `$scope` and locals. However, one can obtain the ability to execute arbitrary JS code by
-// obtaining a reference to native JS functions such as the Function constructor.
-//
-// As an example, consider the following Angular expression:
-//
-// {}.toString.constructor('alert("evil JS code")')
-//
-// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits
-// against the expression language, but not to prevent exploits that were enabled by exposing
-// sensitive JavaScript or browser APIs on Scope. Exposing such objects on a Scope is never a good
-// practice and therefore we are not even trying to protect against interaction with an object
-// explicitly exposed in this way.
-//
-// In general, it is not possible to access a Window object from an angular expression unless a
-// window or some DOM object that has a reference to window is published onto a Scope.
-// Similarly we prevent invocations of function known to be dangerous, as well as assignments to
-// native objects.
-//
-// See https://docs.angularjs.org/guide/security
-
-
-function ensureSafeMemberName(name, fullExpression) {
- if (name === "__defineGetter__" || name === "__defineSetter__"
- || name === "__lookupGetter__" || name === "__lookupSetter__"
- || name === "__proto__") {
- throw $parseMinErr('isecfld',
- 'Attempting to access a disallowed field in Angular expressions! '
- + 'Expression: {0}', fullExpression);
- }
- return name;
-}
-
-function ensureSafeObject(obj, fullExpression) {
- // nifty check if obj is Function that is fast and works across iframes and other contexts
- if (obj) {
- if (obj.constructor === obj) {
- throw $parseMinErr('isecfn',
- 'Referencing Function in Angular expressions is disallowed! Expression: {0}',
- fullExpression);
- } else if (// isWindow(obj)
- obj.window === obj) {
- throw $parseMinErr('isecwindow',
- 'Referencing the Window in Angular expressions is disallowed! Expression: {0}',
- fullExpression);
- } else if (// isElement(obj)
- obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) {
- throw $parseMinErr('isecdom',
- 'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}',
- fullExpression);
- } else if (// block Object so that we can't get hold of dangerous Object.* methods
- obj === Object) {
- throw $parseMinErr('isecobj',
- 'Referencing Object in Angular expressions is disallowed! Expression: {0}',
- fullExpression);
- }
- }
- return obj;
-}
-
-var CALL = Function.prototype.call;
-var APPLY = Function.prototype.apply;
-var BIND = Function.prototype.bind;
-
-function ensureSafeFunction(obj, fullExpression) {
- if (obj) {
- if (obj.constructor === obj) {
- throw $parseMinErr('isecfn',
- 'Referencing Function in Angular expressions is disallowed! Expression: {0}',
- fullExpression);
- } else if (obj === CALL || obj === APPLY || obj === BIND) {
- throw $parseMinErr('isecff',
- 'Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}',
- fullExpression);
- }
- }
-}
-
-//Keyword constants
-var CONSTANTS = createMap();
-forEach({
- 'null': function() { return null; },
- 'true': function() { return true; },
- 'false': function() { return false; },
- 'undefined': function() {}
-}, function(constantGetter, name) {
- constantGetter.constant = constantGetter.literal = constantGetter.sharedGetter = true;
- CONSTANTS[name] = constantGetter;
-});
-
-//Not quite a constant, but can be lex/parsed the same
-CONSTANTS['this'] = function(self) { return self; };
-CONSTANTS['this'].sharedGetter = true;
-
-
-//Operators - will be wrapped by binaryFn/unaryFn/assignment/filter
-var OPERATORS = extend(createMap(), {
- '+':function(self, locals, a, b) {
- a=a(self, locals); b=b(self, locals);
- if (isDefined(a)) {
- if (isDefined(b)) {
- return a + b;
- }
- return a;
- }
- return isDefined(b) ? b : undefined;},
- '-':function(self, locals, a, b) {
- a=a(self, locals); b=b(self, locals);
- return (isDefined(a) ? a : 0) - (isDefined(b) ? b : 0);
- },
- '*':function(self, locals, a, b) {return a(self, locals) * b(self, locals);},
- '/':function(self, locals, a, b) {return a(self, locals) / b(self, locals);},
- '%':function(self, locals, a, b) {return a(self, locals) % b(self, locals);},
- '===':function(self, locals, a, b) {return a(self, locals) === b(self, locals);},
- '!==':function(self, locals, a, b) {return a(self, locals) !== b(self, locals);},
- '==':function(self, locals, a, b) {return a(self, locals) == b(self, locals);},
- '!=':function(self, locals, a, b) {return a(self, locals) != b(self, locals);},
- '<':function(self, locals, a, b) {return a(self, locals) < b(self, locals);},
- '>':function(self, locals, a, b) {return a(self, locals) > b(self, locals);},
- '<=':function(self, locals, a, b) {return a(self, locals) <= b(self, locals);},
- '>=':function(self, locals, a, b) {return a(self, locals) >= b(self, locals);},
- '&&':function(self, locals, a, b) {return a(self, locals) && b(self, locals);},
- '||':function(self, locals, a, b) {return a(self, locals) || b(self, locals);},
- '!':function(self, locals, a) {return !a(self, locals);},
-
- //Tokenized as operators but parsed as assignment/filters
- '=':true,
- '|':true
-});
-var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'};
-
-
-/////////////////////////////////////////
-
-
-/**
- * @constructor
- */
-var Lexer = function(options) {
- this.options = options;
-};
-
-Lexer.prototype = {
- constructor: Lexer,
-
- lex: function(text) {
- this.text = text;
- this.index = 0;
- this.tokens = [];
-
- while (this.index < this.text.length) {
- var ch = this.text.charAt(this.index);
- if (ch === '"' || ch === "'") {
- this.readString(ch);
- } else if (this.isNumber(ch) || ch === '.' && this.isNumber(this.peek())) {
- this.readNumber();
- } else if (this.isIdent(ch)) {
- this.readIdent();
- } else if (this.is(ch, '(){}[].,;:?')) {
- this.tokens.push({index: this.index, text: ch});
- this.index++;
- } else if (this.isWhitespace(ch)) {
- this.index++;
- } else {
- var ch2 = ch + this.peek();
- var ch3 = ch2 + this.peek(2);
- var op1 = OPERATORS[ch];
- var op2 = OPERATORS[ch2];
- var op3 = OPERATORS[ch3];
- if (op1 || op2 || op3) {
- var token = op3 ? ch3 : (op2 ? ch2 : ch);
- this.tokens.push({index: this.index, text: token, operator: true});
- this.index += token.length;
- } else {
- this.throwError('Unexpected next character ', this.index, this.index + 1);
- }
- }
- }
- return this.tokens;
- },
-
- is: function(ch, chars) {
- return chars.indexOf(ch) !== -1;
- },
-
- peek: function(i) {
- var num = i || 1;
- return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false;
- },
-
- isNumber: function(ch) {
- return ('0' <= ch && ch <= '9') && typeof ch === "string";
- },
-
- isWhitespace: function(ch) {
- // IE treats non-breaking space as \u00A0
- return (ch === ' ' || ch === '\r' || ch === '\t' ||
- ch === '\n' || ch === '\v' || ch === '\u00A0');
- },
-
- isIdent: function(ch) {
- return ('a' <= ch && ch <= 'z' ||
- 'A' <= ch && ch <= 'Z' ||
- '_' === ch || ch === '$');
- },
-
- isExpOperator: function(ch) {
- return (ch === '-' || ch === '+' || this.isNumber(ch));
- },
-
- throwError: function(error, start, end) {
- end = end || this.index;
- var colStr = (isDefined(start)
- ? 's ' + start + '-' + this.index + ' [' + this.text.substring(start, end) + ']'
- : ' ' + end);
- throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].',
- error, colStr, this.text);
- },
-
- readNumber: function() {
- var number = '';
- var start = this.index;
- while (this.index < this.text.length) {
- var ch = lowercase(this.text.charAt(this.index));
- if (ch == '.' || this.isNumber(ch)) {
- number += ch;
- } else {
- var peekCh = this.peek();
- if (ch == 'e' && this.isExpOperator(peekCh)) {
- number += ch;
- } else if (this.isExpOperator(ch) &&
- peekCh && this.isNumber(peekCh) &&
- number.charAt(number.length - 1) == 'e') {
- number += ch;
- } else if (this.isExpOperator(ch) &&
- (!peekCh || !this.isNumber(peekCh)) &&
- number.charAt(number.length - 1) == 'e') {
- this.throwError('Invalid exponent');
- } else {
- break;
- }
- }
- this.index++;
- }
- this.tokens.push({
- index: start,
- text: number,
- constant: true,
- value: Number(number)
- });
- },
-
- readIdent: function() {
- var start = this.index;
- while (this.index < this.text.length) {
- var ch = this.text.charAt(this.index);
- if (!(this.isIdent(ch) || this.isNumber(ch))) {
- break;
- }
- this.index++;
- }
- this.tokens.push({
- index: start,
- text: this.text.slice(start, this.index),
- identifier: true
- });
- },
-
- readString: function(quote) {
- var start = this.index;
- this.index++;
- var string = '';
- var rawString = quote;
- var escape = false;
- while (this.index < this.text.length) {
- var ch = this.text.charAt(this.index);
- rawString += ch;
- if (escape) {
- if (ch === 'u') {
- var hex = this.text.substring(this.index + 1, this.index + 5);
- if (!hex.match(/[\da-f]{4}/i))
- this.throwError('Invalid unicode escape [\\u' + hex + ']');
- this.index += 4;
- string += String.fromCharCode(parseInt(hex, 16));
- } else {
- var rep = ESCAPE[ch];
- string = string + (rep || ch);
- }
- escape = false;
- } else if (ch === '\\') {
- escape = true;
- } else if (ch === quote) {
- this.index++;
- this.tokens.push({
- index: start,
- text: rawString,
- constant: true,
- value: string
- });
- return;
- } else {
- string += ch;
- }
- this.index++;
- }
- this.throwError('Unterminated quote', start);
- }
-};
-
-
-function isConstant(exp) {
- return exp.constant;
-}
-
-/**
- * @constructor
- */
-var Parser = function(lexer, $filter, options) {
- this.lexer = lexer;
- this.$filter = $filter;
- this.options = options;
-};
-
-Parser.ZERO = extend(function() {
- return 0;
-}, {
- sharedGetter: true,
- constant: true
-});
-
-Parser.prototype = {
- constructor: Parser,
-
- parse: function(text) {
- this.text = text;
- this.tokens = this.lexer.lex(text);
-
- var value = this.statements();
-
- if (this.tokens.length !== 0) {
- this.throwError('is an unexpected token', this.tokens[0]);
- }
-
- value.literal = !!value.literal;
- value.constant = !!value.constant;
-
- return value;
- },
-
- primary: function() {
- var primary;
- if (this.expect('(')) {
- primary = this.filterChain();
- this.consume(')');
- } else if (this.expect('[')) {
- primary = this.arrayDeclaration();
- } else if (this.expect('{')) {
- primary = this.object();
- } else if (this.peek().identifier) {
- primary = this.identifier();
- } else if (this.peek().constant) {
- primary = this.constant();
- } else {
- this.throwError('not a primary expression', this.peek());
- }
-
- var next, context;
- while ((next = this.expect('(', '[', '.'))) {
- if (next.text === '(') {
- primary = this.functionCall(primary, context);
- context = null;
- } else if (next.text === '[') {
- context = primary;
- primary = this.objectIndex(primary);
- } else if (next.text === '.') {
- context = primary;
- primary = this.fieldAccess(primary);
- } else {
- this.throwError('IMPOSSIBLE');
- }
- }
- return primary;
- },
-
- throwError: function(msg, token) {
- throw $parseMinErr('syntax',
- 'Syntax Error: Token \'{0}\' {1} at column {2} of the expression [{3}] starting at [{4}].',
- token.text, msg, (token.index + 1), this.text, this.text.substring(token.index));
- },
-
- peekToken: function() {
- if (this.tokens.length === 0)
- throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);
- return this.tokens[0];
- },
-
- peek: function(e1, e2, e3, e4) {
- return this.peekAhead(0, e1, e2, e3, e4);
- },
- peekAhead: function(i, e1, e2, e3, e4) {
- if (this.tokens.length > i) {
- var token = this.tokens[i];
- var t = token.text;
- if (t === e1 || t === e2 || t === e3 || t === e4 ||
- (!e1 && !e2 && !e3 && !e4)) {
- return token;
- }
- }
- return false;
- },
-
- expect: function(e1, e2, e3, e4) {
- var token = this.peek(e1, e2, e3, e4);
- if (token) {
- this.tokens.shift();
- return token;
- }
- return false;
- },
-
- consume: function(e1) {
- if (this.tokens.length === 0) {
- throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);
- }
-
- var token = this.expect(e1);
- if (!token) {
- this.throwError('is unexpected, expecting [' + e1 + ']', this.peek());
- }
- return token;
- },
-
- unaryFn: function(op, right) {
- var fn = OPERATORS[op];
- return extend(function $parseUnaryFn(self, locals) {
- return fn(self, locals, right);
- }, {
- constant:right.constant,
- inputs: [right]
- });
- },
-
- binaryFn: function(left, op, right, isBranching) {
- var fn = OPERATORS[op];
- return extend(function $parseBinaryFn(self, locals) {
- return fn(self, locals, left, right);
- }, {
- constant: left.constant && right.constant,
- inputs: !isBranching && [left, right]
- });
- },
-
- identifier: function() {
- var id = this.consume().text;
-
- //Continue reading each `.identifier` unless it is a method invocation
- while (this.peek('.') && this.peekAhead(1).identifier && !this.peekAhead(2, '(')) {
- id += this.consume().text + this.consume().text;
- }
-
- return CONSTANTS[id] || getterFn(id, this.options, this.text);
- },
-
- constant: function() {
- var value = this.consume().value;
-
- return extend(function $parseConstant() {
- return value;
- }, {
- constant: true,
- literal: true
- });
- },
-
- statements: function() {
- var statements = [];
- while (true) {
- if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']'))
- statements.push(this.filterChain());
- if (!this.expect(';')) {
- // optimize for the common case where there is only one statement.
- // TODO(size): maybe we should not support multiple statements?
- return (statements.length === 1)
- ? statements[0]
- : function $parseStatements(self, locals) {
- var value;
- for (var i = 0, ii = statements.length; i < ii; i++) {
- value = statements[i](self, locals);
- }
- return value;
- };
- }
- }
- },
-
- filterChain: function() {
- var left = this.expression();
- var token;
- while ((token = this.expect('|'))) {
- left = this.filter(left);
- }
- return left;
- },
-
- filter: function(inputFn) {
- var fn = this.$filter(this.consume().text);
- var argsFn;
- var args;
-
- if (this.peek(':')) {
- argsFn = [];
- args = []; // we can safely reuse the array
- while (this.expect(':')) {
- argsFn.push(this.expression());
- }
- }
-
- var inputs = [inputFn].concat(argsFn || []);
-
- return extend(function $parseFilter(self, locals) {
- var input = inputFn(self, locals);
- if (args) {
- args[0] = input;
-
- var i = argsFn.length;
- while (i--) {
- args[i + 1] = argsFn[i](self, locals);
- }
-
- return fn.apply(undefined, args);
- }
-
- return fn(input);
- }, {
- constant: !fn.$stateful && inputs.every(isConstant),
- inputs: !fn.$stateful && inputs
- });
- },
-
- expression: function() {
- return this.assignment();
- },
-
- assignment: function() {
- var left = this.ternary();
- var right;
- var token;
- if ((token = this.expect('='))) {
- if (!left.assign) {
- this.throwError('implies assignment but [' +
- this.text.substring(0, token.index) + '] can not be assigned to', token);
- }
- right = this.ternary();
- return extend(function $parseAssignment(scope, locals) {
- return left.assign(scope, right(scope, locals), locals);
- }, {
- inputs: [left, right]
- });
- }
- return left;
- },
-
- ternary: function() {
- var left = this.logicalOR();
- var middle;
- var token;
- if ((token = this.expect('?'))) {
- middle = this.assignment();
- if (this.consume(':')) {
- var right = this.assignment();
-
- return extend(function $parseTernary(self, locals) {
- return left(self, locals) ? middle(self, locals) : right(self, locals);
- }, {
- constant: left.constant && middle.constant && right.constant
- });
- }
- }
-
- return left;
- },
-
- logicalOR: function() {
- var left = this.logicalAND();
- var token;
- while ((token = this.expect('||'))) {
- left = this.binaryFn(left, token.text, this.logicalAND(), true);
- }
- return left;
- },
-
- logicalAND: function() {
- var left = this.equality();
- var token;
- if ((token = this.expect('&&'))) {
- left = this.binaryFn(left, token.text, this.logicalAND(), true);
- }
- return left;
- },
-
- equality: function() {
- var left = this.relational();
- var token;
- if ((token = this.expect('==','!=','===','!=='))) {
- left = this.binaryFn(left, token.text, this.equality());
- }
- return left;
- },
-
- relational: function() {
- var left = this.additive();
- var token;
- if ((token = this.expect('<', '>', '<=', '>='))) {
- left = this.binaryFn(left, token.text, this.relational());
- }
- return left;
- },
-
- additive: function() {
- var left = this.multiplicative();
- var token;
- while ((token = this.expect('+','-'))) {
- left = this.binaryFn(left, token.text, this.multiplicative());
- }
- return left;
- },
-
- multiplicative: function() {
- var left = this.unary();
- var token;
- while ((token = this.expect('*','/','%'))) {
- left = this.binaryFn(left, token.text, this.unary());
- }
- return left;
- },
-
- unary: function() {
- var token;
- if (this.expect('+')) {
- return this.primary();
- } else if ((token = this.expect('-'))) {
- return this.binaryFn(Parser.ZERO, token.text, this.unary());
- } else if ((token = this.expect('!'))) {
- return this.unaryFn(token.text, this.unary());
- } else {
- return this.primary();
- }
- },
-
- fieldAccess: function(object) {
- var expression = this.text;
- var field = this.consume().text;
- var getter = getterFn(field, this.options, expression);
-
- return extend(function $parseFieldAccess(scope, locals, self) {
- return getter(self || object(scope, locals));
- }, {
- assign: function(scope, value, locals) {
- var o = object(scope, locals);
- if (!o) object.assign(scope, o = {});
- return setter(o, field, value, expression);
- }
- });
- },
-
- objectIndex: function(obj) {
- var expression = this.text;
-
- var indexFn = this.expression();
- this.consume(']');
-
- return extend(function $parseObjectIndex(self, locals) {
- var o = obj(self, locals),
- i = indexFn(self, locals),
- v;
-
- ensureSafeMemberName(i, expression);
- if (!o) return undefined;
- v = ensureSafeObject(o[i], expression);
- return v;
- }, {
- assign: function(self, value, locals) {
- var key = ensureSafeMemberName(indexFn(self, locals), expression);
- // prevent overwriting of Function.constructor which would break ensureSafeObject check
- var o = ensureSafeObject(obj(self, locals), expression);
- if (!o) obj.assign(self, o = {});
- return o[key] = value;
- }
- });
- },
-
- functionCall: function(fnGetter, contextGetter) {
- var argsFn = [];
- if (this.peekToken().text !== ')') {
- do {
- argsFn.push(this.expression());
- } while (this.expect(','));
- }
- this.consume(')');
-
- var expressionText = this.text;
- // we can safely reuse the array across invocations
- var args = argsFn.length ? [] : null;
-
- return function $parseFunctionCall(scope, locals) {
- var context = contextGetter ? contextGetter(scope, locals) : scope;
- var fn = fnGetter(scope, locals, context) || noop;
-
- if (args) {
- var i = argsFn.length;
- while (i--) {
- args[i] = ensureSafeObject(argsFn[i](scope, locals), expressionText);
- }
- }
-
- ensureSafeObject(context, expressionText);
- ensureSafeFunction(fn, expressionText);
-
- // IE doesn't have apply for some native functions
- var v = fn.apply
- ? fn.apply(context, args)
- : fn(args[0], args[1], args[2], args[3], args[4]);
-
- return ensureSafeObject(v, expressionText);
- };
- },
-
- // This is used with json array declaration
- arrayDeclaration: function() {
- var elementFns = [];
- if (this.peekToken().text !== ']') {
- do {
- if (this.peek(']')) {
- // Support trailing commas per ES5.1.
- break;
- }
- elementFns.push(this.expression());
- } while (this.expect(','));
- }
- this.consume(']');
-
- return extend(function $parseArrayLiteral(self, locals) {
- var array = [];
- for (var i = 0, ii = elementFns.length; i < ii; i++) {
- array.push(elementFns[i](self, locals));
- }
- return array;
- }, {
- literal: true,
- constant: elementFns.every(isConstant),
- inputs: elementFns
- });
- },
-
- object: function() {
- var keys = [], valueFns = [];
- if (this.peekToken().text !== '}') {
- do {
- if (this.peek('}')) {
- // Support trailing commas per ES5.1.
- break;
- }
- var token = this.consume();
- if (token.constant) {
- keys.push(token.value);
- } else if (token.identifier) {
- keys.push(token.text);
- } else {
- this.throwError("invalid key", token);
- }
- this.consume(':');
- valueFns.push(this.expression());
- } while (this.expect(','));
- }
- this.consume('}');
-
- return extend(function $parseObjectLiteral(self, locals) {
- var object = {};
- for (var i = 0, ii = valueFns.length; i < ii; i++) {
- object[keys[i]] = valueFns[i](self, locals);
- }
- return object;
- }, {
- literal: true,
- constant: valueFns.every(isConstant),
- inputs: valueFns
- });
- }
-};
-
-
-//////////////////////////////////////////////////
-// Parser helper functions
-//////////////////////////////////////////////////
-
-function setter(obj, path, setValue, fullExp) {
- ensureSafeObject(obj, fullExp);
-
- var element = path.split('.'), key;
- for (var i = 0; element.length > 1; i++) {
- key = ensureSafeMemberName(element.shift(), fullExp);
- var propertyObj = ensureSafeObject(obj[key], fullExp);
- if (!propertyObj) {
- propertyObj = {};
- obj[key] = propertyObj;
- }
- obj = propertyObj;
- }
- key = ensureSafeMemberName(element.shift(), fullExp);
- ensureSafeObject(obj[key], fullExp);
- obj[key] = setValue;
- return setValue;
-}
-
-var getterFnCacheDefault = createMap();
-var getterFnCacheExpensive = createMap();
-
-function isPossiblyDangerousMemberName(name) {
- return name == 'constructor';
-}
-
-/**
- * Implementation of the "Black Hole" variant from:
- * - http://jsperf.com/angularjs-parse-getter/4
- * - http://jsperf.com/path-evaluation-simplified/7
- */
-function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, expensiveChecks) {
- ensureSafeMemberName(key0, fullExp);
- ensureSafeMemberName(key1, fullExp);
- ensureSafeMemberName(key2, fullExp);
- ensureSafeMemberName(key3, fullExp);
- ensureSafeMemberName(key4, fullExp);
- var eso = function(o) {
- return ensureSafeObject(o, fullExp);
- };
- var eso0 = (expensiveChecks || isPossiblyDangerousMemberName(key0)) ? eso : identity;
- var eso1 = (expensiveChecks || isPossiblyDangerousMemberName(key1)) ? eso : identity;
- var eso2 = (expensiveChecks || isPossiblyDangerousMemberName(key2)) ? eso : identity;
- var eso3 = (expensiveChecks || isPossiblyDangerousMemberName(key3)) ? eso : identity;
- var eso4 = (expensiveChecks || isPossiblyDangerousMemberName(key4)) ? eso : identity;
-
- return function cspSafeGetter(scope, locals) {
- var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope;
-
- if (pathVal == null) return pathVal;
- pathVal = eso0(pathVal[key0]);
-
- if (!key1) return pathVal;
- if (pathVal == null) return undefined;
- pathVal = eso1(pathVal[key1]);
-
- if (!key2) return pathVal;
- if (pathVal == null) return undefined;
- pathVal = eso2(pathVal[key2]);
-
- if (!key3) return pathVal;
- if (pathVal == null) return undefined;
- pathVal = eso3(pathVal[key3]);
-
- if (!key4) return pathVal;
- if (pathVal == null) return undefined;
- pathVal = eso4(pathVal[key4]);
-
- return pathVal;
- };
-}
-
-function getterFnWithEnsureSafeObject(fn, fullExpression) {
- return function(s, l) {
- return fn(s, l, ensureSafeObject, fullExpression);
- };
-}
-
-function getterFn(path, options, fullExp) {
- var expensiveChecks = options.expensiveChecks;
- var getterFnCache = (expensiveChecks ? getterFnCacheExpensive : getterFnCacheDefault);
- var fn = getterFnCache[path];
- if (fn) return fn;
-
-
- var pathKeys = path.split('.'),
- pathKeysLength = pathKeys.length;
-
- // http://jsperf.com/angularjs-parse-getter/6
- if (options.csp) {
- if (pathKeysLength < 6) {
- fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp, expensiveChecks);
- } else {
- fn = function cspSafeGetter(scope, locals) {
- var i = 0, val;
- do {
- val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++],
- pathKeys[i++], fullExp, expensiveChecks)(scope, locals);
-
- locals = undefined; // clear after first iteration
- scope = val;
- } while (i < pathKeysLength);
- return val;
- };
- }
- } else {
- var code = '';
- if (expensiveChecks) {
- code += 's = eso(s, fe);\nl = eso(l, fe);\n';
- }
- var needsEnsureSafeObject = expensiveChecks;
- forEach(pathKeys, function(key, index) {
- ensureSafeMemberName(key, fullExp);
- var lookupJs = (index
- // we simply dereference 's' on any .dot notation
- ? 's'
- // but if we are first then we check locals first, and if so read it first
- : '((l&&l.hasOwnProperty("' + key + '"))?l:s)') + '.' + key;
- if (expensiveChecks || isPossiblyDangerousMemberName(key)) {
- lookupJs = 'eso(' + lookupJs + ', fe)';
- needsEnsureSafeObject = true;
- }
- code += 'if(s == null) return undefined;\n' +
- 's=' + lookupJs + ';\n';
- });
- code += 'return s;';
-
- /* jshint -W054 */
- var evaledFnGetter = new Function('s', 'l', 'eso', 'fe', code); // s=scope, l=locals, eso=ensureSafeObject
- /* jshint +W054 */
- evaledFnGetter.toString = valueFn(code);
- if (needsEnsureSafeObject) {
- evaledFnGetter = getterFnWithEnsureSafeObject(evaledFnGetter, fullExp);
- }
- fn = evaledFnGetter;
- }
-
- fn.sharedGetter = true;
- fn.assign = function(self, value) {
- return setter(self, path, value, path);
- };
- getterFnCache[path] = fn;
- return fn;
-}
-
-var objectValueOf = Object.prototype.valueOf;
-
-function getValueOf(value) {
- return isFunction(value.valueOf) ? value.valueOf() : objectValueOf.call(value);
-}
-
-///////////////////////////////////
-
-/**
- * @ngdoc service
- * @name $parse
- * @kind function
- *
- * @description
- *
- * Converts Angular {@link guide/expression expression} into a function.
- *
- * ```js
- * var getter = $parse('user.name');
- * var setter = getter.assign;
- * var context = {user:{name:'angular'}};
- * var locals = {user:{name:'local'}};
- *
- * expect(getter(context)).toEqual('angular');
- * setter(context, 'newValue');
- * expect(context.user.name).toEqual('newValue');
- * expect(getter(context, locals)).toEqual('local');
- * ```
- *
- *
- * @param {string} expression String expression to compile.
- * @returns {function(context, locals)} a function which represents the compiled expression:
- *
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
- * are evaluated against (typically a scope object).
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
- * `context`.
- *
- * The returned function also has the following properties:
- * * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript
- * literal.
- * * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript
- * constant literals.
- * * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be
- * set to a function to change its value on the given context.
- *
- */
-
-
-/**
- * @ngdoc provider
- * @name $parseProvider
- *
- * @description
- * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse}
- * service.
- */
-function $ParseProvider() {
- var cacheDefault = createMap();
- var cacheExpensive = createMap();
-
-
-
- this.$get = ['$filter', '$sniffer', function($filter, $sniffer) {
- var $parseOptions = {
- csp: $sniffer.csp,
- expensiveChecks: false
- },
- $parseOptionsExpensive = {
- csp: $sniffer.csp,
- expensiveChecks: true
- };
-
- function wrapSharedExpression(exp) {
- var wrapped = exp;
-
- if (exp.sharedGetter) {
- wrapped = function $parseWrapper(self, locals) {
- return exp(self, locals);
- };
- wrapped.literal = exp.literal;
- wrapped.constant = exp.constant;
- wrapped.assign = exp.assign;
- }
-
- return wrapped;
- }
-
- return function $parse(exp, interceptorFn, expensiveChecks) {
- var parsedExpression, oneTime, cacheKey;
-
- switch (typeof exp) {
- case 'string':
- cacheKey = exp = exp.trim();
-
- var cache = (expensiveChecks ? cacheExpensive : cacheDefault);
- parsedExpression = cache[cacheKey];
-
- if (!parsedExpression) {
- if (exp.charAt(0) === ':' && exp.charAt(1) === ':') {
- oneTime = true;
- exp = exp.substring(2);
- }
-
- var parseOptions = expensiveChecks ? $parseOptionsExpensive : $parseOptions;
- var lexer = new Lexer(parseOptions);
- var parser = new Parser(lexer, $filter, parseOptions);
- parsedExpression = parser.parse(exp);
-
- if (parsedExpression.constant) {
- parsedExpression.$$watchDelegate = constantWatchDelegate;
- } else if (oneTime) {
- //oneTime is not part of the exp passed to the Parser so we may have to
- //wrap the parsedExpression before adding a $$watchDelegate
- parsedExpression = wrapSharedExpression(parsedExpression);
- parsedExpression.$$watchDelegate = parsedExpression.literal ?
- oneTimeLiteralWatchDelegate : oneTimeWatchDelegate;
- } else if (parsedExpression.inputs) {
- parsedExpression.$$watchDelegate = inputsWatchDelegate;
- }
-
- cache[cacheKey] = parsedExpression;
- }
- return addInterceptor(parsedExpression, interceptorFn);
-
- case 'function':
- return addInterceptor(exp, interceptorFn);
-
- default:
- return addInterceptor(noop, interceptorFn);
- }
- };
-
- function collectExpressionInputs(inputs, list) {
- for (var i = 0, ii = inputs.length; i < ii; i++) {
- var input = inputs[i];
- if (!input.constant) {
- if (input.inputs) {
- collectExpressionInputs(input.inputs, list);
- } else if (list.indexOf(input) === -1) { // TODO(perf) can we do better?
- list.push(input);
- }
- }
- }
-
- return list;
- }
-
- function expressionInputDirtyCheck(newValue, oldValueOfValue) {
-
- if (newValue == null || oldValueOfValue == null) { // null/undefined
- return newValue === oldValueOfValue;
- }
-
- if (typeof newValue === 'object') {
-
- // attempt to convert the value to a primitive type
- // TODO(docs): add a note to docs that by implementing valueOf even objects and arrays can
- // be cheaply dirty-checked
- newValue = getValueOf(newValue);
-
- if (typeof newValue === 'object') {
- // objects/arrays are not supported - deep-watching them would be too expensive
- return false;
- }
-
- // fall-through to the primitive equality check
- }
-
- //Primitive or NaN
- return newValue === oldValueOfValue || (newValue !== newValue && oldValueOfValue !== oldValueOfValue);
- }
-
- function inputsWatchDelegate(scope, listener, objectEquality, parsedExpression) {
- var inputExpressions = parsedExpression.$$inputs ||
- (parsedExpression.$$inputs = collectExpressionInputs(parsedExpression.inputs, []));
-
- var lastResult;
-
- if (inputExpressions.length === 1) {
- var oldInputValue = expressionInputDirtyCheck; // init to something unique so that equals check fails
- inputExpressions = inputExpressions[0];
- return scope.$watch(function expressionInputWatch(scope) {
- var newInputValue = inputExpressions(scope);
- if (!expressionInputDirtyCheck(newInputValue, oldInputValue)) {
- lastResult = parsedExpression(scope);
- oldInputValue = newInputValue && getValueOf(newInputValue);
- }
- return lastResult;
- }, listener, objectEquality);
- }
-
- var oldInputValueOfValues = [];
- for (var i = 0, ii = inputExpressions.length; i < ii; i++) {
- oldInputValueOfValues[i] = expressionInputDirtyCheck; // init to something unique so that equals check fails
- }
-
- return scope.$watch(function expressionInputsWatch(scope) {
- var changed = false;
-
- for (var i = 0, ii = inputExpressions.length; i < ii; i++) {
- var newInputValue = inputExpressions[i](scope);
- if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i]))) {
- oldInputValueOfValues[i] = newInputValue && getValueOf(newInputValue);
- }
- }
-
- if (changed) {
- lastResult = parsedExpression(scope);
- }
-
- return lastResult;
- }, listener, objectEquality);
- }
-
- function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression) {
- var unwatch, lastValue;
- return unwatch = scope.$watch(function oneTimeWatch(scope) {
- return parsedExpression(scope);
- }, function oneTimeListener(value, old, scope) {
- lastValue = value;
- if (isFunction(listener)) {
- listener.apply(this, arguments);
- }
- if (isDefined(value)) {
- scope.$$postDigest(function() {
- if (isDefined(lastValue)) {
- unwatch();
- }
- });
- }
- }, objectEquality);
- }
-
- function oneTimeLiteralWatchDelegate(scope, listener, objectEquality, parsedExpression) {
- var unwatch, lastValue;
- return unwatch = scope.$watch(function oneTimeWatch(scope) {
- return parsedExpression(scope);
- }, function oneTimeListener(value, old, scope) {
- lastValue = value;
- if (isFunction(listener)) {
- listener.call(this, value, old, scope);
- }
- if (isAllDefined(value)) {
- scope.$$postDigest(function() {
- if (isAllDefined(lastValue)) unwatch();
- });
- }
- }, objectEquality);
-
- function isAllDefined(value) {
- var allDefined = true;
- forEach(value, function(val) {
- if (!isDefined(val)) allDefined = false;
- });
- return allDefined;
- }
- }
-
- function constantWatchDelegate(scope, listener, objectEquality, parsedExpression) {
- var unwatch;
- return unwatch = scope.$watch(function constantWatch(scope) {
- return parsedExpression(scope);
- }, function constantListener(value, old, scope) {
- if (isFunction(listener)) {
- listener.apply(this, arguments);
- }
- unwatch();
- }, objectEquality);
- }
-
- function addInterceptor(parsedExpression, interceptorFn) {
- if (!interceptorFn) return parsedExpression;
- var watchDelegate = parsedExpression.$$watchDelegate;
-
- var regularWatch =
- watchDelegate !== oneTimeLiteralWatchDelegate &&
- watchDelegate !== oneTimeWatchDelegate;
-
- var fn = regularWatch ? function regularInterceptedExpression(scope, locals) {
- var value = parsedExpression(scope, locals);
- return interceptorFn(value, scope, locals);
- } : function oneTimeInterceptedExpression(scope, locals) {
- var value = parsedExpression(scope, locals);
- var result = interceptorFn(value, scope, locals);
- // we only return the interceptor's result if the
- // initial value is defined (for bind-once)
- return isDefined(value) ? result : value;
- };
-
- // Propagate $$watchDelegates other then inputsWatchDelegate
- if (parsedExpression.$$watchDelegate &&
- parsedExpression.$$watchDelegate !== inputsWatchDelegate) {
- fn.$$watchDelegate = parsedExpression.$$watchDelegate;
- } else if (!interceptorFn.$stateful) {
- // If there is an interceptor, but no watchDelegate then treat the interceptor like
- // we treat filters - it is assumed to be a pure function unless flagged with $stateful
- fn.$$watchDelegate = inputsWatchDelegate;
- fn.inputs = [parsedExpression];
- }
-
- return fn;
- }
- }];
-}
-
-/**
- * @ngdoc service
- * @name $q
- * @requires $rootScope
- *
- * @description
- * A service that helps you run functions asynchronously, and use their return values (or exceptions)
- * when they are done processing.
- *
- * This is an implementation of promises/deferred objects inspired by
- * [Kris Kowal's Q](https://github.com/kriskowal/q).
- *
- * $q can be used in two fashions --- one which is more similar to Kris Kowal's Q or jQuery's Deferred
- * implementations, and the other which resembles ES6 promises to some degree.
- *
- * # $q constructor
- *
- * The streamlined ES6 style promise is essentially just using $q as a constructor which takes a `resolver`
- * function as the first argument. This is similar to the native Promise implementation from ES6 Harmony,
- * see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).
- *
- * While the constructor-style use is supported, not all of the supporting methods from ES6 Harmony promises are
- * available yet.
- *
- * It can be used like so:
- *
- * ```js
- * // for the purpose of this example let's assume that variables `$q` and `okToGreet`
- * // are available in the current lexical scope (they could have been injected or passed in).
- *
- * function asyncGreet(name) {
- * // perform some asynchronous operation, resolve or reject the promise when appropriate.
- * return $q(function(resolve, reject) {
- * setTimeout(function() {
- * if (okToGreet(name)) {
- * resolve('Hello, ' + name + '!');
- * } else {
- * reject('Greeting ' + name + ' is not allowed.');
- * }
- * }, 1000);
- * });
- * }
- *
- * var promise = asyncGreet('Robin Hood');
- * promise.then(function(greeting) {
- * alert('Success: ' + greeting);
- * }, function(reason) {
- * alert('Failed: ' + reason);
- * });
- * ```
- *
- * Note: progress/notify callbacks are not currently supported via the ES6-style interface.
- *
- * However, the more traditional CommonJS-style usage is still available, and documented below.
- *
- * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an
- * interface for interacting with an object that represents the result of an action that is
- * performed asynchronously, and may or may not be finished at any given point in time.
- *
- * From the perspective of dealing with error handling, deferred and promise APIs are to
- * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming.
- *
- * ```js
- * // for the purpose of this example let's assume that variables `$q` and `okToGreet`
- * // are available in the current lexical scope (they could have been injected or passed in).
- *
- * function asyncGreet(name) {
- * var deferred = $q.defer();
- *
- * setTimeout(function() {
- * deferred.notify('About to greet ' + name + '.');
- *
- * if (okToGreet(name)) {
- * deferred.resolve('Hello, ' + name + '!');
- * } else {
- * deferred.reject('Greeting ' + name + ' is not allowed.');
- * }
- * }, 1000);
- *
- * return deferred.promise;
- * }
- *
- * var promise = asyncGreet('Robin Hood');
- * promise.then(function(greeting) {
- * alert('Success: ' + greeting);
- * }, function(reason) {
- * alert('Failed: ' + reason);
- * }, function(update) {
- * alert('Got notification: ' + update);
- * });
- * ```
- *
- * At first it might not be obvious why this extra complexity is worth the trouble. The payoff
- * comes in the way of guarantees that promise and deferred APIs make, see
- * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md.
- *
- * Additionally the promise api allows for composition that is very hard to do with the
- * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach.
- * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the
- * section on serial or parallel joining of promises.
- *
- * # The Deferred API
- *
- * A new instance of deferred is constructed by calling `$q.defer()`.
- *
- * The purpose of the deferred object is to expose the associated Promise instance as well as APIs
- * that can be used for signaling the successful or unsuccessful completion, as well as the status
- * of the task.
- *
- * **Methods**
- *
- * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection
- * constructed via `$q.reject`, the promise will be rejected instead.
- * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to
- * resolving it with a rejection constructed via `$q.reject`.
- * - `notify(value)` - provides updates on the status of the promise's execution. This may be called
- * multiple times before the promise is either resolved or rejected.
- *
- * **Properties**
- *
- * - promise – `{Promise}` – promise object associated with this deferred.
- *
- *
- * # The Promise API
- *
- * A new promise instance is created when a deferred instance is created and can be retrieved by
- * calling `deferred.promise`.
- *
- * The purpose of the promise object is to allow for interested parties to get access to the result
- * of the deferred task when it completes.
- *
- * **Methods**
- *
- * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or
- * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously
- * as soon as the result is available. The callbacks are called with a single argument: the result
- * or rejection reason. Additionally, the notify callback may be called zero or more times to
- * provide a progress indication, before the promise is resolved or rejected.
- *
- * This method *returns a new promise* which is resolved or rejected via the return value of the
- * `successCallback`, `errorCallback`. It also notifies via the return value of the
- * `notifyCallback` method. The promise cannot be resolved or rejected from the notifyCallback
- * method.
- *
- * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`
- *
- * - `finally(callback, notifyCallback)` – allows you to observe either the fulfillment or rejection of a promise,
- * but to do so without modifying the final value. This is useful to release resources or do some
- * clean-up that needs to be done whether the promise was rejected or resolved. See the [full
- * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for
- * more information.
- *
- * # Chaining promises
- *
- * Because calling the `then` method of a promise returns a new derived promise, it is easily
- * possible to create a chain of promises:
- *
- * ```js
- * promiseB = promiseA.then(function(result) {
- * return result + 1;
- * });
- *
- * // promiseB will be resolved immediately after promiseA is resolved and its value
- * // will be the result of promiseA incremented by 1
- * ```
- *
- * It is possible to create chains of any length and since a promise can be resolved with another
- * promise (which will defer its resolution further), it is possible to pause/defer resolution of
- * the promises at any point in the chain. This makes it possible to implement powerful APIs like
- * $http's response interceptors.
- *
- *
- * # Differences between Kris Kowal's Q and $q
- *
- * There are two main differences:
- *
- * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation
- * mechanism in angular, which means faster propagation of resolution or rejection into your
- * models and avoiding unnecessary browser repaints, which would result in flickering UI.
- * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains
- * all the important functionality needed for common async tasks.
- *
- * # Testing
- *
- * ```js
- * it('should simulate promise', inject(function($q, $rootScope) {
- * var deferred = $q.defer();
- * var promise = deferred.promise;
- * var resolvedValue;
- *
- * promise.then(function(value) { resolvedValue = value; });
- * expect(resolvedValue).toBeUndefined();
- *
- * // Simulate resolving of promise
- * deferred.resolve(123);
- * // Note that the 'then' function does not get called synchronously.
- * // This is because we want the promise API to always be async, whether or not
- * // it got called synchronously or asynchronously.
- * expect(resolvedValue).toBeUndefined();
- *
- * // Propagate promise resolution to 'then' functions using $apply().
- * $rootScope.$apply();
- * expect(resolvedValue).toEqual(123);
- * }));
- * ```
- *
- * @param {function(function, function)} resolver Function which is responsible for resolving or
- * rejecting the newly created promise. The first parameter is a function which resolves the
- * promise, the second parameter is a function which rejects the promise.
- *
- * @returns {Promise} The newly created promise.
- */
-function $QProvider() {
-
- this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {
- return qFactory(function(callback) {
- $rootScope.$evalAsync(callback);
- }, $exceptionHandler);
- }];
-}
-
-function $$QProvider() {
- this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) {
- return qFactory(function(callback) {
- $browser.defer(callback);
- }, $exceptionHandler);
- }];
-}
-
-/**
- * Constructs a promise manager.
- *
- * @param {function(function)} nextTick Function for executing functions in the next turn.
- * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for
- * debugging purposes.
- * @returns {object} Promise manager.
- */
-function qFactory(nextTick, exceptionHandler) {
- var $qMinErr = minErr('$q', TypeError);
- function callOnce(self, resolveFn, rejectFn) {
- var called = false;
- function wrap(fn) {
- return function(value) {
- if (called) return;
- called = true;
- fn.call(self, value);
- };
- }
-
- return [wrap(resolveFn), wrap(rejectFn)];
- }
-
- /**
- * @ngdoc method
- * @name ng.$q#defer
- * @kind function
- *
- * @description
- * Creates a `Deferred` object which represents a task which will finish in the future.
- *
- * @returns {Deferred} Returns a new instance of deferred.
- */
- var defer = function() {
- return new Deferred();
- };
-
- function Promise() {
- this.$$state = { status: 0 };
- }
-
- Promise.prototype = {
- then: function(onFulfilled, onRejected, progressBack) {
- var result = new Deferred();
-
- this.$$state.pending = this.$$state.pending || [];
- this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]);
- if (this.$$state.status > 0) scheduleProcessQueue(this.$$state);
-
- return result.promise;
- },
-
- "catch": function(callback) {
- return this.then(null, callback);
- },
-
- "finally": function(callback, progressBack) {
- return this.then(function(value) {
- return handleCallback(value, true, callback);
- }, function(error) {
- return handleCallback(error, false, callback);
- }, progressBack);
- }
- };
-
- //Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native
- function simpleBind(context, fn) {
- return function(value) {
- fn.call(context, value);
- };
- }
-
- function processQueue(state) {
- var fn, promise, pending;
-
- pending = state.pending;
- state.processScheduled = false;
- state.pending = undefined;
- for (var i = 0, ii = pending.length; i < ii; ++i) {
- promise = pending[i][0];
- fn = pending[i][state.status];
- try {
- if (isFunction(fn)) {
- promise.resolve(fn(state.value));
- } else if (state.status === 1) {
- promise.resolve(state.value);
- } else {
- promise.reject(state.value);
- }
- } catch (e) {
- promise.reject(e);
- exceptionHandler(e);
- }
- }
- }
-
- function scheduleProcessQueue(state) {
- if (state.processScheduled || !state.pending) return;
- state.processScheduled = true;
- nextTick(function() { processQueue(state); });
- }
-
- function Deferred() {
- this.promise = new Promise();
- //Necessary to support unbound execution :/
- this.resolve = simpleBind(this, this.resolve);
- this.reject = simpleBind(this, this.reject);
- this.notify = simpleBind(this, this.notify);
- }
-
- Deferred.prototype = {
- resolve: function(val) {
- if (this.promise.$$state.status) return;
- if (val === this.promise) {
- this.$$reject($qMinErr(
- 'qcycle',
- "Expected promise to be resolved with value other than itself '{0}'",
- val));
- }
- else {
- this.$$resolve(val);
- }
-
- },
-
- $$resolve: function(val) {
- var then, fns;
-
- fns = callOnce(this, this.$$resolve, this.$$reject);
- try {
- if ((isObject(val) || isFunction(val))) then = val && val.then;
- if (isFunction(then)) {
- this.promise.$$state.status = -1;
- then.call(val, fns[0], fns[1], this.notify);
- } else {
- this.promise.$$state.value = val;
- this.promise.$$state.status = 1;
- scheduleProcessQueue(this.promise.$$state);
- }
- } catch (e) {
- fns[1](e);
- exceptionHandler(e);
- }
- },
-
- reject: function(reason) {
- if (this.promise.$$state.status) return;
- this.$$reject(reason);
- },
-
- $$reject: function(reason) {
- this.promise.$$state.value = reason;
- this.promise.$$state.status = 2;
- scheduleProcessQueue(this.promise.$$state);
- },
-
- notify: function(progress) {
- var callbacks = this.promise.$$state.pending;
-
- if ((this.promise.$$state.status <= 0) && callbacks && callbacks.length) {
- nextTick(function() {
- var callback, result;
- for (var i = 0, ii = callbacks.length; i < ii; i++) {
- result = callbacks[i][0];
- callback = callbacks[i][3];
- try {
- result.notify(isFunction(callback) ? callback(progress) : progress);
- } catch (e) {
- exceptionHandler(e);
- }
- }
- });
- }
- }
- };
-
- /**
- * @ngdoc method
- * @name $q#reject
- * @kind function
- *
- * @description
- * Creates a promise that is resolved as rejected with the specified `reason`. This api should be
- * used to forward rejection in a chain of promises. If you are dealing with the last promise in
- * a promise chain, you don't need to worry about it.
- *
- * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of
- * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via
- * a promise error callback and you want to forward the error to the promise derived from the
- * current promise, you have to "rethrow" the error by returning a rejection constructed via
- * `reject`.
- *
- * ```js
- * promiseB = promiseA.then(function(result) {
- * // success: do something and resolve promiseB
- * // with the old or a new result
- * return result;
- * }, function(reason) {
- * // error: handle the error if possible and
- * // resolve promiseB with newPromiseOrValue,
- * // otherwise forward the rejection to promiseB
- * if (canHandle(reason)) {
- * // handle the error and recover
- * return newPromiseOrValue;
- * }
- * return $q.reject(reason);
- * });
- * ```
- *
- * @param {*} reason Constant, message, exception or an object representing the rejection reason.
- * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.
- */
- var reject = function(reason) {
- var result = new Deferred();
- result.reject(reason);
- return result.promise;
- };
-
- var makePromise = function makePromise(value, resolved) {
- var result = new Deferred();
- if (resolved) {
- result.resolve(value);
- } else {
- result.reject(value);
- }
- return result.promise;
- };
-
- var handleCallback = function handleCallback(value, isResolved, callback) {
- var callbackOutput = null;
- try {
- if (isFunction(callback)) callbackOutput = callback();
- } catch (e) {
- return makePromise(e, false);
- }
- if (isPromiseLike(callbackOutput)) {
- return callbackOutput.then(function() {
- return makePromise(value, isResolved);
- }, function(error) {
- return makePromise(error, false);
- });
- } else {
- return makePromise(value, isResolved);
- }
- };
-
- /**
- * @ngdoc method
- * @name $q#when
- * @kind function
- *
- * @description
- * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise.
- * This is useful when you are dealing with an object that might or might not be a promise, or if
- * the promise comes from a source that can't be trusted.
- *
- * @param {*} value Value or a promise
- * @returns {Promise} Returns a promise of the passed value or promise
- */
-
-
- var when = function(value, callback, errback, progressBack) {
- var result = new Deferred();
- result.resolve(value);
- return result.promise.then(callback, errback, progressBack);
- };
-
- /**
- * @ngdoc method
- * @name $q#all
- * @kind function
- *
- * @description
- * Combines multiple promises into a single promise that is resolved when all of the input
- * promises are resolved.
- *
- * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises.
- * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values,
- * each value corresponding to the promise at the same index/key in the `promises` array/hash.
- * If any of the promises is resolved with a rejection, this resulting promise will be rejected
- * with the same rejection value.
- */
-
- function all(promises) {
- var deferred = new Deferred(),
- counter = 0,
- results = isArray(promises) ? [] : {};
-
- forEach(promises, function(promise, key) {
- counter++;
- when(promise).then(function(value) {
- if (results.hasOwnProperty(key)) return;
- results[key] = value;
- if (!(--counter)) deferred.resolve(results);
- }, function(reason) {
- if (results.hasOwnProperty(key)) return;
- deferred.reject(reason);
- });
- });
-
- if (counter === 0) {
- deferred.resolve(results);
- }
-
- return deferred.promise;
- }
-
- var $Q = function Q(resolver) {
- if (!isFunction(resolver)) {
- throw $qMinErr('norslvr', "Expected resolverFn, got '{0}'", resolver);
- }
-
- if (!(this instanceof Q)) {
- // More useful when $Q is the Promise itself.
- return new Q(resolver);
- }
-
- var deferred = new Deferred();
-
- function resolveFn(value) {
- deferred.resolve(value);
- }
-
- function rejectFn(reason) {
- deferred.reject(reason);
- }
-
- resolver(resolveFn, rejectFn);
-
- return deferred.promise;
- };
-
- $Q.defer = defer;
- $Q.reject = reject;
- $Q.when = when;
- $Q.all = all;
-
- return $Q;
-}
-
-function $$RAFProvider() { //rAF
- this.$get = ['$window', '$timeout', function($window, $timeout) {
- var requestAnimationFrame = $window.requestAnimationFrame ||
- $window.webkitRequestAnimationFrame ||
- $window.mozRequestAnimationFrame;
-
- var cancelAnimationFrame = $window.cancelAnimationFrame ||
- $window.webkitCancelAnimationFrame ||
- $window.mozCancelAnimationFrame ||
- $window.webkitCancelRequestAnimationFrame;
-
- var rafSupported = !!requestAnimationFrame;
- var raf = rafSupported
- ? function(fn) {
- var id = requestAnimationFrame(fn);
- return function() {
- cancelAnimationFrame(id);
- };
- }
- : function(fn) {
- var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666
- return function() {
- $timeout.cancel(timer);
- };
- };
-
- raf.supported = rafSupported;
-
- return raf;
- }];
-}
-
-/**
- * DESIGN NOTES
- *
- * The design decisions behind the scope are heavily favored for speed and memory consumption.
- *
- * The typical use of scope is to watch the expressions, which most of the time return the same
- * value as last time so we optimize the operation.
- *
- * Closures construction is expensive in terms of speed as well as memory:
- * - No closures, instead use prototypical inheritance for API
- * - Internal state needs to be stored on scope directly, which means that private state is
- * exposed as $$____ properties
- *
- * Loop operations are optimized by using while(count--) { ... }
- * - this means that in order to keep the same order of execution as addition we have to add
- * items to the array at the beginning (unshift) instead of at the end (push)
- *
- * Child scopes are created and removed often
- * - Using an array would be slow since inserts in middle are expensive so we use linked list
- *
- * There are few watches then a lot of observers. This is why you don't want the observer to be
- * implemented in the same way as watch. Watch requires return of initialization function which
- * are expensive to construct.
- */
-
-
-/**
- * @ngdoc provider
- * @name $rootScopeProvider
- * @description
- *
- * Provider for the $rootScope service.
- */
-
-/**
- * @ngdoc method
- * @name $rootScopeProvider#digestTtl
- * @description
- *
- * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and
- * assuming that the model is unstable.
- *
- * The current default is 10 iterations.
- *
- * In complex applications it's possible that the dependencies between `$watch`s will result in
- * several digest iterations. However if an application needs more than the default 10 digest
- * iterations for its model to stabilize then you should investigate what is causing the model to
- * continuously change during the digest.
- *
- * Increasing the TTL could have performance implications, so you should not change it without
- * proper justification.
- *
- * @param {number} limit The number of digest iterations.
- */
-
-
-/**
- * @ngdoc service
- * @name $rootScope
- * @description
- *
- * Every application has a single root {@link ng.$rootScope.Scope scope}.
- * All other scopes are descendant scopes of the root scope. Scopes provide separation
- * between the model and the view, via a mechanism for watching the model for changes.
- * They also provide an event emission/broadcast and subscription facility. See the
- * {@link guide/scope developer guide on scopes}.
- */
-function $RootScopeProvider() {
- var TTL = 10;
- var $rootScopeMinErr = minErr('$rootScope');
- var lastDirtyWatch = null;
- var applyAsyncId = null;
-
- this.digestTtl = function(value) {
- if (arguments.length) {
- TTL = value;
- }
- return TTL;
- };
-
- this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser',
- function($injector, $exceptionHandler, $parse, $browser) {
-
- /**
- * @ngdoc type
- * @name $rootScope.Scope
- *
- * @description
- * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the
- * {@link auto.$injector $injector}. Child scopes are created using the
- * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when
- * compiled HTML template is executed.)
- *
- * Here is a simple scope snippet to show how you can interact with the scope.
- * ```html
- * <file src="./test/ng/rootScopeSpec.js" tag="docs1" />
- * ```
- *
- * # Inheritance
- * A scope can inherit from a parent scope, as in this example:
- * ```js
- var parent = $rootScope;
- var child = parent.$new();
-
- parent.salutation = "Hello";
- child.name = "World";
- expect(child.salutation).toEqual('Hello');
-
- child.salutation = "Welcome";
- expect(child.salutation).toEqual('Welcome');
- expect(parent.salutation).toEqual('Hello');
- * ```
- *
- * When interacting with `Scope` in tests, additional helper methods are available on the
- * instances of `Scope` type. See {@link ngMock.$rootScope.Scope ngMock Scope} for additional
- * details.
- *
- *
- * @param {Object.<string, function()>=} providers Map of service factory which need to be
- * provided for the current scope. Defaults to {@link ng}.
- * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should
- * append/override services provided by `providers`. This is handy
- * when unit-testing and having the need to override a default
- * service.
- * @returns {Object} Newly created scope.
- *
- */
- function Scope() {
- this.$id = nextUid();
- this.$$phase = this.$parent = this.$$watchers =
- this.$$nextSibling = this.$$prevSibling =
- this.$$childHead = this.$$childTail = null;
- this.$root = this;
- this.$$destroyed = false;
- this.$$listeners = {};
- this.$$listenerCount = {};
- this.$$isolateBindings = null;
- }
-
- /**
- * @ngdoc property
- * @name $rootScope.Scope#$id
- *
- * @description
- * Unique scope ID (monotonically increasing) useful for debugging.
- */
-
- /**
- * @ngdoc property
- * @name $rootScope.Scope#$parent
- *
- * @description
- * Reference to the parent scope.
- */
-
- /**
- * @ngdoc property
- * @name $rootScope.Scope#$root
- *
- * @description
- * Reference to the root scope.
- */
-
- Scope.prototype = {
- constructor: Scope,
- /**
- * @ngdoc method
- * @name $rootScope.Scope#$new
- * @kind function
- *
- * @description
- * Creates a new child {@link ng.$rootScope.Scope scope}.
- *
- * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event.
- * The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.
- *
- * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is
- * desired for the scope and its child scopes to be permanently detached from the parent and
- * thus stop participating in model change detection and listener notification by invoking.
- *
- * @param {boolean} isolate If true, then the scope does not prototypically inherit from the
- * parent scope. The scope is isolated, as it can not see parent scope properties.
- * When creating widgets, it is useful for the widget to not accidentally read parent
- * state.
- *
- * @param {Scope} [parent=this] The {@link ng.$rootScope.Scope `Scope`} that will be the `$parent`
- * of the newly created scope. Defaults to `this` scope if not provided.
- * This is used when creating a transclude scope to correctly place it
- * in the scope hierarchy while maintaining the correct prototypical
- * inheritance.
- *
- * @returns {Object} The newly created child scope.
- *
- */
- $new: function(isolate, parent) {
- var child;
-
- parent = parent || this;
-
- if (isolate) {
- child = new Scope();
- child.$root = this.$root;
- } else {
- // Only create a child scope class if somebody asks for one,
- // but cache it to allow the VM to optimize lookups.
- if (!this.$$ChildScope) {
- this.$$ChildScope = function ChildScope() {
- this.$$watchers = this.$$nextSibling =
- this.$$childHead = this.$$childTail = null;
- this.$$listeners = {};
- this.$$listenerCount = {};
- this.$id = nextUid();
- this.$$ChildScope = null;
- };
- this.$$ChildScope.prototype = this;
- }
- child = new this.$$ChildScope();
- }
- child.$parent = parent;
- child.$$prevSibling = parent.$$childTail;
- if (parent.$$childHead) {
- parent.$$childTail.$$nextSibling = child;
- parent.$$childTail = child;
- } else {
- parent.$$childHead = parent.$$childTail = child;
- }
-
- // When the new scope is not isolated or we inherit from `this`, and
- // the parent scope is destroyed, the property `$$destroyed` is inherited
- // prototypically. In all other cases, this property needs to be set
- // when the parent scope is destroyed.
- // The listener needs to be added after the parent is set
- if (isolate || parent != this) child.$on('$destroy', destroyChild);
-
- return child;
-
- function destroyChild() {
- child.$$destroyed = true;
- }
- },
-
- /**
- * @ngdoc method
- * @name $rootScope.Scope#$watch
- * @kind function
- *
- * @description
- * Registers a `listener` callback to be executed whenever the `watchExpression` changes.
- *
- * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest
- * $digest()} and should return the value that will be watched. (Since
- * {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the
- * `watchExpression` can execute multiple times per
- * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.)
- * - The `listener` is called only when the value from the current `watchExpression` and the
- * previous call to `watchExpression` are not equal (with the exception of the initial run,
- * see below). Inequality is determined according to reference inequality,
- * [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)
- * via the `!==` Javascript operator, unless `objectEquality == true`
- * (see next point)
- * - When `objectEquality == true`, inequality of the `watchExpression` is determined
- * according to the {@link angular.equals} function. To save the value of the object for
- * later comparison, the {@link angular.copy} function is used. This therefore means that
- * watching complex objects will have adverse memory and performance implications.
- * - The watch `listener` may change the model, which may trigger other `listener`s to fire.
- * This is achieved by rerunning the watchers until no changes are detected. The rerun
- * iteration limit is 10 to prevent an infinite loop deadlock.
- *
- *
- * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called,
- * you can register a `watchExpression` function with no `listener`. (Since `watchExpression`
- * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a
- * change is detected, be prepared for multiple calls to your listener.)
- *
- * After a watcher is registered with the scope, the `listener` fn is called asynchronously
- * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the
- * watcher. In rare cases, this is undesirable because the listener is called when the result
- * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you
- * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the
- * listener was called due to initialization.
- *
- *
- *
- * # Example
- * ```js
- // let's assume that scope was dependency injected as the $rootScope
- var scope = $rootScope;
- scope.name = 'misko';
- scope.counter = 0;
-
- expect(scope.counter).toEqual(0);
- scope.$watch('name', function(newValue, oldValue) {
- scope.counter = scope.counter + 1;
- });
- expect(scope.counter).toEqual(0);
-
- scope.$digest();
- // the listener is always called during the first $digest loop after it was registered
- expect(scope.counter).toEqual(1);
-
- scope.$digest();
- // but now it will not be called unless the value changes
- expect(scope.counter).toEqual(1);
-
- scope.name = 'adam';
- scope.$digest();
- expect(scope.counter).toEqual(2);
-
-
-
- // Using a function as a watchExpression
- var food;
- scope.foodCounter = 0;
- expect(scope.foodCounter).toEqual(0);
- scope.$watch(
- // This function returns the value being watched. It is called for each turn of the $digest loop
- function() { return food; },
- // This is the change listener, called when the value returned from the above function changes
- function(newValue, oldValue) {
- if ( newValue !== oldValue ) {
- // Only increment the counter if the value changed
- scope.foodCounter = scope.foodCounter + 1;
- }
- }
- );
- // No digest has been run so the counter will be zero
- expect(scope.foodCounter).toEqual(0);
-
- // Run the digest but since food has not changed count will still be zero
- scope.$digest();
- expect(scope.foodCounter).toEqual(0);
-
- // Update food and run digest. Now the counter will increment
- food = 'cheeseburger';
- scope.$digest();
- expect(scope.foodCounter).toEqual(1);
-
- * ```
- *
- *
- *
- * @param {(function()|string)} watchExpression Expression that is evaluated on each
- * {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers
- * a call to the `listener`.
- *
- * - `string`: Evaluated as {@link guide/expression expression}
- * - `function(scope)`: called with current `scope` as a parameter.
- * @param {function(newVal, oldVal, scope)} listener Callback called whenever the value
- * of `watchExpression` changes.
- *
- * - `newVal` contains the current value of the `watchExpression`
- * - `oldVal` contains the previous value of the `watchExpression`
- * - `scope` refers to the current scope
- * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of
- * comparing for reference equality.
- * @returns {function()} Returns a deregistration function for this listener.
- */
- $watch: function(watchExp, listener, objectEquality) {
- var get = $parse(watchExp);
-
- if (get.$$watchDelegate) {
- return get.$$watchDelegate(this, listener, objectEquality, get);
- }
- var scope = this,
- array = scope.$$watchers,
- watcher = {
- fn: listener,
- last: initWatchVal,
- get: get,
- exp: watchExp,
- eq: !!objectEquality
- };
-
- lastDirtyWatch = null;
-
- if (!isFunction(listener)) {
- watcher.fn = noop;
- }
-
- if (!array) {
- array = scope.$$watchers = [];
- }
- // we use unshift since we use a while loop in $digest for speed.
- // the while loop reads in reverse order.
- array.unshift(watcher);
-
- return function deregisterWatch() {
- arrayRemove(array, watcher);
- lastDirtyWatch = null;
- };
- },
-
- /**
- * @ngdoc method
- * @name $rootScope.Scope#$watchGroup
- * @kind function
- *
- * @description
- * A variant of {@link ng.$rootScope.Scope#$watch $watch()} where it watches an array of `watchExpressions`.
- * If any one expression in the collection changes the `listener` is executed.
- *
- * - The items in the `watchExpressions` array are observed via standard $watch operation and are examined on every
- * call to $digest() to see if any items changes.
- * - The `listener` is called whenever any expression in the `watchExpressions` array changes.
- *
- * @param {Array.<string|Function(scope)>} watchExpressions Array of expressions that will be individually
- * watched using {@link ng.$rootScope.Scope#$watch $watch()}
- *
- * @param {function(newValues, oldValues, scope)} listener Callback called whenever the return value of any
- * expression in `watchExpressions` changes
- * The `newValues` array contains the current values of the `watchExpressions`, with the indexes matching
- * those of `watchExpression`
- * and the `oldValues` array contains the previous values of the `watchExpressions`, with the indexes matching
- * those of `watchExpression`
- * The `scope` refers to the current scope.
- * @returns {function()} Returns a de-registration function for all listeners.
- */
- $watchGroup: function(watchExpressions, listener) {
- var oldValues = new Array(watchExpressions.length);
- var newValues = new Array(watchExpressions.length);
- var deregisterFns = [];
- var self = this;
- var changeReactionScheduled = false;
- var firstRun = true;
-
- if (!watchExpressions.length) {
- // No expressions means we call the listener ASAP
- var shouldCall = true;
- self.$evalAsync(function() {
- if (shouldCall) listener(newValues, newValues, self);
- });
- return function deregisterWatchGroup() {
- shouldCall = false;
- };
- }
-
- if (watchExpressions.length === 1) {
- // Special case size of one
- return this.$watch(watchExpressions[0], function watchGroupAction(value, oldValue, scope) {
- newValues[0] = value;
- oldValues[0] = oldValue;
- listener(newValues, (value === oldValue) ? newValues : oldValues, scope);
- });
- }
-
- forEach(watchExpressions, function(expr, i) {
- var unwatchFn = self.$watch(expr, function watchGroupSubAction(value, oldValue) {
- newValues[i] = value;
- oldValues[i] = oldValue;
- if (!changeReactionScheduled) {
- changeReactionScheduled = true;
- self.$evalAsync(watchGroupAction);
- }
- });
- deregisterFns.push(unwatchFn);
- });
-
- function watchGroupAction() {
- changeReactionScheduled = false;
-
- if (firstRun) {
- firstRun = false;
- listener(newValues, newValues, self);
- } else {
- listener(newValues, oldValues, self);
- }
- }
-
- return function deregisterWatchGroup() {
- while (deregisterFns.length) {
- deregisterFns.shift()();
- }
- };
- },
-
-
- /**
- * @ngdoc method
- * @name $rootScope.Scope#$watchCollection
- * @kind function
- *
- * @description
- * Shallow watches the properties of an object and fires whenever any of the properties change
- * (for arrays, this implies watching the array items; for object maps, this implies watching
- * the properties). If a change is detected, the `listener` callback is fired.
- *
- * - The `obj` collection is observed via standard $watch operation and is examined on every
- * call to $digest() to see if any items have been added, removed, or moved.
- * - The `listener` is called whenever anything within the `obj` has changed. Examples include
- * adding, removing, and moving items belonging to an object or array.
- *
- *
- * # Example
- * ```js
- $scope.names = ['igor', 'matias', 'misko', 'james'];
- $scope.dataCount = 4;
-
- $scope.$watchCollection('names', function(newNames, oldNames) {
- $scope.dataCount = newNames.length;
- });
-
- expect($scope.dataCount).toEqual(4);
- $scope.$digest();
-
- //still at 4 ... no changes
- expect($scope.dataCount).toEqual(4);
-
- $scope.names.pop();
- $scope.$digest();
-
- //now there's been a change
- expect($scope.dataCount).toEqual(3);
- * ```
- *
- *
- * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The
- * expression value should evaluate to an object or an array which is observed on each
- * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the
- * collection will trigger a call to the `listener`.
- *
- * @param {function(newCollection, oldCollection, scope)} listener a callback function called
- * when a change is detected.
- * - The `newCollection` object is the newly modified data obtained from the `obj` expression
- * - The `oldCollection` object is a copy of the former collection data.
- * Due to performance considerations, the`oldCollection` value is computed only if the
- * `listener` function declares two or more arguments.
- * - The `scope` argument refers to the current scope.
- *
- * @returns {function()} Returns a de-registration function for this listener. When the
- * de-registration function is executed, the internal watch operation is terminated.
- */
- $watchCollection: function(obj, listener) {
- $watchCollectionInterceptor.$stateful = true;
-
- var self = this;
- // the current value, updated on each dirty-check run
- var newValue;
- // a shallow copy of the newValue from the last dirty-check run,
- // updated to match newValue during dirty-check run
- var oldValue;
- // a shallow copy of the newValue from when the last change happened
- var veryOldValue;
- // only track veryOldValue if the listener is asking for it
- var trackVeryOldValue = (listener.length > 1);
- var changeDetected = 0;
- var changeDetector = $parse(obj, $watchCollectionInterceptor);
- var internalArray = [];
- var internalObject = {};
- var initRun = true;
- var oldLength = 0;
-
- function $watchCollectionInterceptor(_value) {
- newValue = _value;
- var newLength, key, bothNaN, newItem, oldItem;
-
- // If the new value is undefined, then return undefined as the watch may be a one-time watch
- if (isUndefined(newValue)) return;
-
- if (!isObject(newValue)) { // if primitive
- if (oldValue !== newValue) {
- oldValue = newValue;
- changeDetected++;
- }
- } else if (isArrayLike(newValue)) {
- if (oldValue !== internalArray) {
- // we are transitioning from something which was not an array into array.
- oldValue = internalArray;
- oldLength = oldValue.length = 0;
- changeDetected++;
- }
-
- newLength = newValue.length;
-
- if (oldLength !== newLength) {
- // if lengths do not match we need to trigger change notification
- changeDetected++;
- oldValue.length = oldLength = newLength;
- }
- // copy the items to oldValue and look for changes.
- for (var i = 0; i < newLength; i++) {
- oldItem = oldValue[i];
- newItem = newValue[i];
-
- bothNaN = (oldItem !== oldItem) && (newItem !== newItem);
- if (!bothNaN && (oldItem !== newItem)) {
- changeDetected++;
- oldValue[i] = newItem;
- }
- }
- } else {
- if (oldValue !== internalObject) {
- // we are transitioning from something which was not an object into object.
- oldValue = internalObject = {};
- oldLength = 0;
- changeDetected++;
- }
- // copy the items to oldValue and look for changes.
- newLength = 0;
- for (key in newValue) {
- if (newValue.hasOwnProperty(key)) {
- newLength++;
- newItem = newValue[key];
- oldItem = oldValue[key];
-
- if (key in oldValue) {
- bothNaN = (oldItem !== oldItem) && (newItem !== newItem);
- if (!bothNaN && (oldItem !== newItem)) {
- changeDetected++;
- oldValue[key] = newItem;
- }
- } else {
- oldLength++;
- oldValue[key] = newItem;
- changeDetected++;
- }
- }
- }
- if (oldLength > newLength) {
- // we used to have more keys, need to find them and destroy them.
- changeDetected++;
- for (key in oldValue) {
- if (!newValue.hasOwnProperty(key)) {
- oldLength--;
- delete oldValue[key];
- }
- }
- }
- }
- return changeDetected;
- }
-
- function $watchCollectionAction() {
- if (initRun) {
- initRun = false;
- listener(newValue, newValue, self);
- } else {
- listener(newValue, veryOldValue, self);
- }
-
- // make a copy for the next time a collection is changed
- if (trackVeryOldValue) {
- if (!isObject(newValue)) {
- //primitive
- veryOldValue = newValue;
- } else if (isArrayLike(newValue)) {
- veryOldValue = new Array(newValue.length);
- for (var i = 0; i < newValue.length; i++) {
- veryOldValue[i] = newValue[i];
- }
- } else { // if object
- veryOldValue = {};
- for (var key in newValue) {
- if (hasOwnProperty.call(newValue, key)) {
- veryOldValue[key] = newValue[key];
- }
- }
- }
- }
- }
-
- return this.$watch(changeDetector, $watchCollectionAction);
- },
-
- /**
- * @ngdoc method
- * @name $rootScope.Scope#$digest
- * @kind function
- *
- * @description
- * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and
- * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change
- * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers}
- * until no more listeners are firing. This means that it is possible to get into an infinite
- * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of
- * iterations exceeds 10.
- *
- * Usually, you don't call `$digest()` directly in
- * {@link ng.directive:ngController controllers} or in
- * {@link ng.$compileProvider#directive directives}.
- * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within
- * a {@link ng.$compileProvider#directive directive}), which will force a `$digest()`.
- *
- * If you want to be notified whenever `$digest()` is called,
- * you can register a `watchExpression` function with
- * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`.
- *
- * In unit tests, you may need to call `$digest()` to simulate the scope life cycle.
- *
- * # Example
- * ```js
- var scope = ...;
- scope.name = 'misko';
- scope.counter = 0;
-
- expect(scope.counter).toEqual(0);
- scope.$watch('name', function(newValue, oldValue) {
- scope.counter = scope.counter + 1;
- });
- expect(scope.counter).toEqual(0);
-
- scope.$digest();
- // the listener is always called during the first $digest loop after it was registered
- expect(scope.counter).toEqual(1);
-
- scope.$digest();
- // but now it will not be called unless the value changes
- expect(scope.counter).toEqual(1);
-
- scope.name = 'adam';
- scope.$digest();
- expect(scope.counter).toEqual(2);
- * ```
- *
- */
- $digest: function() {
- var watch, value, last,
- watchers,
- length,
- dirty, ttl = TTL,
- next, current, target = this,
- watchLog = [],
- logIdx, logMsg, asyncTask;
-
- beginPhase('$digest');
- // Check for changes to browser url that happened in sync before the call to $digest
- $browser.$$checkUrlChange();
-
- if (this === $rootScope && applyAsyncId !== null) {
- // If this is the root scope, and $applyAsync has scheduled a deferred $apply(), then
- // cancel the scheduled $apply and flush the queue of expressions to be evaluated.
- $browser.defer.cancel(applyAsyncId);
- flushApplyAsync();
- }
-
- lastDirtyWatch = null;
-
- do { // "while dirty" loop
- dirty = false;
- current = target;
-
- while (asyncQueue.length) {
- try {
- asyncTask = asyncQueue.shift();
- asyncTask.scope.$eval(asyncTask.expression);
- } catch (e) {
- $exceptionHandler(e);
- }
- lastDirtyWatch = null;
- }
-
- traverseScopesLoop:
- do { // "traverse the scopes" loop
- if ((watchers = current.$$watchers)) {
- // process our watches
- length = watchers.length;
- while (length--) {
- try {
- watch = watchers[length];
- // Most common watches are on primitives, in which case we can short
- // circuit it with === operator, only when === fails do we use .equals
- if (watch) {
- if ((value = watch.get(current)) !== (last = watch.last) &&
- !(watch.eq
- ? equals(value, last)
- : (typeof value === 'number' && typeof last === 'number'
- && isNaN(value) && isNaN(last)))) {
- dirty = true;
- lastDirtyWatch = watch;
- watch.last = watch.eq ? copy(value, null) : value;
- watch.fn(value, ((last === initWatchVal) ? value : last), current);
- if (ttl < 5) {
- logIdx = 4 - ttl;
- if (!watchLog[logIdx]) watchLog[logIdx] = [];
- watchLog[logIdx].push({
- msg: isFunction(watch.exp) ? 'fn: ' + (watch.exp.name || watch.exp.toString()) : watch.exp,
- newVal: value,
- oldVal: last
- });
- }
- } else if (watch === lastDirtyWatch) {
- // If the most recently dirty watcher is now clean, short circuit since the remaining watchers
- // have already been tested.
- dirty = false;
- break traverseScopesLoop;
- }
- }
- } catch (e) {
- $exceptionHandler(e);
- }
- }
- }
-
- // Insanity Warning: scope depth-first traversal
- // yes, this code is a bit crazy, but it works and we have tests to prove it!
- // this piece should be kept in sync with the traversal in $broadcast
- if (!(next = (current.$$childHead ||
- (current !== target && current.$$nextSibling)))) {
- while (current !== target && !(next = current.$$nextSibling)) {
- current = current.$parent;
- }
- }
- } while ((current = next));
-
- // `break traverseScopesLoop;` takes us to here
-
- if ((dirty || asyncQueue.length) && !(ttl--)) {
- clearPhase();
- throw $rootScopeMinErr('infdig',
- '{0} $digest() iterations reached. Aborting!\n' +
- 'Watchers fired in the last 5 iterations: {1}',
- TTL, watchLog);
- }
-
- } while (dirty || asyncQueue.length);
-
- clearPhase();
-
- while (postDigestQueue.length) {
- try {
- postDigestQueue.shift()();
- } catch (e) {
- $exceptionHandler(e);
- }
- }
- },
-
-
- /**
- * @ngdoc event
- * @name $rootScope.Scope#$destroy
- * @eventType broadcast on scope being destroyed
- *
- * @description
- * Broadcasted when a scope and its children are being destroyed.
- *
- * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
- * clean up DOM bindings before an element is removed from the DOM.
- */
-
- /**
- * @ngdoc method
- * @name $rootScope.Scope#$destroy
- * @kind function
- *
- * @description
- * Removes the current scope (and all of its children) from the parent scope. Removal implies
- * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer
- * propagate to the current scope and its children. Removal also implies that the current
- * scope is eligible for garbage collection.
- *
- * The `$destroy()` is usually used by directives such as
- * {@link ng.directive:ngRepeat ngRepeat} for managing the
- * unrolling of the loop.
- *
- * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope.
- * Application code can register a `$destroy` event handler that will give it a chance to
- * perform any necessary cleanup.
- *
- * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
- * clean up DOM bindings before an element is removed from the DOM.
- */
- $destroy: function() {
- // we can't destroy the root scope or a scope that has been already destroyed
- if (this.$$destroyed) return;
- var parent = this.$parent;
-
- this.$broadcast('$destroy');
- this.$$destroyed = true;
- if (this === $rootScope) return;
-
- for (var eventName in this.$$listenerCount) {
- decrementListenerCount(this, this.$$listenerCount[eventName], eventName);
- }
-
- // sever all the references to parent scopes (after this cleanup, the current scope should
- // not be retained by any of our references and should be eligible for garbage collection)
- if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;
- if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;
- if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;
- if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling;
-
- // Disable listeners, watchers and apply/digest methods
- this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop;
- this.$on = this.$watch = this.$watchGroup = function() { return noop; };
- this.$$listeners = {};
-
- // All of the code below is bogus code that works around V8's memory leak via optimized code
- // and inline caches.
- //
- // see:
- // - https://code.google.com/p/v8/issues/detail?id=2073#c26
- // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909
- // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451
-
- this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead =
- this.$$childTail = this.$root = this.$$watchers = null;
- },
-
- /**
- * @ngdoc method
- * @name $rootScope.Scope#$eval
- * @kind function
- *
- * @description
- * Executes the `expression` on the current scope and returns the result. Any exceptions in
- * the expression are propagated (uncaught). This is useful when evaluating Angular
- * expressions.
- *
- * # Example
- * ```js
- var scope = ng.$rootScope.Scope();
- scope.a = 1;
- scope.b = 2;
-
- expect(scope.$eval('a+b')).toEqual(3);
- expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3);
- * ```
- *
- * @param {(string|function())=} expression An angular expression to be executed.
- *
- * - `string`: execute using the rules as defined in {@link guide/expression expression}.
- * - `function(scope)`: execute the function with the current `scope` parameter.
- *
- * @param {(object)=} locals Local variables object, useful for overriding values in scope.
- * @returns {*} The result of evaluating the expression.
- */
- $eval: function(expr, locals) {
- return $parse(expr)(this, locals);
- },
-
- /**
- * @ngdoc method
- * @name $rootScope.Scope#$evalAsync
- * @kind function
- *
- * @description
- * Executes the expression on the current scope at a later point in time.
- *
- * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only
- * that:
- *
- * - it will execute after the function that scheduled the evaluation (preferably before DOM
- * rendering).
- * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after
- * `expression` execution.
- *
- * Any exceptions from the execution of the expression are forwarded to the
- * {@link ng.$exceptionHandler $exceptionHandler} service.
- *
- * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle
- * will be scheduled. However, it is encouraged to always call code that changes the model
- * from within an `$apply` call. That includes code evaluated via `$evalAsync`.
- *
- * @param {(string|function())=} expression An angular expression to be executed.
- *
- * - `string`: execute using the rules as defined in {@link guide/expression expression}.
- * - `function(scope)`: execute the function with the current `scope` parameter.
- *
- */
- $evalAsync: function(expr) {
- // if we are outside of an $digest loop and this is the first time we are scheduling async
- // task also schedule async auto-flush
- if (!$rootScope.$$phase && !asyncQueue.length) {
- $browser.defer(function() {
- if (asyncQueue.length) {
- $rootScope.$digest();
- }
- });
- }
-
- asyncQueue.push({scope: this, expression: expr});
- },
-
- $$postDigest: function(fn) {
- postDigestQueue.push(fn);
- },
-
- /**
- * @ngdoc method
- * @name $rootScope.Scope#$apply
- * @kind function
- *
- * @description
- * `$apply()` is used to execute an expression in angular from outside of the angular
- * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries).
- * Because we are calling into the angular framework we need to perform proper scope life
- * cycle of {@link ng.$exceptionHandler exception handling},
- * {@link ng.$rootScope.Scope#$digest executing watches}.
- *
- * ## Life cycle
- *
- * # Pseudo-Code of `$apply()`
- * ```js
- function $apply(expr) {
- try {
- return $eval(expr);
- } catch (e) {
- $exceptionHandler(e);
- } finally {
- $root.$digest();
- }
- }
- * ```
- *
- *
- * Scope's `$apply()` method transitions through the following stages:
- *
- * 1. The {@link guide/expression expression} is executed using the
- * {@link ng.$rootScope.Scope#$eval $eval()} method.
- * 2. Any exceptions from the execution of the expression are forwarded to the
- * {@link ng.$exceptionHandler $exceptionHandler} service.
- * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the
- * expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method.
- *
- *
- * @param {(string|function())=} exp An angular expression to be executed.
- *
- * - `string`: execute using the rules as defined in {@link guide/expression expression}.
- * - `function(scope)`: execute the function with current `scope` parameter.
- *
- * @returns {*} The result of evaluating the expression.
- */
- $apply: function(expr) {
- try {
- beginPhase('$apply');
- return this.$eval(expr);
- } catch (e) {
- $exceptionHandler(e);
- } finally {
- clearPhase();
- try {
- $rootScope.$digest();
- } catch (e) {
- $exceptionHandler(e);
- throw e;
- }
- }
- },
-
- /**
- * @ngdoc method
- * @name $rootScope.Scope#$applyAsync
- * @kind function
- *
- * @description
- * Schedule the invokation of $apply to occur at a later time. The actual time difference
- * varies across browsers, but is typically around ~10 milliseconds.
- *
- * This can be used to queue up multiple expressions which need to be evaluated in the same
- * digest.
- *
- * @param {(string|function())=} exp An angular expression to be executed.
- *
- * - `string`: execute using the rules as defined in {@link guide/expression expression}.
- * - `function(scope)`: execute the function with current `scope` parameter.
- */
- $applyAsync: function(expr) {
- var scope = this;
- expr && applyAsyncQueue.push($applyAsyncExpression);
- scheduleApplyAsync();
-
- function $applyAsyncExpression() {
- scope.$eval(expr);
- }
- },
-
- /**
- * @ngdoc method
- * @name $rootScope.Scope#$on
- * @kind function
- *
- * @description
- * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for
- * discussion of event life cycle.
- *
- * The event listener function format is: `function(event, args...)`. The `event` object
- * passed into the listener has the following attributes:
- *
- * - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or
- * `$broadcast`-ed.
- * - `currentScope` - `{Scope}`: the scope that is currently handling the event. Once the
- * event propagates through the scope hierarchy, this property is set to null.
- * - `name` - `{string}`: name of the event.
- * - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel
- * further event propagation (available only for events that were `$emit`-ed).
- * - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag
- * to true.
- * - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called.
- *
- * @param {string} name Event name to listen on.
- * @param {function(event, ...args)} listener Function to call when the event is emitted.
- * @returns {function()} Returns a deregistration function for this listener.
- */
- $on: function(name, listener) {
- var namedListeners = this.$$listeners[name];
- if (!namedListeners) {
- this.$$listeners[name] = namedListeners = [];
- }
- namedListeners.push(listener);
-
- var current = this;
- do {
- if (!current.$$listenerCount[name]) {
- current.$$listenerCount[name] = 0;
- }
- current.$$listenerCount[name]++;
- } while ((current = current.$parent));
-
- var self = this;
- return function() {
- var indexOfListener = namedListeners.indexOf(listener);
- if (indexOfListener !== -1) {
- namedListeners[indexOfListener] = null;
- decrementListenerCount(self, 1, name);
- }
- };
- },
-
-
- /**
- * @ngdoc method
- * @name $rootScope.Scope#$emit
- * @kind function
- *
- * @description
- * Dispatches an event `name` upwards through the scope hierarchy notifying the
- * registered {@link ng.$rootScope.Scope#$on} listeners.
- *
- * The event life cycle starts at the scope on which `$emit` was called. All
- * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get
- * notified. Afterwards, the event traverses upwards toward the root scope and calls all
- * registered listeners along the way. The event will stop propagating if one of the listeners
- * cancels it.
- *
- * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed
- * onto the {@link ng.$exceptionHandler $exceptionHandler} service.
- *
- * @param {string} name Event name to emit.
- * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.
- * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}).
- */
- $emit: function(name, args) {
- var empty = [],
- namedListeners,
- scope = this,
- stopPropagation = false,
- event = {
- name: name,
- targetScope: scope,
- stopPropagation: function() {stopPropagation = true;},
- preventDefault: function() {
- event.defaultPrevented = true;
- },
- defaultPrevented: false
- },
- listenerArgs = concat([event], arguments, 1),
- i, length;
-
- do {
- namedListeners = scope.$$listeners[name] || empty;
- event.currentScope = scope;
- for (i = 0, length = namedListeners.length; i < length; i++) {
-
- // if listeners were deregistered, defragment the array
- if (!namedListeners[i]) {
- namedListeners.splice(i, 1);
- i--;
- length--;
- continue;
- }
- try {
- //allow all listeners attached to the current scope to run
- namedListeners[i].apply(null, listenerArgs);
- } catch (e) {
- $exceptionHandler(e);
- }
- }
- //if any listener on the current scope stops propagation, prevent bubbling
- if (stopPropagation) {
- event.currentScope = null;
- return event;
- }
- //traverse upwards
- scope = scope.$parent;
- } while (scope);
-
- event.currentScope = null;
-
- return event;
- },
-
-
- /**
- * @ngdoc method
- * @name $rootScope.Scope#$broadcast
- * @kind function
- *
- * @description
- * Dispatches an event `name` downwards to all child scopes (and their children) notifying the
- * registered {@link ng.$rootScope.Scope#$on} listeners.
- *
- * The event life cycle starts at the scope on which `$broadcast` was called. All
- * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get
- * notified. Afterwards, the event propagates to all direct and indirect scopes of the current
- * scope and calls all registered listeners along the way. The event cannot be canceled.
- *
- * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed
- * onto the {@link ng.$exceptionHandler $exceptionHandler} service.
- *
- * @param {string} name Event name to broadcast.
- * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.
- * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on}
- */
- $broadcast: function(name, args) {
- var target = this,
- current = target,
- next = target,
- event = {
- name: name,
- targetScope: target,
- preventDefault: function() {
- event.defaultPrevented = true;
- },
- defaultPrevented: false
- };
-
- if (!target.$$listenerCount[name]) return event;
-
- var listenerArgs = concat([event], arguments, 1),
- listeners, i, length;
-
- //down while you can, then up and next sibling or up and next sibling until back at root
- while ((current = next)) {
- event.currentScope = current;
- listeners = current.$$listeners[name] || [];
- for (i = 0, length = listeners.length; i < length; i++) {
- // if listeners were deregistered, defragment the array
- if (!listeners[i]) {
- listeners.splice(i, 1);
- i--;
- length--;
- continue;
- }
-
- try {
- listeners[i].apply(null, listenerArgs);
- } catch (e) {
- $exceptionHandler(e);
- }
- }
-
- // Insanity Warning: scope depth-first traversal
- // yes, this code is a bit crazy, but it works and we have tests to prove it!
- // this piece should be kept in sync with the traversal in $digest
- // (though it differs due to having the extra check for $$listenerCount)
- if (!(next = ((current.$$listenerCount[name] && current.$$childHead) ||
- (current !== target && current.$$nextSibling)))) {
- while (current !== target && !(next = current.$$nextSibling)) {
- current = current.$parent;
- }
- }
- }
-
- event.currentScope = null;
- return event;
- }
- };
-
- var $rootScope = new Scope();
-
- //The internal queues. Expose them on the $rootScope for debugging/testing purposes.
- var asyncQueue = $rootScope.$$asyncQueue = [];
- var postDigestQueue = $rootScope.$$postDigestQueue = [];
- var applyAsyncQueue = $rootScope.$$applyAsyncQueue = [];
-
- return $rootScope;
-
-
- function beginPhase(phase) {
- if ($rootScope.$$phase) {
- throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase);
- }
-
- $rootScope.$$phase = phase;
- }
-
- function clearPhase() {
- $rootScope.$$phase = null;
- }
-
-
- function decrementListenerCount(current, count, name) {
- do {
- current.$$listenerCount[name] -= count;
-
- if (current.$$listenerCount[name] === 0) {
- delete current.$$listenerCount[name];
- }
- } while ((current = current.$parent));
- }
-
- /**
- * function used as an initial value for watchers.
- * because it's unique we can easily tell it apart from other values
- */
- function initWatchVal() {}
-
- function flushApplyAsync() {
- while (applyAsyncQueue.length) {
- try {
- applyAsyncQueue.shift()();
- } catch (e) {
- $exceptionHandler(e);
- }
- }
- applyAsyncId = null;
- }
-
- function scheduleApplyAsync() {
- if (applyAsyncId === null) {
- applyAsyncId = $browser.defer(function() {
- $rootScope.$apply(flushApplyAsync);
- });
- }
- }
- }];
-}
-
-/**
- * @description
- * Private service to sanitize uris for links and images. Used by $compile and $sanitize.
- */
-function $$SanitizeUriProvider() {
- var aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|tel|file):/,
- imgSrcSanitizationWhitelist = /^\s*((https?|ftp|file|blob):|data:image\/)/;
-
- /**
- * @description
- * Retrieves or overrides the default regular expression that is used for whitelisting of safe
- * urls during a[href] sanitization.
- *
- * The sanitization is a security measure aimed at prevent XSS attacks via html links.
- *
- * Any url about to be assigned to a[href] via data-binding is first normalized and turned into
- * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`
- * regular expression. If a match is found, the original url is written into the dom. Otherwise,
- * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
- *
- * @param {RegExp=} regexp New regexp to whitelist urls with.
- * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
- * chaining otherwise.
- */
- this.aHrefSanitizationWhitelist = function(regexp) {
- if (isDefined(regexp)) {
- aHrefSanitizationWhitelist = regexp;
- return this;
- }
- return aHrefSanitizationWhitelist;
- };
-
-
- /**
- * @description
- * Retrieves or overrides the default regular expression that is used for whitelisting of safe
- * urls during img[src] sanitization.
- *
- * The sanitization is a security measure aimed at prevent XSS attacks via html links.
- *
- * Any url about to be assigned to img[src] via data-binding is first normalized and turned into
- * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`
- * regular expression. If a match is found, the original url is written into the dom. Otherwise,
- * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
- *
- * @param {RegExp=} regexp New regexp to whitelist urls with.
- * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
- * chaining otherwise.
- */
- this.imgSrcSanitizationWhitelist = function(regexp) {
- if (isDefined(regexp)) {
- imgSrcSanitizationWhitelist = regexp;
- return this;
- }
- return imgSrcSanitizationWhitelist;
- };
-
- this.$get = function() {
- return function sanitizeUri(uri, isImage) {
- var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist;
- var normalizedVal;
- normalizedVal = urlResolve(uri).href;
- if (normalizedVal !== '' && !normalizedVal.match(regex)) {
- return 'unsafe:' + normalizedVal;
- }
- return uri;
- };
- };
-}
-
-var $sceMinErr = minErr('$sce');
-
-var SCE_CONTEXTS = {
- HTML: 'html',
- CSS: 'css',
- URL: 'url',
- // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a
- // url. (e.g. ng-include, script src, templateUrl)
- RESOURCE_URL: 'resourceUrl',
- JS: 'js'
-};
-
-// Helper functions follow.
-
-function adjustMatcher(matcher) {
- if (matcher === 'self') {
- return matcher;
- } else if (isString(matcher)) {
- // Strings match exactly except for 2 wildcards - '*' and '**'.
- // '*' matches any character except those from the set ':/.?&'.
- // '**' matches any character (like .* in a RegExp).
- // More than 2 *'s raises an error as it's ill defined.
- if (matcher.indexOf('***') > -1) {
- throw $sceMinErr('iwcard',
- 'Illegal sequence *** in string matcher. String: {0}', matcher);
- }
- matcher = escapeForRegexp(matcher).
- replace('\\*\\*', '.*').
- replace('\\*', '[^:/.?&;]*');
- return new RegExp('^' + matcher + '$');
- } else if (isRegExp(matcher)) {
- // The only other type of matcher allowed is a Regexp.
- // Match entire URL / disallow partial matches.
- // Flags are reset (i.e. no global, ignoreCase or multiline)
- return new RegExp('^' + matcher.source + '$');
- } else {
- throw $sceMinErr('imatcher',
- 'Matchers may only be "self", string patterns or RegExp objects');
- }
-}
-
-
-function adjustMatchers(matchers) {
- var adjustedMatchers = [];
- if (isDefined(matchers)) {
- forEach(matchers, function(matcher) {
- adjustedMatchers.push(adjustMatcher(matcher));
- });
- }
- return adjustedMatchers;
-}
-
-
-/**
- * @ngdoc service
- * @name $sceDelegate
- * @kind function
- *
- * @description
- *
- * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict
- * Contextual Escaping (SCE)} services to AngularJS.
- *
- * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of
- * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is
- * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to
- * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things
- * work because `$sce` delegates to `$sceDelegate` for these operations.
- *
- * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service.
- *
- * The default instance of `$sceDelegate` should work out of the box with little pain. While you
- * can override it completely to change the behavior of `$sce`, the common case would
- * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting
- * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as
- * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist
- * $sceDelegateProvider.resourceUrlWhitelist} and {@link
- * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}
- */
-
-/**
- * @ngdoc provider
- * @name $sceDelegateProvider
- * @description
- *
- * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate
- * $sceDelegate} service. This allows one to get/set the whitelists and blacklists used to ensure
- * that the URLs used for sourcing Angular templates are safe. Refer {@link
- * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and
- * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}
- *
- * For the general details about this service in Angular, read the main page for {@link ng.$sce
- * Strict Contextual Escaping (SCE)}.
- *
- * **Example**: Consider the following case. <a name="example"></a>
- *
- * - your app is hosted at url `http://myapp.example.com/`
- * - but some of your templates are hosted on other domains you control such as
- * `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc.
- * - and you have an open redirect at `http://myapp.example.com/clickThru?...`.
- *
- * Here is what a secure configuration for this scenario might look like:
- *
- * ```
- * angular.module('myApp', []).config(function($sceDelegateProvider) {
- * $sceDelegateProvider.resourceUrlWhitelist([
- * // Allow same origin resource loads.
- * 'self',
- * // Allow loading from our assets domain. Notice the difference between * and **.
- * 'http://srv*.assets.example.com/**'
- * ]);
- *
- * // The blacklist overrides the whitelist so the open redirect here is blocked.
- * $sceDelegateProvider.resourceUrlBlacklist([
- * 'http://myapp.example.com/clickThru**'
- * ]);
- * });
- * ```
- */
-
-function $SceDelegateProvider() {
- this.SCE_CONTEXTS = SCE_CONTEXTS;
-
- // Resource URLs can also be trusted by policy.
- var resourceUrlWhitelist = ['self'],
- resourceUrlBlacklist = [];
-
- /**
- * @ngdoc method
- * @name $sceDelegateProvider#resourceUrlWhitelist
- * @kind function
- *
- * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value
- * provided. This must be an array or null. A snapshot of this array is used so further
- * changes to the array are ignored.
- *
- * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
- * allowed in this array.
- *
- * Note: **an empty whitelist array will block all URLs**!
- *
- * @return {Array} the currently set whitelist array.
- *
- * The **default value** when no whitelist has been explicitly set is `['self']` allowing only
- * same origin resource requests.
- *
- * @description
- * Sets/Gets the whitelist of trusted resource URLs.
- */
- this.resourceUrlWhitelist = function(value) {
- if (arguments.length) {
- resourceUrlWhitelist = adjustMatchers(value);
- }
- return resourceUrlWhitelist;
- };
-
- /**
- * @ngdoc method
- * @name $sceDelegateProvider#resourceUrlBlacklist
- * @kind function
- *
- * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value
- * provided. This must be an array or null. A snapshot of this array is used so further
- * changes to the array are ignored.
- *
- * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
- * allowed in this array.
- *
- * The typical usage for the blacklist is to **block
- * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as
- * these would otherwise be trusted but actually return content from the redirected domain.
- *
- * Finally, **the blacklist overrides the whitelist** and has the final say.
- *
- * @return {Array} the currently set blacklist array.
- *
- * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there
- * is no blacklist.)
- *
- * @description
- * Sets/Gets the blacklist of trusted resource URLs.
- */
-
- this.resourceUrlBlacklist = function(value) {
- if (arguments.length) {
- resourceUrlBlacklist = adjustMatchers(value);
- }
- return resourceUrlBlacklist;
- };
-
- this.$get = ['$injector', function($injector) {
-
- var htmlSanitizer = function htmlSanitizer(html) {
- throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');
- };
-
- if ($injector.has('$sanitize')) {
- htmlSanitizer = $injector.get('$sanitize');
- }
-
-
- function matchUrl(matcher, parsedUrl) {
- if (matcher === 'self') {
- return urlIsSameOrigin(parsedUrl);
- } else {
- // definitely a regex. See adjustMatchers()
- return !!matcher.exec(parsedUrl.href);
- }
- }
-
- function isResourceUrlAllowedByPolicy(url) {
- var parsedUrl = urlResolve(url.toString());
- var i, n, allowed = false;
- // Ensure that at least one item from the whitelist allows this url.
- for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) {
- if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) {
- allowed = true;
- break;
- }
- }
- if (allowed) {
- // Ensure that no item from the blacklist blocked this url.
- for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) {
- if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) {
- allowed = false;
- break;
- }
- }
- }
- return allowed;
- }
-
- function generateHolderType(Base) {
- var holderType = function TrustedValueHolderType(trustedValue) {
- this.$$unwrapTrustedValue = function() {
- return trustedValue;
- };
- };
- if (Base) {
- holderType.prototype = new Base();
- }
- holderType.prototype.valueOf = function sceValueOf() {
- return this.$$unwrapTrustedValue();
- };
- holderType.prototype.toString = function sceToString() {
- return this.$$unwrapTrustedValue().toString();
- };
- return holderType;
- }
-
- var trustedValueHolderBase = generateHolderType(),
- byType = {};
-
- byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase);
- byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase);
- byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase);
- byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase);
- byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]);
-
- /**
- * @ngdoc method
- * @name $sceDelegate#trustAs
- *
- * @description
- * Returns an object that is trusted by angular for use in specified strict
- * contextual escaping contexts (such as ng-bind-html, ng-include, any src
- * attribute interpolation, any dom event binding attribute interpolation
- * such as for onclick, etc.) that uses the provided value.
- * See {@link ng.$sce $sce} for enabling strict contextual escaping.
- *
- * @param {string} type The kind of context in which this value is safe for use. e.g. url,
- * resourceUrl, html, js and css.
- * @param {*} value The value that that should be considered trusted/safe.
- * @returns {*} A value that can be used to stand in for the provided `value` in places
- * where Angular expects a $sce.trustAs() return value.
- */
- function trustAs(type, trustedValue) {
- var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null);
- if (!Constructor) {
- throw $sceMinErr('icontext',
- 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}',
- type, trustedValue);
- }
- if (trustedValue === null || trustedValue === undefined || trustedValue === '') {
- return trustedValue;
- }
- // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting
- // mutable objects, we ensure here that the value passed in is actually a string.
- if (typeof trustedValue !== 'string') {
- throw $sceMinErr('itype',
- 'Attempted to trust a non-string value in a content requiring a string: Context: {0}',
- type);
- }
- return new Constructor(trustedValue);
- }
-
- /**
- * @ngdoc method
- * @name $sceDelegate#valueOf
- *
- * @description
- * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs
- * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link
- * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.
- *
- * If the passed parameter is not a value that had been returned by {@link
- * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is.
- *
- * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}
- * call or anything else.
- * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs
- * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns
- * `value` unchanged.
- */
- function valueOf(maybeTrusted) {
- if (maybeTrusted instanceof trustedValueHolderBase) {
- return maybeTrusted.$$unwrapTrustedValue();
- } else {
- return maybeTrusted;
- }
- }
-
- /**
- * @ngdoc method
- * @name $sceDelegate#getTrusted
- *
- * @description
- * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and
- * returns the originally supplied value if the queried context type is a supertype of the
- * created type. If this condition isn't satisfied, throws an exception.
- *
- * @param {string} type The kind of context in which this value is to be used.
- * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs
- * `$sceDelegate.trustAs`} call.
- * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs
- * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception.
- */
- function getTrusted(type, maybeTrusted) {
- if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') {
- return maybeTrusted;
- }
- var constructor = (byType.hasOwnProperty(type) ? byType[type] : null);
- if (constructor && maybeTrusted instanceof constructor) {
- return maybeTrusted.$$unwrapTrustedValue();
- }
- // If we get here, then we may only take one of two actions.
- // 1. sanitize the value for the requested type, or
- // 2. throw an exception.
- if (type === SCE_CONTEXTS.RESOURCE_URL) {
- if (isResourceUrlAllowedByPolicy(maybeTrusted)) {
- return maybeTrusted;
- } else {
- throw $sceMinErr('insecurl',
- 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}',
- maybeTrusted.toString());
- }
- } else if (type === SCE_CONTEXTS.HTML) {
- return htmlSanitizer(maybeTrusted);
- }
- throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');
- }
-
- return { trustAs: trustAs,
- getTrusted: getTrusted,
- valueOf: valueOf };
- }];
-}
-
-
-/**
- * @ngdoc provider
- * @name $sceProvider
- * @description
- *
- * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service.
- * - enable/disable Strict Contextual Escaping (SCE) in a module
- * - override the default implementation with a custom delegate
- *
- * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}.
- */
-
-/* jshint maxlen: false*/
-
-/**
- * @ngdoc service
- * @name $sce
- * @kind function
- *
- * @description
- *
- * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS.
- *
- * # Strict Contextual Escaping
- *
- * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain
- * contexts to result in a value that is marked as safe to use for that context. One example of
- * such a context is binding arbitrary html controlled by the user via `ng-bind-html`. We refer
- * to these contexts as privileged or SCE contexts.
- *
- * As of version 1.2, Angular ships with SCE enabled by default.
- *
- * Note: When enabled (the default), IE<11 in quirks mode is not supported. In this mode, IE<11 allow
- * one to execute arbitrary javascript by the use of the expression() syntax. Refer
- * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them.
- * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>`
- * to the top of your HTML document.
- *
- * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for
- * security vulnerabilities such as XSS, clickjacking, etc. a lot easier.
- *
- * Here's an example of a binding in a privileged context:
- *
- * ```
- * <input ng-model="userHtml">
- * <div ng-bind-html="userHtml"></div>
- * ```
- *
- * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE
- * disabled, this application allows the user to render arbitrary HTML into the DIV.
- * In a more realistic example, one may be rendering user comments, blog articles, etc. via
- * bindings. (HTML is just one example of a context where rendering user controlled input creates
- * security vulnerabilities.)
- *
- * For the case of HTML, you might use a library, either on the client side, or on the server side,
- * to sanitize unsafe HTML before binding to the value and rendering it in the document.
- *
- * How would you ensure that every place that used these types of bindings was bound to a value that
- * was sanitized by your library (or returned as safe for rendering by your server?) How can you
- * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some
- * properties/fields and forgot to update the binding to the sanitized value?
- *
- * To be secure by default, you want to ensure that any such bindings are disallowed unless you can
- * determine that something explicitly says it's safe to use a value for binding in that
- * context. You can then audit your code (a simple grep would do) to ensure that this is only done
- * for those values that you can easily tell are safe - because they were received from your server,
- * sanitized by your library, etc. You can organize your codebase to help with this - perhaps
- * allowing only the files in a specific directory to do this. Ensuring that the internal API
- * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task.
- *
- * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs}
- * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to
- * obtain values that will be accepted by SCE / privileged contexts.
- *
- *
- * ## How does it work?
- *
- * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted
- * $sce.getTrusted(context, value)} rather than to the value directly. Directives use {@link
- * ng.$sce#parseAs $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the
- * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals.
- *
- * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link
- * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly
- * simplified):
- *
- * ```
- * var ngBindHtmlDirective = ['$sce', function($sce) {
- * return function(scope, element, attr) {
- * scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {
- * element.html(value || '');
- * });
- * };
- * }];
- * ```
- *
- * ## Impact on loading templates
- *
- * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as
- * `templateUrl`'s specified by {@link guide/directive directives}.
- *
- * By default, Angular only loads templates from the same domain and protocol as the application
- * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl
- * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or
- * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist
- * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value.
- *
- * *Please note*:
- * The browser's
- * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)
- * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)
- * policy apply in addition to this and may further restrict whether the template is successfully
- * loaded. This means that without the right CORS policy, loading templates from a different domain
- * won't work on all browsers. Also, loading templates from `file://` URL does not work on some
- * browsers.
- *
- * ## This feels like too much overhead
- *
- * It's important to remember that SCE only applies to interpolation expressions.
- *
- * If your expressions are constant literals, they're automatically trusted and you don't need to
- * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g.
- * `<div ng-bind-html="'<b>implicitly trusted</b>'"></div>`) just works.
- *
- * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them
- * through {@link ng.$sce#getTrusted $sce.getTrusted}. SCE doesn't play a role here.
- *
- * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load
- * templates in `ng-include` from your application's domain without having to even know about SCE.
- * It blocks loading templates from other domains or loading templates over http from an https
- * served document. You can change these by setting your own custom {@link
- * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link
- * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs.
- *
- * This significantly reduces the overhead. It is far easier to pay the small overhead and have an
- * application that's secure and can be audited to verify that with much more ease than bolting
- * security onto an application later.
- *
- * <a name="contexts"></a>
- * ## What trusted context types are supported?
- *
- * | Context | Notes |
- * |---------------------|----------------|
- * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. |
- * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. |
- * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. |
- * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.) <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |
- * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. |
- *
- * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name="resourceUrlPatternItem"></a>
- *
- * Each element in these arrays must be one of the following:
- *
- * - **'self'**
- * - The special **string**, `'self'`, can be used to match against all URLs of the **same
- * domain** as the application document using the **same protocol**.
- * - **String** (except the special value `'self'`)
- * - The string is matched against the full *normalized / absolute URL* of the resource
- * being tested (substring matches are not good enough.)
- * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters
- * match themselves.
- * - `*`: matches zero or more occurrences of any character other than one of the following 6
- * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'. It's a useful wildcard for use
- * in a whitelist.
- * - `**`: matches zero or more occurrences of *any* character. As such, it's not
- * not appropriate to use in for a scheme, domain, etc. as it would match too much. (e.g.
- * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might
- * not have been the intention.) Its usage at the very end of the path is ok. (e.g.
- * http://foo.example.com/templates/**).
- * - **RegExp** (*see caveat below*)
- * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax
- * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to
- * accidentally introduce a bug when one updates a complex expression (imho, all regexes should
- * have good test coverage.). For instance, the use of `.` in the regex is correct only in a
- * small number of cases. A `.` character in the regex used when matching the scheme or a
- * subdomain could be matched against a `:` or literal `.` that was likely not intended. It
- * is highly recommended to use the string patterns and only fall back to regular expressions
- * if they as a last resort.
- * - The regular expression must be an instance of RegExp (i.e. not a string.) It is
- * matched against the **entire** *normalized / absolute URL* of the resource being tested
- * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags
- * present on the RegExp (such as multiline, global, ignoreCase) are ignored.
- * - If you are generating your JavaScript from some other templating engine (not
- * recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)),
- * remember to escape your regular expression (and be aware that you might need more than
- * one level of escaping depending on your templating engine and the way you interpolated
- * the value.) Do make use of your platform's escaping mechanism as it might be good
- * enough before coding your own. e.g. Ruby has
- * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape)
- * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape).
- * Javascript lacks a similar built in function for escaping. Take a look at Google
- * Closure library's [goog.string.regExpEscape(s)](
- * http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962).
- *
- * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example.
- *
- * ## Show me an example using SCE.
- *
- * <example module="mySceApp" deps="angular-sanitize.js">
- * <file name="index.html">
- * <div ng-controller="AppController as myCtrl">
- * <i ng-bind-html="myCtrl.explicitlyTrustedHtml" id="explicitlyTrustedHtml"></i><br><br>
- * <b>User comments</b><br>
- * By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when
- * $sanitize is available. If $sanitize isn't available, this results in an error instead of an
- * exploit.
- * <div class="well">
- * <div ng-repeat="userComment in myCtrl.userComments">
- * <b>{{userComment.name}}</b>:
- * <span ng-bind-html="userComment.htmlComment" class="htmlComment"></span>
- * <br>
- * </div>
- * </div>
- * </div>
- * </file>
- *
- * <file name="script.js">
- * angular.module('mySceApp', ['ngSanitize'])
- * .controller('AppController', ['$http', '$templateCache', '$sce',
- * function($http, $templateCache, $sce) {
- * var self = this;
- * $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) {
- * self.userComments = userComments;
- * });
- * self.explicitlyTrustedHtml = $sce.trustAsHtml(
- * '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' +
- * 'sanitization.&quot;">Hover over this text.</span>');
- * }]);
- * </file>
- *
- * <file name="test_data.json">
- * [
- * { "name": "Alice",
- * "htmlComment":
- * "<span onmouseover='this.textContent=\"PWN3D!\"'>Is <i>anyone</i> reading this?</span>"
- * },
- * { "name": "Bob",
- * "htmlComment": "<i>Yes!</i> Am I the only other one?"
- * }
- * ]
- * </file>
- *
- * <file name="protractor.js" type="protractor">
- * describe('SCE doc demo', function() {
- * it('should sanitize untrusted values', function() {
- * expect(element.all(by.css('.htmlComment')).first().getInnerHtml())
- * .toBe('<span>Is <i>anyone</i> reading this?</span>');
- * });
- *
- * it('should NOT sanitize explicitly trusted values', function() {
- * expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe(
- * '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' +
- * 'sanitization.&quot;">Hover over this text.</span>');
- * });
- * });
- * </file>
- * </example>
- *
- *
- *
- * ## Can I disable SCE completely?
- *
- * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits
- * for little coding overhead. It will be much harder to take an SCE disabled application and
- * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE
- * for cases where you have a lot of existing code that was written before SCE was introduced and
- * you're migrating them a module at a time.
- *
- * That said, here's how you can completely disable SCE:
- *
- * ```
- * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {
- * // Completely disable SCE. For demonstration purposes only!
- * // Do not use in new projects.
- * $sceProvider.enabled(false);
- * });
- * ```
- *
- */
-/* jshint maxlen: 100 */
-
-function $SceProvider() {
- var enabled = true;
-
- /**
- * @ngdoc method
- * @name $sceProvider#enabled
- * @kind function
- *
- * @param {boolean=} value If provided, then enables/disables SCE.
- * @return {boolean} true if SCE is enabled, false otherwise.
- *
- * @description
- * Enables/disables SCE and returns the current value.
- */
- this.enabled = function(value) {
- if (arguments.length) {
- enabled = !!value;
- }
- return enabled;
- };
-
-
- /* Design notes on the default implementation for SCE.
- *
- * The API contract for the SCE delegate
- * -------------------------------------
- * The SCE delegate object must provide the following 3 methods:
- *
- * - trustAs(contextEnum, value)
- * This method is used to tell the SCE service that the provided value is OK to use in the
- * contexts specified by contextEnum. It must return an object that will be accepted by
- * getTrusted() for a compatible contextEnum and return this value.
- *
- * - valueOf(value)
- * For values that were not produced by trustAs(), return them as is. For values that were
- * produced by trustAs(), return the corresponding input value to trustAs. Basically, if
- * trustAs is wrapping the given values into some type, this operation unwraps it when given
- * such a value.
- *
- * - getTrusted(contextEnum, value)
- * This function should return the a value that is safe to use in the context specified by
- * contextEnum or throw and exception otherwise.
- *
- * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be
- * opaque or wrapped in some holder object. That happens to be an implementation detail. For
- * instance, an implementation could maintain a registry of all trusted objects by context. In
- * such a case, trustAs() would return the same object that was passed in. getTrusted() would
- * return the same object passed in if it was found in the registry under a compatible context or
- * throw an exception otherwise. An implementation might only wrap values some of the time based
- * on some criteria. getTrusted() might return a value and not throw an exception for special
- * constants or objects even if not wrapped. All such implementations fulfill this contract.
- *
- *
- * A note on the inheritance model for SCE contexts
- * ------------------------------------------------
- * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This
- * is purely an implementation details.
- *
- * The contract is simply this:
- *
- * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value)
- * will also succeed.
- *
- * Inheritance happens to capture this in a natural way. In some future, we
- * may not use inheritance anymore. That is OK because no code outside of
- * sce.js and sceSpecs.js would need to be aware of this detail.
- */
-
- this.$get = ['$parse', '$sceDelegate', function(
- $parse, $sceDelegate) {
- // Prereq: Ensure that we're not running in IE<11 quirks mode. In that mode, IE < 11 allow
- // the "expression(javascript expression)" syntax which is insecure.
- if (enabled && msie < 8) {
- throw $sceMinErr('iequirks',
- 'Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks ' +
- 'mode. You can fix this by adding the text <!doctype html> to the top of your HTML ' +
- 'document. See http://docs.angularjs.org/api/ng.$sce for more information.');
- }
-
- var sce = shallowCopy(SCE_CONTEXTS);
-
- /**
- * @ngdoc method
- * @name $sce#isEnabled
- * @kind function
- *
- * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you
- * have to do it at module config time on {@link ng.$sceProvider $sceProvider}.
- *
- * @description
- * Returns a boolean indicating if SCE is enabled.
- */
- sce.isEnabled = function() {
- return enabled;
- };
- sce.trustAs = $sceDelegate.trustAs;
- sce.getTrusted = $sceDelegate.getTrusted;
- sce.valueOf = $sceDelegate.valueOf;
-
- if (!enabled) {
- sce.trustAs = sce.getTrusted = function(type, value) { return value; };
- sce.valueOf = identity;
- }
-
- /**
- * @ngdoc method
- * @name $sce#parseAs
- *
- * @description
- * Converts Angular {@link guide/expression expression} into a function. This is like {@link
- * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it
- * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*,
- * *result*)}
- *
- * @param {string} type The kind of SCE context in which this result will be used.
- * @param {string} expression String expression to compile.
- * @returns {function(context, locals)} a function which represents the compiled expression:
- *
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
- * are evaluated against (typically a scope object).
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
- * `context`.
- */
- sce.parseAs = function sceParseAs(type, expr) {
- var parsed = $parse(expr);
- if (parsed.literal && parsed.constant) {
- return parsed;
- } else {
- return $parse(expr, function(value) {
- return sce.getTrusted(type, value);
- });
- }
- };
-
- /**
- * @ngdoc method
- * @name $sce#trustAs
- *
- * @description
- * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such,
- * returns an object that is trusted by angular for use in specified strict contextual
- * escaping contexts (such as ng-bind-html, ng-include, any src attribute
- * interpolation, any dom event binding attribute interpolation such as for onclick, etc.)
- * that uses the provided value. See * {@link ng.$sce $sce} for enabling strict contextual
- * escaping.
- *
- * @param {string} type The kind of context in which this value is safe for use. e.g. url,
- * resource_url, html, js and css.
- * @param {*} value The value that that should be considered trusted/safe.
- * @returns {*} A value that can be used to stand in for the provided `value` in places
- * where Angular expects a $sce.trustAs() return value.
- */
-
- /**
- * @ngdoc method
- * @name $sce#trustAsHtml
- *
- * @description
- * Shorthand method. `$sce.trustAsHtml(value)` →
- * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`}
- *
- * @param {*} value The value to trustAs.
- * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml
- * $sce.getTrustedHtml(value)} to obtain the original value. (privileged directives
- * only accept expressions that are either literal constants or are the
- * return value of {@link ng.$sce#trustAs $sce.trustAs}.)
- */
-
- /**
- * @ngdoc method
- * @name $sce#trustAsUrl
- *
- * @description
- * Shorthand method. `$sce.trustAsUrl(value)` →
- * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`}
- *
- * @param {*} value The value to trustAs.
- * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl
- * $sce.getTrustedUrl(value)} to obtain the original value. (privileged directives
- * only accept expressions that are either literal constants or are the
- * return value of {@link ng.$sce#trustAs $sce.trustAs}.)
- */
-
- /**
- * @ngdoc method
- * @name $sce#trustAsResourceUrl
- *
- * @description
- * Shorthand method. `$sce.trustAsResourceUrl(value)` →
- * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`}
- *
- * @param {*} value The value to trustAs.
- * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl
- * $sce.getTrustedResourceUrl(value)} to obtain the original value. (privileged directives
- * only accept expressions that are either literal constants or are the return
- * value of {@link ng.$sce#trustAs $sce.trustAs}.)
- */
-
- /**
- * @ngdoc method
- * @name $sce#trustAsJs
- *
- * @description
- * Shorthand method. `$sce.trustAsJs(value)` →
- * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`}
- *
- * @param {*} value The value to trustAs.
- * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs
- * $sce.getTrustedJs(value)} to obtain the original value. (privileged directives
- * only accept expressions that are either literal constants or are the
- * return value of {@link ng.$sce#trustAs $sce.trustAs}.)
- */
-
- /**
- * @ngdoc method
- * @name $sce#getTrusted
- *
- * @description
- * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such,
- * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the
- * originally supplied value if the queried context type is a supertype of the created type.
- * If this condition isn't satisfied, throws an exception.
- *
- * @param {string} type The kind of context in which this value is to be used.
- * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`}
- * call.
- * @returns {*} The value the was originally provided to
- * {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context.
- * Otherwise, throws an exception.
- */
-
- /**
- * @ngdoc method
- * @name $sce#getTrustedHtml
- *
- * @description
- * Shorthand method. `$sce.getTrustedHtml(value)` →
- * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`}
- *
- * @param {*} value The value to pass to `$sce.getTrusted`.
- * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)`
- */
-
- /**
- * @ngdoc method
- * @name $sce#getTrustedCss
- *
- * @description
- * Shorthand method. `$sce.getTrustedCss(value)` →
- * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`}
- *
- * @param {*} value The value to pass to `$sce.getTrusted`.
- * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)`
- */
-
- /**
- * @ngdoc method
- * @name $sce#getTrustedUrl
- *
- * @description
- * Shorthand method. `$sce.getTrustedUrl(value)` →
- * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`}
- *
- * @param {*} value The value to pass to `$sce.getTrusted`.
- * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)`
- */
-
- /**
- * @ngdoc method
- * @name $sce#getTrustedResourceUrl
- *
- * @description
- * Shorthand method. `$sce.getTrustedResourceUrl(value)` →
- * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`}
- *
- * @param {*} value The value to pass to `$sceDelegate.getTrusted`.
- * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)`
- */
-
- /**
- * @ngdoc method
- * @name $sce#getTrustedJs
- *
- * @description
- * Shorthand method. `$sce.getTrustedJs(value)` →
- * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`}
- *
- * @param {*} value The value to pass to `$sce.getTrusted`.
- * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)`
- */
-
- /**
- * @ngdoc method
- * @name $sce#parseAsHtml
- *
- * @description
- * Shorthand method. `$sce.parseAsHtml(expression string)` →
- * {@link ng.$sce#parseAs `$sce.parseAs($sce.HTML, value)`}
- *
- * @param {string} expression String expression to compile.
- * @returns {function(context, locals)} a function which represents the compiled expression:
- *
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
- * are evaluated against (typically a scope object).
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
- * `context`.
- */
-
- /**
- * @ngdoc method
- * @name $sce#parseAsCss
- *
- * @description
- * Shorthand method. `$sce.parseAsCss(value)` →
- * {@link ng.$sce#parseAs `$sce.parseAs($sce.CSS, value)`}
- *
- * @param {string} expression String expression to compile.
- * @returns {function(context, locals)} a function which represents the compiled expression:
- *
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
- * are evaluated against (typically a scope object).
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
- * `context`.
- */
-
- /**
- * @ngdoc method
- * @name $sce#parseAsUrl
- *
- * @description
- * Shorthand method. `$sce.parseAsUrl(value)` →
- * {@link ng.$sce#parseAs `$sce.parseAs($sce.URL, value)`}
- *
- * @param {string} expression String expression to compile.
- * @returns {function(context, locals)} a function which represents the compiled expression:
- *
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
- * are evaluated against (typically a scope object).
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
- * `context`.
- */
-
- /**
- * @ngdoc method
- * @name $sce#parseAsResourceUrl
- *
- * @description
- * Shorthand method. `$sce.parseAsResourceUrl(value)` →
- * {@link ng.$sce#parseAs `$sce.parseAs($sce.RESOURCE_URL, value)`}
- *
- * @param {string} expression String expression to compile.
- * @returns {function(context, locals)} a function which represents the compiled expression:
- *
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
- * are evaluated against (typically a scope object).
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
- * `context`.
- */
-
- /**
- * @ngdoc method
- * @name $sce#parseAsJs
- *
- * @description
- * Shorthand method. `$sce.parseAsJs(value)` →
- * {@link ng.$sce#parseAs `$sce.parseAs($sce.JS, value)`}
- *
- * @param {string} expression String expression to compile.
- * @returns {function(context, locals)} a function which represents the compiled expression:
- *
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
- * are evaluated against (typically a scope object).
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
- * `context`.
- */
-
- // Shorthand delegations.
- var parse = sce.parseAs,
- getTrusted = sce.getTrusted,
- trustAs = sce.trustAs;
-
- forEach(SCE_CONTEXTS, function(enumValue, name) {
- var lName = lowercase(name);
- sce[camelCase("parse_as_" + lName)] = function(expr) {
- return parse(enumValue, expr);
- };
- sce[camelCase("get_trusted_" + lName)] = function(value) {
- return getTrusted(enumValue, value);
- };
- sce[camelCase("trust_as_" + lName)] = function(value) {
- return trustAs(enumValue, value);
- };
- });
-
- return sce;
- }];
-}
-
-/**
- * !!! This is an undocumented "private" service !!!
- *
- * @name $sniffer
- * @requires $window
- * @requires $document
- *
- * @property {boolean} history Does the browser support html5 history api ?
- * @property {boolean} transitions Does the browser support CSS transition events ?
- * @property {boolean} animations Does the browser support CSS animation events ?
- *
- * @description
- * This is very simple implementation of testing browser's features.
- */
-function $SnifferProvider() {
- this.$get = ['$window', '$document', function($window, $document) {
- var eventSupport = {},
- android =
- int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),
- boxee = /Boxee/i.test(($window.navigator || {}).userAgent),
- document = $document[0] || {},
- vendorPrefix,
- vendorRegex = /^(Moz|webkit|ms)(?=[A-Z])/,
- bodyStyle = document.body && document.body.style,
- transitions = false,
- animations = false,
- match;
-
- if (bodyStyle) {
- for (var prop in bodyStyle) {
- if (match = vendorRegex.exec(prop)) {
- vendorPrefix = match[0];
- vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1);
- break;
- }
- }
-
- if (!vendorPrefix) {
- vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';
- }
-
- transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));
- animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));
-
- if (android && (!transitions || !animations)) {
- transitions = isString(document.body.style.webkitTransition);
- animations = isString(document.body.style.webkitAnimation);
- }
- }
-
-
- return {
- // Android has history.pushState, but it does not update location correctly
- // so let's not use the history API at all.
- // http://code.google.com/p/android/issues/detail?id=17471
- // https://github.com/angular/angular.js/issues/904
-
- // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has
- // so let's not use the history API also
- // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined
- // jshint -W018
- history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),
- // jshint +W018
- hasEvent: function(event) {
- // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have
- // it. In particular the event is not fired when backspace or delete key are pressed or
- // when cut operation is performed.
- if (event == 'input' && msie == 9) return false;
-
- if (isUndefined(eventSupport[event])) {
- var divElm = document.createElement('div');
- eventSupport[event] = 'on' + event in divElm;
- }
-
- return eventSupport[event];
- },
- csp: csp(),
- vendorPrefix: vendorPrefix,
- transitions: transitions,
- animations: animations,
- android: android
- };
- }];
-}
-
-var $compileMinErr = minErr('$compile');
-
-/**
- * @ngdoc service
- * @name $templateRequest
- *
- * @description
- * The `$templateRequest` service downloads the provided template using `$http` and, upon success,
- * stores the contents inside of `$templateCache`. If the HTTP request fails or the response data
- * of the HTTP request is empty then a `$compile` error will be thrown (the exception can be thwarted
- * by setting the 2nd parameter of the function to true).
- *
- * @param {string} tpl The HTTP request template URL
- * @param {boolean=} ignoreRequestError Whether or not to ignore the exception when the request fails or the template is empty
- *
- * @return {Promise} the HTTP Promise for the given.
- *
- * @property {number} totalPendingRequests total amount of pending template requests being downloaded.
- */
-function $TemplateRequestProvider() {
- this.$get = ['$templateCache', '$http', '$q', function($templateCache, $http, $q) {
- function handleRequestFn(tpl, ignoreRequestError) {
- var self = handleRequestFn;
- self.totalPendingRequests++;
-
- var transformResponse = $http.defaults && $http.defaults.transformResponse;
-
- if (isArray(transformResponse)) {
- transformResponse = transformResponse.filter(function(transformer) {
- return transformer !== defaultHttpResponseTransform;
- });
- } else if (transformResponse === defaultHttpResponseTransform) {
- transformResponse = null;
- }
-
- var httpOptions = {
- cache: $templateCache,
- transformResponse: transformResponse
- };
-
- return $http.get(tpl, httpOptions)
- .then(function(response) {
- var html = response.data;
- self.totalPendingRequests--;
- $templateCache.put(tpl, html);
- return html;
- }, handleError);
-
- function handleError(resp) {
- self.totalPendingRequests--;
- if (!ignoreRequestError) {
- throw $compileMinErr('tpload', 'Failed to load template: {0}', tpl);
- }
- return $q.reject(resp);
- }
- }
-
- handleRequestFn.totalPendingRequests = 0;
-
- return handleRequestFn;
- }];
-}
-
-function $$TestabilityProvider() {
- this.$get = ['$rootScope', '$browser', '$location',
- function($rootScope, $browser, $location) {
-
- /**
- * @name $testability
- *
- * @description
- * The private $$testability service provides a collection of methods for use when debugging
- * or by automated test and debugging tools.
- */
- var testability = {};
-
- /**
- * @name $$testability#findBindings
- *
- * @description
- * Returns an array of elements that are bound (via ng-bind or {{}})
- * to expressions matching the input.
- *
- * @param {Element} element The element root to search from.
- * @param {string} expression The binding expression to match.
- * @param {boolean} opt_exactMatch If true, only returns exact matches
- * for the expression. Filters and whitespace are ignored.
- */
- testability.findBindings = function(element, expression, opt_exactMatch) {
- var bindings = element.getElementsByClassName('ng-binding');
- var matches = [];
- forEach(bindings, function(binding) {
- var dataBinding = angular.element(binding).data('$binding');
- if (dataBinding) {
- forEach(dataBinding, function(bindingName) {
- if (opt_exactMatch) {
- var matcher = new RegExp('(^|\\s)' + escapeForRegexp(expression) + '(\\s|\\||$)');
- if (matcher.test(bindingName)) {
- matches.push(binding);
- }
- } else {
- if (bindingName.indexOf(expression) != -1) {
- matches.push(binding);
- }
- }
- });
- }
- });
- return matches;
- };
-
- /**
- * @name $$testability#findModels
- *
- * @description
- * Returns an array of elements that are two-way found via ng-model to
- * expressions matching the input.
- *
- * @param {Element} element The element root to search from.
- * @param {string} expression The model expression to match.
- * @param {boolean} opt_exactMatch If true, only returns exact matches
- * for the expression.
- */
- testability.findModels = function(element, expression, opt_exactMatch) {
- var prefixes = ['ng-', 'data-ng-', 'ng\\:'];
- for (var p = 0; p < prefixes.length; ++p) {
- var attributeEquals = opt_exactMatch ? '=' : '*=';
- var selector = '[' + prefixes[p] + 'model' + attributeEquals + '"' + expression + '"]';
- var elements = element.querySelectorAll(selector);
- if (elements.length) {
- return elements;
- }
- }
- };
-
- /**
- * @name $$testability#getLocation
- *
- * @description
- * Shortcut for getting the location in a browser agnostic way. Returns
- * the path, search, and hash. (e.g. /path?a=b#hash)
- */
- testability.getLocation = function() {
- return $location.url();
- };
-
- /**
- * @name $$testability#setLocation
- *
- * @description
- * Shortcut for navigating to a location without doing a full page reload.
- *
- * @param {string} url The location url (path, search and hash,
- * e.g. /path?a=b#hash) to go to.
- */
- testability.setLocation = function(url) {
- if (url !== $location.url()) {
- $location.url(url);
- $rootScope.$digest();
- }
- };
-
- /**
- * @name $$testability#whenStable
- *
- * @description
- * Calls the callback when $timeout and $http requests are completed.
- *
- * @param {function} callback
- */
- testability.whenStable = function(callback) {
- $browser.notifyWhenNoOutstandingRequests(callback);
- };
-
- return testability;
- }];
-}
-
-function $TimeoutProvider() {
- this.$get = ['$rootScope', '$browser', '$q', '$$q', '$exceptionHandler',
- function($rootScope, $browser, $q, $$q, $exceptionHandler) {
- var deferreds = {};
-
-
- /**
- * @ngdoc service
- * @name $timeout
- *
- * @description
- * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch
- * block and delegates any exceptions to
- * {@link ng.$exceptionHandler $exceptionHandler} service.
- *
- * The return value of registering a timeout function is a promise, which will be resolved when
- * the timeout is reached and the timeout function is executed.
- *
- * To cancel a timeout request, call `$timeout.cancel(promise)`.
- *
- * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to
- * synchronously flush the queue of deferred functions.
- *
- * @param {function()} fn A function, whose execution should be delayed.
- * @param {number=} [delay=0] Delay in milliseconds.
- * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
- * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
- * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this
- * promise will be resolved with is the return value of the `fn` function.
- *
- */
- function timeout(fn, delay, invokeApply) {
- var skipApply = (isDefined(invokeApply) && !invokeApply),
- deferred = (skipApply ? $$q : $q).defer(),
- promise = deferred.promise,
- timeoutId;
-
- timeoutId = $browser.defer(function() {
- try {
- deferred.resolve(fn());
- } catch (e) {
- deferred.reject(e);
- $exceptionHandler(e);
- }
- finally {
- delete deferreds[promise.$$timeoutId];
- }
-
- if (!skipApply) $rootScope.$apply();
- }, delay);
-
- promise.$$timeoutId = timeoutId;
- deferreds[timeoutId] = deferred;
-
- return promise;
- }
-
-
- /**
- * @ngdoc method
- * @name $timeout#cancel
- *
- * @description
- * Cancels a task associated with the `promise`. As a result of this, the promise will be
- * resolved with a rejection.
- *
- * @param {Promise=} promise Promise returned by the `$timeout` function.
- * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully
- * canceled.
- */
- timeout.cancel = function(promise) {
- if (promise && promise.$$timeoutId in deferreds) {
- deferreds[promise.$$timeoutId].reject('canceled');
- delete deferreds[promise.$$timeoutId];
- return $browser.defer.cancel(promise.$$timeoutId);
- }
- return false;
- };
-
- return timeout;
- }];
-}
-
-// NOTE: The usage of window and document instead of $window and $document here is
-// deliberate. This service depends on the specific behavior of anchor nodes created by the
-// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and
-// cause us to break tests. In addition, when the browser resolves a URL for XHR, it
-// doesn't know about mocked locations and resolves URLs to the real document - which is
-// exactly the behavior needed here. There is little value is mocking these out for this
-// service.
-var urlParsingNode = document.createElement("a");
-var originUrl = urlResolve(window.location.href);
-
-
-/**
- *
- * Implementation Notes for non-IE browsers
- * ----------------------------------------
- * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM,
- * results both in the normalizing and parsing of the URL. Normalizing means that a relative
- * URL will be resolved into an absolute URL in the context of the application document.
- * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related
- * properties are all populated to reflect the normalized URL. This approach has wide
- * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See
- * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html
- *
- * Implementation Notes for IE
- * ---------------------------
- * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other
- * browsers. However, the parsed components will not be set if the URL assigned did not specify
- * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We
- * work around that by performing the parsing in a 2nd step by taking a previously normalized
- * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the
- * properties such as protocol, hostname, port, etc.
- *
- * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one
- * uses the inner HTML approach to assign the URL as part of an HTML snippet -
- * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL.
- * Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception.
- * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that
- * method and IE < 8 is unsupported.
- *
- * References:
- * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement
- * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html
- * http://url.spec.whatwg.org/#urlutils
- * https://github.com/angular/angular.js/pull/2902
- * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/
- *
- * @kind function
- * @param {string} url The URL to be parsed.
- * @description Normalizes and parses a URL.
- * @returns {object} Returns the normalized URL as a dictionary.
- *
- * | member name | Description |
- * |---------------|----------------|
- * | href | A normalized version of the provided URL if it was not an absolute URL |
- * | protocol | The protocol including the trailing colon |
- * | host | The host and port (if the port is non-default) of the normalizedUrl |
- * | search | The search params, minus the question mark |
- * | hash | The hash string, minus the hash symbol
- * | hostname | The hostname
- * | port | The port, without ":"
- * | pathname | The pathname, beginning with "/"
- *
- */
-function urlResolve(url) {
- var href = url;
-
- if (msie) {
- // Normalize before parse. Refer Implementation Notes on why this is
- // done in two steps on IE.
- urlParsingNode.setAttribute("href", href);
- href = urlParsingNode.href;
- }
-
- urlParsingNode.setAttribute('href', href);
-
- // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
- return {
- href: urlParsingNode.href,
- protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
- host: urlParsingNode.host,
- search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
- hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
- hostname: urlParsingNode.hostname,
- port: urlParsingNode.port,
- pathname: (urlParsingNode.pathname.charAt(0) === '/')
- ? urlParsingNode.pathname
- : '/' + urlParsingNode.pathname
- };
-}
-
-/**
- * Parse a request URL and determine whether this is a same-origin request as the application document.
- *
- * @param {string|object} requestUrl The url of the request as a string that will be resolved
- * or a parsed URL object.
- * @returns {boolean} Whether the request is for the same origin as the application document.
- */
-function urlIsSameOrigin(requestUrl) {
- var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;
- return (parsed.protocol === originUrl.protocol &&
- parsed.host === originUrl.host);
-}
-
-/**
- * @ngdoc service
- * @name $window
- *
- * @description
- * A reference to the browser's `window` object. While `window`
- * is globally available in JavaScript, it causes testability problems, because
- * it is a global variable. In angular we always refer to it through the
- * `$window` service, so it may be overridden, removed or mocked for testing.
- *
- * Expressions, like the one defined for the `ngClick` directive in the example
- * below, are evaluated with respect to the current scope. Therefore, there is
- * no risk of inadvertently coding in a dependency on a global value in such an
- * expression.
- *
- * @example
- <example module="windowExample">
- <file name="index.html">
- <script>
- angular.module('windowExample', [])
- .controller('ExampleController', ['$scope', '$window', function($scope, $window) {
- $scope.greeting = 'Hello, World!';
- $scope.doGreeting = function(greeting) {
- $window.alert(greeting);
- };
- }]);
- </script>
- <div ng-controller="ExampleController">
- <input type="text" ng-model="greeting" />
- <button ng-click="doGreeting(greeting)">ALERT</button>
- </div>
- </file>
- <file name="protractor.js" type="protractor">
- it('should display the greeting in the input box', function() {
- element(by.model('greeting')).sendKeys('Hello, E2E Tests');
- // If we click the button it will block the test runner
- // element(':button').click();
- });
- </file>
- </example>
- */
-function $WindowProvider() {
- this.$get = valueFn(window);
-}
-
-/* global currencyFilter: true,
- dateFilter: true,
- filterFilter: true,
- jsonFilter: true,
- limitToFilter: true,
- lowercaseFilter: true,
- numberFilter: true,
- orderByFilter: true,
- uppercaseFilter: true,
- */
-
-/**
- * @ngdoc provider
- * @name $filterProvider
- * @description
- *
- * Filters are just functions which transform input to an output. However filters need to be
- * Dependency Injected. To achieve this a filter definition consists of a factory function which is
- * annotated with dependencies and is responsible for creating a filter function.
- *
- * ```js
- * // Filter registration
- * function MyModule($provide, $filterProvider) {
- * // create a service to demonstrate injection (not always needed)
- * $provide.value('greet', function(name){
- * return 'Hello ' + name + '!';
- * });
- *
- * // register a filter factory which uses the
- * // greet service to demonstrate DI.
- * $filterProvider.register('greet', function(greet){
- * // return the filter function which uses the greet service
- * // to generate salutation
- * return function(text) {
- * // filters need to be forgiving so check input validity
- * return text && greet(text) || text;
- * };
- * });
- * }
- * ```
- *
- * The filter function is registered with the `$injector` under the filter name suffix with
- * `Filter`.
- *
- * ```js
- * it('should be the same instance', inject(
- * function($filterProvider) {
- * $filterProvider.register('reverse', function(){
- * return ...;
- * });
- * },
- * function($filter, reverseFilter) {
- * expect($filter('reverse')).toBe(reverseFilter);
- * });
- * ```
- *
- *
- * For more information about how angular filters work, and how to create your own filters, see
- * {@link guide/filter Filters} in the Angular Developer Guide.
- */
-
-/**
- * @ngdoc service
- * @name $filter
- * @kind function
- * @description
- * Filters are used for formatting data displayed to the user.
- *
- * The general syntax in templates is as follows:
- *
- * {{ expression [| filter_name[:parameter_value] ... ] }}
- *
- * @param {String} name Name of the filter function to retrieve
- * @return {Function} the filter function
- * @example
- <example name="$filter" module="filterExample">
- <file name="index.html">
- <div ng-controller="MainCtrl">
- <h3>{{ originalText }}</h3>
- <h3>{{ filteredText }}</h3>
- </div>
- </file>
-
- <file name="script.js">
- angular.module('filterExample', [])
- .controller('MainCtrl', function($scope, $filter) {
- $scope.originalText = 'hello';
- $scope.filteredText = $filter('uppercase')($scope.originalText);
- });
- </file>
- </example>
- */
-$FilterProvider.$inject = ['$provide'];
-function $FilterProvider($provide) {
- var suffix = 'Filter';
-
- /**
- * @ngdoc method
- * @name $filterProvider#register
- * @param {string|Object} name Name of the filter function, or an object map of filters where
- * the keys are the filter names and the values are the filter factories.
- * @returns {Object} Registered filter instance, or if a map of filters was provided then a map
- * of the registered filter instances.
- */
- function register(name, factory) {
- if (isObject(name)) {
- var filters = {};
- forEach(name, function(filter, key) {
- filters[key] = register(key, filter);
- });
- return filters;
- } else {
- return $provide.factory(name + suffix, factory);
- }
- }
- this.register = register;
-
- this.$get = ['$injector', function($injector) {
- return function(name) {
- return $injector.get(name + suffix);
- };
- }];
-
- ////////////////////////////////////////
-
- /* global
- currencyFilter: false,
- dateFilter: false,
- filterFilter: false,
- jsonFilter: false,
- limitToFilter: false,
- lowercaseFilter: false,
- numberFilter: false,
- orderByFilter: false,
- uppercaseFilter: false,
- */
-
- register('currency', currencyFilter);
- register('date', dateFilter);
- register('filter', filterFilter);
- register('json', jsonFilter);
- register('limitTo', limitToFilter);
- register('lowercase', lowercaseFilter);
- register('number', numberFilter);
- register('orderBy', orderByFilter);
- register('uppercase', uppercaseFilter);
-}
-
-/**
- * @ngdoc filter
- * @name filter
- * @kind function
- *
- * @description
- * Selects a subset of items from `array` and returns it as a new array.
- *
- * @param {Array} array The source array.
- * @param {string|Object|function()} expression The predicate to be used for selecting items from
- * `array`.
- *
- * Can be one of:
- *
- * - `string`: The string is evaluated as an expression and the resulting value is used for substring match against
- * the contents of the `array`. All strings or objects with string properties in `array` that contain this string
- * will be returned. The predicate can be negated by prefixing the string with `!`.
- *
- * - `Object`: A pattern object can be used to filter specific properties on objects contained
- * by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items
- * which have property `name` containing "M" and property `phone` containing "1". A special
- * property name `$` can be used (as in `{$:"text"}`) to accept a match against any
- * property of the object. That's equivalent to the simple substring match with a `string`
- * as described above. The predicate can be negated by prefixing the string with `!`.
- * For Example `{name: "!M"}` predicate will return an array of items which have property `name`
- * not containing "M".
- *
- * - `function(value, index)`: A predicate function can be used to write arbitrary filters. The
- * function is called for each element of `array`. The final result is an array of those
- * elements that the predicate returned true for.
- *
- * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in
- * determining if the expected value (from the filter expression) and actual value (from
- * the object in the array) should be considered a match.
- *
- * Can be one of:
- *
- * - `function(actual, expected)`:
- * The function will be given the object value and the predicate value to compare and
- * should return true if the item should be included in filtered result.
- *
- * - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`.
- * this is essentially strict comparison of expected and actual.
- *
- * - `false|undefined`: A short hand for a function which will look for a substring match in case
- * insensitive way.
- *
- * @example
- <example>
- <file name="index.html">
- <div ng-init="friends = [{name:'John', phone:'555-1276'},
- {name:'Mary', phone:'800-BIG-MARY'},
- {name:'Mike', phone:'555-4321'},
- {name:'Adam', phone:'555-5678'},
- {name:'Julie', phone:'555-8765'},
- {name:'Juliette', phone:'555-5678'}]"></div>
-
- Search: <input ng-model="searchText">
- <table id="searchTextResults">
- <tr><th>Name</th><th>Phone</th></tr>
- <tr ng-repeat="friend in friends | filter:searchText">
- <td>{{friend.name}}</td>
- <td>{{friend.phone}}</td>
- </tr>
- </table>
- <hr>
- Any: <input ng-model="search.$"> <br>
- Name only <input ng-model="search.name"><br>
- Phone only <input ng-model="search.phone"><br>
- Equality <input type="checkbox" ng-model="strict"><br>
- <table id="searchObjResults">
- <tr><th>Name</th><th>Phone</th></tr>
- <tr ng-repeat="friendObj in friends | filter:search:strict">
- <td>{{friendObj.name}}</td>
- <td>{{friendObj.phone}}</td>
- </tr>
- </table>
- </file>
- <file name="protractor.js" type="protractor">
- var expectFriendNames = function(expectedNames, key) {
- element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) {
- arr.forEach(function(wd, i) {
- expect(wd.getText()).toMatch(expectedNames[i]);
- });
- });
- };
-
- it('should search across all fields when filtering with a string', function() {
- var searchText = element(by.model('searchText'));
- searchText.clear();
- searchText.sendKeys('m');
- expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend');
-
- searchText.clear();
- searchText.sendKeys('76');
- expectFriendNames(['John', 'Julie'], 'friend');
- });
-
- it('should search in specific fields when filtering with a predicate object', function() {
- var searchAny = element(by.model('search.$'));
- searchAny.clear();
- searchAny.sendKeys('i');
- expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj');
- });
- it('should use a equal comparison when comparator is true', function() {
- var searchName = element(by.model('search.name'));
- var strict = element(by.model('strict'));
- searchName.clear();
- searchName.sendKeys('Julie');
- strict.click();
- expectFriendNames(['Julie'], 'friendObj');
- });
- </file>
- </example>
- */
-function filterFilter() {
- return function(array, expression, comparator) {
- if (!isArray(array)) return array;
-
- var comparatorType = typeof(comparator),
- predicates = [];
-
- predicates.check = function(value, index) {
- for (var j = 0; j < predicates.length; j++) {
- if (!predicates[j](value, index)) {
- return false;
- }
- }
- return true;
- };
-
- if (comparatorType !== 'function') {
- if (comparatorType === 'boolean' && comparator) {
- comparator = function(obj, text) {
- return angular.equals(obj, text);
- };
- } else {
- comparator = function(obj, text) {
- if (obj && text && typeof obj === 'object' && typeof text === 'object') {
- for (var objKey in obj) {
- if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) &&
- comparator(obj[objKey], text[objKey])) {
- return true;
- }
- }
- return false;
- }
- text = ('' + text).toLowerCase();
- return ('' + obj).toLowerCase().indexOf(text) > -1;
- };
- }
- }
-
- var search = function(obj, text) {
- if (typeof text === 'string' && text.charAt(0) === '!') {
- return !search(obj, text.substr(1));
- }
- switch (typeof obj) {
- case 'boolean':
- case 'number':
- case 'string':
- return comparator(obj, text);
- case 'object':
- switch (typeof text) {
- case 'object':
- return comparator(obj, text);
- default:
- for (var objKey in obj) {
- if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) {
- return true;
- }
- }
- break;
- }
- return false;
- case 'array':
- for (var i = 0; i < obj.length; i++) {
- if (search(obj[i], text)) {
- return true;
- }
- }
- return false;
- default:
- return false;
- }
- };
- switch (typeof expression) {
- case 'boolean':
- case 'number':
- case 'string':
- // Set up expression object and fall through
- expression = {$:expression};
- // jshint -W086
- case 'object':
- // jshint +W086
- for (var key in expression) {
- (function(path) {
- if (typeof expression[path] === 'undefined') return;
- predicates.push(function(value) {
- return search(path == '$' ? value : (value && value[path]), expression[path]);
- });
- })(key);
- }
- break;
- case 'function':
- predicates.push(expression);
- break;
- default:
- return array;
- }
- var filtered = [];
- for (var j = 0; j < array.length; j++) {
- var value = array[j];
- if (predicates.check(value, j)) {
- filtered.push(value);
- }
- }
- return filtered;
- };
-}
-
-/**
- * @ngdoc filter
- * @name currency
- * @kind function
- *
- * @description
- * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default
- * symbol for current locale is used.
- *
- * @param {number} amount Input to filter.
- * @param {string=} symbol Currency symbol or identifier to be displayed.
- * @param {number=} fractionSize Number of decimal places to round the amount to, defaults to default max fraction size for current locale
- * @returns {string} Formatted number.
- *
- *
- * @example
- <example module="currencyExample">
- <file name="index.html">
- <script>
- angular.module('currencyExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.amount = 1234.56;
- }]);
- </script>
- <div ng-controller="ExampleController">
- <input type="number" ng-model="amount"> <br>
- default currency symbol ($): <span id="currency-default">{{amount | currency}}</span><br>
- custom currency identifier (USD$): <span id="currency-custom">{{amount | currency:"USD$"}}</span>
- no fractions (0): <span id="currency-no-fractions">{{amount | currency:"USD$":0}}</span>
- </div>
- </file>
- <file name="protractor.js" type="protractor">
- it('should init with 1234.56', function() {
- expect(element(by.id('currency-default')).getText()).toBe('$1,234.56');
- expect(element(by.id('currency-custom')).getText()).toBe('USD$1,234.56');
- expect(element(by.id('currency-no-fractions')).getText()).toBe('USD$1,235');
- });
- it('should update', function() {
- if (browser.params.browser == 'safari') {
- // Safari does not understand the minus key. See
- // https://github.com/angular/protractor/issues/481
- return;
- }
- element(by.model('amount')).clear();
- element(by.model('amount')).sendKeys('-1234');
- expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)');
- expect(element(by.id('currency-custom')).getText()).toBe('(USD$1,234.00)');
- expect(element(by.id('currency-no-fractions')).getText()).toBe('(USD$1,234)');
- });
- </file>
- </example>
- */
-currencyFilter.$inject = ['$locale'];
-function currencyFilter($locale) {
- var formats = $locale.NUMBER_FORMATS;
- return function(amount, currencySymbol, fractionSize) {
- if (isUndefined(currencySymbol)) {
- currencySymbol = formats.CURRENCY_SYM;
- }
-
- if (isUndefined(fractionSize)) {
- fractionSize = formats.PATTERNS[1].maxFrac;
- }
-
- // if null or undefined pass it through
- return (amount == null)
- ? amount
- : formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, fractionSize).
- replace(/\u00A4/g, currencySymbol);
- };
-}
-
-/**
- * @ngdoc filter
- * @name number
- * @kind function
- *
- * @description
- * Formats a number as text.
- *
- * If the input is not a number an empty string is returned.
- *
- * @param {number|string} number Number to format.
- * @param {(number|string)=} fractionSize Number of decimal places to round the number to.
- * If this is not provided then the fraction size is computed from the current locale's number
- * formatting pattern. In the case of the default locale, it will be 3.
- * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit.
- *
- * @example
- <example module="numberFilterExample">
- <file name="index.html">
- <script>
- angular.module('numberFilterExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.val = 1234.56789;
- }]);
- </script>
- <div ng-controller="ExampleController">
- Enter number: <input ng-model='val'><br>
- Default formatting: <span id='number-default'>{{val | number}}</span><br>
- No fractions: <span>{{val | number:0}}</span><br>
- Negative number: <span>{{-val | number:4}}</span>
- </div>
- </file>
- <file name="protractor.js" type="protractor">
- it('should format numbers', function() {
- expect(element(by.id('number-default')).getText()).toBe('1,234.568');
- expect(element(by.binding('val | number:0')).getText()).toBe('1,235');
- expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679');
- });
-
- it('should update', function() {
- element(by.model('val')).clear();
- element(by.model('val')).sendKeys('3374.333');
- expect(element(by.id('number-default')).getText()).toBe('3,374.333');
- expect(element(by.binding('val | number:0')).getText()).toBe('3,374');
- expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330');
- });
- </file>
- </example>
- */
-
-
-numberFilter.$inject = ['$locale'];
-function numberFilter($locale) {
- var formats = $locale.NUMBER_FORMATS;
- return function(number, fractionSize) {
-
- // if null or undefined pass it through
- return (number == null)
- ? number
- : formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,
- fractionSize);
- };
-}
-
-var DECIMAL_SEP = '.';
-function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
- if (!isFinite(number) || isObject(number)) return '';
-
- var isNegative = number < 0;
- number = Math.abs(number);
- var numStr = number + '',
- formatedText = '',
- parts = [];
-
- var hasExponent = false;
- if (numStr.indexOf('e') !== -1) {
- var match = numStr.match(/([\d\.]+)e(-?)(\d+)/);
- if (match && match[2] == '-' && match[3] > fractionSize + 1) {
- numStr = '0';
- number = 0;
- } else {
- formatedText = numStr;
- hasExponent = true;
- }
- }
-
- if (!hasExponent) {
- var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length;
-
- // determine fractionSize if it is not specified
- if (isUndefined(fractionSize)) {
- fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac);
- }
-
- // safely round numbers in JS without hitting imprecisions of floating-point arithmetics
- // inspired by:
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
- number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize);
-
- if (number === 0) {
- isNegative = false;
- }
-
- var fraction = ('' + number).split(DECIMAL_SEP);
- var whole = fraction[0];
- fraction = fraction[1] || '';
-
- var i, pos = 0,
- lgroup = pattern.lgSize,
- group = pattern.gSize;
-
- if (whole.length >= (lgroup + group)) {
- pos = whole.length - lgroup;
- for (i = 0; i < pos; i++) {
- if ((pos - i) % group === 0 && i !== 0) {
- formatedText += groupSep;
- }
- formatedText += whole.charAt(i);
- }
- }
-
- for (i = pos; i < whole.length; i++) {
- if ((whole.length - i) % lgroup === 0 && i !== 0) {
- formatedText += groupSep;
- }
- formatedText += whole.charAt(i);
- }
-
- // format fraction part.
- while (fraction.length < fractionSize) {
- fraction += '0';
- }
-
- if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize);
- } else {
-
- if (fractionSize > 0 && number > -1 && number < 1) {
- formatedText = number.toFixed(fractionSize);
- }
- }
-
- parts.push(isNegative ? pattern.negPre : pattern.posPre,
- formatedText,
- isNegative ? pattern.negSuf : pattern.posSuf);
- return parts.join('');
-}
-
-function padNumber(num, digits, trim) {
- var neg = '';
- if (num < 0) {
- neg = '-';
- num = -num;
- }
- num = '' + num;
- while (num.length < digits) num = '0' + num;
- if (trim)
- num = num.substr(num.length - digits);
- return neg + num;
-}
-
-
-function dateGetter(name, size, offset, trim) {
- offset = offset || 0;
- return function(date) {
- var value = date['get' + name]();
- if (offset > 0 || value > -offset)
- value += offset;
- if (value === 0 && offset == -12) value = 12;
- return padNumber(value, size, trim);
- };
-}
-
-function dateStrGetter(name, shortForm) {
- return function(date, formats) {
- var value = date['get' + name]();
- var get = uppercase(shortForm ? ('SHORT' + name) : name);
-
- return formats[get][value];
- };
-}
-
-function timeZoneGetter(date) {
- var zone = -1 * date.getTimezoneOffset();
- var paddedZone = (zone >= 0) ? "+" : "";
-
- paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +
- padNumber(Math.abs(zone % 60), 2);
-
- return paddedZone;
-}
-
-function getFirstThursdayOfYear(year) {
- // 0 = index of January
- var dayOfWeekOnFirst = (new Date(year, 0, 1)).getDay();
- // 4 = index of Thursday (+1 to account for 1st = 5)
- // 11 = index of *next* Thursday (+1 account for 1st = 12)
- return new Date(year, 0, ((dayOfWeekOnFirst <= 4) ? 5 : 12) - dayOfWeekOnFirst);
-}
-
-function getThursdayThisWeek(datetime) {
- return new Date(datetime.getFullYear(), datetime.getMonth(),
- // 4 = index of Thursday
- datetime.getDate() + (4 - datetime.getDay()));
-}
-
-function weekGetter(size) {
- return function(date) {
- var firstThurs = getFirstThursdayOfYear(date.getFullYear()),
- thisThurs = getThursdayThisWeek(date);
-
- var diff = +thisThurs - +firstThurs,
- result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week
-
- return padNumber(result, size);
- };
-}
-
-function ampmGetter(date, formats) {
- return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1];
-}
-
-var DATE_FORMATS = {
- yyyy: dateGetter('FullYear', 4),
- yy: dateGetter('FullYear', 2, 0, true),
- y: dateGetter('FullYear', 1),
- MMMM: dateStrGetter('Month'),
- MMM: dateStrGetter('Month', true),
- MM: dateGetter('Month', 2, 1),
- M: dateGetter('Month', 1, 1),
- dd: dateGetter('Date', 2),
- d: dateGetter('Date', 1),
- HH: dateGetter('Hours', 2),
- H: dateGetter('Hours', 1),
- hh: dateGetter('Hours', 2, -12),
- h: dateGetter('Hours', 1, -12),
- mm: dateGetter('Minutes', 2),
- m: dateGetter('Minutes', 1),
- ss: dateGetter('Seconds', 2),
- s: dateGetter('Seconds', 1),
- // while ISO 8601 requires fractions to be prefixed with `.` or `,`
- // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions
- sss: dateGetter('Milliseconds', 3),
- EEEE: dateStrGetter('Day'),
- EEE: dateStrGetter('Day', true),
- a: ampmGetter,
- Z: timeZoneGetter,
- ww: weekGetter(2),
- w: weekGetter(1)
-};
-
-var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/,
- NUMBER_STRING = /^\-?\d+$/;
-
-/**
- * @ngdoc filter
- * @name date
- * @kind function
- *
- * @description
- * Formats `date` to a string based on the requested `format`.
- *
- * `format` string can be composed of the following elements:
- *
- * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)
- * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)
- * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)
- * * `'MMMM'`: Month in year (January-December)
- * * `'MMM'`: Month in year (Jan-Dec)
- * * `'MM'`: Month in year, padded (01-12)
- * * `'M'`: Month in year (1-12)
- * * `'dd'`: Day in month, padded (01-31)
- * * `'d'`: Day in month (1-31)
- * * `'EEEE'`: Day in Week,(Sunday-Saturday)
- * * `'EEE'`: Day in Week, (Sun-Sat)
- * * `'HH'`: Hour in day, padded (00-23)
- * * `'H'`: Hour in day (0-23)
- * * `'hh'`: Hour in AM/PM, padded (01-12)
- * * `'h'`: Hour in AM/PM, (1-12)
- * * `'mm'`: Minute in hour, padded (00-59)
- * * `'m'`: Minute in hour (0-59)
- * * `'ss'`: Second in minute, padded (00-59)
- * * `'s'`: Second in minute (0-59)
- * * `'.sss' or ',sss'`: Millisecond in second, padded (000-999)
- * * `'a'`: AM/PM marker
- * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)
- * * `'ww'`: ISO-8601 week of year (00-53)
- * * `'w'`: ISO-8601 week of year (0-53)
- *
- * `format` string can also be one of the following predefined
- * {@link guide/i18n localizable formats}:
- *
- * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale
- * (e.g. Sep 3, 2010 12:05:08 PM)
- * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 PM)
- * * `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` for en_US locale
- * (e.g. Friday, September 3, 2010)
- * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010)
- * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010)
- * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)
- * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 PM)
- * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 PM)
- *
- * `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g.
- * `"h 'in the morning'"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence
- * (e.g. `"h 'o''clock'"`).
- *
- * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or
- * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its
- * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is
- * specified in the string input, the time is considered to be in the local timezone.
- * @param {string=} format Formatting rules (see Description). If not specified,
- * `mediumDate` is used.
- * @param {string=} timezone Timezone to be used for formatting. Right now, only `'UTC'` is supported.
- * If not specified, the timezone of the browser will be used.
- * @returns {string} Formatted string or the input if input is not recognized as date/millis.
- *
- * @example
- <example>
- <file name="index.html">
- <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>:
- <span>{{1288323623006 | date:'medium'}}</span><br>
- <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>:
- <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br>
- <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>:
- <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br>
- <span ng-non-bindable>{{1288323623006 | date:"MM/dd/yyyy 'at' h:mma"}}</span>:
- <span>{{'1288323623006' | date:"MM/dd/yyyy 'at' h:mma"}}</span><br>
- </file>
- <file name="protractor.js" type="protractor">
- it('should format date', function() {
- expect(element(by.binding("1288323623006 | date:'medium'")).getText()).
- toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/);
- expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()).
- toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/);
- expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()).
- toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/);
- expect(element(by.binding("'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"")).getText()).
- toMatch(/10\/2\d\/2010 at \d{1,2}:\d{2}(AM|PM)/);
- });
- </file>
- </example>
- */
-dateFilter.$inject = ['$locale'];
-function dateFilter($locale) {
-
-
- var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
- // 1 2 3 4 5 6 7 8 9 10 11
- function jsonStringToDate(string) {
- var match;
- if (match = string.match(R_ISO8601_STR)) {
- var date = new Date(0),
- tzHour = 0,
- tzMin = 0,
- dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,
- timeSetter = match[8] ? date.setUTCHours : date.setHours;
-
- if (match[9]) {
- tzHour = int(match[9] + match[10]);
- tzMin = int(match[9] + match[11]);
- }
- dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3]));
- var h = int(match[4] || 0) - tzHour;
- var m = int(match[5] || 0) - tzMin;
- var s = int(match[6] || 0);
- var ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000);
- timeSetter.call(date, h, m, s, ms);
- return date;
- }
- return string;
- }
-
-
- return function(date, format, timezone) {
- var text = '',
- parts = [],
- fn, match;
-
- format = format || 'mediumDate';
- format = $locale.DATETIME_FORMATS[format] || format;
- if (isString(date)) {
- date = NUMBER_STRING.test(date) ? int(date) : jsonStringToDate(date);
- }
-
- if (isNumber(date)) {
- date = new Date(date);
- }
-
- if (!isDate(date)) {
- return date;
- }
-
- while (format) {
- match = DATE_FORMATS_SPLIT.exec(format);
- if (match) {
- parts = concat(parts, match, 1);
- format = parts.pop();
- } else {
- parts.push(format);
- format = null;
- }
- }
-
- if (timezone && timezone === 'UTC') {
- date = new Date(date.getTime());
- date.setMinutes(date.getMinutes() + date.getTimezoneOffset());
- }
- forEach(parts, function(value) {
- fn = DATE_FORMATS[value];
- text += fn ? fn(date, $locale.DATETIME_FORMATS)
- : value.replace(/(^'|'$)/g, '').replace(/''/g, "'");
- });
-
- return text;
- };
-}
-
-
-/**
- * @ngdoc filter
- * @name json
- * @kind function
- *
- * @description
- * Allows you to convert a JavaScript object into JSON string.
- *
- * This filter is mostly useful for debugging. When using the double curly {{value}} notation
- * the binding is automatically converted to JSON.
- *
- * @param {*} object Any JavaScript object (including arrays and primitive types) to filter.
- * @returns {string} JSON string.
- *
- *
- * @example
- <example>
- <file name="index.html">
- <pre>{{ {'name':'value'} | json }}</pre>
- </file>
- <file name="protractor.js" type="protractor">
- it('should jsonify filtered objects', function() {
- expect(element(by.binding("{'name':'value'}")).getText()).toMatch(/\{\n "name": ?"value"\n}/);
- });
- </file>
- </example>
- *
- */
-function jsonFilter() {
- return function(object) {
- return toJson(object, true);
- };
-}
-
-
-/**
- * @ngdoc filter
- * @name lowercase
- * @kind function
- * @description
- * Converts string to lowercase.
- * @see angular.lowercase
- */
-var lowercaseFilter = valueFn(lowercase);
-
-
-/**
- * @ngdoc filter
- * @name uppercase
- * @kind function
- * @description
- * Converts string to uppercase.
- * @see angular.uppercase
- */
-var uppercaseFilter = valueFn(uppercase);
-
-/**
- * @ngdoc filter
- * @name limitTo
- * @kind function
- *
- * @description
- * Creates a new array or string containing only a specified number of elements. The elements
- * are taken from either the beginning or the end of the source array, string or number, as specified by
- * the value and sign (positive or negative) of `limit`. If a number is used as input, it is
- * converted to a string.
- *
- * @param {Array|string|number} input Source array, string or number to be limited.
- * @param {string|number} limit The length of the returned array or string. If the `limit` number
- * is positive, `limit` number of items from the beginning of the source array/string are copied.
- * If the number is negative, `limit` number of items from the end of the source array/string
- * are copied. The `limit` will be trimmed if it exceeds `array.length`
- * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array
- * had less than `limit` elements.
- *
- * @example
- <example module="limitToExample">
- <file name="index.html">
- <script>
- angular.module('limitToExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.numbers = [1,2,3,4,5,6,7,8,9];
- $scope.letters = "abcdefghi";
- $scope.longNumber = 2345432342;
- $scope.numLimit = 3;
- $scope.letterLimit = 3;
- $scope.longNumberLimit = 3;
- }]);
- </script>
- <div ng-controller="ExampleController">
- Limit {{numbers}} to: <input type="number" step="1" ng-model="numLimit">
- <p>Output numbers: {{ numbers | limitTo:numLimit }}</p>
- Limit {{letters}} to: <input type="number" step="1" ng-model="letterLimit">
- <p>Output letters: {{ letters | limitTo:letterLimit }}</p>
- Limit {{longNumber}} to: <input type="number" step="1" ng-model="longNumberLimit">
- <p>Output long number: {{ longNumber | limitTo:longNumberLimit }}</p>
- </div>
- </file>
- <file name="protractor.js" type="protractor">
- var numLimitInput = element(by.model('numLimit'));
- var letterLimitInput = element(by.model('letterLimit'));
- var longNumberLimitInput = element(by.model('longNumberLimit'));
- var limitedNumbers = element(by.binding('numbers | limitTo:numLimit'));
- var limitedLetters = element(by.binding('letters | limitTo:letterLimit'));
- var limitedLongNumber = element(by.binding('longNumber | limitTo:longNumberLimit'));
-
- it('should limit the number array to first three items', function() {
- expect(numLimitInput.getAttribute('value')).toBe('3');
- expect(letterLimitInput.getAttribute('value')).toBe('3');
- expect(longNumberLimitInput.getAttribute('value')).toBe('3');
- expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]');
- expect(limitedLetters.getText()).toEqual('Output letters: abc');
- expect(limitedLongNumber.getText()).toEqual('Output long number: 234');
- });
-
- // There is a bug in safari and protractor that doesn't like the minus key
- // it('should update the output when -3 is entered', function() {
- // numLimitInput.clear();
- // numLimitInput.sendKeys('-3');
- // letterLimitInput.clear();
- // letterLimitInput.sendKeys('-3');
- // longNumberLimitInput.clear();
- // longNumberLimitInput.sendKeys('-3');
- // expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]');
- // expect(limitedLetters.getText()).toEqual('Output letters: ghi');
- // expect(limitedLongNumber.getText()).toEqual('Output long number: 342');
- // });
-
- it('should not exceed the maximum size of input array', function() {
- numLimitInput.clear();
- numLimitInput.sendKeys('100');
- letterLimitInput.clear();
- letterLimitInput.sendKeys('100');
- longNumberLimitInput.clear();
- longNumberLimitInput.sendKeys('100');
- expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]');
- expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi');
- expect(limitedLongNumber.getText()).toEqual('Output long number: 2345432342');
- });
- </file>
- </example>
-*/
-function limitToFilter() {
- return function(input, limit) {
- if (isNumber(input)) input = input.toString();
- if (!isArray(input) && !isString(input)) return input;
-
- if (Math.abs(Number(limit)) === Infinity) {
- limit = Number(limit);
- } else {
- limit = int(limit);
- }
-
- if (isString(input)) {
- //NaN check on limit
- if (limit) {
- return limit >= 0 ? input.slice(0, limit) : input.slice(limit, input.length);
- } else {
- return "";
- }
- }
-
- var out = [],
- i, n;
-
- // if abs(limit) exceeds maximum length, trim it
- if (limit > input.length)
- limit = input.length;
- else if (limit < -input.length)
- limit = -input.length;
-
- if (limit > 0) {
- i = 0;
- n = limit;
- } else {
- i = input.length + limit;
- n = input.length;
- }
-
- for (; i < n; i++) {
- out.push(input[i]);
- }
-
- return out;
- };
-}
-
-/**
- * @ngdoc filter
- * @name orderBy
- * @kind function
- *
- * @description
- * Orders a specified `array` by the `expression` predicate. It is ordered alphabetically
- * for strings and numerically for numbers. Note: if you notice numbers are not being sorted
- * correctly, make sure they are actually being saved as numbers and not strings.
- *
- * @param {Array} array The array to sort.
- * @param {function(*)|string|Array.<(function(*)|string)>=} expression A predicate to be
- * used by the comparator to determine the order of elements.
- *
- * Can be one of:
- *
- * - `function`: Getter function. The result of this function will be sorted using the
- * `<`, `=`, `>` operator.
- * - `string`: An Angular expression. The result of this expression is used to compare elements
- * (for example `name` to sort by a property called `name` or `name.substr(0, 3)` to sort by
- * 3 first characters of a property called `name`). The result of a constant expression
- * is interpreted as a property name to be used in comparisons (for example `"special name"`
- * to sort object by the value of their `special name` property). An expression can be
- * optionally prefixed with `+` or `-` to control ascending or descending sort order
- * (for example, `+name` or `-name`). If no property is provided, (e.g. `'+'`) then the array
- * element itself is used to compare where sorting.
- * - `Array`: An array of function or string predicates. The first predicate in the array
- * is used for sorting, but when two items are equivalent, the next predicate is used.
- *
- * If the predicate is missing or empty then it defaults to `'+'`.
- *
- * @param {boolean=} reverse Reverse the order of the array.
- * @returns {Array} Sorted copy of the source array.
- *
- * @example
- <example module="orderByExample">
- <file name="index.html">
- <script>
- angular.module('orderByExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.friends =
- [{name:'John', phone:'555-1212', age:10},
- {name:'Mary', phone:'555-9876', age:19},
- {name:'Mike', phone:'555-4321', age:21},
- {name:'Adam', phone:'555-5678', age:35},
- {name:'Julie', phone:'555-8765', age:29}];
- $scope.predicate = '-age';
- }]);
- </script>
- <div ng-controller="ExampleController">
- <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre>
- <hr/>
- [ <a href="" ng-click="predicate=''">unsorted</a> ]
- <table class="friend">
- <tr>
- <th><a href="" ng-click="predicate = 'name'; reverse=false">Name</a>
- (<a href="" ng-click="predicate = '-name'; reverse=false">^</a>)</th>
- <th><a href="" ng-click="predicate = 'phone'; reverse=!reverse">Phone Number</a></th>
- <th><a href="" ng-click="predicate = 'age'; reverse=!reverse">Age</a></th>
- </tr>
- <tr ng-repeat="friend in friends | orderBy:predicate:reverse">
- <td>{{friend.name}}</td>
- <td>{{friend.phone}}</td>
- <td>{{friend.age}}</td>
- </tr>
- </table>
- </div>
- </file>
- </example>
- *
- * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the
- * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the
- * desired parameters.
- *
- * Example:
- *
- * @example
- <example module="orderByExample">
- <file name="index.html">
- <div ng-controller="ExampleController">
- <table class="friend">
- <tr>
- <th><a href="" ng-click="reverse=false;order('name', false)">Name</a>
- (<a href="" ng-click="order('-name',false)">^</a>)</th>
- <th><a href="" ng-click="reverse=!reverse;order('phone', reverse)">Phone Number</a></th>
- <th><a href="" ng-click="reverse=!reverse;order('age',reverse)">Age</a></th>
- </tr>
- <tr ng-repeat="friend in friends">
- <td>{{friend.name}}</td>
- <td>{{friend.phone}}</td>
- <td>{{friend.age}}</td>
- </tr>
- </table>
- </div>
- </file>
-
- <file name="script.js">
- angular.module('orderByExample', [])
- .controller('ExampleController', ['$scope', '$filter', function($scope, $filter) {
- var orderBy = $filter('orderBy');
- $scope.friends = [
- { name: 'John', phone: '555-1212', age: 10 },
- { name: 'Mary', phone: '555-9876', age: 19 },
- { name: 'Mike', phone: '555-4321', age: 21 },
- { name: 'Adam', phone: '555-5678', age: 35 },
- { name: 'Julie', phone: '555-8765', age: 29 }
- ];
- $scope.order = function(predicate, reverse) {
- $scope.friends = orderBy($scope.friends, predicate, reverse);
- };
- $scope.order('-age',false);
- }]);
- </file>
-</example>
- */
-orderByFilter.$inject = ['$parse'];
-function orderByFilter($parse) {
- return function(array, sortPredicate, reverseOrder) {
- if (!(isArrayLike(array))) return array;
- sortPredicate = isArray(sortPredicate) ? sortPredicate : [sortPredicate];
- if (sortPredicate.length === 0) { sortPredicate = ['+']; }
- sortPredicate = sortPredicate.map(function(predicate) {
- var descending = false, get = predicate || identity;
- if (isString(predicate)) {
- if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {
- descending = predicate.charAt(0) == '-';
- predicate = predicate.substring(1);
- }
- if (predicate === '') {
- // Effectively no predicate was passed so we compare identity
- return reverseComparator(function(a, b) {
- return compare(a, b);
- }, descending);
- }
- get = $parse(predicate);
- if (get.constant) {
- var key = get();
- return reverseComparator(function(a, b) {
- return compare(a[key], b[key]);
- }, descending);
- }
- }
- return reverseComparator(function(a, b) {
- return compare(get(a),get(b));
- }, descending);
- });
- return slice.call(array).sort(reverseComparator(comparator, reverseOrder));
-
- function comparator(o1, o2) {
- for (var i = 0; i < sortPredicate.length; i++) {
- var comp = sortPredicate[i](o1, o2);
- if (comp !== 0) return comp;
- }
- return 0;
- }
- function reverseComparator(comp, descending) {
- return descending
- ? function(a, b) {return comp(b,a);}
- : comp;
- }
- function compare(v1, v2) {
- var t1 = typeof v1;
- var t2 = typeof v2;
- if (t1 == t2) {
- if (isDate(v1) && isDate(v2)) {
- v1 = v1.valueOf();
- v2 = v2.valueOf();
- }
- if (t1 == "string") {
- v1 = v1.toLowerCase();
- v2 = v2.toLowerCase();
- }
- if (v1 === v2) return 0;
- return v1 < v2 ? -1 : 1;
- } else {
- return t1 < t2 ? -1 : 1;
- }
- }
- };
-}
-
-function ngDirective(directive) {
- if (isFunction(directive)) {
- directive = {
- link: directive
- };
- }
- directive.restrict = directive.restrict || 'AC';
- return valueFn(directive);
-}
-
-/**
- * @ngdoc directive
- * @name a
- * @restrict E
- *
- * @description
- * Modifies the default behavior of the html A tag so that the default action is prevented when
- * the href attribute is empty.
- *
- * This change permits the easy creation of action links with the `ngClick` directive
- * without changing the location or causing page reloads, e.g.:
- * `<a href="" ng-click="list.addItem()">Add Item</a>`
- */
-var htmlAnchorDirective = valueFn({
- restrict: 'E',
- compile: function(element, attr) {
- if (!attr.href && !attr.xlinkHref && !attr.name) {
- return function(scope, element) {
- // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.
- var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?
- 'xlink:href' : 'href';
- element.on('click', function(event) {
- // if we have no href url, then don't navigate anywhere.
- if (!element.attr(href)) {
- event.preventDefault();
- }
- });
- };
- }
- }
-});
-
-/**
- * @ngdoc directive
- * @name ngHref
- * @restrict A
- * @priority 99
- *
- * @description
- * Using Angular markup like `{{hash}}` in an href attribute will
- * make the link go to the wrong URL if the user clicks it before
- * Angular has a chance to replace the `{{hash}}` markup with its
- * value. Until Angular replaces the markup the link will be broken
- * and will most likely return a 404 error. The `ngHref` directive
- * solves this problem.
- *
- * The wrong way to write it:
- * ```html
- * <a href="http://www.gravatar.com/avatar/{{hash}}">link1</a>
- * ```
- *
- * The correct way to write it:
- * ```html
- * <a ng-href="http://www.gravatar.com/avatar/{{hash}}">link1</a>
- * ```
- *
- * @element A
- * @param {template} ngHref any string which can contain `{{}}` markup.
- *
- * @example
- * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes
- * in links and their different behaviors:
- <example>
- <file name="index.html">
- <input ng-model="value" /><br />
- <a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br />
- <a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br />
- <a id="link-3" ng-href="/{{'123'}}">link 3</a> (link, reload!)<br />
- <a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br />
- <a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br />
- <a id="link-6" ng-href="{{value}}">link</a> (link, change location)
- </file>
- <file name="protractor.js" type="protractor">
- it('should execute ng-click but not reload when href without value', function() {
- element(by.id('link-1')).click();
- expect(element(by.model('value')).getAttribute('value')).toEqual('1');
- expect(element(by.id('link-1')).getAttribute('href')).toBe('');
- });
-
- it('should execute ng-click but not reload when href empty string', function() {
- element(by.id('link-2')).click();
- expect(element(by.model('value')).getAttribute('value')).toEqual('2');
- expect(element(by.id('link-2')).getAttribute('href')).toBe('');
- });
-
- it('should execute ng-click and change url when ng-href specified', function() {
- expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/);
-
- element(by.id('link-3')).click();
-
- // At this point, we navigate away from an Angular page, so we need
- // to use browser.driver to get the base webdriver.
-
- browser.wait(function() {
- return browser.driver.getCurrentUrl().then(function(url) {
- return url.match(/\/123$/);
- });
- }, 5000, 'page should navigate to /123');
- });
-
- xit('should execute ng-click but not reload when href empty string and name specified', function() {
- element(by.id('link-4')).click();
- expect(element(by.model('value')).getAttribute('value')).toEqual('4');
- expect(element(by.id('link-4')).getAttribute('href')).toBe('');
- });
-
- it('should execute ng-click but not reload when no href but name specified', function() {
- element(by.id('link-5')).click();
- expect(element(by.model('value')).getAttribute('value')).toEqual('5');
- expect(element(by.id('link-5')).getAttribute('href')).toBe(null);
- });
-
- it('should only change url when only ng-href', function() {
- element(by.model('value')).clear();
- element(by.model('value')).sendKeys('6');
- expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/);
-
- element(by.id('link-6')).click();
-
- // At this point, we navigate away from an Angular page, so we need
- // to use browser.driver to get the base webdriver.
- browser.wait(function() {
- return browser.driver.getCurrentUrl().then(function(url) {
- return url.match(/\/6$/);
- });
- }, 5000, 'page should navigate to /6');
- });
- </file>
- </example>
- */
-
-/**
- * @ngdoc directive
- * @name ngSrc
- * @restrict A
- * @priority 99
- *
- * @description
- * Using Angular markup like `{{hash}}` in a `src` attribute doesn't
- * work right: The browser will fetch from the URL with the literal
- * text `{{hash}}` until Angular replaces the expression inside
- * `{{hash}}`. The `ngSrc` directive solves this problem.
- *
- * The buggy way to write it:
- * ```html
- * <img src="http://www.gravatar.com/avatar/{{hash}}"/>
- * ```
- *
- * The correct way to write it:
- * ```html
- * <img ng-src="http://www.gravatar.com/avatar/{{hash}}"/>
- * ```
- *
- * @element IMG
- * @param {template} ngSrc any string which can contain `{{}}` markup.
- */
-
-/**
- * @ngdoc directive
- * @name ngSrcset
- * @restrict A
- * @priority 99
- *
- * @description
- * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't
- * work right: The browser will fetch from the URL with the literal
- * text `{{hash}}` until Angular replaces the expression inside
- * `{{hash}}`. The `ngSrcset` directive solves this problem.
- *
- * The buggy way to write it:
- * ```html
- * <img srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/>
- * ```
- *
- * The correct way to write it:
- * ```html
- * <img ng-srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/>
- * ```
- *
- * @element IMG
- * @param {template} ngSrcset any string which can contain `{{}}` markup.
- */
-
-/**
- * @ngdoc directive
- * @name ngDisabled
- * @restrict A
- * @priority 100
- *
- * @description
- *
- * We shouldn't do this, because it will make the button enabled on Chrome/Firefox but not on IE8 and older IEs:
- * ```html
- * <div ng-init="scope = { isDisabled: false }">
- * <button disabled="{{scope.isDisabled}}">Disabled</button>
- * </div>
- * ```
- *
- * The HTML specification does not require browsers to preserve the values of boolean attributes
- * such as disabled. (Their presence means true and their absence means false.)
- * If we put an Angular interpolation expression into such an attribute then the
- * binding information would be lost when the browser removes the attribute.
- * The `ngDisabled` directive solves this problem for the `disabled` attribute.
- * This complementary directive is not removed by the browser and so provides
- * a permanent reliable place to store the binding information.
- *
- * @example
- <example>
- <file name="index.html">
- Click me to toggle: <input type="checkbox" ng-model="checked"><br/>
- <button ng-model="button" ng-disabled="checked">Button</button>
- </file>
- <file name="protractor.js" type="protractor">
- it('should toggle button', function() {
- expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy();
- element(by.model('checked')).click();
- expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy();
- });
- </file>
- </example>
- *
- * @element INPUT
- * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy,
- * then special attribute "disabled" will be set on the element
- */
-
-
-/**
- * @ngdoc directive
- * @name ngChecked
- * @restrict A
- * @priority 100
- *
- * @description
- * The HTML specification does not require browsers to preserve the values of boolean attributes
- * such as checked. (Their presence means true and their absence means false.)
- * If we put an Angular interpolation expression into such an attribute then the
- * binding information would be lost when the browser removes the attribute.
- * The `ngChecked` directive solves this problem for the `checked` attribute.
- * This complementary directive is not removed by the browser and so provides
- * a permanent reliable place to store the binding information.
- * @example
- <example>
- <file name="index.html">
- Check me to check both: <input type="checkbox" ng-model="master"><br/>
- <input id="checkSlave" type="checkbox" ng-checked="master">
- </file>
- <file name="protractor.js" type="protractor">
- it('should check both checkBoxes', function() {
- expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy();
- element(by.model('master')).click();
- expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy();
- });
- </file>
- </example>
- *
- * @element INPUT
- * @param {expression} ngChecked If the {@link guide/expression expression} is truthy,
- * then special attribute "checked" will be set on the element
- */
-
-
-/**
- * @ngdoc directive
- * @name ngReadonly
- * @restrict A
- * @priority 100
- *
- * @description
- * The HTML specification does not require browsers to preserve the values of boolean attributes
- * such as readonly. (Their presence means true and their absence means false.)
- * If we put an Angular interpolation expression into such an attribute then the
- * binding information would be lost when the browser removes the attribute.
- * The `ngReadonly` directive solves this problem for the `readonly` attribute.
- * This complementary directive is not removed by the browser and so provides
- * a permanent reliable place to store the binding information.
- * @example
- <example>
- <file name="index.html">
- Check me to make text readonly: <input type="checkbox" ng-model="checked"><br/>
- <input type="text" ng-readonly="checked" value="I'm Angular"/>
- </file>
- <file name="protractor.js" type="protractor">
- it('should toggle readonly attr', function() {
- expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeFalsy();
- element(by.model('checked')).click();
- expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeTruthy();
- });
- </file>
- </example>
- *
- * @element INPUT
- * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy,
- * then special attribute "readonly" will be set on the element
- */
-
-
-/**
- * @ngdoc directive
- * @name ngSelected
- * @restrict A
- * @priority 100
- *
- * @description
- * The HTML specification does not require browsers to preserve the values of boolean attributes
- * such as selected. (Their presence means true and their absence means false.)
- * If we put an Angular interpolation expression into such an attribute then the
- * binding information would be lost when the browser removes the attribute.
- * The `ngSelected` directive solves this problem for the `selected` attribute.
- * This complementary directive is not removed by the browser and so provides
- * a permanent reliable place to store the binding information.
- *
- * @example
- <example>
- <file name="index.html">
- Check me to select: <input type="checkbox" ng-model="selected"><br/>
- <select>
- <option>Hello!</option>
- <option id="greet" ng-selected="selected">Greetings!</option>
- </select>
- </file>
- <file name="protractor.js" type="protractor">
- it('should select Greetings!', function() {
- expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy();
- element(by.model('selected')).click();
- expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy();
- });
- </file>
- </example>
- *
- * @element OPTION
- * @param {expression} ngSelected If the {@link guide/expression expression} is truthy,
- * then special attribute "selected" will be set on the element
- */
-
-/**
- * @ngdoc directive
- * @name ngOpen
- * @restrict A
- * @priority 100
- *
- * @description
- * The HTML specification does not require browsers to preserve the values of boolean attributes
- * such as open. (Their presence means true and their absence means false.)
- * If we put an Angular interpolation expression into such an attribute then the
- * binding information would be lost when the browser removes the attribute.
- * The `ngOpen` directive solves this problem for the `open` attribute.
- * This complementary directive is not removed by the browser and so provides
- * a permanent reliable place to store the binding information.
- * @example
- <example>
- <file name="index.html">
- Check me check multiple: <input type="checkbox" ng-model="open"><br/>
- <details id="details" ng-open="open">
- <summary>Show/Hide me</summary>
- </details>
- </file>
- <file name="protractor.js" type="protractor">
- it('should toggle open', function() {
- expect(element(by.id('details')).getAttribute('open')).toBeFalsy();
- element(by.model('open')).click();
- expect(element(by.id('details')).getAttribute('open')).toBeTruthy();
- });
- </file>
- </example>
- *
- * @element DETAILS
- * @param {expression} ngOpen If the {@link guide/expression expression} is truthy,
- * then special attribute "open" will be set on the element
- */
-
-var ngAttributeAliasDirectives = {};
-
-
-// boolean attrs are evaluated
-forEach(BOOLEAN_ATTR, function(propName, attrName) {
- // binding to multiple is not supported
- if (propName == "multiple") return;
-
- var normalized = directiveNormalize('ng-' + attrName);
- ngAttributeAliasDirectives[normalized] = function() {
- return {
- restrict: 'A',
- priority: 100,
- link: function(scope, element, attr) {
- scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {
- attr.$set(attrName, !!value);
- });
- }
- };
- };
-});
-
-// aliased input attrs are evaluated
-forEach(ALIASED_ATTR, function(htmlAttr, ngAttr) {
- ngAttributeAliasDirectives[ngAttr] = function() {
- return {
- priority: 100,
- link: function(scope, element, attr) {
- //special case ngPattern when a literal regular expression value
- //is used as the expression (this way we don't have to watch anything).
- if (ngAttr === "ngPattern" && attr.ngPattern.charAt(0) == "/") {
- var match = attr.ngPattern.match(REGEX_STRING_REGEXP);
- if (match) {
- attr.$set("ngPattern", new RegExp(match[1], match[2]));
- return;
- }
- }
-
- scope.$watch(attr[ngAttr], function ngAttrAliasWatchAction(value) {
- attr.$set(ngAttr, value);
- });
- }
- };
- };
-});
-
-// ng-src, ng-srcset, ng-href are interpolated
-forEach(['src', 'srcset', 'href'], function(attrName) {
- var normalized = directiveNormalize('ng-' + attrName);
- ngAttributeAliasDirectives[normalized] = function() {
- return {
- priority: 99, // it needs to run after the attributes are interpolated
- link: function(scope, element, attr) {
- var propName = attrName,
- name = attrName;
-
- if (attrName === 'href' &&
- toString.call(element.prop('href')) === '[object SVGAnimatedString]') {
- name = 'xlinkHref';
- attr.$attr[name] = 'xlink:href';
- propName = null;
- }
-
- attr.$observe(normalized, function(value) {
- if (!value) {
- if (attrName === 'href') {
- attr.$set(name, null);
- }
- return;
- }
-
- attr.$set(name, value);
-
- // on IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist
- // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need
- // to set the property as well to achieve the desired effect.
- // we use attr[attrName] value since $set can sanitize the url.
- if (msie && propName) element.prop(propName, attr[name]);
- });
- }
- };
- };
-});
-
-/* global -nullFormCtrl, -SUBMITTED_CLASS, addSetValidityMethod: true
- */
-var nullFormCtrl = {
- $addControl: noop,
- $$renameControl: nullFormRenameControl,
- $removeControl: noop,
- $setValidity: noop,
- $setDirty: noop,
- $setPristine: noop,
- $setSubmitted: noop
-},
-SUBMITTED_CLASS = 'ng-submitted';
-
-function nullFormRenameControl(control, name) {
- control.$name = name;
-}
-
-/**
- * @ngdoc type
- * @name form.FormController
- *
- * @property {boolean} $pristine True if user has not interacted with the form yet.
- * @property {boolean} $dirty True if user has already interacted with the form.
- * @property {boolean} $valid True if all of the containing forms and controls are valid.
- * @property {boolean} $invalid True if at least one containing control or form is invalid.
- * @property {boolean} $submitted True if user has submitted the form even if its invalid.
- *
- * @property {Object} $error Is an object hash, containing references to controls or
- * forms with failing validators, where:
- *
- * - keys are validation tokens (error names),
- * - values are arrays of controls or forms that have a failing validator for given error name.
- *
- * Built-in validation tokens:
- *
- * - `email`
- * - `max`
- * - `maxlength`
- * - `min`
- * - `minlength`
- * - `number`
- * - `pattern`
- * - `required`
- * - `url`
- * - `date`
- * - `datetimelocal`
- * - `time`
- * - `week`
- * - `month`
- *
- * @description
- * `FormController` keeps track of all its controls and nested forms as well as the state of them,
- * such as being valid/invalid or dirty/pristine.
- *
- * Each {@link ng.directive:form form} directive creates an instance
- * of `FormController`.
- *
- */
-//asks for $scope to fool the BC controller module
-FormController.$inject = ['$element', '$attrs', '$scope', '$animate', '$interpolate'];
-function FormController(element, attrs, $scope, $animate, $interpolate) {
- var form = this,
- controls = [];
-
- var parentForm = form.$$parentForm = element.parent().controller('form') || nullFormCtrl;
-
- // init state
- form.$error = {};
- form.$$success = {};
- form.$pending = undefined;
- form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);
- form.$dirty = false;
- form.$pristine = true;
- form.$valid = true;
- form.$invalid = false;
- form.$submitted = false;
-
- parentForm.$addControl(form);
-
- /**
- * @ngdoc method
- * @name form.FormController#$rollbackViewValue
- *
- * @description
- * Rollback all form controls pending updates to the `$modelValue`.
- *
- * Updates may be pending by a debounced event or because the input is waiting for a some future
- * event defined in `ng-model-options`. This method is typically needed by the reset button of
- * a form that uses `ng-model-options` to pend updates.
- */
- form.$rollbackViewValue = function() {
- forEach(controls, function(control) {
- control.$rollbackViewValue();
- });
- };
-
- /**
- * @ngdoc method
- * @name form.FormController#$commitViewValue
- *
- * @description
- * Commit all form controls pending updates to the `$modelValue`.
- *
- * Updates may be pending by a debounced event or because the input is waiting for a some future
- * event defined in `ng-model-options`. This method is rarely needed as `NgModelController`
- * usually handles calling this in response to input events.
- */
- form.$commitViewValue = function() {
- forEach(controls, function(control) {
- control.$commitViewValue();
- });
- };
-
- /**
- * @ngdoc method
- * @name form.FormController#$addControl
- *
- * @description
- * Register a control with the form.
- *
- * Input elements using ngModelController do this automatically when they are linked.
- */
- form.$addControl = function(control) {
- // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored
- // and not added to the scope. Now we throw an error.
- assertNotHasOwnProperty(control.$name, 'input');
- controls.push(control);
-
- if (control.$name) {
- form[control.$name] = control;
- }
- };
-
- // Private API: rename a form control
- form.$$renameControl = function(control, newName) {
- var oldName = control.$name;
-
- if (form[oldName] === control) {
- delete form[oldName];
- }
- form[newName] = control;
- control.$name = newName;
- };
-
- /**
- * @ngdoc method
- * @name form.FormController#$removeControl
- *
- * @description
- * Deregister a control from the form.
- *
- * Input elements using ngModelController do this automatically when they are destroyed.
- */
- form.$removeControl = function(control) {
- if (control.$name && form[control.$name] === control) {
- delete form[control.$name];
- }
- forEach(form.$pending, function(value, name) {
- form.$setValidity(name, null, control);
- });
- forEach(form.$error, function(value, name) {
- form.$setValidity(name, null, control);
- });
-
- arrayRemove(controls, control);
- };
-
-
- /**
- * @ngdoc method
- * @name form.FormController#$setValidity
- *
- * @description
- * Sets the validity of a form control.
- *
- * This method will also propagate to parent forms.
- */
- addSetValidityMethod({
- ctrl: this,
- $element: element,
- set: function(object, property, control) {
- var list = object[property];
- if (!list) {
- object[property] = [control];
- } else {
- var index = list.indexOf(control);
- if (index === -1) {
- list.push(control);
- }
- }
- },
- unset: function(object, property, control) {
- var list = object[property];
- if (!list) {
- return;
- }
- arrayRemove(list, control);
- if (list.length === 0) {
- delete object[property];
- }
- },
- parentForm: parentForm,
- $animate: $animate
- });
-
- /**
- * @ngdoc method
- * @name form.FormController#$setDirty
- *
- * @description
- * Sets the form to a dirty state.
- *
- * This method can be called to add the 'ng-dirty' class and set the form to a dirty
- * state (ng-dirty class). This method will also propagate to parent forms.
- */
- form.$setDirty = function() {
- $animate.removeClass(element, PRISTINE_CLASS);
- $animate.addClass(element, DIRTY_CLASS);
- form.$dirty = true;
- form.$pristine = false;
- parentForm.$setDirty();
- };
-
- /**
- * @ngdoc method
- * @name form.FormController#$setPristine
- *
- * @description
- * Sets the form to its pristine state.
- *
- * This method can be called to remove the 'ng-dirty' class and set the form to its pristine
- * state (ng-pristine class). This method will also propagate to all the controls contained
- * in this form.
- *
- * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after
- * saving or resetting it.
- */
- form.$setPristine = function() {
- $animate.setClass(element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS);
- form.$dirty = false;
- form.$pristine = true;
- form.$submitted = false;
- forEach(controls, function(control) {
- control.$setPristine();
- });
- };
-
- /**
- * @ngdoc method
- * @name form.FormController#$setUntouched
- *
- * @description
- * Sets the form to its untouched state.
- *
- * This method can be called to remove the 'ng-touched' class and set the form controls to their
- * untouched state (ng-untouched class).
- *
- * Setting a form controls back to their untouched state is often useful when setting the form
- * back to its pristine state.
- */
- form.$setUntouched = function() {
- forEach(controls, function(control) {
- control.$setUntouched();
- });
- };
-
- /**
- * @ngdoc method
- * @name form.FormController#$setSubmitted
- *
- * @description
- * Sets the form to its submitted state.
- */
- form.$setSubmitted = function() {
- $animate.addClass(element, SUBMITTED_CLASS);
- form.$submitted = true;
- parentForm.$setSubmitted();
- };
-}
-
-/**
- * @ngdoc directive
- * @name ngForm
- * @restrict EAC
- *
- * @description
- * Nestable alias of {@link ng.directive:form `form`} directive. HTML
- * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a
- * sub-group of controls needs to be determined.
- *
- * Note: the purpose of `ngForm` is to group controls,
- * but not to be a replacement for the `<form>` tag with all of its capabilities
- * (e.g. posting to the server, ...).
- *
- * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into
- * related scope, under this name.
- *
- */
-
- /**
- * @ngdoc directive
- * @name form
- * @restrict E
- *
- * @description
- * Directive that instantiates
- * {@link form.FormController FormController}.
- *
- * If the `name` attribute is specified, the form controller is published onto the current scope under
- * this name.
- *
- * # Alias: {@link ng.directive:ngForm `ngForm`}
- *
- * In Angular forms can be nested. This means that the outer form is valid when all of the child
- * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so
- * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to
- * `<form>` but can be nested. This allows you to have nested forms, which is very useful when
- * using Angular validation directives in forms that are dynamically generated using the
- * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name`
- * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an
- * `ngForm` directive and nest these in an outer `form` element.
- *
- *
- * # CSS classes
- * - `ng-valid` is set if the form is valid.
- * - `ng-invalid` is set if the form is invalid.
- * - `ng-pristine` is set if the form is pristine.
- * - `ng-dirty` is set if the form is dirty.
- * - `ng-submitted` is set if the form was submitted.
- *
- * Keep in mind that ngAnimate can detect each of these classes when added and removed.
- *
- *
- * # Submitting a form and preventing the default action
- *
- * Since the role of forms in client-side Angular applications is different than in classical
- * roundtrip apps, it is desirable for the browser not to translate the form submission into a full
- * page reload that sends the data to the server. Instead some javascript logic should be triggered
- * to handle the form submission in an application-specific way.
- *
- * For this reason, Angular prevents the default action (form submission to the server) unless the
- * `<form>` element has an `action` attribute specified.
- *
- * You can use one of the following two ways to specify what javascript method should be called when
- * a form is submitted:
- *
- * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element
- * - {@link ng.directive:ngClick ngClick} directive on the first
- * button or input field of type submit (input[type=submit])
- *
- * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit}
- * or {@link ng.directive:ngClick ngClick} directives.
- * This is because of the following form submission rules in the HTML specification:
- *
- * - If a form has only one input field then hitting enter in this field triggers form submit
- * (`ngSubmit`)
- * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter
- * doesn't trigger submit
- * - if a form has one or more input fields and one or more buttons or input[type=submit] then
- * hitting enter in any of the input fields will trigger the click handler on the *first* button or
- * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`)
- *
- * Any pending `ngModelOptions` changes will take place immediately when an enclosing form is
- * submitted. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`
- * to have access to the updated model.
- *
- * ## Animation Hooks
- *
- * Animations in ngForm are triggered when any of the associated CSS classes are added and removed.
- * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any
- * other validations that are performed within the form. Animations in ngForm are similar to how
- * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well
- * as JS animations.
- *
- * The following example shows a simple way to utilize CSS transitions to style a form element
- * that has been rendered as invalid after it has been validated:
- *
- * <pre>
- * //be sure to include ngAnimate as a module to hook into more
- * //advanced animations
- * .my-form {
- * transition:0.5s linear all;
- * background: white;
- * }
- * .my-form.ng-invalid {
- * background: red;
- * color:white;
- * }
- * </pre>
- *
- * @example
- <example deps="angular-animate.js" animations="true" fixBase="true" module="formExample">
- <file name="index.html">
- <script>
- angular.module('formExample', [])
- .controller('FormController', ['$scope', function($scope) {
- $scope.userType = 'guest';
- }]);
- </script>
- <style>
- .my-form {
- -webkit-transition:all linear 0.5s;
- transition:all linear 0.5s;
- background: transparent;
- }
- .my-form.ng-invalid {
- background: red;
- }
- </style>
- <form name="myForm" ng-controller="FormController" class="my-form">
- userType: <input name="input" ng-model="userType" required>
- <span class="error" ng-show="myForm.input.$error.required">Required!</span><br>
- <tt>userType = {{userType}}</tt><br>
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br>
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br>
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br>
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>
- </form>
- </file>
- <file name="protractor.js" type="protractor">
- it('should initialize to model', function() {
- var userType = element(by.binding('userType'));
- var valid = element(by.binding('myForm.input.$valid'));
-
- expect(userType.getText()).toContain('guest');
- expect(valid.getText()).toContain('true');
- });
-
- it('should be invalid if empty', function() {
- var userType = element(by.binding('userType'));
- var valid = element(by.binding('myForm.input.$valid'));
- var userInput = element(by.model('userType'));
-
- userInput.clear();
- userInput.sendKeys('');
-
- expect(userType.getText()).toEqual('userType =');
- expect(valid.getText()).toContain('false');
- });
- </file>
- </example>
- *
- * @param {string=} name Name of the form. If specified, the form controller will be published into
- * related scope, under this name.
- */
-var formDirectiveFactory = function(isNgForm) {
- return ['$timeout', function($timeout) {
- var formDirective = {
- name: 'form',
- restrict: isNgForm ? 'EAC' : 'E',
- controller: FormController,
- compile: function ngFormCompile(formElement) {
- // Setup initial state of the control
- formElement.addClass(PRISTINE_CLASS).addClass(VALID_CLASS);
-
- return {
- pre: function ngFormPreLink(scope, formElement, attr, controller) {
- // if `action` attr is not present on the form, prevent the default action (submission)
- if (!('action' in attr)) {
- // we can't use jq events because if a form is destroyed during submission the default
- // action is not prevented. see #1238
- //
- // IE 9 is not affected because it doesn't fire a submit event and try to do a full
- // page reload if the form was destroyed by submission of the form via a click handler
- // on a button in the form. Looks like an IE9 specific bug.
- var handleFormSubmission = function(event) {
- scope.$apply(function() {
- controller.$commitViewValue();
- controller.$setSubmitted();
- });
-
- event.preventDefault();
- };
-
- addEventListenerFn(formElement[0], 'submit', handleFormSubmission);
-
- // unregister the preventDefault listener so that we don't not leak memory but in a
- // way that will achieve the prevention of the default action.
- formElement.on('$destroy', function() {
- $timeout(function() {
- removeEventListenerFn(formElement[0], 'submit', handleFormSubmission);
- }, 0, false);
- });
- }
-
- var parentFormCtrl = controller.$$parentForm,
- alias = controller.$name;
-
- if (alias) {
- setter(scope, alias, controller, alias);
- attr.$observe(attr.name ? 'name' : 'ngForm', function(newValue) {
- if (alias === newValue) return;
- setter(scope, alias, undefined, alias);
- alias = newValue;
- setter(scope, alias, controller, alias);
- parentFormCtrl.$$renameControl(controller, alias);
- });
- }
- formElement.on('$destroy', function() {
- parentFormCtrl.$removeControl(controller);
- if (alias) {
- setter(scope, alias, undefined, alias);
- }
- extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards
- });
- }
- };
- }
- };
-
- return formDirective;
- }];
-};
-
-var formDirective = formDirectiveFactory();
-var ngFormDirective = formDirectiveFactory(true);
-
-/* global VALID_CLASS: true,
- INVALID_CLASS: true,
- PRISTINE_CLASS: true,
- DIRTY_CLASS: true,
- UNTOUCHED_CLASS: true,
- TOUCHED_CLASS: true,
-*/
-
-// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231
-var ISO_DATE_REGEXP = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/;
-var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/;
-var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;
-var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/;
-var DATE_REGEXP = /^(\d{4})-(\d{2})-(\d{2})$/;
-var DATETIMELOCAL_REGEXP = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
-var WEEK_REGEXP = /^(\d{4})-W(\d\d)$/;
-var MONTH_REGEXP = /^(\d{4})-(\d\d)$/;
-var TIME_REGEXP = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
-var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/;
-
-var $ngModelMinErr = new minErr('ngModel');
-
-var inputType = {
-
- /**
- * @ngdoc input
- * @name input[text]
- *
- * @description
- * Standard HTML text input with angular data binding, inherited by most of the `input` elements.
- *
- *
- * @param {string} ngModel Assignable angular expression to data-bind to.
- * @param {string=} name Property name of the form under which the control is published.
- * @param {string=} required Adds `required` validation error key if the value is not entered.
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
- * `required` when you want to data-bind to the `required` attribute.
- * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
- * minlength.
- * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
- * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
- * any length.
- * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
- * that contains the regular expression body that will be converted to a regular expression
- * as in the ngPattern directive.
- * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
- * a RegExp found by evaluating the Angular expression given in the attribute value.
- * If the expression evaluates to a RegExp object then this is used directly.
- * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`
- * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`.
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
- * interaction with the input element.
- * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
- * This parameter is ignored for input[type=password] controls, which will never trim the
- * input.
- *
- * @example
- <example name="text-input-directive" module="textInputExample">
- <file name="index.html">
- <script>
- angular.module('textInputExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.text = 'guest';
- $scope.word = /^\s*\w*\s*$/;
- }]);
- </script>
- <form name="myForm" ng-controller="ExampleController">
- Single word: <input type="text" name="input" ng-model="text"
- ng-pattern="word" required ng-trim="false">
- <span class="error" ng-show="myForm.input.$error.required">
- Required!</span>
- <span class="error" ng-show="myForm.input.$error.pattern">
- Single word only!</span>
-
- <tt>text = {{text}}</tt><br/>
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
- </form>
- </file>
- <file name="protractor.js" type="protractor">
- var text = element(by.binding('text'));
- var valid = element(by.binding('myForm.input.$valid'));
- var input = element(by.model('text'));
-
- it('should initialize to model', function() {
- expect(text.getText()).toContain('guest');
- expect(valid.getText()).toContain('true');
- });
-
- it('should be invalid if empty', function() {
- input.clear();
- input.sendKeys('');
-
- expect(text.getText()).toEqual('text =');
- expect(valid.getText()).toContain('false');
- });
-
- it('should be invalid if multi word', function() {
- input.clear();
- input.sendKeys('hello world');
-
- expect(valid.getText()).toContain('false');
- });
- </file>
- </example>
- */
- 'text': textInputType,
-
- /**
- * @ngdoc input
- * @name input[date]
- *
- * @description
- * Input with date validation and transformation. In browsers that do not yet support
- * the HTML5 date input, a text element will be used. In that case, text must be entered in a valid ISO-8601
- * date format (yyyy-MM-dd), for example: `2009-01-06`. Since many
- * modern browsers do not yet support this input type, it is important to provide cues to users on the
- * expected input format via a placeholder or label.
- *
- * The model must always be a Date object, otherwise Angular will throw an error.
- * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
- *
- * The timezone to be used to read/write the `Date` instance in the model can be defined using
- * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
- *
- * @param {string} ngModel Assignable angular expression to data-bind to.
- * @param {string=} name Property name of the form under which the control is published.
- * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
- * valid ISO date string (yyyy-MM-dd).
- * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be
- * a valid ISO date string (yyyy-MM-dd).
- * @param {string=} required Sets `required` validation error key if the value is not entered.
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
- * `required` when you want to data-bind to the `required` attribute.
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
- * interaction with the input element.
- *
- * @example
- <example name="date-input-directive" module="dateInputExample">
- <file name="index.html">
- <script>
- angular.module('dateInputExample', [])
- .controller('DateController', ['$scope', function($scope) {
- $scope.value = new Date(2013, 9, 22);
- }]);
- </script>
- <form name="myForm" ng-controller="DateController as dateCtrl">
- Pick a date in 2013:
- <input type="date" id="exampleInput" name="input" ng-model="value"
- placeholder="yyyy-MM-dd" min="2013-01-01" max="2013-12-31" required />
- <span class="error" ng-show="myForm.input.$error.required">
- Required!</span>
- <span class="error" ng-show="myForm.input.$error.date">
- Not a valid date!</span>
- <tt>value = {{value | date: "yyyy-MM-dd"}}</tt><br/>
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
- </form>
- </file>
- <file name="protractor.js" type="protractor">
- var value = element(by.binding('value | date: "yyyy-MM-dd"'));
- var valid = element(by.binding('myForm.input.$valid'));
- var input = element(by.model('value'));
-
- // currently protractor/webdriver does not support
- // sending keys to all known HTML5 input controls
- // for various browsers (see https://github.com/angular/protractor/issues/562).
- function setInput(val) {
- // set the value of the element and force validation.
- var scr = "var ipt = document.getElementById('exampleInput'); " +
- "ipt.value = '" + val + "';" +
- "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
- browser.executeScript(scr);
- }
-
- it('should initialize to model', function() {
- expect(value.getText()).toContain('2013-10-22');
- expect(valid.getText()).toContain('myForm.input.$valid = true');
- });
-
- it('should be invalid if empty', function() {
- setInput('');
- expect(value.getText()).toEqual('value =');
- expect(valid.getText()).toContain('myForm.input.$valid = false');
- });
-
- it('should be invalid if over max', function() {
- setInput('2015-01-01');
- expect(value.getText()).toContain('');
- expect(valid.getText()).toContain('myForm.input.$valid = false');
- });
- </file>
- </example>
- */
- 'date': createDateInputType('date', DATE_REGEXP,
- createDateParser(DATE_REGEXP, ['yyyy', 'MM', 'dd']),
- 'yyyy-MM-dd'),
-
- /**
- * @ngdoc input
- * @name input[datetime-local]
- *
- * @description
- * Input with datetime validation and transformation. In browsers that do not yet support
- * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
- * local datetime format (yyyy-MM-ddTHH:mm:ss), for example: `2010-12-28T14:57:00`.
- *
- * The model must always be a Date object, otherwise Angular will throw an error.
- * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
- *
- * The timezone to be used to read/write the `Date` instance in the model can be defined using
- * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
- *
- * @param {string} ngModel Assignable angular expression to data-bind to.
- * @param {string=} name Property name of the form under which the control is published.
- * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
- * valid ISO datetime format (yyyy-MM-ddTHH:mm:ss).
- * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be
- * a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss).
- * @param {string=} required Sets `required` validation error key if the value is not entered.
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
- * `required` when you want to data-bind to the `required` attribute.
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
- * interaction with the input element.
- *
- * @example
- <example name="datetimelocal-input-directive" module="dateExample">
- <file name="index.html">
- <script>
- angular.module('dateExample', [])
- .controller('DateController', ['$scope', function($scope) {
- $scope.value = new Date(2010, 11, 28, 14, 57);
- }]);
- </script>
- <form name="myForm" ng-controller="DateController as dateCtrl">
- Pick a date between in 2013:
- <input type="datetime-local" id="exampleInput" name="input" ng-model="value"
- placeholder="yyyy-MM-ddTHH:mm:ss" min="2001-01-01T00:00:00" max="2013-12-31T00:00:00" required />
- <span class="error" ng-show="myForm.input.$error.required">
- Required!</span>
- <span class="error" ng-show="myForm.input.$error.datetimelocal">
- Not a valid date!</span>
- <tt>value = {{value | date: "yyyy-MM-ddTHH:mm:ss"}}</tt><br/>
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
- </form>
- </file>
- <file name="protractor.js" type="protractor">
- var value = element(by.binding('value | date: "yyyy-MM-ddTHH:mm:ss"'));
- var valid = element(by.binding('myForm.input.$valid'));
- var input = element(by.model('value'));
-
- // currently protractor/webdriver does not support
- // sending keys to all known HTML5 input controls
- // for various browsers (https://github.com/angular/protractor/issues/562).
- function setInput(val) {
- // set the value of the element and force validation.
- var scr = "var ipt = document.getElementById('exampleInput'); " +
- "ipt.value = '" + val + "';" +
- "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
- browser.executeScript(scr);
- }
-
- it('should initialize to model', function() {
- expect(value.getText()).toContain('2010-12-28T14:57:00');
- expect(valid.getText()).toContain('myForm.input.$valid = true');
- });
-
- it('should be invalid if empty', function() {
- setInput('');
- expect(value.getText()).toEqual('value =');
- expect(valid.getText()).toContain('myForm.input.$valid = false');
- });
-
- it('should be invalid if over max', function() {
- setInput('2015-01-01T23:59:00');
- expect(value.getText()).toContain('');
- expect(valid.getText()).toContain('myForm.input.$valid = false');
- });
- </file>
- </example>
- */
- 'datetime-local': createDateInputType('datetimelocal', DATETIMELOCAL_REGEXP,
- createDateParser(DATETIMELOCAL_REGEXP, ['yyyy', 'MM', 'dd', 'HH', 'mm', 'ss', 'sss']),
- 'yyyy-MM-ddTHH:mm:ss.sss'),
-
- /**
- * @ngdoc input
- * @name input[time]
- *
- * @description
- * Input with time validation and transformation. In browsers that do not yet support
- * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
- * local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a
- * Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`.
- *
- * The model must always be a Date object, otherwise Angular will throw an error.
- * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
- *
- * The timezone to be used to read/write the `Date` instance in the model can be defined using
- * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
- *
- * @param {string} ngModel Assignable angular expression to data-bind to.
- * @param {string=} name Property name of the form under which the control is published.
- * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
- * valid ISO time format (HH:mm:ss).
- * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be a
- * valid ISO time format (HH:mm:ss).
- * @param {string=} required Sets `required` validation error key if the value is not entered.
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
- * `required` when you want to data-bind to the `required` attribute.
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
- * interaction with the input element.
- *
- * @example
- <example name="time-input-directive" module="timeExample">
- <file name="index.html">
- <script>
- angular.module('timeExample', [])
- .controller('DateController', ['$scope', function($scope) {
- $scope.value = new Date(1970, 0, 1, 14, 57, 0);
- }]);
- </script>
- <form name="myForm" ng-controller="DateController as dateCtrl">
- Pick a between 8am and 5pm:
- <input type="time" id="exampleInput" name="input" ng-model="value"
- placeholder="HH:mm:ss" min="08:00:00" max="17:00:00" required />
- <span class="error" ng-show="myForm.input.$error.required">
- Required!</span>
- <span class="error" ng-show="myForm.input.$error.time">
- Not a valid date!</span>
- <tt>value = {{value | date: "HH:mm:ss"}}</tt><br/>
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
- </form>
- </file>
- <file name="protractor.js" type="protractor">
- var value = element(by.binding('value | date: "HH:mm:ss"'));
- var valid = element(by.binding('myForm.input.$valid'));
- var input = element(by.model('value'));
-
- // currently protractor/webdriver does not support
- // sending keys to all known HTML5 input controls
- // for various browsers (https://github.com/angular/protractor/issues/562).
- function setInput(val) {
- // set the value of the element and force validation.
- var scr = "var ipt = document.getElementById('exampleInput'); " +
- "ipt.value = '" + val + "';" +
- "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
- browser.executeScript(scr);
- }
-
- it('should initialize to model', function() {
- expect(value.getText()).toContain('14:57:00');
- expect(valid.getText()).toContain('myForm.input.$valid = true');
- });
-
- it('should be invalid if empty', function() {
- setInput('');
- expect(value.getText()).toEqual('value =');
- expect(valid.getText()).toContain('myForm.input.$valid = false');
- });
-
- it('should be invalid if over max', function() {
- setInput('23:59:00');
- expect(value.getText()).toContain('');
- expect(valid.getText()).toContain('myForm.input.$valid = false');
- });
- </file>
- </example>
- */
- 'time': createDateInputType('time', TIME_REGEXP,
- createDateParser(TIME_REGEXP, ['HH', 'mm', 'ss', 'sss']),
- 'HH:mm:ss.sss'),
-
- /**
- * @ngdoc input
- * @name input[week]
- *
- * @description
- * Input with week-of-the-year validation and transformation to Date. In browsers that do not yet support
- * the HTML5 week input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
- * week format (yyyy-W##), for example: `2013-W02`.
- *
- * The model must always be a Date object, otherwise Angular will throw an error.
- * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
- *
- * The timezone to be used to read/write the `Date` instance in the model can be defined using
- * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
- *
- * @param {string} ngModel Assignable angular expression to data-bind to.
- * @param {string=} name Property name of the form under which the control is published.
- * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
- * valid ISO week format (yyyy-W##).
- * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be
- * a valid ISO week format (yyyy-W##).
- * @param {string=} required Sets `required` validation error key if the value is not entered.
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
- * `required` when you want to data-bind to the `required` attribute.
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
- * interaction with the input element.
- *
- * @example
- <example name="week-input-directive" module="weekExample">
- <file name="index.html">
- <script>
- angular.module('weekExample', [])
- .controller('DateController', ['$scope', function($scope) {
- $scope.value = new Date(2013, 0, 3);
- }]);
- </script>
- <form name="myForm" ng-controller="DateController as dateCtrl">
- Pick a date between in 2013:
- <input id="exampleInput" type="week" name="input" ng-model="value"
- placeholder="YYYY-W##" min="2012-W32" max="2013-W52" required />
- <span class="error" ng-show="myForm.input.$error.required">
- Required!</span>
- <span class="error" ng-show="myForm.input.$error.week">
- Not a valid date!</span>
- <tt>value = {{value | date: "yyyy-Www"}}</tt><br/>
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
- </form>
- </file>
- <file name="protractor.js" type="protractor">
- var value = element(by.binding('value | date: "yyyy-Www"'));
- var valid = element(by.binding('myForm.input.$valid'));
- var input = element(by.model('value'));
-
- // currently protractor/webdriver does not support
- // sending keys to all known HTML5 input controls
- // for various browsers (https://github.com/angular/protractor/issues/562).
- function setInput(val) {
- // set the value of the element and force validation.
- var scr = "var ipt = document.getElementById('exampleInput'); " +
- "ipt.value = '" + val + "';" +
- "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
- browser.executeScript(scr);
- }
-
- it('should initialize to model', function() {
- expect(value.getText()).toContain('2013-W01');
- expect(valid.getText()).toContain('myForm.input.$valid = true');
- });
-
- it('should be invalid if empty', function() {
- setInput('');
- expect(value.getText()).toEqual('value =');
- expect(valid.getText()).toContain('myForm.input.$valid = false');
- });
-
- it('should be invalid if over max', function() {
- setInput('2015-W01');
- expect(value.getText()).toContain('');
- expect(valid.getText()).toContain('myForm.input.$valid = false');
- });
- </file>
- </example>
- */
- 'week': createDateInputType('week', WEEK_REGEXP, weekParser, 'yyyy-Www'),
-
- /**
- * @ngdoc input
- * @name input[month]
- *
- * @description
- * Input with month validation and transformation. In browsers that do not yet support
- * the HTML5 month input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
- * month format (yyyy-MM), for example: `2009-01`.
- *
- * The model must always be a Date object, otherwise Angular will throw an error.
- * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
- * If the model is not set to the first of the month, the next view to model update will set it
- * to the first of the month.
- *
- * The timezone to be used to read/write the `Date` instance in the model can be defined using
- * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
- *
- * @param {string} ngModel Assignable angular expression to data-bind to.
- * @param {string=} name Property name of the form under which the control is published.
- * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be
- * a valid ISO month format (yyyy-MM).
- * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must
- * be a valid ISO month format (yyyy-MM).
- * @param {string=} required Sets `required` validation error key if the value is not entered.
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
- * `required` when you want to data-bind to the `required` attribute.
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
- * interaction with the input element.
- *
- * @example
- <example name="month-input-directive" module="monthExample">
- <file name="index.html">
- <script>
- angular.module('monthExample', [])
- .controller('DateController', ['$scope', function($scope) {
- $scope.value = new Date(2013, 9, 1);
- }]);
- </script>
- <form name="myForm" ng-controller="DateController as dateCtrl">
- Pick a month int 2013:
- <input id="exampleInput" type="month" name="input" ng-model="value"
- placeholder="yyyy-MM" min="2013-01" max="2013-12" required />
- <span class="error" ng-show="myForm.input.$error.required">
- Required!</span>
- <span class="error" ng-show="myForm.input.$error.month">
- Not a valid month!</span>
- <tt>value = {{value | date: "yyyy-MM"}}</tt><br/>
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
- </form>
- </file>
- <file name="protractor.js" type="protractor">
- var value = element(by.binding('value | date: "yyyy-MM"'));
- var valid = element(by.binding('myForm.input.$valid'));
- var input = element(by.model('value'));
-
- // currently protractor/webdriver does not support
- // sending keys to all known HTML5 input controls
- // for various browsers (https://github.com/angular/protractor/issues/562).
- function setInput(val) {
- // set the value of the element and force validation.
- var scr = "var ipt = document.getElementById('exampleInput'); " +
- "ipt.value = '" + val + "';" +
- "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
- browser.executeScript(scr);
- }
-
- it('should initialize to model', function() {
- expect(value.getText()).toContain('2013-10');
- expect(valid.getText()).toContain('myForm.input.$valid = true');
- });
-
- it('should be invalid if empty', function() {
- setInput('');
- expect(value.getText()).toEqual('value =');
- expect(valid.getText()).toContain('myForm.input.$valid = false');
- });
-
- it('should be invalid if over max', function() {
- setInput('2015-01');
- expect(value.getText()).toContain('');
- expect(valid.getText()).toContain('myForm.input.$valid = false');
- });
- </file>
- </example>
- */
- 'month': createDateInputType('month', MONTH_REGEXP,
- createDateParser(MONTH_REGEXP, ['yyyy', 'MM']),
- 'yyyy-MM'),
-
- /**
- * @ngdoc input
- * @name input[number]
- *
- * @description
- * Text input with number validation and transformation. Sets the `number` validation
- * error if not a valid number.
- *
- * The model must always be a number, otherwise Angular will throw an error.
- *
- * @param {string} ngModel Assignable angular expression to data-bind to.
- * @param {string=} name Property name of the form under which the control is published.
- * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
- * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.
- * @param {string=} required Sets `required` validation error key if the value is not entered.
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
- * `required` when you want to data-bind to the `required` attribute.
- * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
- * minlength.
- * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
- * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
- * any length.
- * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
- * that contains the regular expression body that will be converted to a regular expression
- * as in the ngPattern directive.
- * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
- * a RegExp found by evaluating the Angular expression given in the attribute value.
- * If the expression evaluates to a RegExp object then this is used directly.
- * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`
- * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`.
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
- * interaction with the input element.
- *
- * @example
- <example name="number-input-directive" module="numberExample">
- <file name="index.html">
- <script>
- angular.module('numberExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.value = 12;
- }]);
- </script>
- <form name="myForm" ng-controller="ExampleController">
- Number: <input type="number" name="input" ng-model="value"
- min="0" max="99" required>
- <span class="error" ng-show="myForm.input.$error.required">
- Required!</span>
- <span class="error" ng-show="myForm.input.$error.number">
- Not valid number!</span>
- <tt>value = {{value}}</tt><br/>
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
- </form>
- </file>
- <file name="protractor.js" type="protractor">
- var value = element(by.binding('value'));
- var valid = element(by.binding('myForm.input.$valid'));
- var input = element(by.model('value'));
-
- it('should initialize to model', function() {
- expect(value.getText()).toContain('12');
- expect(valid.getText()).toContain('true');
- });
-
- it('should be invalid if empty', function() {
- input.clear();
- input.sendKeys('');
- expect(value.getText()).toEqual('value =');
- expect(valid.getText()).toContain('false');
- });
-
- it('should be invalid if over max', function() {
- input.clear();
- input.sendKeys('123');
- expect(value.getText()).toEqual('value =');
- expect(valid.getText()).toContain('false');
- });
- </file>
- </example>
- */
- 'number': numberInputType,
-
-
- /**
- * @ngdoc input
- * @name input[url]
- *
- * @description
- * Text input with URL validation. Sets the `url` validation error key if the content is not a
- * valid URL.
- *
- * <div class="alert alert-warning">
- * **Note:** `input[url]` uses a regex to validate urls that is derived from the regex
- * used in Chromium. If you need stricter validation, you can use `ng-pattern` or modify
- * the built-in validators (see the {@link guide/forms Forms guide})
- * </div>
- *
- * @param {string} ngModel Assignable angular expression to data-bind to.
- * @param {string=} name Property name of the form under which the control is published.
- * @param {string=} required Sets `required` validation error key if the value is not entered.
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
- * `required` when you want to data-bind to the `required` attribute.
- * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
- * minlength.
- * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
- * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
- * any length.
- * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
- * that contains the regular expression body that will be converted to a regular expression
- * as in the ngPattern directive.
- * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
- * a RegExp found by evaluating the Angular expression given in the attribute value.
- * If the expression evaluates to a RegExp object then this is used directly.
- * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`
- * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`.
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
- * interaction with the input element.
- *
- * @example
- <example name="url-input-directive" module="urlExample">
- <file name="index.html">
- <script>
- angular.module('urlExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.text = 'http://google.com';
- }]);
- </script>
- <form name="myForm" ng-controller="ExampleController">
- URL: <input type="url" name="input" ng-model="text" required>
- <span class="error" ng-show="myForm.input.$error.required">
- Required!</span>
- <span class="error" ng-show="myForm.input.$error.url">
- Not valid url!</span>
- <tt>text = {{text}}</tt><br/>
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
- <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/>
- </form>
- </file>
- <file name="protractor.js" type="protractor">
- var text = element(by.binding('text'));
- var valid = element(by.binding('myForm.input.$valid'));
- var input = element(by.model('text'));
-
- it('should initialize to model', function() {
- expect(text.getText()).toContain('http://google.com');
- expect(valid.getText()).toContain('true');
- });
-
- it('should be invalid if empty', function() {
- input.clear();
- input.sendKeys('');
-
- expect(text.getText()).toEqual('text =');
- expect(valid.getText()).toContain('false');
- });
-
- it('should be invalid if not url', function() {
- input.clear();
- input.sendKeys('box');
-
- expect(valid.getText()).toContain('false');
- });
- </file>
- </example>
- */
- 'url': urlInputType,
-
-
- /**
- * @ngdoc input
- * @name input[email]
- *
- * @description
- * Text input with email validation. Sets the `email` validation error key if not a valid email
- * address.
- *
- * <div class="alert alert-warning">
- * **Note:** `input[email]` uses a regex to validate email addresses that is derived from the regex
- * used in Chromium. If you need stricter validation (e.g. requiring a top-level domain), you can
- * use `ng-pattern` or modify the built-in validators (see the {@link guide/forms Forms guide})
- * </div>
- *
- * @param {string} ngModel Assignable angular expression to data-bind to.
- * @param {string=} name Property name of the form under which the control is published.
- * @param {string=} required Sets `required` validation error key if the value is not entered.
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
- * `required` when you want to data-bind to the `required` attribute.
- * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
- * minlength.
- * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
- * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
- * any length.
- * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
- * that contains the regular expression body that will be converted to a regular expression
- * as in the ngPattern directive.
- * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
- * a RegExp found by evaluating the Angular expression given in the attribute value.
- * If the expression evaluates to a RegExp object then this is used directly.
- * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$`
- * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`.
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
- * interaction with the input element.
- *
- * @example
- <example name="email-input-directive" module="emailExample">
- <file name="index.html">
- <script>
- angular.module('emailExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.text = 'me@example.com';
- }]);
- </script>
- <form name="myForm" ng-controller="ExampleController">
- Email: <input type="email" name="input" ng-model="text" required>
- <span class="error" ng-show="myForm.input.$error.required">
- Required!</span>
- <span class="error" ng-show="myForm.input.$error.email">
- Not valid email!</span>
- <tt>text = {{text}}</tt><br/>
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
- <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/>
- </form>
- </file>
- <file name="protractor.js" type="protractor">
- var text = element(by.binding('text'));
- var valid = element(by.binding('myForm.input.$valid'));
- var input = element(by.model('text'));
-
- it('should initialize to model', function() {
- expect(text.getText()).toContain('me@example.com');
- expect(valid.getText()).toContain('true');
- });
-
- it('should be invalid if empty', function() {
- input.clear();
- input.sendKeys('');
- expect(text.getText()).toEqual('text =');
- expect(valid.getText()).toContain('false');
- });
-
- it('should be invalid if not email', function() {
- input.clear();
- input.sendKeys('xxx');
-
- expect(valid.getText()).toContain('false');
- });
- </file>
- </example>
- */
- 'email': emailInputType,
-
-
- /**
- * @ngdoc input
- * @name input[radio]
- *
- * @description
- * HTML radio button.
- *
- * @param {string} ngModel Assignable angular expression to data-bind to.
- * @param {string} value The value to which the expression should be set when selected.
- * @param {string=} name Property name of the form under which the control is published.
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
- * interaction with the input element.
- * @param {string} ngValue Angular expression which sets the value to which the expression should
- * be set when selected.
- *
- * @example
- <example name="radio-input-directive" module="radioExample">
- <file name="index.html">
- <script>
- angular.module('radioExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.color = 'blue';
- $scope.specialValue = {
- "id": "12345",
- "value": "green"
- };
- }]);
- </script>
- <form name="myForm" ng-controller="ExampleController">
- <input type="radio" ng-model="color" value="red"> Red <br/>
- <input type="radio" ng-model="color" ng-value="specialValue"> Green <br/>
- <input type="radio" ng-model="color" value="blue"> Blue <br/>
- <tt>color = {{color | json}}</tt><br/>
- </form>
- Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`.
- </file>
- <file name="protractor.js" type="protractor">
- it('should change state', function() {
- var color = element(by.binding('color'));
-
- expect(color.getText()).toContain('blue');
-
- element.all(by.model('color')).get(0).click();
-
- expect(color.getText()).toContain('red');
- });
- </file>
- </example>
- */
- 'radio': radioInputType,
-
-
- /**
- * @ngdoc input
- * @name input[checkbox]
- *
- * @description
- * HTML checkbox.
- *
- * @param {string} ngModel Assignable angular expression to data-bind to.
- * @param {string=} name Property name of the form under which the control is published.
- * @param {expression=} ngTrueValue The value to which the expression should be set when selected.
- * @param {expression=} ngFalseValue The value to which the expression should be set when not selected.
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
- * interaction with the input element.
- *
- * @example
- <example name="checkbox-input-directive" module="checkboxExample">
- <file name="index.html">
- <script>
- angular.module('checkboxExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.value1 = true;
- $scope.value2 = 'YES'
- }]);
- </script>
- <form name="myForm" ng-controller="ExampleController">
- Value1: <input type="checkbox" ng-model="value1"> <br/>
- Value2: <input type="checkbox" ng-model="value2"
- ng-true-value="'YES'" ng-false-value="'NO'"> <br/>
- <tt>value1 = {{value1}}</tt><br/>
- <tt>value2 = {{value2}}</tt><br/>
- </form>
- </file>
- <file name="protractor.js" type="protractor">
- it('should change state', function() {
- var value1 = element(by.binding('value1'));
- var value2 = element(by.binding('value2'));
-
- expect(value1.getText()).toContain('true');
- expect(value2.getText()).toContain('YES');
-
- element(by.model('value1')).click();
- element(by.model('value2')).click();
-
- expect(value1.getText()).toContain('false');
- expect(value2.getText()).toContain('NO');
- });
- </file>
- </example>
- */
- 'checkbox': checkboxInputType,
-
- 'hidden': noop,
- 'button': noop,
- 'submit': noop,
- 'reset': noop,
- 'file': noop
-};
-
-function stringBasedInputType(ctrl) {
- ctrl.$formatters.push(function(value) {
- return ctrl.$isEmpty(value) ? value : value.toString();
- });
-}
-
-function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
- baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
- stringBasedInputType(ctrl);
-}
-
-function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
- var placeholder = element[0].placeholder, noevent = {};
- var type = lowercase(element[0].type);
-
- // In composition mode, users are still inputing intermediate text buffer,
- // hold the listener until composition is done.
- // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent
- if (!$sniffer.android) {
- var composing = false;
-
- element.on('compositionstart', function(data) {
- composing = true;
- });
-
- element.on('compositionend', function() {
- composing = false;
- listener();
- });
- }
-
- var listener = function(ev) {
- if (composing) return;
- var value = element.val(),
- event = ev && ev.type;
-
- // IE (11 and under) seem to emit an 'input' event if the placeholder value changes.
- // We don't want to dirty the value when this happens, so we abort here. Unfortunately,
- // IE also sends input events for other non-input-related things, (such as focusing on a
- // form control), so this change is not entirely enough to solve this.
- if (msie && (ev || noevent).type === 'input' && element[0].placeholder !== placeholder) {
- placeholder = element[0].placeholder;
- return;
- }
-
- // By default we will trim the value
- // If the attribute ng-trim exists we will avoid trimming
- // If input type is 'password', the value is never trimmed
- if (type !== 'password' && (!attr.ngTrim || attr.ngTrim !== 'false')) {
- value = trim(value);
- }
-
- // If a control is suffering from bad input (due to native validators), browsers discard its
- // value, so it may be necessary to revalidate (by calling $setViewValue again) even if the
- // control's value is the same empty value twice in a row.
- if (ctrl.$viewValue !== value || (value === '' && ctrl.$$hasNativeValidators)) {
- ctrl.$setViewValue(value, event);
- }
- };
-
- // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the
- // input event on backspace, delete or cut
- if ($sniffer.hasEvent('input')) {
- element.on('input', listener);
- } else {
- var timeout;
-
- var deferListener = function(ev) {
- if (!timeout) {
- timeout = $browser.defer(function() {
- listener(ev);
- timeout = null;
- });
- }
- };
-
- element.on('keydown', function(event) {
- var key = event.keyCode;
-
- // ignore
- // command modifiers arrows
- if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return;
-
- deferListener(event);
- });
-
- // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it
- if ($sniffer.hasEvent('paste')) {
- element.on('paste cut', deferListener);
- }
- }
-
- // if user paste into input using mouse on older browser
- // or form autocomplete on newer browser, we need "change" event to catch it
- element.on('change', listener);
-
- ctrl.$render = function() {
- element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue);
- };
-}
-
-function weekParser(isoWeek, existingDate) {
- if (isDate(isoWeek)) {
- return isoWeek;
- }
-
- if (isString(isoWeek)) {
- WEEK_REGEXP.lastIndex = 0;
- var parts = WEEK_REGEXP.exec(isoWeek);
- if (parts) {
- var year = +parts[1],
- week = +parts[2],
- hours = 0,
- minutes = 0,
- seconds = 0,
- milliseconds = 0,
- firstThurs = getFirstThursdayOfYear(year),
- addDays = (week - 1) * 7;
-
- if (existingDate) {
- hours = existingDate.getHours();
- minutes = existingDate.getMinutes();
- seconds = existingDate.getSeconds();
- milliseconds = existingDate.getMilliseconds();
- }
-
- return new Date(year, 0, firstThurs.getDate() + addDays, hours, minutes, seconds, milliseconds);
- }
- }
-
- return NaN;
-}
-
-function createDateParser(regexp, mapping) {
- return function(iso, date) {
- var parts, map;
-
- if (isDate(iso)) {
- return iso;
- }
-
- if (isString(iso)) {
- // When a date is JSON'ified to wraps itself inside of an extra
- // set of double quotes. This makes the date parsing code unable
- // to match the date string and parse it as a date.
- if (iso.charAt(0) == '"' && iso.charAt(iso.length - 1) == '"') {
- iso = iso.substring(1, iso.length - 1);
- }
- if (ISO_DATE_REGEXP.test(iso)) {
- return new Date(iso);
- }
- regexp.lastIndex = 0;
- parts = regexp.exec(iso);
-
- if (parts) {
- parts.shift();
- if (date) {
- map = {
- yyyy: date.getFullYear(),
- MM: date.getMonth() + 1,
- dd: date.getDate(),
- HH: date.getHours(),
- mm: date.getMinutes(),
- ss: date.getSeconds(),
- sss: date.getMilliseconds() / 1000
- };
- } else {
- map = { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0 };
- }
-
- forEach(parts, function(part, index) {
- if (index < mapping.length) {
- map[mapping[index]] = +part;
- }
- });
- return new Date(map.yyyy, map.MM - 1, map.dd, map.HH, map.mm, map.ss || 0, map.sss * 1000 || 0);
- }
- }
-
- return NaN;
- };
-}
-
-function createDateInputType(type, regexp, parseDate, format) {
- return function dynamicDateInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter) {
- badInputChecker(scope, element, attr, ctrl);
- baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
- var timezone = ctrl && ctrl.$options && ctrl.$options.timezone;
- var previousDate;
-
- ctrl.$$parserName = type;
- ctrl.$parsers.push(function(value) {
- if (ctrl.$isEmpty(value)) return null;
- if (regexp.test(value)) {
- // Note: We cannot read ctrl.$modelValue, as there might be a different
- // parser/formatter in the processing chain so that the model
- // contains some different data format!
- var parsedDate = parseDate(value, previousDate);
- if (timezone === 'UTC') {
- parsedDate.setMinutes(parsedDate.getMinutes() - parsedDate.getTimezoneOffset());
- }
- return parsedDate;
- }
- return undefined;
- });
-
- ctrl.$formatters.push(function(value) {
- if (value && !isDate(value)) {
- throw $ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value);
- }
- if (isValidDate(value)) {
- previousDate = value;
- if (previousDate && timezone === 'UTC') {
- var timezoneOffset = 60000 * previousDate.getTimezoneOffset();
- previousDate = new Date(previousDate.getTime() + timezoneOffset);
- }
- return $filter('date')(value, format, timezone);
- } else {
- previousDate = null;
- return '';
- }
- });
-
- if (isDefined(attr.min) || attr.ngMin) {
- var minVal;
- ctrl.$validators.min = function(value) {
- return !isValidDate(value) || isUndefined(minVal) || parseDate(value) >= minVal;
- };
- attr.$observe('min', function(val) {
- minVal = parseObservedDateValue(val);
- ctrl.$validate();
- });
- }
-
- if (isDefined(attr.max) || attr.ngMax) {
- var maxVal;
- ctrl.$validators.max = function(value) {
- return !isValidDate(value) || isUndefined(maxVal) || parseDate(value) <= maxVal;
- };
- attr.$observe('max', function(val) {
- maxVal = parseObservedDateValue(val);
- ctrl.$validate();
- });
- }
-
- function isValidDate(value) {
- // Invalid Date: getTime() returns NaN
- return value && !(value.getTime && value.getTime() !== value.getTime());
- }
-
- function parseObservedDateValue(val) {
- return isDefined(val) ? (isDate(val) ? val : parseDate(val)) : undefined;
- }
- };
-}
-
-function badInputChecker(scope, element, attr, ctrl) {
- var node = element[0];
- var nativeValidation = ctrl.$$hasNativeValidators = isObject(node.validity);
- if (nativeValidation) {
- ctrl.$parsers.push(function(value) {
- var validity = element.prop(VALIDITY_STATE_PROPERTY) || {};
- // Detect bug in FF35 for input[email] (https://bugzilla.mozilla.org/show_bug.cgi?id=1064430):
- // - also sets validity.badInput (should only be validity.typeMismatch).
- // - see http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#e-mail-state-(type=email)
- // - can ignore this case as we can still read out the erroneous email...
- return validity.badInput && !validity.typeMismatch ? undefined : value;
- });
- }
-}
-
-function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
- badInputChecker(scope, element, attr, ctrl);
- baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
-
- ctrl.$$parserName = 'number';
- ctrl.$parsers.push(function(value) {
- if (ctrl.$isEmpty(value)) return null;
- if (NUMBER_REGEXP.test(value)) return parseFloat(value);
- return undefined;
- });
-
- ctrl.$formatters.push(function(value) {
- if (!ctrl.$isEmpty(value)) {
- if (!isNumber(value)) {
- throw $ngModelMinErr('numfmt', 'Expected `{0}` to be a number', value);
- }
- value = value.toString();
- }
- return value;
- });
-
- if (attr.min || attr.ngMin) {
- var minVal;
- ctrl.$validators.min = function(value) {
- return ctrl.$isEmpty(value) || isUndefined(minVal) || value >= minVal;
- };
-
- attr.$observe('min', function(val) {
- if (isDefined(val) && !isNumber(val)) {
- val = parseFloat(val, 10);
- }
- minVal = isNumber(val) && !isNaN(val) ? val : undefined;
- // TODO(matsko): implement validateLater to reduce number of validations
- ctrl.$validate();
- });
- }
-
- if (attr.max || attr.ngMax) {
- var maxVal;
- ctrl.$validators.max = function(value) {
- return ctrl.$isEmpty(value) || isUndefined(maxVal) || value <= maxVal;
- };
-
- attr.$observe('max', function(val) {
- if (isDefined(val) && !isNumber(val)) {
- val = parseFloat(val, 10);
- }
- maxVal = isNumber(val) && !isNaN(val) ? val : undefined;
- // TODO(matsko): implement validateLater to reduce number of validations
- ctrl.$validate();
- });
- }
-}
-
-function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
- // Note: no badInputChecker here by purpose as `url` is only a validation
- // in browsers, i.e. we can always read out input.value even if it is not valid!
- baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
- stringBasedInputType(ctrl);
-
- ctrl.$$parserName = 'url';
- ctrl.$validators.url = function(modelValue, viewValue) {
- var value = modelValue || viewValue;
- return ctrl.$isEmpty(value) || URL_REGEXP.test(value);
- };
-}
-
-function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
- // Note: no badInputChecker here by purpose as `url` is only a validation
- // in browsers, i.e. we can always read out input.value even if it is not valid!
- baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
- stringBasedInputType(ctrl);
-
- ctrl.$$parserName = 'email';
- ctrl.$validators.email = function(modelValue, viewValue) {
- var value = modelValue || viewValue;
- return ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value);
- };
-}
-
-function radioInputType(scope, element, attr, ctrl) {
- // make the name unique, if not defined
- if (isUndefined(attr.name)) {
- element.attr('name', nextUid());
- }
-
- var listener = function(ev) {
- if (element[0].checked) {
- ctrl.$setViewValue(attr.value, ev && ev.type);
- }
- };
-
- element.on('click', listener);
-
- ctrl.$render = function() {
- var value = attr.value;
- element[0].checked = (value == ctrl.$viewValue);
- };
-
- attr.$observe('value', ctrl.$render);
-}
-
-function parseConstantExpr($parse, context, name, expression, fallback) {
- var parseFn;
- if (isDefined(expression)) {
- parseFn = $parse(expression);
- if (!parseFn.constant) {
- throw minErr('ngModel')('constexpr', 'Expected constant expression for `{0}`, but saw ' +
- '`{1}`.', name, expression);
- }
- return parseFn(context);
- }
- return fallback;
-}
-
-function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) {
- var trueValue = parseConstantExpr($parse, scope, 'ngTrueValue', attr.ngTrueValue, true);
- var falseValue = parseConstantExpr($parse, scope, 'ngFalseValue', attr.ngFalseValue, false);
-
- var listener = function(ev) {
- ctrl.$setViewValue(element[0].checked, ev && ev.type);
- };
-
- element.on('click', listener);
-
- ctrl.$render = function() {
- element[0].checked = ctrl.$viewValue;
- };
-
- // Override the standard `$isEmpty` because the $viewValue of an empty checkbox is always set to `false`
- // This is because of the parser below, which compares the `$modelValue` with `trueValue` to convert
- // it to a boolean.
- ctrl.$isEmpty = function(value) {
- return value === false;
- };
-
- ctrl.$formatters.push(function(value) {
- return equals(value, trueValue);
- });
-
- ctrl.$parsers.push(function(value) {
- return value ? trueValue : falseValue;
- });
-}
-
-
-/**
- * @ngdoc directive
- * @name textarea
- * @restrict E
- *
- * @description
- * HTML textarea element control with angular data-binding. The data-binding and validation
- * properties of this element are exactly the same as those of the
- * {@link ng.directive:input input element}.
- *
- * @param {string} ngModel Assignable angular expression to data-bind to.
- * @param {string=} name Property name of the form under which the control is published.
- * @param {string=} required Sets `required` validation error key if the value is not entered.
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
- * `required` when you want to data-bind to the `required` attribute.
- * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
- * minlength.
- * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
- * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any
- * length.
- * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
- * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
- * patterns defined as scope expressions.
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
- * interaction with the input element.
- * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
- */
-
-
-/**
- * @ngdoc directive
- * @name input
- * @restrict E
- *
- * @description
- * HTML input element control. When used together with {@link ngModel `ngModel`}, it provides data-binding,
- * input state control, and validation.
- * Input control follows HTML5 input types and polyfills the HTML5 validation behavior for older browsers.
- *
- * <div class="alert alert-warning">
- * **Note:** Not every feature offered is available for all input types.
- * Specifically, data binding and event handling via `ng-model` is unsupported for `input[file]`.
- * </div>
- *
- * @param {string} ngModel Assignable angular expression to data-bind to.
- * @param {string=} name Property name of the form under which the control is published.
- * @param {string=} required Sets `required` validation error key if the value is not entered.
- * @param {boolean=} ngRequired Sets `required` attribute if set to true
- * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
- * minlength.
- * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
- * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any
- * length.
- * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
- * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
- * patterns defined as scope expressions.
- * @param {string=} ngChange Angular expression to be executed when input changes due to user
- * interaction with the input element.
- * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
- * This parameter is ignored for input[type=password] controls, which will never trim the
- * input.
- *
- * @example
- <example name="input-directive" module="inputExample">
- <file name="index.html">
- <script>
- angular.module('inputExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.user = {name: 'guest', last: 'visitor'};
- }]);
- </script>
- <div ng-controller="ExampleController">
- <form name="myForm">
- User name: <input type="text" name="userName" ng-model="user.name" required>
- <span class="error" ng-show="myForm.userName.$error.required">
- Required!</span><br>
- Last name: <input type="text" name="lastName" ng-model="user.last"
- ng-minlength="3" ng-maxlength="10">
- <span class="error" ng-show="myForm.lastName.$error.minlength">
- Too short!</span>
- <span class="error" ng-show="myForm.lastName.$error.maxlength">
- Too long!</span><br>
- </form>
- <hr>
- <tt>user = {{user}}</tt><br/>
- <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br>
- <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br>
- <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br>
- <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br>
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br>
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>
- <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br>
- <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br>
- </div>
- </file>
- <file name="protractor.js" type="protractor">
- var user = element(by.exactBinding('user'));
- var userNameValid = element(by.binding('myForm.userName.$valid'));
- var lastNameValid = element(by.binding('myForm.lastName.$valid'));
- var lastNameError = element(by.binding('myForm.lastName.$error'));
- var formValid = element(by.binding('myForm.$valid'));
- var userNameInput = element(by.model('user.name'));
- var userLastInput = element(by.model('user.last'));
-
- it('should initialize to model', function() {
- expect(user.getText()).toContain('{"name":"guest","last":"visitor"}');
- expect(userNameValid.getText()).toContain('true');
- expect(formValid.getText()).toContain('true');
- });
-
- it('should be invalid if empty when required', function() {
- userNameInput.clear();
- userNameInput.sendKeys('');
-
- expect(user.getText()).toContain('{"last":"visitor"}');
- expect(userNameValid.getText()).toContain('false');
- expect(formValid.getText()).toContain('false');
- });
-
- it('should be valid if empty when min length is set', function() {
- userLastInput.clear();
- userLastInput.sendKeys('');
-
- expect(user.getText()).toContain('{"name":"guest","last":""}');
- expect(lastNameValid.getText()).toContain('true');
- expect(formValid.getText()).toContain('true');
- });
-
- it('should be invalid if less than required min length', function() {
- userLastInput.clear();
- userLastInput.sendKeys('xx');
-
- expect(user.getText()).toContain('{"name":"guest"}');
- expect(lastNameValid.getText()).toContain('false');
- expect(lastNameError.getText()).toContain('minlength');
- expect(formValid.getText()).toContain('false');
- });
-
- it('should be invalid if longer than max length', function() {
- userLastInput.clear();
- userLastInput.sendKeys('some ridiculously long name');
-
- expect(user.getText()).toContain('{"name":"guest"}');
- expect(lastNameValid.getText()).toContain('false');
- expect(lastNameError.getText()).toContain('maxlength');
- expect(formValid.getText()).toContain('false');
- });
- </file>
- </example>
- */
-var inputDirective = ['$browser', '$sniffer', '$filter', '$parse',
- function($browser, $sniffer, $filter, $parse) {
- return {
- restrict: 'E',
- require: ['?ngModel'],
- link: {
- pre: function(scope, element, attr, ctrls) {
- if (ctrls[0]) {
- (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrls[0], $sniffer,
- $browser, $filter, $parse);
- }
- }
- }
- };
-}];
-
-var VALID_CLASS = 'ng-valid',
- INVALID_CLASS = 'ng-invalid',
- PRISTINE_CLASS = 'ng-pristine',
- DIRTY_CLASS = 'ng-dirty',
- UNTOUCHED_CLASS = 'ng-untouched',
- TOUCHED_CLASS = 'ng-touched',
- PENDING_CLASS = 'ng-pending';
-
-/**
- * @ngdoc type
- * @name ngModel.NgModelController
- *
- * @property {string} $viewValue Actual string value in the view.
- * @property {*} $modelValue The value in the model that the control is bound to.
- * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever
- the control reads value from the DOM. The functions are called in array order, each passing
- its return value through to the next. The last return value is forwarded to the
- {@link ngModel.NgModelController#$validators `$validators`} collection.
-
-Parsers are used to sanitize / convert the {@link ngModel.NgModelController#$viewValue
-`$viewValue`}.
-
-Returning `undefined` from a parser means a parse error occurred. In that case,
-no {@link ngModel.NgModelController#$validators `$validators`} will run and the `ngModel`
-will be set to `undefined` unless {@link ngModelOptions `ngModelOptions.allowInvalid`}
-is set to `true`. The parse error is stored in `ngModel.$error.parse`.
-
- *
- * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever
- the model value changes. The functions are called in reverse array order, each passing the value through to the
- next. The last return value is used as the actual DOM value.
- Used to format / convert values for display in the control.
- * ```js
- * function formatter(value) {
- * if (value) {
- * return value.toUpperCase();
- * }
- * }
- * ngModel.$formatters.push(formatter);
- * ```
- *
- * @property {Object.<string, function>} $validators A collection of validators that are applied
- * whenever the model value changes. The key value within the object refers to the name of the
- * validator while the function refers to the validation operation. The validation operation is
- * provided with the model value as an argument and must return a true or false value depending
- * on the response of that validation.
- *
- * ```js
- * ngModel.$validators.validCharacters = function(modelValue, viewValue) {
- * var value = modelValue || viewValue;
- * return /[0-9]+/.test(value) &&
- * /[a-z]+/.test(value) &&
- * /[A-Z]+/.test(value) &&
- * /\W+/.test(value);
- * };
- * ```
- *
- * @property {Object.<string, function>} $asyncValidators A collection of validations that are expected to
- * perform an asynchronous validation (e.g. a HTTP request). The validation function that is provided
- * is expected to return a promise when it is run during the model validation process. Once the promise
- * is delivered then the validation status will be set to true when fulfilled and false when rejected.
- * When the asynchronous validators are triggered, each of the validators will run in parallel and the model
- * value will only be updated once all validators have been fulfilled. As long as an asynchronous validator
- * is unfulfilled, its key will be added to the controllers `$pending` property. Also, all asynchronous validators
- * will only run once all synchronous validators have passed.
- *
- * Please note that if $http is used then it is important that the server returns a success HTTP response code
- * in order to fulfill the validation and a status level of `4xx` in order to reject the validation.
- *
- * ```js
- * ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) {
- * var value = modelValue || viewValue;
- *
- * // Lookup user by username
- * return $http.get('/api/users/' + value).
- * then(function resolved() {
- * //username exists, this means validation fails
- * return $q.reject('exists');
- * }, function rejected() {
- * //username does not exist, therefore this validation passes
- * return true;
- * });
- * };
- * ```
- *
- * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the
- * view value has changed. It is called with no arguments, and its return value is ignored.
- * This can be used in place of additional $watches against the model value.
- *
- * @property {Object} $error An object hash with all failing validator ids as keys.
- * @property {Object} $pending An object hash with all pending validator ids as keys.
- *
- * @property {boolean} $untouched True if control has not lost focus yet.
- * @property {boolean} $touched True if control has lost focus.
- * @property {boolean} $pristine True if user has not interacted with the control yet.
- * @property {boolean} $dirty True if user has already interacted with the control.
- * @property {boolean} $valid True if there is no error.
- * @property {boolean} $invalid True if at least one error on the control.
- * @property {string} $name The name attribute of the control.
- *
- * @description
- *
- * `NgModelController` provides API for the {@link ngModel `ngModel`} directive.
- * The controller contains services for data-binding, validation, CSS updates, and value formatting
- * and parsing. It purposefully does not contain any logic which deals with DOM rendering or
- * listening to DOM events.
- * Such DOM related logic should be provided by other directives which make use of
- * `NgModelController` for data-binding to control elements.
- * Angular provides this DOM logic for most {@link input `input`} elements.
- * At the end of this page you can find a {@link ngModel.NgModelController#custom-control-example
- * custom control example} that uses `ngModelController` to bind to `contenteditable` elements.
- *
- * @example
- * ### Custom Control Example
- * This example shows how to use `NgModelController` with a custom control to achieve
- * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`)
- * collaborate together to achieve the desired result.
- *
- * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element
- * contents be edited in place by the user. This will not work on older browsers.
- *
- * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize}
- * module to automatically remove "bad" content like inline event listener (e.g. `<span onclick="...">`).
- * However, as we are using `$sce` the model can still decide to provide unsafe content if it marks
- * that content using the `$sce` service.
- *
- * <example name="NgModelController" module="customControl" deps="angular-sanitize.js">
- <file name="style.css">
- [contenteditable] {
- border: 1px solid black;
- background-color: white;
- min-height: 20px;
- }
-
- .ng-invalid {
- border: 1px solid red;
- }
-
- </file>
- <file name="script.js">
- angular.module('customControl', ['ngSanitize']).
- directive('contenteditable', ['$sce', function($sce) {
- return {
- restrict: 'A', // only activate on element attribute
- require: '?ngModel', // get a hold of NgModelController
- link: function(scope, element, attrs, ngModel) {
- if (!ngModel) return; // do nothing if no ng-model
-
- // Specify how UI should be updated
- ngModel.$render = function() {
- element.html($sce.getTrustedHtml(ngModel.$viewValue || ''));
- };
-
- // Listen for change events to enable binding
- element.on('blur keyup change', function() {
- scope.$evalAsync(read);
- });
- read(); // initialize
-
- // Write data to the model
- function read() {
- var html = element.html();
- // When we clear the content editable the browser leaves a <br> behind
- // If strip-br attribute is provided then we strip this out
- if ( attrs.stripBr && html == '<br>' ) {
- html = '';
- }
- ngModel.$setViewValue(html);
- }
- }
- };
- }]);
- </file>
- <file name="index.html">
- <form name="myForm">
- <div contenteditable
- name="myWidget" ng-model="userContent"
- strip-br="true"
- required>Change me!</div>
- <span ng-show="myForm.myWidget.$error.required">Required!</span>
- <hr>
- <textarea ng-model="userContent"></textarea>
- </form>
- </file>
- <file name="protractor.js" type="protractor">
- it('should data-bind and become invalid', function() {
- if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') {
- // SafariDriver can't handle contenteditable
- // and Firefox driver can't clear contenteditables very well
- return;
- }
- var contentEditable = element(by.css('[contenteditable]'));
- var content = 'Change me!';
-
- expect(contentEditable.getText()).toEqual(content);
-
- contentEditable.clear();
- contentEditable.sendKeys(protractor.Key.BACK_SPACE);
- expect(contentEditable.getText()).toEqual('');
- expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/);
- });
- </file>
- * </example>
- *
- *
- */
-var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', '$timeout', '$rootScope', '$q', '$interpolate',
- function($scope, $exceptionHandler, $attr, $element, $parse, $animate, $timeout, $rootScope, $q, $interpolate) {
- this.$viewValue = Number.NaN;
- this.$modelValue = Number.NaN;
- this.$$rawModelValue = undefined; // stores the parsed modelValue / model set from scope regardless of validity.
- this.$validators = {};
- this.$asyncValidators = {};
- this.$parsers = [];
- this.$formatters = [];
- this.$viewChangeListeners = [];
- this.$untouched = true;
- this.$touched = false;
- this.$pristine = true;
- this.$dirty = false;
- this.$valid = true;
- this.$invalid = false;
- this.$error = {}; // keep invalid keys here
- this.$$success = {}; // keep valid keys here
- this.$pending = undefined; // keep pending keys here
- this.$name = $interpolate($attr.name || '', false)($scope);
-
-
- var parsedNgModel = $parse($attr.ngModel),
- parsedNgModelAssign = parsedNgModel.assign,
- ngModelGet = parsedNgModel,
- ngModelSet = parsedNgModelAssign,
- pendingDebounce = null,
- ctrl = this;
-
- this.$$setOptions = function(options) {
- ctrl.$options = options;
- if (options && options.getterSetter) {
- var invokeModelGetter = $parse($attr.ngModel + '()'),
- invokeModelSetter = $parse($attr.ngModel + '($$$p)');
-
- ngModelGet = function($scope) {
- var modelValue = parsedNgModel($scope);
- if (isFunction(modelValue)) {
- modelValue = invokeModelGetter($scope);
- }
- return modelValue;
- };
- ngModelSet = function($scope, newValue) {
- if (isFunction(parsedNgModel($scope))) {
- invokeModelSetter($scope, {$$$p: ctrl.$modelValue});
- } else {
- parsedNgModelAssign($scope, ctrl.$modelValue);
- }
- };
- } else if (!parsedNgModel.assign) {
- throw $ngModelMinErr('nonassign', "Expression '{0}' is non-assignable. Element: {1}",
- $attr.ngModel, startingTag($element));
- }
- };
-
- /**
- * @ngdoc method
- * @name ngModel.NgModelController#$render
- *
- * @description
- * Called when the view needs to be updated. It is expected that the user of the ng-model
- * directive will implement this method.
- *
- * The `$render()` method is invoked in the following situations:
- *
- * * `$rollbackViewValue()` is called. If we are rolling back the view value to the last
- * committed value then `$render()` is called to update the input control.
- * * The value referenced by `ng-model` is changed programmatically and both the `$modelValue` and
- * the `$viewValue` are different to last time.
- *
- * Since `ng-model` does not do a deep watch, `$render()` is only invoked if the values of
- * `$modelValue` and `$viewValue` are actually different to their previous value. If `$modelValue`
- * or `$viewValue` are objects (rather than a string or number) then `$render()` will not be
- * invoked if you only change a property on the objects.
- */
- this.$render = noop;
-
- /**
- * @ngdoc method
- * @name ngModel.NgModelController#$isEmpty
- *
- * @description
- * This is called when we need to determine if the value of an input is empty.
- *
- * For instance, the required directive does this to work out if the input has data or not.
- *
- * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`.
- *
- * You can override this for input directives whose concept of being empty is different to the
- * default. The `checkboxInputType` directive does this because in its case a value of `false`
- * implies empty.
- *
- * @param {*} value The value of the input to check for emptiness.
- * @returns {boolean} True if `value` is "empty".
- */
- this.$isEmpty = function(value) {
- return isUndefined(value) || value === '' || value === null || value !== value;
- };
-
- var parentForm = $element.inheritedData('$formController') || nullFormCtrl,
- currentValidationRunId = 0;
-
- /**
- * @ngdoc method
- * @name ngModel.NgModelController#$setValidity
- *
- * @description
- * Change the validity state, and notify the form.
- *
- * This method can be called within $parsers/$formatters or a custom validation implementation.
- * However, in most cases it should be sufficient to use the `ngModel.$validators` and
- * `ngModel.$asyncValidators` collections which will call `$setValidity` automatically.
- *
- * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be assigned
- * to either `$error[validationErrorKey]` or `$pending[validationErrorKey]`
- * (for unfulfilled `$asyncValidators`), so that it is available for data-binding.
- * The `validationErrorKey` should be in camelCase and will get converted into dash-case
- * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error`
- * class and can be bound to as `{{someForm.someControl.$error.myError}}` .
- * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending (undefined),
- * or skipped (null). Pending is used for unfulfilled `$asyncValidators`.
- * Skipped is used by Angular when validators do not run because of parse errors and
- * when `$asyncValidators` do not run because any of the `$validators` failed.
- */
- addSetValidityMethod({
- ctrl: this,
- $element: $element,
- set: function(object, property) {
- object[property] = true;
- },
- unset: function(object, property) {
- delete object[property];
- },
- parentForm: parentForm,
- $animate: $animate
- });
-
- /**
- * @ngdoc method
- * @name ngModel.NgModelController#$setPristine
- *
- * @description
- * Sets the control to its pristine state.
- *
- * This method can be called to remove the `ng-dirty` class and set the control to its pristine
- * state (`ng-pristine` class). A model is considered to be pristine when the control
- * has not been changed from when first compiled.
- */
- this.$setPristine = function() {
- ctrl.$dirty = false;
- ctrl.$pristine = true;
- $animate.removeClass($element, DIRTY_CLASS);
- $animate.addClass($element, PRISTINE_CLASS);
- };
-
- /**
- * @ngdoc method
- * @name ngModel.NgModelController#$setDirty
- *
- * @description
- * Sets the control to its dirty state.
- *
- * This method can be called to remove the `ng-pristine` class and set the control to its dirty
- * state (`ng-dirty` class). A model is considered to be dirty when the control has been changed
- * from when first compiled.
- */
- this.$setDirty = function() {
- ctrl.$dirty = true;
- ctrl.$pristine = false;
- $animate.removeClass($element, PRISTINE_CLASS);
- $animate.addClass($element, DIRTY_CLASS);
- parentForm.$setDirty();
- };
-
- /**
- * @ngdoc method
- * @name ngModel.NgModelController#$setUntouched
- *
- * @description
- * Sets the control to its untouched state.
- *
- * This method can be called to remove the `ng-touched` class and set the control to its
- * untouched state (`ng-untouched` class). Upon compilation, a model is set as untouched
- * by default, however this function can be used to restore that state if the model has
- * already been touched by the user.
- */
- this.$setUntouched = function() {
- ctrl.$touched = false;
- ctrl.$untouched = true;
- $animate.setClass($element, UNTOUCHED_CLASS, TOUCHED_CLASS);
- };
-
- /**
- * @ngdoc method
- * @name ngModel.NgModelController#$setTouched
- *
- * @description
- * Sets the control to its touched state.
- *
- * This method can be called to remove the `ng-untouched` class and set the control to its
- * touched state (`ng-touched` class). A model is considered to be touched when the user has
- * first focused the control element and then shifted focus away from the control (blur event).
- */
- this.$setTouched = function() {
- ctrl.$touched = true;
- ctrl.$untouched = false;
- $animate.setClass($element, TOUCHED_CLASS, UNTOUCHED_CLASS);
- };
-
- /**
- * @ngdoc method
- * @name ngModel.NgModelController#$rollbackViewValue
- *
- * @description
- * Cancel an update and reset the input element's value to prevent an update to the `$modelValue`,
- * which may be caused by a pending debounced event or because the input is waiting for a some
- * future event.
- *
- * If you have an input that uses `ng-model-options` to set up debounced events or events such
- * as blur you can have a situation where there is a period when the `$viewValue`
- * is out of synch with the ngModel's `$modelValue`.
- *
- * In this case, you can run into difficulties if you try to update the ngModel's `$modelValue`
- * programmatically before these debounced/future events have resolved/occurred, because Angular's
- * dirty checking mechanism is not able to tell whether the model has actually changed or not.
- *
- * The `$rollbackViewValue()` method should be called before programmatically changing the model of an
- * input which may have such events pending. This is important in order to make sure that the
- * input field will be updated with the new model value and any pending operations are cancelled.
- *
- * <example name="ng-model-cancel-update" module="cancel-update-example">
- * <file name="app.js">
- * angular.module('cancel-update-example', [])
- *
- * .controller('CancelUpdateController', ['$scope', function($scope) {
- * $scope.resetWithCancel = function(e) {
- * if (e.keyCode == 27) {
- * $scope.myForm.myInput1.$rollbackViewValue();
- * $scope.myValue = '';
- * }
- * };
- * $scope.resetWithoutCancel = function(e) {
- * if (e.keyCode == 27) {
- * $scope.myValue = '';
- * }
- * };
- * }]);
- * </file>
- * <file name="index.html">
- * <div ng-controller="CancelUpdateController">
- * <p>Try typing something in each input. See that the model only updates when you
- * blur off the input.
- * </p>
- * <p>Now see what happens if you start typing then press the Escape key</p>
- *
- * <form name="myForm" ng-model-options="{ updateOn: 'blur' }">
- * <p>With $rollbackViewValue()</p>
- * <input name="myInput1" ng-model="myValue" ng-keydown="resetWithCancel($event)"><br/>
- * myValue: "{{ myValue }}"
- *
- * <p>Without $rollbackViewValue()</p>
- * <input name="myInput2" ng-model="myValue" ng-keydown="resetWithoutCancel($event)"><br/>
- * myValue: "{{ myValue }}"
- * </form>
- * </div>
- * </file>
- * </example>
- */
- this.$rollbackViewValue = function() {
- $timeout.cancel(pendingDebounce);
- ctrl.$viewValue = ctrl.$$lastCommittedViewValue;
- ctrl.$render();
- };
-
- /**
- * @ngdoc method
- * @name ngModel.NgModelController#$validate
- *
- * @description
- * Runs each of the registered validators (first synchronous validators and then
- * asynchronous validators).
- * If the validity changes to invalid, the model will be set to `undefined`,
- * unless {@link ngModelOptions `ngModelOptions.allowInvalid`} is `true`.
- * If the validity changes to valid, it will set the model to the last available valid
- * modelValue, i.e. either the last parsed value or the last value set from the scope.
- */
- this.$validate = function() {
- // ignore $validate before model is initialized
- if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
- return;
- }
-
- var viewValue = ctrl.$$lastCommittedViewValue;
- // Note: we use the $$rawModelValue as $modelValue might have been
- // set to undefined during a view -> model update that found validation
- // errors. We can't parse the view here, since that could change
- // the model although neither viewValue nor the model on the scope changed
- var modelValue = ctrl.$$rawModelValue;
-
- // Check if the there's a parse error, so we don't unset it accidentially
- var parserName = ctrl.$$parserName || 'parse';
- var parserValid = ctrl.$error[parserName] ? false : undefined;
-
- var prevValid = ctrl.$valid;
- var prevModelValue = ctrl.$modelValue;
-
- var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
-
- ctrl.$$runValidators(parserValid, modelValue, viewValue, function(allValid) {
- // If there was no change in validity, don't update the model
- // This prevents changing an invalid modelValue to undefined
- if (!allowInvalid && prevValid !== allValid) {
- // Note: Don't check ctrl.$valid here, as we could have
- // external validators (e.g. calculated on the server),
- // that just call $setValidity and need the model value
- // to calculate their validity.
- ctrl.$modelValue = allValid ? modelValue : undefined;
-
- if (ctrl.$modelValue !== prevModelValue) {
- ctrl.$$writeModelToScope();
- }
- }
- });
-
- };
-
- this.$$runValidators = function(parseValid, modelValue, viewValue, doneCallback) {
- currentValidationRunId++;
- var localValidationRunId = currentValidationRunId;
-
- // check parser error
- if (!processParseErrors(parseValid)) {
- validationDone(false);
- return;
- }
- if (!processSyncValidators()) {
- validationDone(false);
- return;
- }
- processAsyncValidators();
-
- function processParseErrors(parseValid) {
- var errorKey = ctrl.$$parserName || 'parse';
- if (parseValid === undefined) {
- setValidity(errorKey, null);
- } else {
- setValidity(errorKey, parseValid);
- if (!parseValid) {
- forEach(ctrl.$validators, function(v, name) {
- setValidity(name, null);
- });
- forEach(ctrl.$asyncValidators, function(v, name) {
- setValidity(name, null);
- });
- return false;
- }
- }
- return true;
- }
-
- function processSyncValidators() {
- var syncValidatorsValid = true;
- forEach(ctrl.$validators, function(validator, name) {
- var result = validator(modelValue, viewValue);
- syncValidatorsValid = syncValidatorsValid && result;
- setValidity(name, result);
- });
- if (!syncValidatorsValid) {
- forEach(ctrl.$asyncValidators, function(v, name) {
- setValidity(name, null);
- });
- return false;
- }
- return true;
- }
-
- function processAsyncValidators() {
- var validatorPromises = [];
- var allValid = true;
- forEach(ctrl.$asyncValidators, function(validator, name) {
- var promise = validator(modelValue, viewValue);
- if (!isPromiseLike(promise)) {
- throw $ngModelMinErr("$asyncValidators",
- "Expected asynchronous validator to return a promise but got '{0}' instead.", promise);
- }
- setValidity(name, undefined);
- validatorPromises.push(promise.then(function() {
- setValidity(name, true);
- }, function(error) {
- allValid = false;
- setValidity(name, false);
- }));
- });
- if (!validatorPromises.length) {
- validationDone(true);
- } else {
- $q.all(validatorPromises).then(function() {
- validationDone(allValid);
- }, noop);
- }
- }
-
- function setValidity(name, isValid) {
- if (localValidationRunId === currentValidationRunId) {
- ctrl.$setValidity(name, isValid);
- }
- }
-
- function validationDone(allValid) {
- if (localValidationRunId === currentValidationRunId) {
-
- doneCallback(allValid);
- }
- }
- };
-
- /**
- * @ngdoc method
- * @name ngModel.NgModelController#$commitViewValue
- *
- * @description
- * Commit a pending update to the `$modelValue`.
- *
- * Updates may be pending by a debounced event or because the input is waiting for a some future
- * event defined in `ng-model-options`. this method is rarely needed as `NgModelController`
- * usually handles calling this in response to input events.
- */
- this.$commitViewValue = function() {
- var viewValue = ctrl.$viewValue;
-
- $timeout.cancel(pendingDebounce);
-
- // If the view value has not changed then we should just exit, except in the case where there is
- // a native validator on the element. In this case the validation state may have changed even though
- // the viewValue has stayed empty.
- if (ctrl.$$lastCommittedViewValue === viewValue && (viewValue !== '' || !ctrl.$$hasNativeValidators)) {
- return;
- }
- ctrl.$$lastCommittedViewValue = viewValue;
-
- // change to dirty
- if (ctrl.$pristine) {
- this.$setDirty();
- }
- this.$$parseAndValidate();
- };
-
- this.$$parseAndValidate = function() {
- var viewValue = ctrl.$$lastCommittedViewValue;
- var modelValue = viewValue;
- var parserValid = isUndefined(modelValue) ? undefined : true;
-
- if (parserValid) {
- for (var i = 0; i < ctrl.$parsers.length; i++) {
- modelValue = ctrl.$parsers[i](modelValue);
- if (isUndefined(modelValue)) {
- parserValid = false;
- break;
- }
- }
- }
- if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
- // ctrl.$modelValue has not been touched yet...
- ctrl.$modelValue = ngModelGet($scope);
- }
- var prevModelValue = ctrl.$modelValue;
- var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
- ctrl.$$rawModelValue = modelValue;
- if (allowInvalid) {
- ctrl.$modelValue = modelValue;
- writeToModelIfNeeded();
- }
- ctrl.$$runValidators(parserValid, modelValue, viewValue, function(allValid) {
- if (!allowInvalid) {
- // Note: Don't check ctrl.$valid here, as we could have
- // external validators (e.g. calculated on the server),
- // that just call $setValidity and need the model value
- // to calculate their validity.
- ctrl.$modelValue = allValid ? modelValue : undefined;
- writeToModelIfNeeded();
- }
- });
-
- function writeToModelIfNeeded() {
- if (ctrl.$modelValue !== prevModelValue) {
- ctrl.$$writeModelToScope();
- }
- }
- };
-
- this.$$writeModelToScope = function() {
- ngModelSet($scope, ctrl.$modelValue);
- forEach(ctrl.$viewChangeListeners, function(listener) {
- try {
- listener();
- } catch (e) {
- $exceptionHandler(e);
- }
- });
- };
-
- /**
- * @ngdoc method
- * @name ngModel.NgModelController#$setViewValue
- *
- * @description
- * Update the view value.
- *
- * This method should be called when an input directive want to change the view value; typically,
- * this is done from within a DOM event handler.
- *
- * For example {@link ng.directive:input input} calls it when the value of the input changes and
- * {@link ng.directive:select select} calls it when an option is selected.
- *
- * If the new `value` is an object (rather than a string or a number), we should make a copy of the
- * object before passing it to `$setViewValue`. This is because `ngModel` does not perform a deep
- * watch of objects, it only looks for a change of identity. If you only change the property of
- * the object then ngModel will not realise that the object has changed and will not invoke the
- * `$parsers` and `$validators` pipelines.
- *
- * For this reason, you should not change properties of the copy once it has been passed to
- * `$setViewValue`. Otherwise you may cause the model value on the scope to change incorrectly.
- *
- * When this method is called, the new `value` will be staged for committing through the `$parsers`
- * and `$validators` pipelines. If there are no special {@link ngModelOptions} specified then the staged
- * value sent directly for processing, finally to be applied to `$modelValue` and then the
- * **expression** specified in the `ng-model` attribute.
- *
- * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called.
- *
- * In case the {@link ng.directive:ngModelOptions ngModelOptions} directive is used with `updateOn`
- * and the `default` trigger is not listed, all those actions will remain pending until one of the
- * `updateOn` events is triggered on the DOM element.
- * All these actions will be debounced if the {@link ng.directive:ngModelOptions ngModelOptions}
- * directive is used with a custom debounce for this particular event.
- *
- * Note that calling this function does not trigger a `$digest`.
- *
- * @param {string} value Value from the view.
- * @param {string} trigger Event that triggered the update.
- */
- this.$setViewValue = function(value, trigger) {
- ctrl.$viewValue = value;
- if (!ctrl.$options || ctrl.$options.updateOnDefault) {
- ctrl.$$debounceViewValueCommit(trigger);
- }
- };
-
- this.$$debounceViewValueCommit = function(trigger) {
- var debounceDelay = 0,
- options = ctrl.$options,
- debounce;
-
- if (options && isDefined(options.debounce)) {
- debounce = options.debounce;
- if (isNumber(debounce)) {
- debounceDelay = debounce;
- } else if (isNumber(debounce[trigger])) {
- debounceDelay = debounce[trigger];
- } else if (isNumber(debounce['default'])) {
- debounceDelay = debounce['default'];
- }
- }
-
- $timeout.cancel(pendingDebounce);
- if (debounceDelay) {
- pendingDebounce = $timeout(function() {
- ctrl.$commitViewValue();
- }, debounceDelay);
- } else if ($rootScope.$$phase) {
- ctrl.$commitViewValue();
- } else {
- $scope.$apply(function() {
- ctrl.$commitViewValue();
- });
- }
- };
-
- // model -> value
- // Note: we cannot use a normal scope.$watch as we want to detect the following:
- // 1. scope value is 'a'
- // 2. user enters 'b'
- // 3. ng-change kicks in and reverts scope value to 'a'
- // -> scope value did not change since the last digest as
- // ng-change executes in apply phase
- // 4. view should be changed back to 'a'
- $scope.$watch(function ngModelWatch() {
- var modelValue = ngModelGet($scope);
-
- // if scope model value and ngModel value are out of sync
- // TODO(perf): why not move this to the action fn?
- if (modelValue !== ctrl.$modelValue) {
- ctrl.$modelValue = ctrl.$$rawModelValue = modelValue;
-
- var formatters = ctrl.$formatters,
- idx = formatters.length;
-
- var viewValue = modelValue;
- while (idx--) {
- viewValue = formatters[idx](viewValue);
- }
- if (ctrl.$viewValue !== viewValue) {
- ctrl.$viewValue = ctrl.$$lastCommittedViewValue = viewValue;
- ctrl.$render();
-
- ctrl.$$runValidators(undefined, modelValue, viewValue, noop);
- }
- }
-
- return modelValue;
- });
-}];
-
-
-/**
- * @ngdoc directive
- * @name ngModel
- *
- * @element input
- * @priority 1
- *
- * @description
- * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a
- * property on the scope using {@link ngModel.NgModelController NgModelController},
- * which is created and exposed by this directive.
- *
- * `ngModel` is responsible for:
- *
- * - Binding the view into the model, which other directives such as `input`, `textarea` or `select`
- * require.
- * - Providing validation behavior (i.e. required, number, email, url).
- * - Keeping the state of the control (valid/invalid, dirty/pristine, touched/untouched, validation errors).
- * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`, `ng-untouched`) including animations.
- * - Registering the control with its parent {@link ng.directive:form form}.
- *
- * Note: `ngModel` will try to bind to the property given by evaluating the expression on the
- * current scope. If the property doesn't already exist on this scope, it will be created
- * implicitly and added to the scope.
- *
- * For best practices on using `ngModel`, see:
- *
- * - [Understanding Scopes](https://github.com/angular/angular.js/wiki/Understanding-Scopes)
- *
- * For basic examples, how to use `ngModel`, see:
- *
- * - {@link ng.directive:input input}
- * - {@link input[text] text}
- * - {@link input[checkbox] checkbox}
- * - {@link input[radio] radio}
- * - {@link input[number] number}
- * - {@link input[email] email}
- * - {@link input[url] url}
- * - {@link input[date] date}
- * - {@link input[datetime-local] datetime-local}
- * - {@link input[time] time}
- * - {@link input[month] month}
- * - {@link input[week] week}
- * - {@link ng.directive:select select}
- * - {@link ng.directive:textarea textarea}
- *
- * # CSS classes
- * The following CSS classes are added and removed on the associated input/select/textarea element
- * depending on the validity of the model.
- *
- * - `ng-valid`: the model is valid
- * - `ng-invalid`: the model is invalid
- * - `ng-valid-[key]`: for each valid key added by `$setValidity`
- * - `ng-invalid-[key]`: for each invalid key added by `$setValidity`
- * - `ng-pristine`: the control hasn't been interacted with yet
- * - `ng-dirty`: the control has been interacted with
- * - `ng-touched`: the control has been blurred
- * - `ng-untouched`: the control hasn't been blurred
- * - `ng-pending`: any `$asyncValidators` are unfulfilled
- *
- * Keep in mind that ngAnimate can detect each of these classes when added and removed.
- *
- * ## Animation Hooks
- *
- * Animations within models are triggered when any of the associated CSS classes are added and removed
- * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`,
- * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself.
- * The animations that are triggered within ngModel are similar to how they work in ngClass and
- * animations can be hooked into using CSS transitions, keyframes as well as JS animations.
- *
- * The following example shows a simple way to utilize CSS transitions to style an input element
- * that has been rendered as invalid after it has been validated:
- *
- * <pre>
- * //be sure to include ngAnimate as a module to hook into more
- * //advanced animations
- * .my-input {
- * transition:0.5s linear all;
- * background: white;
- * }
- * .my-input.ng-invalid {
- * background: red;
- * color:white;
- * }
- * </pre>
- *
- * @example
- * <example deps="angular-animate.js" animations="true" fixBase="true" module="inputExample">
- <file name="index.html">
- <script>
- angular.module('inputExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.val = '1';
- }]);
- </script>
- <style>
- .my-input {
- -webkit-transition:all linear 0.5s;
- transition:all linear 0.5s;
- background: transparent;
- }
- .my-input.ng-invalid {
- color:white;
- background: red;
- }
- </style>
- Update input to see transitions when valid/invalid.
- Integer is a valid value.
- <form name="testForm" ng-controller="ExampleController">
- <input ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input" />
- </form>
- </file>
- * </example>
- *
- * ## Binding to a getter/setter
- *
- * Sometimes it's helpful to bind `ngModel` to a getter/setter function. A getter/setter is a
- * function that returns a representation of the model when called with zero arguments, and sets
- * the internal state of a model when called with an argument. It's sometimes useful to use this
- * for models that have an internal representation that's different than what the model exposes
- * to the view.
- *
- * <div class="alert alert-success">
- * **Best Practice:** It's best to keep getters fast because Angular is likely to call them more
- * frequently than other parts of your code.
- * </div>
- *
- * You use this behavior by adding `ng-model-options="{ getterSetter: true }"` to an element that
- * has `ng-model` attached to it. You can also add `ng-model-options="{ getterSetter: true }"` to
- * a `<form>`, which will enable this behavior for all `<input>`s within it. See
- * {@link ng.directive:ngModelOptions `ngModelOptions`} for more.
- *
- * The following example shows how to use `ngModel` with a getter/setter:
- *
- * @example
- * <example name="ngModel-getter-setter" module="getterSetterExample">
- <file name="index.html">
- <div ng-controller="ExampleController">
- <form name="userForm">
- Name:
- <input type="text" name="userName"
- ng-model="user.name"
- ng-model-options="{ getterSetter: true }" />
- </form>
- <pre>user.name = <span ng-bind="user.name()"></span></pre>
- </div>
- </file>
- <file name="app.js">
- angular.module('getterSetterExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- var _name = 'Brian';
- $scope.user = {
- name: function(newName) {
- if (angular.isDefined(newName)) {
- _name = newName;
- }
- return _name;
- }
- };
- }]);
- </file>
- * </example>
- */
-var ngModelDirective = ['$rootScope', function($rootScope) {
- return {
- restrict: 'A',
- require: ['ngModel', '^?form', '^?ngModelOptions'],
- controller: NgModelController,
- // Prelink needs to run before any input directive
- // so that we can set the NgModelOptions in NgModelController
- // before anyone else uses it.
- priority: 1,
- compile: function ngModelCompile(element) {
- // Setup initial state of the control
- element.addClass(PRISTINE_CLASS).addClass(UNTOUCHED_CLASS).addClass(VALID_CLASS);
-
- return {
- pre: function ngModelPreLink(scope, element, attr, ctrls) {
- var modelCtrl = ctrls[0],
- formCtrl = ctrls[1] || nullFormCtrl;
-
- modelCtrl.$$setOptions(ctrls[2] && ctrls[2].$options);
-
- // notify others, especially parent forms
- formCtrl.$addControl(modelCtrl);
-
- attr.$observe('name', function(newValue) {
- if (modelCtrl.$name !== newValue) {
- formCtrl.$$renameControl(modelCtrl, newValue);
- }
- });
-
- scope.$on('$destroy', function() {
- formCtrl.$removeControl(modelCtrl);
- });
- },
- post: function ngModelPostLink(scope, element, attr, ctrls) {
- var modelCtrl = ctrls[0];
- if (modelCtrl.$options && modelCtrl.$options.updateOn) {
- element.on(modelCtrl.$options.updateOn, function(ev) {
- modelCtrl.$$debounceViewValueCommit(ev && ev.type);
- });
- }
-
- element.on('blur', function(ev) {
- if (modelCtrl.$touched) return;
-
- if ($rootScope.$$phase) {
- scope.$evalAsync(modelCtrl.$setTouched);
- } else {
- scope.$apply(modelCtrl.$setTouched);
- }
- });
- }
- };
- }
- };
-}];
-
-
-/**
- * @ngdoc directive
- * @name ngChange
- *
- * @description
- * Evaluate the given expression when the user changes the input.
- * The expression is evaluated immediately, unlike the JavaScript onchange event
- * which only triggers at the end of a change (usually, when the user leaves the
- * form element or presses the return key).
- *
- * The `ngChange` expression is only evaluated when a change in the input value causes
- * a new value to be committed to the model.
- *
- * It will not be evaluated:
- * * if the value returned from the `$parsers` transformation pipeline has not changed
- * * if the input has continued to be invalid since the model will stay `null`
- * * if the model is changed programmatically and not by a change to the input value
- *
- *
- * Note, this directive requires `ngModel` to be present.
- *
- * @element input
- * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change
- * in input value.
- *
- * @example
- * <example name="ngChange-directive" module="changeExample">
- * <file name="index.html">
- * <script>
- * angular.module('changeExample', [])
- * .controller('ExampleController', ['$scope', function($scope) {
- * $scope.counter = 0;
- * $scope.change = function() {
- * $scope.counter++;
- * };
- * }]);
- * </script>
- * <div ng-controller="ExampleController">
- * <input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" />
- * <input type="checkbox" ng-model="confirmed" id="ng-change-example2" />
- * <label for="ng-change-example2">Confirmed</label><br />
- * <tt>debug = {{confirmed}}</tt><br/>
- * <tt>counter = {{counter}}</tt><br/>
- * </div>
- * </file>
- * <file name="protractor.js" type="protractor">
- * var counter = element(by.binding('counter'));
- * var debug = element(by.binding('confirmed'));
- *
- * it('should evaluate the expression if changing from view', function() {
- * expect(counter.getText()).toContain('0');
- *
- * element(by.id('ng-change-example1')).click();
- *
- * expect(counter.getText()).toContain('1');
- * expect(debug.getText()).toContain('true');
- * });
- *
- * it('should not evaluate the expression if changing from model', function() {
- * element(by.id('ng-change-example2')).click();
-
- * expect(counter.getText()).toContain('0');
- * expect(debug.getText()).toContain('true');
- * });
- * </file>
- * </example>
- */
-var ngChangeDirective = valueFn({
- restrict: 'A',
- require: 'ngModel',
- link: function(scope, element, attr, ctrl) {
- ctrl.$viewChangeListeners.push(function() {
- scope.$eval(attr.ngChange);
- });
- }
-});
-
-
-var requiredDirective = function() {
- return {
- restrict: 'A',
- require: '?ngModel',
- link: function(scope, elm, attr, ctrl) {
- if (!ctrl) return;
- attr.required = true; // force truthy in case we are on non input element
-
- ctrl.$validators.required = function(modelValue, viewValue) {
- return !attr.required || !ctrl.$isEmpty(viewValue);
- };
-
- attr.$observe('required', function() {
- ctrl.$validate();
- });
- }
- };
-};
-
-
-var patternDirective = function() {
- return {
- restrict: 'A',
- require: '?ngModel',
- link: function(scope, elm, attr, ctrl) {
- if (!ctrl) return;
-
- var regexp, patternExp = attr.ngPattern || attr.pattern;
- attr.$observe('pattern', function(regex) {
- if (isString(regex) && regex.length > 0) {
- regex = new RegExp('^' + regex + '$');
- }
-
- if (regex && !regex.test) {
- throw minErr('ngPattern')('noregexp',
- 'Expected {0} to be a RegExp but was {1}. Element: {2}', patternExp,
- regex, startingTag(elm));
- }
-
- regexp = regex || undefined;
- ctrl.$validate();
- });
-
- ctrl.$validators.pattern = function(value) {
- return ctrl.$isEmpty(value) || isUndefined(regexp) || regexp.test(value);
- };
- }
- };
-};
-
-
-var maxlengthDirective = function() {
- return {
- restrict: 'A',
- require: '?ngModel',
- link: function(scope, elm, attr, ctrl) {
- if (!ctrl) return;
-
- var maxlength = -1;
- attr.$observe('maxlength', function(value) {
- var intVal = int(value);
- maxlength = isNaN(intVal) ? -1 : intVal;
- ctrl.$validate();
- });
- ctrl.$validators.maxlength = function(modelValue, viewValue) {
- return (maxlength < 0) || ctrl.$isEmpty(modelValue) || (viewValue.length <= maxlength);
- };
- }
- };
-};
-
-var minlengthDirective = function() {
- return {
- restrict: 'A',
- require: '?ngModel',
- link: function(scope, elm, attr, ctrl) {
- if (!ctrl) return;
-
- var minlength = 0;
- attr.$observe('minlength', function(value) {
- minlength = int(value) || 0;
- ctrl.$validate();
- });
- ctrl.$validators.minlength = function(modelValue, viewValue) {
- return ctrl.$isEmpty(viewValue) || viewValue.length >= minlength;
- };
- }
- };
-};
-
-
-/**
- * @ngdoc directive
- * @name ngList
- *
- * @description
- * Text input that converts between a delimited string and an array of strings. The default
- * delimiter is a comma followed by a space - equivalent to `ng-list=", "`. You can specify a custom
- * delimiter as the value of the `ngList` attribute - for example, `ng-list=" | "`.
- *
- * The behaviour of the directive is affected by the use of the `ngTrim` attribute.
- * * If `ngTrim` is set to `"false"` then whitespace around both the separator and each
- * list item is respected. This implies that the user of the directive is responsible for
- * dealing with whitespace but also allows you to use whitespace as a delimiter, such as a
- * tab or newline character.
- * * Otherwise whitespace around the delimiter is ignored when splitting (although it is respected
- * when joining the list items back together) and whitespace around each list item is stripped
- * before it is added to the model.
- *
- * ### Example with Validation
- *
- * <example name="ngList-directive" module="listExample">
- * <file name="app.js">
- * angular.module('listExample', [])
- * .controller('ExampleController', ['$scope', function($scope) {
- * $scope.names = ['morpheus', 'neo', 'trinity'];
- * }]);
- * </file>
- * <file name="index.html">
- * <form name="myForm" ng-controller="ExampleController">
- * List: <input name="namesInput" ng-model="names" ng-list required>
- * <span class="error" ng-show="myForm.namesInput.$error.required">
- * Required!</span>
- * <br>
- * <tt>names = {{names}}</tt><br/>
- * <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/>
- * <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/>
- * <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
- * <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
- * </form>
- * </file>
- * <file name="protractor.js" type="protractor">
- * var listInput = element(by.model('names'));
- * var names = element(by.exactBinding('names'));
- * var valid = element(by.binding('myForm.namesInput.$valid'));
- * var error = element(by.css('span.error'));
- *
- * it('should initialize to model', function() {
- * expect(names.getText()).toContain('["morpheus","neo","trinity"]');
- * expect(valid.getText()).toContain('true');
- * expect(error.getCssValue('display')).toBe('none');
- * });
- *
- * it('should be invalid if empty', function() {
- * listInput.clear();
- * listInput.sendKeys('');
- *
- * expect(names.getText()).toContain('');
- * expect(valid.getText()).toContain('false');
- * expect(error.getCssValue('display')).not.toBe('none');
- * });
- * </file>
- * </example>
- *
- * ### Example - splitting on whitespace
- * <example name="ngList-directive-newlines">
- * <file name="index.html">
- * <textarea ng-model="list" ng-list="&#10;" ng-trim="false"></textarea>
- * <pre>{{ list | json }}</pre>
- * </file>
- * <file name="protractor.js" type="protractor">
- * it("should split the text by newlines", function() {
- * var listInput = element(by.model('list'));
- * var output = element(by.binding('list | json'));
- * listInput.sendKeys('abc\ndef\nghi');
- * expect(output.getText()).toContain('[\n "abc",\n "def",\n "ghi"\n]');
- * });
- * </file>
- * </example>
- *
- * @element input
- * @param {string=} ngList optional delimiter that should be used to split the value.
- */
-var ngListDirective = function() {
- return {
- restrict: 'A',
- priority: 100,
- require: 'ngModel',
- link: function(scope, element, attr, ctrl) {
- // We want to control whitespace trimming so we use this convoluted approach
- // to access the ngList attribute, which doesn't pre-trim the attribute
- var ngList = element.attr(attr.$attr.ngList) || ', ';
- var trimValues = attr.ngTrim !== 'false';
- var separator = trimValues ? trim(ngList) : ngList;
-
- var parse = function(viewValue) {
- // If the viewValue is invalid (say required but empty) it will be `undefined`
- if (isUndefined(viewValue)) return;
-
- var list = [];
-
- if (viewValue) {
- forEach(viewValue.split(separator), function(value) {
- if (value) list.push(trimValues ? trim(value) : value);
- });
- }
-
- return list;
- };
-
- ctrl.$parsers.push(parse);
- ctrl.$formatters.push(function(value) {
- if (isArray(value)) {
- return value.join(ngList);
- }
-
- return undefined;
- });
-
- // Override the standard $isEmpty because an empty array means the input is empty.
- ctrl.$isEmpty = function(value) {
- return !value || !value.length;
- };
- }
- };
-};
-
-
-var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/;
-/**
- * @ngdoc directive
- * @name ngValue
- *
- * @description
- * Binds the given expression to the value of `<option>` or {@link input[radio] `input[radio]`},
- * so that when the element is selected, the {@link ngModel `ngModel`} of that element is set to
- * the bound value.
- *
- * `ngValue` is useful when dynamically generating lists of radio buttons using
- * {@link ngRepeat `ngRepeat`}, as shown below.
- *
- * Likewise, `ngValue` can be used to generate `<option>` elements for
- * the {@link select `select`} element. In that case however, only strings are supported
- * for the `value `attribute, so the resulting `ngModel` will always be a string.
- * Support for `select` models with non-string values is available via `ngOptions`.
- *
- * @element input
- * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute
- * of the `input` element
- *
- * @example
- <example name="ngValue-directive" module="valueExample">
- <file name="index.html">
- <script>
- angular.module('valueExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.names = ['pizza', 'unicorns', 'robots'];
- $scope.my = { favorite: 'unicorns' };
- }]);
- </script>
- <form ng-controller="ExampleController">
- <h2>Which is your favorite?</h2>
- <label ng-repeat="name in names" for="{{name}}">
- {{name}}
- <input type="radio"
- ng-model="my.favorite"
- ng-value="name"
- id="{{name}}"
- name="favorite">
- </label>
- <div>You chose {{my.favorite}}</div>
- </form>
- </file>
- <file name="protractor.js" type="protractor">
- var favorite = element(by.binding('my.favorite'));
-
- it('should initialize to model', function() {
- expect(favorite.getText()).toContain('unicorns');
- });
- it('should bind the values to the inputs', function() {
- element.all(by.model('my.favorite')).get(0).click();
- expect(favorite.getText()).toContain('pizza');
- });
- </file>
- </example>
- */
-var ngValueDirective = function() {
- return {
- restrict: 'A',
- priority: 100,
- compile: function(tpl, tplAttr) {
- if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) {
- return function ngValueConstantLink(scope, elm, attr) {
- attr.$set('value', scope.$eval(attr.ngValue));
- };
- } else {
- return function ngValueLink(scope, elm, attr) {
- scope.$watch(attr.ngValue, function valueWatchAction(value) {
- attr.$set('value', value);
- });
- };
- }
- }
- };
-};
-
-/**
- * @ngdoc directive
- * @name ngModelOptions
- *
- * @description
- * Allows tuning how model updates are done. Using `ngModelOptions` you can specify a custom list of
- * events that will trigger a model update and/or a debouncing delay so that the actual update only
- * takes place when a timer expires; this timer will be reset after another change takes place.
- *
- * Given the nature of `ngModelOptions`, the value displayed inside input fields in the view might
- * be different than the value in the actual model. This means that if you update the model you
- * should also invoke {@link ngModel.NgModelController `$rollbackViewValue`} on the relevant input field in
- * order to make sure it is synchronized with the model and that any debounced action is canceled.
- *
- * The easiest way to reference the control's {@link ngModel.NgModelController `$rollbackViewValue`}
- * method is by making sure the input is placed inside a form that has a `name` attribute. This is
- * important because `form` controllers are published to the related scope under the name in their
- * `name` attribute.
- *
- * Any pending changes will take place immediately when an enclosing form is submitted via the
- * `submit` event. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`
- * to have access to the updated model.
- *
- * `ngModelOptions` has an effect on the element it's declared on and its descendants.
- *
- * @param {Object} ngModelOptions options to apply to the current model. Valid keys are:
- * - `updateOn`: string specifying which event should the input be bound to. You can set several
- * events using an space delimited list. There is a special event called `default` that
- * matches the default events belonging of the control.
- * - `debounce`: integer value which contains the debounce model update value in milliseconds. A
- * value of 0 triggers an immediate update. If an object is supplied instead, you can specify a
- * custom value for each event. For example:
- * `ng-model-options="{ updateOn: 'default blur', debounce: {'default': 500, 'blur': 0} }"`
- * - `allowInvalid`: boolean value which indicates that the model can be set with values that did
- * not validate correctly instead of the default behavior of setting the model to undefined.
- * - `getterSetter`: boolean value which determines whether or not to treat functions bound to
- `ngModel` as getters/setters.
- * - `timezone`: Defines the timezone to be used to read/write the `Date` instance in the model for
- * `<input type="date">`, `<input type="time">`, ... . Right now, the only supported value is `'UTC'`,
- * otherwise the default timezone of the browser will be used.
- *
- * @example
-
- The following example shows how to override immediate updates. Changes on the inputs within the
- form will update the model only when the control loses focus (blur event). If `escape` key is
- pressed while the input field is focused, the value is reset to the value in the current model.
-
- <example name="ngModelOptions-directive-blur" module="optionsExample">
- <file name="index.html">
- <div ng-controller="ExampleController">
- <form name="userForm">
- Name:
- <input type="text" name="userName"
- ng-model="user.name"
- ng-model-options="{ updateOn: 'blur' }"
- ng-keyup="cancel($event)" /><br />
-
- Other data:
- <input type="text" ng-model="user.data" /><br />
- </form>
- <pre>user.name = <span ng-bind="user.name"></span></pre>
- </div>
- </file>
- <file name="app.js">
- angular.module('optionsExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.user = { name: 'say', data: '' };
-
- $scope.cancel = function(e) {
- if (e.keyCode == 27) {
- $scope.userForm.userName.$rollbackViewValue();
- }
- };
- }]);
- </file>
- <file name="protractor.js" type="protractor">
- var model = element(by.binding('user.name'));
- var input = element(by.model('user.name'));
- var other = element(by.model('user.data'));
-
- it('should allow custom events', function() {
- input.sendKeys(' hello');
- input.click();
- expect(model.getText()).toEqual('say');
- other.click();
- expect(model.getText()).toEqual('say hello');
- });
-
- it('should $rollbackViewValue when model changes', function() {
- input.sendKeys(' hello');
- expect(input.getAttribute('value')).toEqual('say hello');
- input.sendKeys(protractor.Key.ESCAPE);
- expect(input.getAttribute('value')).toEqual('say');
- other.click();
- expect(model.getText()).toEqual('say');
- });
- </file>
- </example>
-
- This one shows how to debounce model changes. Model will be updated only 1 sec after last change.
- If the `Clear` button is pressed, any debounced action is canceled and the value becomes empty.
-
- <example name="ngModelOptions-directive-debounce" module="optionsExample">
- <file name="index.html">
- <div ng-controller="ExampleController">
- <form name="userForm">
- Name:
- <input type="text" name="userName"
- ng-model="user.name"
- ng-model-options="{ debounce: 1000 }" />
- <button ng-click="userForm.userName.$rollbackViewValue(); user.name=''">Clear</button><br />
- </form>
- <pre>user.name = <span ng-bind="user.name"></span></pre>
- </div>
- </file>
- <file name="app.js">
- angular.module('optionsExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.user = { name: 'say' };
- }]);
- </file>
- </example>
-
- This one shows how to bind to getter/setters:
-
- <example name="ngModelOptions-directive-getter-setter" module="getterSetterExample">
- <file name="index.html">
- <div ng-controller="ExampleController">
- <form name="userForm">
- Name:
- <input type="text" name="userName"
- ng-model="user.name"
- ng-model-options="{ getterSetter: true }" />
- </form>
- <pre>user.name = <span ng-bind="user.name()"></span></pre>
- </div>
- </file>
- <file name="app.js">
- angular.module('getterSetterExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- var _name = 'Brian';
- $scope.user = {
- name: function(newName) {
- return angular.isDefined(newName) ? (_name = newName) : _name;
- }
- };
- }]);
- </file>
- </example>
- */
-var ngModelOptionsDirective = function() {
- return {
- restrict: 'A',
- controller: ['$scope', '$attrs', function($scope, $attrs) {
- var that = this;
- this.$options = $scope.$eval($attrs.ngModelOptions);
- // Allow adding/overriding bound events
- if (this.$options.updateOn !== undefined) {
- this.$options.updateOnDefault = false;
- // extract "default" pseudo-event from list of events that can trigger a model update
- this.$options.updateOn = trim(this.$options.updateOn.replace(DEFAULT_REGEXP, function() {
- that.$options.updateOnDefault = true;
- return ' ';
- }));
- } else {
- this.$options.updateOnDefault = true;
- }
- }]
- };
-};
-
-// helper methods
-function addSetValidityMethod(context) {
- var ctrl = context.ctrl,
- $element = context.$element,
- classCache = {},
- set = context.set,
- unset = context.unset,
- parentForm = context.parentForm,
- $animate = context.$animate;
-
- classCache[INVALID_CLASS] = !(classCache[VALID_CLASS] = $element.hasClass(VALID_CLASS));
-
- ctrl.$setValidity = setValidity;
-
- function setValidity(validationErrorKey, state, options) {
- if (state === undefined) {
- createAndSet('$pending', validationErrorKey, options);
- } else {
- unsetAndCleanup('$pending', validationErrorKey, options);
- }
- if (!isBoolean(state)) {
- unset(ctrl.$error, validationErrorKey, options);
- unset(ctrl.$$success, validationErrorKey, options);
- } else {
- if (state) {
- unset(ctrl.$error, validationErrorKey, options);
- set(ctrl.$$success, validationErrorKey, options);
- } else {
- set(ctrl.$error, validationErrorKey, options);
- unset(ctrl.$$success, validationErrorKey, options);
- }
- }
- if (ctrl.$pending) {
- cachedToggleClass(PENDING_CLASS, true);
- ctrl.$valid = ctrl.$invalid = undefined;
- toggleValidationCss('', null);
- } else {
- cachedToggleClass(PENDING_CLASS, false);
- ctrl.$valid = isObjectEmpty(ctrl.$error);
- ctrl.$invalid = !ctrl.$valid;
- toggleValidationCss('', ctrl.$valid);
- }
-
- // re-read the state as the set/unset methods could have
- // combined state in ctrl.$error[validationError] (used for forms),
- // where setting/unsetting only increments/decrements the value,
- // and does not replace it.
- var combinedState;
- if (ctrl.$pending && ctrl.$pending[validationErrorKey]) {
- combinedState = undefined;
- } else if (ctrl.$error[validationErrorKey]) {
- combinedState = false;
- } else if (ctrl.$$success[validationErrorKey]) {
- combinedState = true;
- } else {
- combinedState = null;
- }
- toggleValidationCss(validationErrorKey, combinedState);
- parentForm.$setValidity(validationErrorKey, combinedState, ctrl);
- }
-
- function createAndSet(name, value, options) {
- if (!ctrl[name]) {
- ctrl[name] = {};
- }
- set(ctrl[name], value, options);
- }
-
- function unsetAndCleanup(name, value, options) {
- if (ctrl[name]) {
- unset(ctrl[name], value, options);
- }
- if (isObjectEmpty(ctrl[name])) {
- ctrl[name] = undefined;
- }
- }
-
- function cachedToggleClass(className, switchValue) {
- if (switchValue && !classCache[className]) {
- $animate.addClass($element, className);
- classCache[className] = true;
- } else if (!switchValue && classCache[className]) {
- $animate.removeClass($element, className);
- classCache[className] = false;
- }
- }
-
- function toggleValidationCss(validationErrorKey, isValid) {
- validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';
-
- cachedToggleClass(VALID_CLASS + validationErrorKey, isValid === true);
- cachedToggleClass(INVALID_CLASS + validationErrorKey, isValid === false);
- }
-}
-
-function isObjectEmpty(obj) {
- if (obj) {
- for (var prop in obj) {
- return false;
- }
- }
- return true;
-}
-
-/**
- * @ngdoc directive
- * @name ngBind
- * @restrict AC
- *
- * @description
- * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element
- * with the value of a given expression, and to update the text content when the value of that
- * expression changes.
- *
- * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like
- * `{{ expression }}` which is similar but less verbose.
- *
- * It is preferable to use `ngBind` instead of `{{ expression }}` if a template is momentarily
- * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an
- * element attribute, it makes the bindings invisible to the user while the page is loading.
- *
- * An alternative solution to this problem would be using the
- * {@link ng.directive:ngCloak ngCloak} directive.
- *
- *
- * @element ANY
- * @param {expression} ngBind {@link guide/expression Expression} to evaluate.
- *
- * @example
- * Enter a name in the Live Preview text box; the greeting below the text box changes instantly.
- <example module="bindExample">
- <file name="index.html">
- <script>
- angular.module('bindExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.name = 'Whirled';
- }]);
- </script>
- <div ng-controller="ExampleController">
- Enter name: <input type="text" ng-model="name"><br>
- Hello <span ng-bind="name"></span>!
- </div>
- </file>
- <file name="protractor.js" type="protractor">
- it('should check ng-bind', function() {
- var nameInput = element(by.model('name'));
-
- expect(element(by.binding('name')).getText()).toBe('Whirled');
- nameInput.clear();
- nameInput.sendKeys('world');
- expect(element(by.binding('name')).getText()).toBe('world');
- });
- </file>
- </example>
- */
-var ngBindDirective = ['$compile', function($compile) {
- return {
- restrict: 'AC',
- compile: function ngBindCompile(templateElement) {
- $compile.$$addBindingClass(templateElement);
- return function ngBindLink(scope, element, attr) {
- $compile.$$addBindingInfo(element, attr.ngBind);
- element = element[0];
- scope.$watch(attr.ngBind, function ngBindWatchAction(value) {
- element.textContent = value === undefined ? '' : value;
- });
- };
- }
- };
-}];
-
-
-/**
- * @ngdoc directive
- * @name ngBindTemplate
- *
- * @description
- * The `ngBindTemplate` directive specifies that the element
- * text content should be replaced with the interpolation of the template
- * in the `ngBindTemplate` attribute.
- * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}`
- * expressions. This directive is needed since some HTML elements
- * (such as TITLE and OPTION) cannot contain SPAN elements.
- *
- * @element ANY
- * @param {string} ngBindTemplate template of form
- * <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval.
- *
- * @example
- * Try it here: enter text in text box and watch the greeting change.
- <example module="bindExample">
- <file name="index.html">
- <script>
- angular.module('bindExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.salutation = 'Hello';
- $scope.name = 'World';
- }]);
- </script>
- <div ng-controller="ExampleController">
- Salutation: <input type="text" ng-model="salutation"><br>
- Name: <input type="text" ng-model="name"><br>
- <pre ng-bind-template="{{salutation}} {{name}}!"></pre>
- </div>
- </file>
- <file name="protractor.js" type="protractor">
- it('should check ng-bind', function() {
- var salutationElem = element(by.binding('salutation'));
- var salutationInput = element(by.model('salutation'));
- var nameInput = element(by.model('name'));
-
- expect(salutationElem.getText()).toBe('Hello World!');
-
- salutationInput.clear();
- salutationInput.sendKeys('Greetings');
- nameInput.clear();
- nameInput.sendKeys('user');
-
- expect(salutationElem.getText()).toBe('Greetings user!');
- });
- </file>
- </example>
- */
-var ngBindTemplateDirective = ['$interpolate', '$compile', function($interpolate, $compile) {
- return {
- compile: function ngBindTemplateCompile(templateElement) {
- $compile.$$addBindingClass(templateElement);
- return function ngBindTemplateLink(scope, element, attr) {
- var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate));
- $compile.$$addBindingInfo(element, interpolateFn.expressions);
- element = element[0];
- attr.$observe('ngBindTemplate', function(value) {
- element.textContent = value === undefined ? '' : value;
- });
- };
- }
- };
-}];
-
-
-/**
- * @ngdoc directive
- * @name ngBindHtml
- *
- * @description
- * Evaluates the expression and inserts the resulting HTML into the element in a secure way. By default,
- * the resulting HTML content will be sanitized using the {@link ngSanitize.$sanitize $sanitize} service.
- * To utilize this functionality, ensure that `$sanitize` is available, for example, by including {@link
- * ngSanitize} in your module's dependencies (not in core Angular). In order to use {@link ngSanitize}
- * in your module's dependencies, you need to include "angular-sanitize.js" in your application.
- *
- * You may also bypass sanitization for values you know are safe. To do so, bind to
- * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}. See the example
- * under {@link ng.$sce#show-me-an-example-using-sce- Strict Contextual Escaping (SCE)}.
- *
- * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you
- * will have an exception (instead of an exploit.)
- *
- * @element ANY
- * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate.
- *
- * @example
-
- <example module="bindHtmlExample" deps="angular-sanitize.js">
- <file name="index.html">
- <div ng-controller="ExampleController">
- <p ng-bind-html="myHTML"></p>
- </div>
- </file>
-
- <file name="script.js">
- angular.module('bindHtmlExample', ['ngSanitize'])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.myHTML =
- 'I am an <code>HTML</code>string with ' +
- '<a href="#">links!</a> and other <em>stuff</em>';
- }]);
- </file>
-
- <file name="protractor.js" type="protractor">
- it('should check ng-bind-html', function() {
- expect(element(by.binding('myHTML')).getText()).toBe(
- 'I am an HTMLstring with links! and other stuff');
- });
- </file>
- </example>
- */
-var ngBindHtmlDirective = ['$sce', '$parse', '$compile', function($sce, $parse, $compile) {
- return {
- restrict: 'A',
- compile: function ngBindHtmlCompile(tElement, tAttrs) {
- var ngBindHtmlGetter = $parse(tAttrs.ngBindHtml);
- var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function getStringValue(value) {
- return (value || '').toString();
- });
- $compile.$$addBindingClass(tElement);
-
- return function ngBindHtmlLink(scope, element, attr) {
- $compile.$$addBindingInfo(element, attr.ngBindHtml);
-
- scope.$watch(ngBindHtmlWatch, function ngBindHtmlWatchAction() {
- // we re-evaluate the expr because we want a TrustedValueHolderType
- // for $sce, not a string
- element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || '');
- });
- };
- }
- };
-}];
-
-function classDirective(name, selector) {
- name = 'ngClass' + name;
- return ['$animate', function($animate) {
- return {
- restrict: 'AC',
- link: function(scope, element, attr) {
- var oldVal;
-
- scope.$watch(attr[name], ngClassWatchAction, true);
-
- attr.$observe('class', function(value) {
- ngClassWatchAction(scope.$eval(attr[name]));
- });
-
-
- if (name !== 'ngClass') {
- scope.$watch('$index', function($index, old$index) {
- // jshint bitwise: false
- var mod = $index & 1;
- if (mod !== (old$index & 1)) {
- var classes = arrayClasses(scope.$eval(attr[name]));
- mod === selector ?
- addClasses(classes) :
- removeClasses(classes);
- }
- });
- }
-
- function addClasses(classes) {
- var newClasses = digestClassCounts(classes, 1);
- attr.$addClass(newClasses);
- }
-
- function removeClasses(classes) {
- var newClasses = digestClassCounts(classes, -1);
- attr.$removeClass(newClasses);
- }
-
- function digestClassCounts(classes, count) {
- var classCounts = element.data('$classCounts') || {};
- var classesToUpdate = [];
- forEach(classes, function(className) {
- if (count > 0 || classCounts[className]) {
- classCounts[className] = (classCounts[className] || 0) + count;
- if (classCounts[className] === +(count > 0)) {
- classesToUpdate.push(className);
- }
- }
- });
- element.data('$classCounts', classCounts);
- return classesToUpdate.join(' ');
- }
-
- function updateClasses(oldClasses, newClasses) {
- var toAdd = arrayDifference(newClasses, oldClasses);
- var toRemove = arrayDifference(oldClasses, newClasses);
- toAdd = digestClassCounts(toAdd, 1);
- toRemove = digestClassCounts(toRemove, -1);
- if (toAdd && toAdd.length) {
- $animate.addClass(element, toAdd);
- }
- if (toRemove && toRemove.length) {
- $animate.removeClass(element, toRemove);
- }
- }
-
- function ngClassWatchAction(newVal) {
- if (selector === true || scope.$index % 2 === selector) {
- var newClasses = arrayClasses(newVal || []);
- if (!oldVal) {
- addClasses(newClasses);
- } else if (!equals(newVal,oldVal)) {
- var oldClasses = arrayClasses(oldVal);
- updateClasses(oldClasses, newClasses);
- }
- }
- oldVal = shallowCopy(newVal);
- }
- }
- };
-
- function arrayDifference(tokens1, tokens2) {
- var values = [];
-
- outer:
- for (var i = 0; i < tokens1.length; i++) {
- var token = tokens1[i];
- for (var j = 0; j < tokens2.length; j++) {
- if (token == tokens2[j]) continue outer;
- }
- values.push(token);
- }
- return values;
- }
-
- function arrayClasses(classVal) {
- if (isArray(classVal)) {
- return classVal;
- } else if (isString(classVal)) {
- return classVal.split(' ');
- } else if (isObject(classVal)) {
- var classes = [];
- forEach(classVal, function(v, k) {
- if (v) {
- classes = classes.concat(k.split(' '));
- }
- });
- return classes;
- }
- return classVal;
- }
- }];
-}
-
-/**
- * @ngdoc directive
- * @name ngClass
- * @restrict AC
- *
- * @description
- * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding
- * an expression that represents all classes to be added.
- *
- * The directive operates in three different ways, depending on which of three types the expression
- * evaluates to:
- *
- * 1. If the expression evaluates to a string, the string should be one or more space-delimited class
- * names.
- *
- * 2. If the expression evaluates to an array, each element of the array should be a string that is
- * one or more space-delimited class names.
- *
- * 3. If the expression evaluates to an object, then for each key-value pair of the
- * object with a truthy value the corresponding key is used as a class name.
- *
- * The directive won't add duplicate classes if a particular class was already set.
- *
- * When the expression changes, the previously added classes are removed and only then the
- * new classes are added.
- *
- * @animations
- * add - happens just before the class is applied to the element
- * remove - happens just before the class is removed from the element
- *
- * @element ANY
- * @param {expression} ngClass {@link guide/expression Expression} to eval. The result
- * of the evaluation can be a string representing space delimited class
- * names, an array, or a map of class names to boolean values. In the case of a map, the
- * names of the properties whose values are truthy will be added as css classes to the
- * element.
- *
- * @example Example that demonstrates basic bindings via ngClass directive.
- <example>
- <file name="index.html">
- <p ng-class="{strike: deleted, bold: important, red: error}">Map Syntax Example</p>
- <input type="checkbox" ng-model="deleted"> deleted (apply "strike" class)<br>
- <input type="checkbox" ng-model="important"> important (apply "bold" class)<br>
- <input type="checkbox" ng-model="error"> error (apply "red" class)
- <hr>
- <p ng-class="style">Using String Syntax</p>
- <input type="text" ng-model="style" placeholder="Type: bold strike red">
- <hr>
- <p ng-class="[style1, style2, style3]">Using Array Syntax</p>
- <input ng-model="style1" placeholder="Type: bold, strike or red"><br>
- <input ng-model="style2" placeholder="Type: bold, strike or red"><br>
- <input ng-model="style3" placeholder="Type: bold, strike or red"><br>
- </file>
- <file name="style.css">
- .strike {
- text-decoration: line-through;
- }
- .bold {
- font-weight: bold;
- }
- .red {
- color: red;
- }
- </file>
- <file name="protractor.js" type="protractor">
- var ps = element.all(by.css('p'));
-
- it('should let you toggle the class', function() {
-
- expect(ps.first().getAttribute('class')).not.toMatch(/bold/);
- expect(ps.first().getAttribute('class')).not.toMatch(/red/);
-
- element(by.model('important')).click();
- expect(ps.first().getAttribute('class')).toMatch(/bold/);
-
- element(by.model('error')).click();
- expect(ps.first().getAttribute('class')).toMatch(/red/);
- });
-
- it('should let you toggle string example', function() {
- expect(ps.get(1).getAttribute('class')).toBe('');
- element(by.model('style')).clear();
- element(by.model('style')).sendKeys('red');
- expect(ps.get(1).getAttribute('class')).toBe('red');
- });
-
- it('array example should have 3 classes', function() {
- expect(ps.last().getAttribute('class')).toBe('');
- element(by.model('style1')).sendKeys('bold');
- element(by.model('style2')).sendKeys('strike');
- element(by.model('style3')).sendKeys('red');
- expect(ps.last().getAttribute('class')).toBe('bold strike red');
- });
- </file>
- </example>
-
- ## Animations
-
- The example below demonstrates how to perform animations using ngClass.
-
- <example module="ngAnimate" deps="angular-animate.js" animations="true">
- <file name="index.html">
- <input id="setbtn" type="button" value="set" ng-click="myVar='my-class'">
- <input id="clearbtn" type="button" value="clear" ng-click="myVar=''">
- <br>
- <span class="base-class" ng-class="myVar">Sample Text</span>
- </file>
- <file name="style.css">
- .base-class {
- -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
- transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
- }
-
- .base-class.my-class {
- color: red;
- font-size:3em;
- }
- </file>
- <file name="protractor.js" type="protractor">
- it('should check ng-class', function() {
- expect(element(by.css('.base-class')).getAttribute('class')).not.
- toMatch(/my-class/);
-
- element(by.id('setbtn')).click();
-
- expect(element(by.css('.base-class')).getAttribute('class')).
- toMatch(/my-class/);
-
- element(by.id('clearbtn')).click();
-
- expect(element(by.css('.base-class')).getAttribute('class')).not.
- toMatch(/my-class/);
- });
- </file>
- </example>
-
-
- ## ngClass and pre-existing CSS3 Transitions/Animations
- The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure.
- Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder
- any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure
- to view the step by step details of {@link ng.$animate#addClass $animate.addClass} and
- {@link ng.$animate#removeClass $animate.removeClass}.
- */
-var ngClassDirective = classDirective('', true);
-
-/**
- * @ngdoc directive
- * @name ngClassOdd
- * @restrict AC
- *
- * @description
- * The `ngClassOdd` and `ngClassEven` directives work exactly as
- * {@link ng.directive:ngClass ngClass}, except they work in
- * conjunction with `ngRepeat` and take effect only on odd (even) rows.
- *
- * This directive can be applied only within the scope of an
- * {@link ng.directive:ngRepeat ngRepeat}.
- *
- * @element ANY
- * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result
- * of the evaluation can be a string representing space delimited class names or an array.
- *
- * @example
- <example>
- <file name="index.html">
- <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
- <li ng-repeat="name in names">
- <span ng-class-odd="'odd'" ng-class-even="'even'">
- {{name}}
- </span>
- </li>
- </ol>
- </file>
- <file name="style.css">
- .odd {
- color: red;
- }
- .even {
- color: blue;
- }
- </file>
- <file name="protractor.js" type="protractor">
- it('should check ng-class-odd and ng-class-even', function() {
- expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).
- toMatch(/odd/);
- expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).
- toMatch(/even/);
- });
- </file>
- </example>
- */
-var ngClassOddDirective = classDirective('Odd', 0);
-
-/**
- * @ngdoc directive
- * @name ngClassEven
- * @restrict AC
- *
- * @description
- * The `ngClassOdd` and `ngClassEven` directives work exactly as
- * {@link ng.directive:ngClass ngClass}, except they work in
- * conjunction with `ngRepeat` and take effect only on odd (even) rows.
- *
- * This directive can be applied only within the scope of an
- * {@link ng.directive:ngRepeat ngRepeat}.
- *
- * @element ANY
- * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The
- * result of the evaluation can be a string representing space delimited class names or an array.
- *
- * @example
- <example>
- <file name="index.html">
- <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
- <li ng-repeat="name in names">
- <span ng-class-odd="'odd'" ng-class-even="'even'">
- {{name}} &nbsp; &nbsp; &nbsp;
- </span>
- </li>
- </ol>
- </file>
- <file name="style.css">
- .odd {
- color: red;
- }
- .even {
- color: blue;
- }
- </file>
- <file name="protractor.js" type="protractor">
- it('should check ng-class-odd and ng-class-even', function() {
- expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).
- toMatch(/odd/);
- expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).
- toMatch(/even/);
- });
- </file>
- </example>
- */
-var ngClassEvenDirective = classDirective('Even', 1);
-
-/**
- * @ngdoc directive
- * @name ngCloak
- * @restrict AC
- *
- * @description
- * The `ngCloak` directive is used to prevent the Angular html template from being briefly
- * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this
- * directive to avoid the undesirable flicker effect caused by the html template display.
- *
- * The directive can be applied to the `<body>` element, but the preferred usage is to apply
- * multiple `ngCloak` directives to small portions of the page to permit progressive rendering
- * of the browser view.
- *
- * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and
- * `angular.min.js`.
- * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
- *
- * ```css
- * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
- * display: none !important;
- * }
- * ```
- *
- * When this css rule is loaded by the browser, all html elements (including their children) that
- * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive
- * during the compilation of the template it deletes the `ngCloak` element attribute, making
- * the compiled element visible.
- *
- * For the best result, the `angular.js` script must be loaded in the head section of the html
- * document; alternatively, the css rule above must be included in the external stylesheet of the
- * application.
- *
- * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they
- * cannot match the `[ng\:cloak]` selector. To work around this limitation, you must add the css
- * class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below.
- *
- * @element ANY
- *
- * @example
- <example>
- <file name="index.html">
- <div id="template1" ng-cloak>{{ 'hello' }}</div>
- <div id="template2" ng-cloak class="ng-cloak">{{ 'hello IE7' }}</div>
- </file>
- <file name="protractor.js" type="protractor">
- it('should remove the template directive and css class', function() {
- expect($('#template1').getAttribute('ng-cloak')).
- toBeNull();
- expect($('#template2').getAttribute('ng-cloak')).
- toBeNull();
- });
- </file>
- </example>
- *
- */
-var ngCloakDirective = ngDirective({
- compile: function(element, attr) {
- attr.$set('ngCloak', undefined);
- element.removeClass('ng-cloak');
- }
-});
-
-/**
- * @ngdoc directive
- * @name ngController
- *
- * @description
- * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular
- * supports the principles behind the Model-View-Controller design pattern.
- *
- * MVC components in angular:
- *
- * * Model — Models are the properties of a scope; scopes are attached to the DOM where scope properties
- * are accessed through bindings.
- * * View — The template (HTML with data bindings) that is rendered into the View.
- * * Controller — The `ngController` directive specifies a Controller class; the class contains business
- * logic behind the application to decorate the scope with functions and values
- *
- * Note that you can also attach controllers to the DOM by declaring it in a route definition
- * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller
- * again using `ng-controller` in the template itself. This will cause the controller to be attached
- * and executed twice.
- *
- * @element ANY
- * @scope
- * @priority 500
- * @param {expression} ngController Name of a constructor function registered with the current
- * {@link ng.$controllerProvider $controllerProvider} or an {@link guide/expression expression}
- * that on the current scope evaluates to a constructor function.
- *
- * The controller instance can be published into a scope property by specifying
- * `ng-controller="as propertyName"`.
- *
- * If the current `$controllerProvider` is configured to use globals (via
- * {@link ng.$controllerProvider#allowGlobals `$controllerProvider.allowGlobals()` }), this may
- * also be the name of a globally accessible constructor function (not recommended).
- *
- * @example
- * Here is a simple form for editing user contact information. Adding, removing, clearing, and
- * greeting are methods declared on the controller (see source tab). These methods can
- * easily be called from the angular markup. Any changes to the data are automatically reflected
- * in the View without the need for a manual update.
- *
- * Two different declaration styles are included below:
- *
- * * one binds methods and properties directly onto the controller using `this`:
- * `ng-controller="SettingsController1 as settings"`
- * * one injects `$scope` into the controller:
- * `ng-controller="SettingsController2"`
- *
- * The second option is more common in the Angular community, and is generally used in boilerplates
- * and in this guide. However, there are advantages to binding properties directly to the controller
- * and avoiding scope.
- *
- * * Using `controller as` makes it obvious which controller you are accessing in the template when
- * multiple controllers apply to an element.
- * * If you are writing your controllers as classes you have easier access to the properties and
- * methods, which will appear on the scope, from inside the controller code.
- * * Since there is always a `.` in the bindings, you don't have to worry about prototypal
- * inheritance masking primitives.
- *
- * This example demonstrates the `controller as` syntax.
- *
- * <example name="ngControllerAs" module="controllerAsExample">
- * <file name="index.html">
- * <div id="ctrl-as-exmpl" ng-controller="SettingsController1 as settings">
- * Name: <input type="text" ng-model="settings.name"/>
- * [ <a href="" ng-click="settings.greet()">greet</a> ]<br/>
- * Contact:
- * <ul>
- * <li ng-repeat="contact in settings.contacts">
- * <select ng-model="contact.type">
- * <option>phone</option>
- * <option>email</option>
- * </select>
- * <input type="text" ng-model="contact.value"/>
- * [ <a href="" ng-click="settings.clearContact(contact)">clear</a>
- * | <a href="" ng-click="settings.removeContact(contact)">X</a> ]
- * </li>
- * <li>[ <a href="" ng-click="settings.addContact()">add</a> ]</li>
- * </ul>
- * </div>
- * </file>
- * <file name="app.js">
- * angular.module('controllerAsExample', [])
- * .controller('SettingsController1', SettingsController1);
- *
- * function SettingsController1() {
- * this.name = "John Smith";
- * this.contacts = [
- * {type: 'phone', value: '408 555 1212'},
- * {type: 'email', value: 'john.smith@example.org'} ];
- * }
- *
- * SettingsController1.prototype.greet = function() {
- * alert(this.name);
- * };
- *
- * SettingsController1.prototype.addContact = function() {
- * this.contacts.push({type: 'email', value: 'yourname@example.org'});
- * };
- *
- * SettingsController1.prototype.removeContact = function(contactToRemove) {
- * var index = this.contacts.indexOf(contactToRemove);
- * this.contacts.splice(index, 1);
- * };
- *
- * SettingsController1.prototype.clearContact = function(contact) {
- * contact.type = 'phone';
- * contact.value = '';
- * };
- * </file>
- * <file name="protractor.js" type="protractor">
- * it('should check controller as', function() {
- * var container = element(by.id('ctrl-as-exmpl'));
- * expect(container.element(by.model('settings.name'))
- * .getAttribute('value')).toBe('John Smith');
- *
- * var firstRepeat =
- * container.element(by.repeater('contact in settings.contacts').row(0));
- * var secondRepeat =
- * container.element(by.repeater('contact in settings.contacts').row(1));
- *
- * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
- * .toBe('408 555 1212');
- *
- * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))
- * .toBe('john.smith@example.org');
- *
- * firstRepeat.element(by.linkText('clear')).click();
- *
- * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
- * .toBe('');
- *
- * container.element(by.linkText('add')).click();
- *
- * expect(container.element(by.repeater('contact in settings.contacts').row(2))
- * .element(by.model('contact.value'))
- * .getAttribute('value'))
- * .toBe('yourname@example.org');
- * });
- * </file>
- * </example>
- *
- * This example demonstrates the "attach to `$scope`" style of controller.
- *
- * <example name="ngController" module="controllerExample">
- * <file name="index.html">
- * <div id="ctrl-exmpl" ng-controller="SettingsController2">
- * Name: <input type="text" ng-model="name"/>
- * [ <a href="" ng-click="greet()">greet</a> ]<br/>
- * Contact:
- * <ul>
- * <li ng-repeat="contact in contacts">
- * <select ng-model="contact.type">
- * <option>phone</option>
- * <option>email</option>
- * </select>
- * <input type="text" ng-model="contact.value"/>
- * [ <a href="" ng-click="clearContact(contact)">clear</a>
- * | <a href="" ng-click="removeContact(contact)">X</a> ]
- * </li>
- * <li>[ <a href="" ng-click="addContact()">add</a> ]</li>
- * </ul>
- * </div>
- * </file>
- * <file name="app.js">
- * angular.module('controllerExample', [])
- * .controller('SettingsController2', ['$scope', SettingsController2]);
- *
- * function SettingsController2($scope) {
- * $scope.name = "John Smith";
- * $scope.contacts = [
- * {type:'phone', value:'408 555 1212'},
- * {type:'email', value:'john.smith@example.org'} ];
- *
- * $scope.greet = function() {
- * alert($scope.name);
- * };
- *
- * $scope.addContact = function() {
- * $scope.contacts.push({type:'email', value:'yourname@example.org'});
- * };
- *
- * $scope.removeContact = function(contactToRemove) {
- * var index = $scope.contacts.indexOf(contactToRemove);
- * $scope.contacts.splice(index, 1);
- * };
- *
- * $scope.clearContact = function(contact) {
- * contact.type = 'phone';
- * contact.value = '';
- * };
- * }
- * </file>
- * <file name="protractor.js" type="protractor">
- * it('should check controller', function() {
- * var container = element(by.id('ctrl-exmpl'));
- *
- * expect(container.element(by.model('name'))
- * .getAttribute('value')).toBe('John Smith');
- *
- * var firstRepeat =
- * container.element(by.repeater('contact in contacts').row(0));
- * var secondRepeat =
- * container.element(by.repeater('contact in contacts').row(1));
- *
- * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
- * .toBe('408 555 1212');
- * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))
- * .toBe('john.smith@example.org');
- *
- * firstRepeat.element(by.linkText('clear')).click();
- *
- * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
- * .toBe('');
- *
- * container.element(by.linkText('add')).click();
- *
- * expect(container.element(by.repeater('contact in contacts').row(2))
- * .element(by.model('contact.value'))
- * .getAttribute('value'))
- * .toBe('yourname@example.org');
- * });
- * </file>
- *</example>
-
- */
-var ngControllerDirective = [function() {
- return {
- restrict: 'A',
- scope: true,
- controller: '@',
- priority: 500
- };
-}];
-
-/**
- * @ngdoc directive
- * @name ngCsp
- *
- * @element html
- * @description
- * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support.
- *
- * This is necessary when developing things like Google Chrome Extensions or Universal Windows Apps.
- *
- * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things).
- * For Angular to be CSP compatible there are only two things that we need to do differently:
- *
- * - don't use `Function` constructor to generate optimized value getters
- * - don't inject custom stylesheet into the document
- *
- * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp`
- * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will
- * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will
- * be raised.
- *
- * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically
- * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}).
- * To make those directives work in CSP mode, include the `angular-csp.css` manually.
- *
- * Angular tries to autodetect if CSP is active and automatically turn on the CSP-safe mode. This
- * autodetection however triggers a CSP error to be logged in the console:
- *
- * ```
- * Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of
- * script in the following Content Security Policy directive: "default-src 'self'". Note that
- * 'script-src' was not explicitly set, so 'default-src' is used as a fallback.
- * ```
- *
- * This error is harmless but annoying. To prevent the error from showing up, put the `ngCsp`
- * directive on the root element of the application or on the `angular.js` script tag, whichever
- * appears first in the html document.
- *
- * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.*
- *
- * @example
- * This example shows how to apply the `ngCsp` directive to the `html` tag.
- ```html
- <!doctype html>
- <html ng-app ng-csp>
- ...
- ...
- </html>
- ```
- * @example
- // Note: the suffix `.csp` in the example name triggers
- // csp mode in our http server!
- <example name="example.csp" module="cspExample" ng-csp="true">
- <file name="index.html">
- <div ng-controller="MainController as ctrl">
- <div>
- <button ng-click="ctrl.inc()" id="inc">Increment</button>
- <span id="counter">
- {{ctrl.counter}}
- </span>
- </div>
-
- <div>
- <button ng-click="ctrl.evil()" id="evil">Evil</button>
- <span id="evilError">
- {{ctrl.evilError}}
- </span>
- </div>
- </div>
- </file>
- <file name="script.js">
- angular.module('cspExample', [])
- .controller('MainController', function() {
- this.counter = 0;
- this.inc = function() {
- this.counter++;
- };
- this.evil = function() {
- // jshint evil:true
- try {
- eval('1+2');
- } catch (e) {
- this.evilError = e.message;
- }
- };
- });
- </file>
- <file name="protractor.js" type="protractor">
- var util, webdriver;
-
- var incBtn = element(by.id('inc'));
- var counter = element(by.id('counter'));
- var evilBtn = element(by.id('evil'));
- var evilError = element(by.id('evilError'));
-
- function getAndClearSevereErrors() {
- return browser.manage().logs().get('browser').then(function(browserLog) {
- return browserLog.filter(function(logEntry) {
- return logEntry.level.value > webdriver.logging.Level.WARNING.value;
- });
- });
- }
-
- function clearErrors() {
- getAndClearSevereErrors();
- }
-
- function expectNoErrors() {
- getAndClearSevereErrors().then(function(filteredLog) {
- expect(filteredLog.length).toEqual(0);
- if (filteredLog.length) {
- console.log('browser console errors: ' + util.inspect(filteredLog));
- }
- });
- }
-
- function expectError(regex) {
- getAndClearSevereErrors().then(function(filteredLog) {
- var found = false;
- filteredLog.forEach(function(log) {
- if (log.message.match(regex)) {
- found = true;
- }
- });
- if (!found) {
- throw new Error('expected an error that matches ' + regex);
- }
- });
- }
-
- beforeEach(function() {
- util = require('util');
- webdriver = require('protractor/node_modules/selenium-webdriver');
- });
-
- // For now, we only test on Chrome,
- // as Safari does not load the page with Protractor's injected scripts,
- // and Firefox webdriver always disables content security policy (#6358)
- if (browser.params.browser !== 'chrome') {
- return;
- }
-
- it('should not report errors when the page is loaded', function() {
- // clear errors so we are not dependent on previous tests
- clearErrors();
- // Need to reload the page as the page is already loaded when
- // we come here
- browser.driver.getCurrentUrl().then(function(url) {
- browser.get(url);
- });
- expectNoErrors();
- });
-
- it('should evaluate expressions', function() {
- expect(counter.getText()).toEqual('0');
- incBtn.click();
- expect(counter.getText()).toEqual('1');
- expectNoErrors();
- });
-
- it('should throw and report an error when using "eval"', function() {
- evilBtn.click();
- expect(evilError.getText()).toMatch(/Content Security Policy/);
- expectError(/Content Security Policy/);
- });
- </file>
- </example>
- */
-
-// ngCsp is not implemented as a proper directive any more, because we need it be processed while we
-// bootstrap the system (before $parse is instantiated), for this reason we just have
-// the csp.isActive() fn that looks for ng-csp attribute anywhere in the current doc
-
-/**
- * @ngdoc directive
- * @name ngClick
- *
- * @description
- * The ngClick directive allows you to specify custom behavior when
- * an element is clicked.
- *
- * @element ANY
- * @priority 0
- * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon
- * click. ({@link guide/expression#-event- Event object is available as `$event`})
- *
- * @example
- <example>
- <file name="index.html">
- <button ng-click="count = count + 1" ng-init="count=0">
- Increment
- </button>
- <span>
- count: {{count}}
- </span>
- </file>
- <file name="protractor.js" type="protractor">
- it('should check ng-click', function() {
- expect(element(by.binding('count')).getText()).toMatch('0');
- element(by.css('button')).click();
- expect(element(by.binding('count')).getText()).toMatch('1');
- });
- </file>
- </example>
- */
-/*
- * A collection of directives that allows creation of custom event handlers that are defined as
- * angular expressions and are compiled and executed within the current scope.
- */
-var ngEventDirectives = {};
-
-// For events that might fire synchronously during DOM manipulation
-// we need to execute their event handlers asynchronously using $evalAsync,
-// so that they are not executed in an inconsistent state.
-var forceAsyncEvents = {
- 'blur': true,
- 'focus': true
-};
-forEach(
- 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),
- function(eventName) {
- var directiveName = directiveNormalize('ng-' + eventName);
- ngEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) {
- return {
- restrict: 'A',
- compile: function($element, attr) {
- // We expose the powerful $event object on the scope that provides access to the Window,
- // etc. that isn't protected by the fast paths in $parse. We explicitly request better
- // checks at the cost of speed since event handler expressions are not executed as
- // frequently as regular change detection.
- var fn = $parse(attr[directiveName], /* interceptorFn */ null, /* expensiveChecks */ true);
- return function ngEventHandler(scope, element) {
- element.on(eventName, function(event) {
- var callback = function() {
- fn(scope, {$event:event});
- };
- if (forceAsyncEvents[eventName] && $rootScope.$$phase) {
- scope.$evalAsync(callback);
- } else {
- scope.$apply(callback);
- }
- });
- };
- }
- };
- }];
- }
-);
-
-/**
- * @ngdoc directive
- * @name ngDblclick
- *
- * @description
- * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event.
- *
- * @element ANY
- * @priority 0
- * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon
- * a dblclick. (The Event object is available as `$event`)
- *
- * @example
- <example>
- <file name="index.html">
- <button ng-dblclick="count = count + 1" ng-init="count=0">
- Increment (on double click)
- </button>
- count: {{count}}
- </file>
- </example>
- */
-
-
-/**
- * @ngdoc directive
- * @name ngMousedown
- *
- * @description
- * The ngMousedown directive allows you to specify custom behavior on mousedown event.
- *
- * @element ANY
- * @priority 0
- * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon
- * mousedown. ({@link guide/expression#-event- Event object is available as `$event`})
- *
- * @example
- <example>
- <file name="index.html">
- <button ng-mousedown="count = count + 1" ng-init="count=0">
- Increment (on mouse down)
- </button>
- count: {{count}}
- </file>
- </example>
- */
-
-
-/**
- * @ngdoc directive
- * @name ngMouseup
- *
- * @description
- * Specify custom behavior on mouseup event.
- *
- * @element ANY
- * @priority 0
- * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon
- * mouseup. ({@link guide/expression#-event- Event object is available as `$event`})
- *
- * @example
- <example>
- <file name="index.html">
- <button ng-mouseup="count = count + 1" ng-init="count=0">
- Increment (on mouse up)
- </button>
- count: {{count}}
- </file>
- </example>
- */
-
-/**
- * @ngdoc directive
- * @name ngMouseover
- *
- * @description
- * Specify custom behavior on mouseover event.
- *
- * @element ANY
- * @priority 0
- * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon
- * mouseover. ({@link guide/expression#-event- Event object is available as `$event`})
- *
- * @example
- <example>
- <file name="index.html">
- <button ng-mouseover="count = count + 1" ng-init="count=0">
- Increment (when mouse is over)
- </button>
- count: {{count}}
- </file>
- </example>
- */
-
-
-/**
- * @ngdoc directive
- * @name ngMouseenter
- *
- * @description
- * Specify custom behavior on mouseenter event.
- *
- * @element ANY
- * @priority 0
- * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon
- * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`})
- *
- * @example
- <example>
- <file name="index.html">
- <button ng-mouseenter="count = count + 1" ng-init="count=0">
- Increment (when mouse enters)
- </button>
- count: {{count}}
- </file>
- </example>
- */
-
-
-/**
- * @ngdoc directive
- * @name ngMouseleave
- *
- * @description
- * Specify custom behavior on mouseleave event.
- *
- * @element ANY
- * @priority 0
- * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon
- * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`})
- *
- * @example
- <example>
- <file name="index.html">
- <button ng-mouseleave="count = count + 1" ng-init="count=0">
- Increment (when mouse leaves)
- </button>
- count: {{count}}
- </file>
- </example>
- */
-
-
-/**
- * @ngdoc directive
- * @name ngMousemove
- *
- * @description
- * Specify custom behavior on mousemove event.
- *
- * @element ANY
- * @priority 0
- * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon
- * mousemove. ({@link guide/expression#-event- Event object is available as `$event`})
- *
- * @example
- <example>
- <file name="index.html">
- <button ng-mousemove="count = count + 1" ng-init="count=0">
- Increment (when mouse moves)
- </button>
- count: {{count}}
- </file>
- </example>
- */
-
-
-/**
- * @ngdoc directive
- * @name ngKeydown
- *
- * @description
- * Specify custom behavior on keydown event.
- *
- * @element ANY
- * @priority 0
- * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon
- * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
- *
- * @example
- <example>
- <file name="index.html">
- <input ng-keydown="count = count + 1" ng-init="count=0">
- key down count: {{count}}
- </file>
- </example>
- */
-
-
-/**
- * @ngdoc directive
- * @name ngKeyup
- *
- * @description
- * Specify custom behavior on keyup event.
- *
- * @element ANY
- * @priority 0
- * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon
- * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
- *
- * @example
- <example>
- <file name="index.html">
- <p>Typing in the input box below updates the key count</p>
- <input ng-keyup="count = count + 1" ng-init="count=0"> key up count: {{count}}
-
- <p>Typing in the input box below updates the keycode</p>
- <input ng-keyup="event=$event">
- <p>event keyCode: {{ event.keyCode }}</p>
- <p>event altKey: {{ event.altKey }}</p>
- </file>
- </example>
- */
-
-
-/**
- * @ngdoc directive
- * @name ngKeypress
- *
- * @description
- * Specify custom behavior on keypress event.
- *
- * @element ANY
- * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon
- * keypress. ({@link guide/expression#-event- Event object is available as `$event`}
- * and can be interrogated for keyCode, altKey, etc.)
- *
- * @example
- <example>
- <file name="index.html">
- <input ng-keypress="count = count + 1" ng-init="count=0">
- key press count: {{count}}
- </file>
- </example>
- */
-
-
-/**
- * @ngdoc directive
- * @name ngSubmit
- *
- * @description
- * Enables binding angular expressions to onsubmit events.
- *
- * Additionally it prevents the default action (which for form means sending the request to the
- * server and reloading the current page), but only if the form does not contain `action`,
- * `data-action`, or `x-action` attributes.
- *
- * <div class="alert alert-warning">
- * **Warning:** Be careful not to cause "double-submission" by using both the `ngClick` and
- * `ngSubmit` handlers together. See the
- * {@link form#submitting-a-form-and-preventing-the-default-action `form` directive documentation}
- * for a detailed discussion of when `ngSubmit` may be triggered.
- * </div>
- *
- * @element form
- * @priority 0
- * @param {expression} ngSubmit {@link guide/expression Expression} to eval.
- * ({@link guide/expression#-event- Event object is available as `$event`})
- *
- * @example
- <example module="submitExample">
- <file name="index.html">
- <script>
- angular.module('submitExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.list = [];
- $scope.text = 'hello';
- $scope.submit = function() {
- if ($scope.text) {
- $scope.list.push(this.text);
- $scope.text = '';
- }
- };
- }]);
- </script>
- <form ng-submit="submit()" ng-controller="ExampleController">
- Enter text and hit enter:
- <input type="text" ng-model="text" name="text" />
- <input type="submit" id="submit" value="Submit" />
- <pre>list={{list}}</pre>
- </form>
- </file>
- <file name="protractor.js" type="protractor">
- it('should check ng-submit', function() {
- expect(element(by.binding('list')).getText()).toBe('list=[]');
- element(by.css('#submit')).click();
- expect(element(by.binding('list')).getText()).toContain('hello');
- expect(element(by.model('text')).getAttribute('value')).toBe('');
- });
- it('should ignore empty strings', function() {
- expect(element(by.binding('list')).getText()).toBe('list=[]');
- element(by.css('#submit')).click();
- element(by.css('#submit')).click();
- expect(element(by.binding('list')).getText()).toContain('hello');
- });
- </file>
- </example>
- */
-
-/**
- * @ngdoc directive
- * @name ngFocus
- *
- * @description
- * Specify custom behavior on focus event.
- *
- * Note: As the `focus` event is executed synchronously when calling `input.focus()`
- * AngularJS executes the expression using `scope.$evalAsync` if the event is fired
- * during an `$apply` to ensure a consistent state.
- *
- * @element window, input, select, textarea, a
- * @priority 0
- * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon
- * focus. ({@link guide/expression#-event- Event object is available as `$event`})
- *
- * @example
- * See {@link ng.directive:ngClick ngClick}
- */
-
-/**
- * @ngdoc directive
- * @name ngBlur
- *
- * @description
- * Specify custom behavior on blur event.
- *
- * A [blur event](https://developer.mozilla.org/en-US/docs/Web/Events/blur) fires when
- * an element has lost focus.
- *
- * Note: As the `blur` event is executed synchronously also during DOM manipulations
- * (e.g. removing a focussed input),
- * AngularJS executes the expression using `scope.$evalAsync` if the event is fired
- * during an `$apply` to ensure a consistent state.
- *
- * @element window, input, select, textarea, a
- * @priority 0
- * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon
- * blur. ({@link guide/expression#-event- Event object is available as `$event`})
- *
- * @example
- * See {@link ng.directive:ngClick ngClick}
- */
-
-/**
- * @ngdoc directive
- * @name ngCopy
- *
- * @description
- * Specify custom behavior on copy event.
- *
- * @element window, input, select, textarea, a
- * @priority 0
- * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon
- * copy. ({@link guide/expression#-event- Event object is available as `$event`})
- *
- * @example
- <example>
- <file name="index.html">
- <input ng-copy="copied=true" ng-init="copied=false; value='copy me'" ng-model="value">
- copied: {{copied}}
- </file>
- </example>
- */
-
-/**
- * @ngdoc directive
- * @name ngCut
- *
- * @description
- * Specify custom behavior on cut event.
- *
- * @element window, input, select, textarea, a
- * @priority 0
- * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon
- * cut. ({@link guide/expression#-event- Event object is available as `$event`})
- *
- * @example
- <example>
- <file name="index.html">
- <input ng-cut="cut=true" ng-init="cut=false; value='cut me'" ng-model="value">
- cut: {{cut}}
- </file>
- </example>
- */
-
-/**
- * @ngdoc directive
- * @name ngPaste
- *
- * @description
- * Specify custom behavior on paste event.
- *
- * @element window, input, select, textarea, a
- * @priority 0
- * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon
- * paste. ({@link guide/expression#-event- Event object is available as `$event`})
- *
- * @example
- <example>
- <file name="index.html">
- <input ng-paste="paste=true" ng-init="paste=false" placeholder='paste here'>
- pasted: {{paste}}
- </file>
- </example>
- */
-
-/**
- * @ngdoc directive
- * @name ngIf
- * @restrict A
- *
- * @description
- * The `ngIf` directive removes or recreates a portion of the DOM tree based on an
- * {expression}. If the expression assigned to `ngIf` evaluates to a false
- * value then the element is removed from the DOM, otherwise a clone of the
- * element is reinserted into the DOM.
- *
- * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the
- * element in the DOM rather than changing its visibility via the `display` css property. A common
- * case when this difference is significant is when using css selectors that rely on an element's
- * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes.
- *
- * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope
- * is created when the element is restored. The scope created within `ngIf` inherits from
- * its parent scope using
- * [prototypal inheritance](https://github.com/angular/angular.js/wiki/Understanding-Scopes#javascript-prototypal-inheritance).
- * An important implication of this is if `ngModel` is used within `ngIf` to bind to
- * a javascript primitive defined in the parent scope. In this case any modifications made to the
- * variable within the child scope will override (hide) the value in the parent scope.
- *
- * Also, `ngIf` recreates elements using their compiled state. An example of this behavior
- * is if an element's class attribute is directly modified after it's compiled, using something like
- * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element
- * the added class will be lost because the original compiled state is used to regenerate the element.
- *
- * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter`
- * and `leave` effects.
- *
- * @animations
- * enter - happens just after the `ngIf` contents change and a new DOM element is created and injected into the `ngIf` container
- * leave - happens just before the `ngIf` contents are removed from the DOM
- *
- * @element ANY
- * @scope
- * @priority 600
- * @param {expression} ngIf If the {@link guide/expression expression} is falsy then
- * the element is removed from the DOM tree. If it is truthy a copy of the compiled
- * element is added to the DOM tree.
- *
- * @example
- <example module="ngAnimate" deps="angular-animate.js" animations="true">
- <file name="index.html">
- Click me: <input type="checkbox" ng-model="checked" ng-init="checked=true" /><br/>
- Show when checked:
- <span ng-if="checked" class="animate-if">
- This is removed when the checkbox is unchecked.
- </span>
- </file>
- <file name="animations.css">
- .animate-if {
- background:white;
- border:1px solid black;
- padding:10px;
- }
-
- .animate-if.ng-enter, .animate-if.ng-leave {
- -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
- transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
- }
-
- .animate-if.ng-enter,
- .animate-if.ng-leave.ng-leave-active {
- opacity:0;
- }
-
- .animate-if.ng-leave,
- .animate-if.ng-enter.ng-enter-active {
- opacity:1;
- }
- </file>
- </example>
- */
-var ngIfDirective = ['$animate', function($animate) {
- return {
- multiElement: true,
- transclude: 'element',
- priority: 600,
- terminal: true,
- restrict: 'A',
- $$tlb: true,
- link: function($scope, $element, $attr, ctrl, $transclude) {
- var block, childScope, previousElements;
- $scope.$watch($attr.ngIf, function ngIfWatchAction(value) {
-
- if (value) {
- if (!childScope) {
- $transclude(function(clone, newScope) {
- childScope = newScope;
- clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' ');
- // Note: We only need the first/last node of the cloned nodes.
- // However, we need to keep the reference to the jqlite wrapper as it might be changed later
- // by a directive with templateUrl when its template arrives.
- block = {
- clone: clone
- };
- $animate.enter(clone, $element.parent(), $element);
- });
- }
- } else {
- if (previousElements) {
- previousElements.remove();
- previousElements = null;
- }
- if (childScope) {
- childScope.$destroy();
- childScope = null;
- }
- if (block) {
- previousElements = getBlockNodes(block.clone);
- $animate.leave(previousElements).then(function() {
- previousElements = null;
- });
- block = null;
- }
- }
- });
- }
- };
-}];
-
-/**
- * @ngdoc directive
- * @name ngInclude
- * @restrict ECA
- *
- * @description
- * Fetches, compiles and includes an external HTML fragment.
- *
- * By default, the template URL is restricted to the same domain and protocol as the
- * application document. This is done by calling {@link $sce#getTrustedResourceUrl
- * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols
- * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or
- * {@link $sce#trustAsResourceUrl wrap them} as trusted values. Refer to Angular's {@link
- * ng.$sce Strict Contextual Escaping}.
- *
- * In addition, the browser's
- * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)
- * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)
- * policy may further restrict whether the template is successfully loaded.
- * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://`
- * access on some browsers.
- *
- * @animations
- * enter - animation is used to bring new content into the browser.
- * leave - animation is used to animate existing content away.
- *
- * The enter and leave animation occur concurrently.
- *
- * @scope
- * @priority 400
- *
- * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant,
- * make sure you wrap it in **single** quotes, e.g. `src="'myPartialTemplate.html'"`.
- * @param {string=} onload Expression to evaluate when a new partial is loaded.
- *
- * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll
- * $anchorScroll} to scroll the viewport after the content is loaded.
- *
- * - If the attribute is not set, disable scrolling.
- * - If the attribute is set without value, enable scrolling.
- * - Otherwise enable scrolling only if the expression evaluates to truthy value.
- *
- * @example
- <example module="includeExample" deps="angular-animate.js" animations="true">
- <file name="index.html">
- <div ng-controller="ExampleController">
- <select ng-model="template" ng-options="t.name for t in templates">
- <option value="">(blank)</option>
- </select>
- url of the template: <tt>{{template.url}}</tt>
- <hr/>
- <div class="slide-animate-container">
- <div class="slide-animate" ng-include="template.url"></div>
- </div>
- </div>
- </file>
- <file name="script.js">
- angular.module('includeExample', ['ngAnimate'])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.templates =
- [ { name: 'template1.html', url: 'template1.html'},
- { name: 'template2.html', url: 'template2.html'} ];
- $scope.template = $scope.templates[0];
- }]);
- </file>
- <file name="template1.html">
- Content of template1.html
- </file>
- <file name="template2.html">
- Content of template2.html
- </file>
- <file name="animations.css">
- .slide-animate-container {
- position:relative;
- background:white;
- border:1px solid black;
- height:40px;
- overflow:hidden;
- }
-
- .slide-animate {
- padding:10px;
- }
-
- .slide-animate.ng-enter, .slide-animate.ng-leave {
- -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
- transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
-
- position:absolute;
- top:0;
- left:0;
- right:0;
- bottom:0;
- display:block;
- padding:10px;
- }
-
- .slide-animate.ng-enter {
- top:-50px;
- }
- .slide-animate.ng-enter.ng-enter-active {
- top:0;
- }
-
- .slide-animate.ng-leave {
- top:0;
- }
- .slide-animate.ng-leave.ng-leave-active {
- top:50px;
- }
- </file>
- <file name="protractor.js" type="protractor">
- var templateSelect = element(by.model('template'));
- var includeElem = element(by.css('[ng-include]'));
-
- it('should load template1.html', function() {
- expect(includeElem.getText()).toMatch(/Content of template1.html/);
- });
-
- it('should load template2.html', function() {
- if (browser.params.browser == 'firefox') {
- // Firefox can't handle using selects
- // See https://github.com/angular/protractor/issues/480
- return;
- }
- templateSelect.click();
- templateSelect.all(by.css('option')).get(2).click();
- expect(includeElem.getText()).toMatch(/Content of template2.html/);
- });
-
- it('should change to blank', function() {
- if (browser.params.browser == 'firefox') {
- // Firefox can't handle using selects
- return;
- }
- templateSelect.click();
- templateSelect.all(by.css('option')).get(0).click();
- expect(includeElem.isPresent()).toBe(false);
- });
- </file>
- </example>
- */
-
-
-/**
- * @ngdoc event
- * @name ngInclude#$includeContentRequested
- * @eventType emit on the scope ngInclude was declared in
- * @description
- * Emitted every time the ngInclude content is requested.
- *
- * @param {Object} angularEvent Synthetic event object.
- * @param {String} src URL of content to load.
- */
-
-
-/**
- * @ngdoc event
- * @name ngInclude#$includeContentLoaded
- * @eventType emit on the current ngInclude scope
- * @description
- * Emitted every time the ngInclude content is reloaded.
- *
- * @param {Object} angularEvent Synthetic event object.
- * @param {String} src URL of content to load.
- */
-
-
-/**
- * @ngdoc event
- * @name ngInclude#$includeContentError
- * @eventType emit on the scope ngInclude was declared in
- * @description
- * Emitted when a template HTTP request yields an erronous response (status < 200 || status > 299)
- *
- * @param {Object} angularEvent Synthetic event object.
- * @param {String} src URL of content to load.
- */
-var ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate', '$sce',
- function($templateRequest, $anchorScroll, $animate, $sce) {
- return {
- restrict: 'ECA',
- priority: 400,
- terminal: true,
- transclude: 'element',
- controller: angular.noop,
- compile: function(element, attr) {
- var srcExp = attr.ngInclude || attr.src,
- onloadExp = attr.onload || '',
- autoScrollExp = attr.autoscroll;
-
- return function(scope, $element, $attr, ctrl, $transclude) {
- var changeCounter = 0,
- currentScope,
- previousElement,
- currentElement;
-
- var cleanupLastIncludeContent = function() {
- if (previousElement) {
- previousElement.remove();
- previousElement = null;
- }
- if (currentScope) {
- currentScope.$destroy();
- currentScope = null;
- }
- if (currentElement) {
- $animate.leave(currentElement).then(function() {
- previousElement = null;
- });
- previousElement = currentElement;
- currentElement = null;
- }
- };
-
- scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) {
- var afterAnimation = function() {
- if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {
- $anchorScroll();
- }
- };
- var thisChangeId = ++changeCounter;
-
- if (src) {
- //set the 2nd param to true to ignore the template request error so that the inner
- //contents and scope can be cleaned up.
- $templateRequest(src, true).then(function(response) {
- if (thisChangeId !== changeCounter) return;
- var newScope = scope.$new();
- ctrl.template = response;
-
- // Note: This will also link all children of ng-include that were contained in the original
- // html. If that content contains controllers, ... they could pollute/change the scope.
- // However, using ng-include on an element with additional content does not make sense...
- // Note: We can't remove them in the cloneAttchFn of $transclude as that
- // function is called before linking the content, which would apply child
- // directives to non existing elements.
- var clone = $transclude(newScope, function(clone) {
- cleanupLastIncludeContent();
- $animate.enter(clone, null, $element).then(afterAnimation);
- });
-
- currentScope = newScope;
- currentElement = clone;
-
- currentScope.$emit('$includeContentLoaded', src);
- scope.$eval(onloadExp);
- }, function() {
- if (thisChangeId === changeCounter) {
- cleanupLastIncludeContent();
- scope.$emit('$includeContentError', src);
- }
- });
- scope.$emit('$includeContentRequested', src);
- } else {
- cleanupLastIncludeContent();
- ctrl.template = null;
- }
- });
- };
- }
- };
-}];
-
-// This directive is called during the $transclude call of the first `ngInclude` directive.
-// It will replace and compile the content of the element with the loaded template.
-// We need this directive so that the element content is already filled when
-// the link function of another directive on the same element as ngInclude
-// is called.
-var ngIncludeFillContentDirective = ['$compile',
- function($compile) {
- return {
- restrict: 'ECA',
- priority: -400,
- require: 'ngInclude',
- link: function(scope, $element, $attr, ctrl) {
- if (/SVG/.test($element[0].toString())) {
- // WebKit: https://bugs.webkit.org/show_bug.cgi?id=135698 --- SVG elements do not
- // support innerHTML, so detect this here and try to generate the contents
- // specially.
- $element.empty();
- $compile(jqLiteBuildFragment(ctrl.template, document).childNodes)(scope,
- function namespaceAdaptedClone(clone) {
- $element.append(clone);
- }, {futureParentElement: $element});
- return;
- }
-
- $element.html(ctrl.template);
- $compile($element.contents())(scope);
- }
- };
- }];
-
-/**
- * @ngdoc directive
- * @name ngInit
- * @restrict AC
- *
- * @description
- * The `ngInit` directive allows you to evaluate an expression in the
- * current scope.
- *
- * <div class="alert alert-error">
- * The only appropriate use of `ngInit` is for aliasing special properties of
- * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you
- * should use {@link guide/controller controllers} rather than `ngInit`
- * to initialize values on a scope.
- * </div>
- * <div class="alert alert-warning">
- * **Note**: If you have assignment in `ngInit` along with {@link ng.$filter `$filter`}, make
- * sure you have parenthesis for correct precedence:
- * <pre class="prettyprint">
- * <div ng-init="test1 = (data | orderBy:'name')"></div>
- * </pre>
- * </div>
- *
- * @priority 450
- *
- * @element ANY
- * @param {expression} ngInit {@link guide/expression Expression} to eval.
- *
- * @example
- <example module="initExample">
- <file name="index.html">
- <script>
- angular.module('initExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.list = [['a', 'b'], ['c', 'd']];
- }]);
- </script>
- <div ng-controller="ExampleController">
- <div ng-repeat="innerList in list" ng-init="outerIndex = $index">
- <div ng-repeat="value in innerList" ng-init="innerIndex = $index">
- <span class="example-init">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span>
- </div>
- </div>
- </div>
- </file>
- <file name="protractor.js" type="protractor">
- it('should alias index positions', function() {
- var elements = element.all(by.css('.example-init'));
- expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;');
- expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;');
- expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;');
- expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;');
- });
- </file>
- </example>
- */
-var ngInitDirective = ngDirective({
- priority: 450,
- compile: function() {
- return {
- pre: function(scope, element, attrs) {
- scope.$eval(attrs.ngInit);
- }
- };
- }
-});
-
-/**
- * @ngdoc directive
- * @name ngNonBindable
- * @restrict AC
- * @priority 1000
- *
- * @description
- * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current
- * DOM element. This is useful if the element contains what appears to be Angular directives and
- * bindings but which should be ignored by Angular. This could be the case if you have a site that
- * displays snippets of code, for instance.
- *
- * @element ANY
- *
- * @example
- * In this example there are two locations where a simple interpolation binding (`{{}}`) is present,
- * but the one wrapped in `ngNonBindable` is left alone.
- *
- * @example
- <example>
- <file name="index.html">
- <div>Normal: {{1 + 2}}</div>
- <div ng-non-bindable>Ignored: {{1 + 2}}</div>
- </file>
- <file name="protractor.js" type="protractor">
- it('should check ng-non-bindable', function() {
- expect(element(by.binding('1 + 2')).getText()).toContain('3');
- expect(element.all(by.css('div')).last().getText()).toMatch(/1 \+ 2/);
- });
- </file>
- </example>
- */
-var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });
-
-/**
- * @ngdoc directive
- * @name ngPluralize
- * @restrict EA
- *
- * @description
- * `ngPluralize` is a directive that displays messages according to en-US localization rules.
- * These rules are bundled with angular.js, but can be overridden
- * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive
- * by specifying the mappings between
- * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)
- * and the strings to be displayed.
- *
- * # Plural categories and explicit number rules
- * There are two
- * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)
- * in Angular's default en-US locale: "one" and "other".
- *
- * While a plural category may match many numbers (for example, in en-US locale, "other" can match
- * any number that is not 1), an explicit number rule can only match one number. For example, the
- * explicit number rule for "3" matches the number 3. There are examples of plural categories
- * and explicit number rules throughout the rest of this documentation.
- *
- * # Configuring ngPluralize
- * You configure ngPluralize by providing 2 attributes: `count` and `when`.
- * You can also provide an optional attribute, `offset`.
- *
- * The value of the `count` attribute can be either a string or an {@link guide/expression
- * Angular expression}; these are evaluated on the current scope for its bound value.
- *
- * The `when` attribute specifies the mappings between plural categories and the actual
- * string to be displayed. The value of the attribute should be a JSON object.
- *
- * The following example shows how to configure ngPluralize:
- *
- * ```html
- * <ng-pluralize count="personCount"
- when="{'0': 'Nobody is viewing.',
- * 'one': '1 person is viewing.',
- * 'other': '{} people are viewing.'}">
- * </ng-pluralize>
- *```
- *
- * In the example, `"0: Nobody is viewing."` is an explicit number rule. If you did not
- * specify this rule, 0 would be matched to the "other" category and "0 people are viewing"
- * would be shown instead of "Nobody is viewing". You can specify an explicit number rule for
- * other numbers, for example 12, so that instead of showing "12 people are viewing", you can
- * show "a dozen people are viewing".
- *
- * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted
- * into pluralized strings. In the previous example, Angular will replace `{}` with
- * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder
- * for <span ng-non-bindable>{{numberExpression}}</span>.
- *
- * # Configuring ngPluralize with offset
- * The `offset` attribute allows further customization of pluralized text, which can result in
- * a better user experience. For example, instead of the message "4 people are viewing this document",
- * you might display "John, Kate and 2 others are viewing this document".
- * The offset attribute allows you to offset a number by any desired value.
- * Let's take a look at an example:
- *
- * ```html
- * <ng-pluralize count="personCount" offset=2
- * when="{'0': 'Nobody is viewing.',
- * '1': '{{person1}} is viewing.',
- * '2': '{{person1}} and {{person2}} are viewing.',
- * 'one': '{{person1}}, {{person2}} and one other person are viewing.',
- * 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}">
- * </ng-pluralize>
- * ```
- *
- * Notice that we are still using two plural categories(one, other), but we added
- * three explicit number rules 0, 1 and 2.
- * When one person, perhaps John, views the document, "John is viewing" will be shown.
- * When three people view the document, no explicit number rule is found, so
- * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category.
- * In this case, plural category 'one' is matched and "John, Mary and one other person are viewing"
- * is shown.
- *
- * Note that when you specify offsets, you must provide explicit number rules for
- * numbers from 0 up to and including the offset. If you use an offset of 3, for example,
- * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for
- * plural categories "one" and "other".
- *
- * @param {string|expression} count The variable to be bound to.
- * @param {string} when The mapping between plural category to its corresponding strings.
- * @param {number=} offset Offset to deduct from the total number.
- *
- * @example
- <example module="pluralizeExample">
- <file name="index.html">
- <script>
- angular.module('pluralizeExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.person1 = 'Igor';
- $scope.person2 = 'Misko';
- $scope.personCount = 1;
- }]);
- </script>
- <div ng-controller="ExampleController">
- Person 1:<input type="text" ng-model="person1" value="Igor" /><br/>
- Person 2:<input type="text" ng-model="person2" value="Misko" /><br/>
- Number of People:<input type="text" ng-model="personCount" value="1" /><br/>
-
- <!--- Example with simple pluralization rules for en locale --->
- Without Offset:
- <ng-pluralize count="personCount"
- when="{'0': 'Nobody is viewing.',
- 'one': '1 person is viewing.',
- 'other': '{} people are viewing.'}">
- </ng-pluralize><br>
-
- <!--- Example with offset --->
- With Offset(2):
- <ng-pluralize count="personCount" offset=2
- when="{'0': 'Nobody is viewing.',
- '1': '{{person1}} is viewing.',
- '2': '{{person1}} and {{person2}} are viewing.',
- 'one': '{{person1}}, {{person2}} and one other person are viewing.',
- 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}">
- </ng-pluralize>
- </div>
- </file>
- <file name="protractor.js" type="protractor">
- it('should show correct pluralized string', function() {
- var withoutOffset = element.all(by.css('ng-pluralize')).get(0);
- var withOffset = element.all(by.css('ng-pluralize')).get(1);
- var countInput = element(by.model('personCount'));
-
- expect(withoutOffset.getText()).toEqual('1 person is viewing.');
- expect(withOffset.getText()).toEqual('Igor is viewing.');
-
- countInput.clear();
- countInput.sendKeys('0');
-
- expect(withoutOffset.getText()).toEqual('Nobody is viewing.');
- expect(withOffset.getText()).toEqual('Nobody is viewing.');
-
- countInput.clear();
- countInput.sendKeys('2');
-
- expect(withoutOffset.getText()).toEqual('2 people are viewing.');
- expect(withOffset.getText()).toEqual('Igor and Misko are viewing.');
-
- countInput.clear();
- countInput.sendKeys('3');
-
- expect(withoutOffset.getText()).toEqual('3 people are viewing.');
- expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.');
-
- countInput.clear();
- countInput.sendKeys('4');
-
- expect(withoutOffset.getText()).toEqual('4 people are viewing.');
- expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.');
- });
- it('should show data-bound names', function() {
- var withOffset = element.all(by.css('ng-pluralize')).get(1);
- var personCount = element(by.model('personCount'));
- var person1 = element(by.model('person1'));
- var person2 = element(by.model('person2'));
- personCount.clear();
- personCount.sendKeys('4');
- person1.clear();
- person1.sendKeys('Di');
- person2.clear();
- person2.sendKeys('Vojta');
- expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.');
- });
- </file>
- </example>
- */
-var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) {
- var BRACE = /{}/g,
- IS_WHEN = /^when(Minus)?(.+)$/;
-
- return {
- restrict: 'EA',
- link: function(scope, element, attr) {
- var numberExp = attr.count,
- whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs
- offset = attr.offset || 0,
- whens = scope.$eval(whenExp) || {},
- whensExpFns = {},
- startSymbol = $interpolate.startSymbol(),
- endSymbol = $interpolate.endSymbol(),
- braceReplacement = startSymbol + numberExp + '-' + offset + endSymbol,
- watchRemover = angular.noop,
- lastCount;
-
- forEach(attr, function(expression, attributeName) {
- var tmpMatch = IS_WHEN.exec(attributeName);
- if (tmpMatch) {
- var whenKey = (tmpMatch[1] ? '-' : '') + lowercase(tmpMatch[2]);
- whens[whenKey] = element.attr(attr.$attr[attributeName]);
- }
- });
- forEach(whens, function(expression, key) {
- whensExpFns[key] = $interpolate(expression.replace(BRACE, braceReplacement));
-
- });
-
- scope.$watch(numberExp, function ngPluralizeWatchAction(newVal) {
- var count = parseFloat(newVal);
- var countIsNaN = isNaN(count);
-
- if (!countIsNaN && !(count in whens)) {
- // If an explicit number rule such as 1, 2, 3... is defined, just use it.
- // Otherwise, check it against pluralization rules in $locale service.
- count = $locale.pluralCat(count - offset);
- }
-
- // If both `count` and `lastCount` are NaN, we don't need to re-register a watch.
- // In JS `NaN !== NaN`, so we have to exlicitly check.
- if ((count !== lastCount) && !(countIsNaN && isNaN(lastCount))) {
- watchRemover();
- watchRemover = scope.$watch(whensExpFns[count], updateElementText);
- lastCount = count;
- }
- });
-
- function updateElementText(newText) {
- element.text(newText || '');
- }
- }
- };
-}];
-
-/**
- * @ngdoc directive
- * @name ngRepeat
- *
- * @description
- * The `ngRepeat` directive instantiates a template once per item from a collection. Each template
- * instance gets its own scope, where the given loop variable is set to the current collection item,
- * and `$index` is set to the item index or key.
- *
- * Special properties are exposed on the local scope of each template instance, including:
- *
- * | Variable | Type | Details |
- * |-----------|-----------------|-----------------------------------------------------------------------------|
- * | `$index` | {@type number} | iterator offset of the repeated element (0..length-1) |
- * | `$first` | {@type boolean} | true if the repeated element is first in the iterator. |
- * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. |
- * | `$last` | {@type boolean} | true if the repeated element is last in the iterator. |
- * | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). |
- * | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). |
- *
- * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}.
- * This may be useful when, for instance, nesting ngRepeats.
- *
- * # Special repeat start and end points
- * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending
- * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.
- * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on)
- * up to and including the ending HTML tag where **ng-repeat-end** is placed.
- *
- * The example below makes use of this feature:
- * ```html
- * <header ng-repeat-start="item in items">
- * Header {{ item }}
- * </header>
- * <div class="body">
- * Body {{ item }}
- * </div>
- * <footer ng-repeat-end>
- * Footer {{ item }}
- * </footer>
- * ```
- *
- * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to:
- * ```html
- * <header>
- * Header A
- * </header>
- * <div class="body">
- * Body A
- * </div>
- * <footer>
- * Footer A
- * </footer>
- * <header>
- * Header B
- * </header>
- * <div class="body">
- * Body B
- * </div>
- * <footer>
- * Footer B
- * </footer>
- * ```
- *
- * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such
- * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**).
- *
- * @animations
- * **.enter** - when a new item is added to the list or when an item is revealed after a filter
- *
- * **.leave** - when an item is removed from the list or when an item is filtered out
- *
- * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered
- *
- * @element ANY
- * @scope
- * @priority 1000
- * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These
- * formats are currently supported:
- *
- * * `variable in expression` – where variable is the user defined loop variable and `expression`
- * is a scope expression giving the collection to enumerate.
- *
- * For example: `album in artist.albums`.
- *
- * * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers,
- * and `expression` is the scope expression giving the collection to enumerate.
- *
- * For example: `(name, age) in {'adam':10, 'amalie':12}`.
- *
- * * `variable in expression track by tracking_expression` – You can also provide an optional tracking function
- * which can be used to associate the objects in the collection with the DOM elements. If no tracking function
- * is specified the ng-repeat associates elements by identity in the collection. It is an error to have
- * more than one tracking function to resolve to the same key. (This would mean that two distinct objects are
- * mapped to the same DOM element, which is not possible.) Filters should be applied to the expression,
- * before specifying a tracking expression.
- *
- * For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements
- * will be associated by item identity in the array.
- *
- * For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique
- * `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements
- * with the corresponding item in the array by identity. Moving the same object in array would move the DOM
- * element in the same way in the DOM.
- *
- * For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this
- * case the object identity does not matter. Two objects are considered equivalent as long as their `id`
- * property is same.
- *
- * For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter
- * to items in conjunction with a tracking expression.
- *
- * * `variable in expression as alias_expression` – You can also provide an optional alias expression which will then store the
- * intermediate results of the repeater after the filters have been applied. Typically this is used to render a special message
- * when a filter is active on the repeater, but the filtered result set is empty.
- *
- * For example: `item in items | filter:x as results` will store the fragment of the repeated items as `results`, but only after
- * the items have been processed through the filter.
- *
- * @example
- * This example initializes the scope to a list of names and
- * then uses `ngRepeat` to display every person:
- <example module="ngAnimate" deps="angular-animate.js" animations="true">
- <file name="index.html">
- <div ng-init="friends = [
- {name:'John', age:25, gender:'boy'},
- {name:'Jessie', age:30, gender:'girl'},
- {name:'Johanna', age:28, gender:'girl'},
- {name:'Joy', age:15, gender:'girl'},
- {name:'Mary', age:28, gender:'girl'},
- {name:'Peter', age:95, gender:'boy'},
- {name:'Sebastian', age:50, gender:'boy'},
- {name:'Erika', age:27, gender:'girl'},
- {name:'Patrick', age:40, gender:'boy'},
- {name:'Samantha', age:60, gender:'girl'}
- ]">
- I have {{friends.length}} friends. They are:
- <input type="search" ng-model="q" placeholder="filter friends..." />
- <ul class="example-animate-container">
- <li class="animate-repeat" ng-repeat="friend in friends | filter:q as results">
- [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.
- </li>
- <li class="animate-repeat" ng-if="results.length == 0">
- <strong>No results found...</strong>
- </li>
- </ul>
- </div>
- </file>
- <file name="animations.css">
- .example-animate-container {
- background:white;
- border:1px solid black;
- list-style:none;
- margin:0;
- padding:0 10px;
- }
-
- .animate-repeat {
- line-height:40px;
- list-style:none;
- box-sizing:border-box;
- }
-
- .animate-repeat.ng-move,
- .animate-repeat.ng-enter,
- .animate-repeat.ng-leave {
- -webkit-transition:all linear 0.5s;
- transition:all linear 0.5s;
- }
-
- .animate-repeat.ng-leave.ng-leave-active,
- .animate-repeat.ng-move,
- .animate-repeat.ng-enter {
- opacity:0;
- max-height:0;
- }
-
- .animate-repeat.ng-leave,
- .animate-repeat.ng-move.ng-move-active,
- .animate-repeat.ng-enter.ng-enter-active {
- opacity:1;
- max-height:40px;
- }
- </file>
- <file name="protractor.js" type="protractor">
- var friends = element.all(by.repeater('friend in friends'));
-
- it('should render initial data set', function() {
- expect(friends.count()).toBe(10);
- expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.');
- expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.');
- expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.');
- expect(element(by.binding('friends.length')).getText())
- .toMatch("I have 10 friends. They are:");
- });
-
- it('should update repeater when filter predicate changes', function() {
- expect(friends.count()).toBe(10);
-
- element(by.model('q')).sendKeys('ma');
-
- expect(friends.count()).toBe(2);
- expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.');
- expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.');
- });
- </file>
- </example>
- */
-var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
- var NG_REMOVED = '$$NG_REMOVED';
- var ngRepeatMinErr = minErr('ngRepeat');
-
- var updateScope = function(scope, index, valueIdentifier, value, keyIdentifier, key, arrayLength) {
- // TODO(perf): generate setters to shave off ~40ms or 1-1.5%
- scope[valueIdentifier] = value;
- if (keyIdentifier) scope[keyIdentifier] = key;
- scope.$index = index;
- scope.$first = (index === 0);
- scope.$last = (index === (arrayLength - 1));
- scope.$middle = !(scope.$first || scope.$last);
- // jshint bitwise: false
- scope.$odd = !(scope.$even = (index&1) === 0);
- // jshint bitwise: true
- };
-
- var getBlockStart = function(block) {
- return block.clone[0];
- };
-
- var getBlockEnd = function(block) {
- return block.clone[block.clone.length - 1];
- };
-
-
- return {
- restrict: 'A',
- multiElement: true,
- transclude: 'element',
- priority: 1000,
- terminal: true,
- $$tlb: true,
- compile: function ngRepeatCompile($element, $attr) {
- var expression = $attr.ngRepeat;
- var ngRepeatEndComment = document.createComment(' end ngRepeat: ' + expression + ' ');
-
- var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
-
- if (!match) {
- throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.",
- expression);
- }
-
- var lhs = match[1];
- var rhs = match[2];
- var aliasAs = match[3];
- var trackByExp = match[4];
-
- match = lhs.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);
-
- if (!match) {
- throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.",
- lhs);
- }
- var valueIdentifier = match[3] || match[1];
- var keyIdentifier = match[2];
-
- if (aliasAs && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(aliasAs) ||
- /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent)$/.test(aliasAs))) {
- throw ngRepeatMinErr('badident', "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.",
- aliasAs);
- }
-
- var trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn;
- var hashFnLocals = {$id: hashKey};
-
- if (trackByExp) {
- trackByExpGetter = $parse(trackByExp);
- } else {
- trackByIdArrayFn = function(key, value) {
- return hashKey(value);
- };
- trackByIdObjFn = function(key) {
- return key;
- };
- }
-
- return function ngRepeatLink($scope, $element, $attr, ctrl, $transclude) {
-
- if (trackByExpGetter) {
- trackByIdExpFn = function(key, value, index) {
- // assign key, value, and $index to the locals so that they can be used in hash functions
- if (keyIdentifier) hashFnLocals[keyIdentifier] = key;
- hashFnLocals[valueIdentifier] = value;
- hashFnLocals.$index = index;
- return trackByExpGetter($scope, hashFnLocals);
- };
- }
-
- // Store a list of elements from previous run. This is a hash where key is the item from the
- // iterator, and the value is objects with following properties.
- // - scope: bound scope
- // - element: previous element.
- // - index: position
- //
- // We are using no-proto object so that we don't need to guard against inherited props via
- // hasOwnProperty.
- var lastBlockMap = createMap();
-
- //watch props
- $scope.$watchCollection(rhs, function ngRepeatAction(collection) {
- var index, length,
- previousNode = $element[0], // node that cloned nodes should be inserted after
- // initialized to the comment node anchor
- nextNode,
- // Same as lastBlockMap but it has the current state. It will become the
- // lastBlockMap on the next iteration.
- nextBlockMap = createMap(),
- collectionLength,
- key, value, // key/value of iteration
- trackById,
- trackByIdFn,
- collectionKeys,
- block, // last object information {scope, element, id}
- nextBlockOrder,
- elementsToRemove;
-
- if (aliasAs) {
- $scope[aliasAs] = collection;
- }
-
- if (isArrayLike(collection)) {
- collectionKeys = collection;
- trackByIdFn = trackByIdExpFn || trackByIdArrayFn;
- } else {
- trackByIdFn = trackByIdExpFn || trackByIdObjFn;
- // if object, extract keys, sort them and use to determine order of iteration over obj props
- collectionKeys = [];
- for (var itemKey in collection) {
- if (collection.hasOwnProperty(itemKey) && itemKey.charAt(0) != '$') {
- collectionKeys.push(itemKey);
- }
- }
- collectionKeys.sort();
- }
-
- collectionLength = collectionKeys.length;
- nextBlockOrder = new Array(collectionLength);
-
- // locate existing items
- for (index = 0; index < collectionLength; index++) {
- key = (collection === collectionKeys) ? index : collectionKeys[index];
- value = collection[key];
- trackById = trackByIdFn(key, value, index);
- if (lastBlockMap[trackById]) {
- // found previously seen block
- block = lastBlockMap[trackById];
- delete lastBlockMap[trackById];
- nextBlockMap[trackById] = block;
- nextBlockOrder[index] = block;
- } else if (nextBlockMap[trackById]) {
- // if collision detected. restore lastBlockMap and throw an error
- forEach(nextBlockOrder, function(block) {
- if (block && block.scope) lastBlockMap[block.id] = block;
- });
- throw ngRepeatMinErr('dupes',
- "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}",
- expression, trackById, value);
- } else {
- // new never before seen block
- nextBlockOrder[index] = {id: trackById, scope: undefined, clone: undefined};
- nextBlockMap[trackById] = true;
- }
- }
-
- // remove leftover items
- for (var blockKey in lastBlockMap) {
- block = lastBlockMap[blockKey];
- elementsToRemove = getBlockNodes(block.clone);
- $animate.leave(elementsToRemove);
- if (elementsToRemove[0].parentNode) {
- // if the element was not removed yet because of pending animation, mark it as deleted
- // so that we can ignore it later
- for (index = 0, length = elementsToRemove.length; index < length; index++) {
- elementsToRemove[index][NG_REMOVED] = true;
- }
- }
- block.scope.$destroy();
- }
-
- // we are not using forEach for perf reasons (trying to avoid #call)
- for (index = 0; index < collectionLength; index++) {
- key = (collection === collectionKeys) ? index : collectionKeys[index];
- value = collection[key];
- block = nextBlockOrder[index];
-
- if (block.scope) {
- // if we have already seen this object, then we need to reuse the
- // associated scope/element
-
- nextNode = previousNode;
-
- // skip nodes that are already pending removal via leave animation
- do {
- nextNode = nextNode.nextSibling;
- } while (nextNode && nextNode[NG_REMOVED]);
-
- if (getBlockStart(block) != nextNode) {
- // existing item which got moved
- $animate.move(getBlockNodes(block.clone), null, jqLite(previousNode));
- }
- previousNode = getBlockEnd(block);
- updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);
- } else {
- // new item which we don't know about
- $transclude(function ngRepeatTransclude(clone, scope) {
- block.scope = scope;
- // http://jsperf.com/clone-vs-createcomment
- var endNode = ngRepeatEndComment.cloneNode(false);
- clone[clone.length++] = endNode;
-
- // TODO(perf): support naked previousNode in `enter` to avoid creation of jqLite wrapper?
- $animate.enter(clone, null, jqLite(previousNode));
- previousNode = endNode;
- // Note: We only need the first/last node of the cloned nodes.
- // However, we need to keep the reference to the jqlite wrapper as it might be changed later
- // by a directive with templateUrl when its template arrives.
- block.clone = clone;
- nextBlockMap[block.id] = block;
- updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);
- });
- }
- }
- lastBlockMap = nextBlockMap;
- });
- };
- }
- };
-}];
-
-var NG_HIDE_CLASS = 'ng-hide';
-var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';
-/**
- * @ngdoc directive
- * @name ngShow
- *
- * @description
- * The `ngShow` directive shows or hides the given HTML element based on the expression
- * provided to the `ngShow` attribute. The element is shown or hidden by removing or adding
- * the `.ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined
- * in AngularJS and sets the display style to none (using an !important flag).
- * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
- *
- * ```html
- * <!-- when $scope.myValue is truthy (element is visible) -->
- * <div ng-show="myValue"></div>
- *
- * <!-- when $scope.myValue is falsy (element is hidden) -->
- * <div ng-show="myValue" class="ng-hide"></div>
- * ```
- *
- * When the `ngShow` expression evaluates to a falsy value then the `.ng-hide` CSS class is added to the class
- * attribute on the element causing it to become hidden. When truthy, the `.ng-hide` CSS class is removed
- * from the element causing the element not to appear hidden.
- *
- * ## Why is !important used?
- *
- * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector
- * can be easily overridden by heavier selectors. For example, something as simple
- * as changing the display style on a HTML list item would make hidden elements appear visible.
- * This also becomes a bigger issue when dealing with CSS frameworks.
- *
- * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector
- * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the
- * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.
- *
- * ### Overriding `.ng-hide`
- *
- * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change
- * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
- * class in CSS:
- *
- * ```css
- * .ng-hide {
- * /&#42; this is just another form of hiding an element &#42;/
- * display: block!important;
- * position: absolute;
- * top: -9999px;
- * left: -9999px;
- * }
- * ```
- *
- * By default you don't need to override in CSS anything and the animations will work around the display style.
- *
- * ## A note about animations with `ngShow`
- *
- * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression
- * is true and false. This system works like the animation system present with ngClass except that
- * you must also include the !important flag to override the display property
- * so that you can perform an animation when the element is hidden during the time of the animation.
- *
- * ```css
- * //
- * //a working example can be found at the bottom of this page
- * //
- * .my-element.ng-hide-add, .my-element.ng-hide-remove {
- * /&#42; this is required as of 1.3x to properly
- * apply all styling in a show/hide animation &#42;/
- * transition: 0s linear all;
- * }
- *
- * .my-element.ng-hide-add-active,
- * .my-element.ng-hide-remove-active {
- * /&#42; the transition is defined in the active class &#42;/
- * transition: 1s linear all;
- * }
- *
- * .my-element.ng-hide-add { ... }
- * .my-element.ng-hide-add.ng-hide-add-active { ... }
- * .my-element.ng-hide-remove { ... }
- * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
- * ```
- *
- * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display
- * property to block during animation states--ngAnimate will handle the style toggling automatically for you.
- *
- * @animations
- * addClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a truthy value and the just before contents are set to visible
- * removeClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden
- *
- * @element ANY
- * @param {expression} ngShow If the {@link guide/expression expression} is truthy
- * then the element is shown or hidden respectively.
- *
- * @example
- <example module="ngAnimate" deps="angular-animate.js" animations="true">
- <file name="index.html">
- Click me: <input type="checkbox" ng-model="checked"><br/>
- <div>
- Show:
- <div class="check-element animate-show" ng-show="checked">
- <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked.
- </div>
- </div>
- <div>
- Hide:
- <div class="check-element animate-show" ng-hide="checked">
- <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked.
- </div>
- </div>
- </file>
- <file name="glyphicons.css">
- @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);
- </file>
- <file name="animations.css">
- .animate-show {
- line-height: 20px;
- opacity: 1;
- padding: 10px;
- border: 1px solid black;
- background: white;
- }
-
- .animate-show.ng-hide-add.ng-hide-add-active,
- .animate-show.ng-hide-remove.ng-hide-remove-active {
- -webkit-transition: all linear 0.5s;
- transition: all linear 0.5s;
- }
-
- .animate-show.ng-hide {
- line-height: 0;
- opacity: 0;
- padding: 0 10px;
- }
-
- .check-element {
- padding: 10px;
- border: 1px solid black;
- background: white;
- }
- </file>
- <file name="protractor.js" type="protractor">
- var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));
- var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));
-
- it('should check ng-show / ng-hide', function() {
- expect(thumbsUp.isDisplayed()).toBeFalsy();
- expect(thumbsDown.isDisplayed()).toBeTruthy();
-
- element(by.model('checked')).click();
-
- expect(thumbsUp.isDisplayed()).toBeTruthy();
- expect(thumbsDown.isDisplayed()).toBeFalsy();
- });
- </file>
- </example>
- */
-var ngShowDirective = ['$animate', function($animate) {
- return {
- restrict: 'A',
- multiElement: true,
- link: function(scope, element, attr) {
- scope.$watch(attr.ngShow, function ngShowWatchAction(value) {
- // we're adding a temporary, animation-specific class for ng-hide since this way
- // we can control when the element is actually displayed on screen without having
- // to have a global/greedy CSS selector that breaks when other animations are run.
- // Read: https://github.com/angular/angular.js/issues/9103#issuecomment-58335845
- $animate[value ? 'removeClass' : 'addClass'](element, NG_HIDE_CLASS, {
- tempClasses: NG_HIDE_IN_PROGRESS_CLASS
- });
- });
- }
- };
-}];
-
-
-/**
- * @ngdoc directive
- * @name ngHide
- *
- * @description
- * The `ngHide` directive shows or hides the given HTML element based on the expression
- * provided to the `ngHide` attribute. The element is shown or hidden by removing or adding
- * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined
- * in AngularJS and sets the display style to none (using an !important flag).
- * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
- *
- * ```html
- * <!-- when $scope.myValue is truthy (element is hidden) -->
- * <div ng-hide="myValue" class="ng-hide"></div>
- *
- * <!-- when $scope.myValue is falsy (element is visible) -->
- * <div ng-hide="myValue"></div>
- * ```
- *
- * When the `ngHide` expression evaluates to a truthy value then the `.ng-hide` CSS class is added to the class
- * attribute on the element causing it to become hidden. When falsy, the `.ng-hide` CSS class is removed
- * from the element causing the element not to appear hidden.
- *
- * ## Why is !important used?
- *
- * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector
- * can be easily overridden by heavier selectors. For example, something as simple
- * as changing the display style on a HTML list item would make hidden elements appear visible.
- * This also becomes a bigger issue when dealing with CSS frameworks.
- *
- * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector
- * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the
- * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.
- *
- * ### Overriding `.ng-hide`
- *
- * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change
- * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
- * class in CSS:
- *
- * ```css
- * .ng-hide {
- * /&#42; this is just another form of hiding an element &#42;/
- * display: block!important;
- * position: absolute;
- * top: -9999px;
- * left: -9999px;
- * }
- * ```
- *
- * By default you don't need to override in CSS anything and the animations will work around the display style.
- *
- * ## A note about animations with `ngHide`
- *
- * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression
- * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide`
- * CSS class is added and removed for you instead of your own CSS class.
- *
- * ```css
- * //
- * //a working example can be found at the bottom of this page
- * //
- * .my-element.ng-hide-add, .my-element.ng-hide-remove {
- * transition: 0.5s linear all;
- * }
- *
- * .my-element.ng-hide-add { ... }
- * .my-element.ng-hide-add.ng-hide-add-active { ... }
- * .my-element.ng-hide-remove { ... }
- * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
- * ```
- *
- * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display
- * property to block during animation states--ngAnimate will handle the style toggling automatically for you.
- *
- * @animations
- * removeClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden
- * addClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a non truthy value and just before the contents are set to visible
- *
- * @element ANY
- * @param {expression} ngHide If the {@link guide/expression expression} is truthy then
- * the element is shown or hidden respectively.
- *
- * @example
- <example module="ngAnimate" deps="angular-animate.js" animations="true">
- <file name="index.html">
- Click me: <input type="checkbox" ng-model="checked"><br/>
- <div>
- Show:
- <div class="check-element animate-hide" ng-show="checked">
- <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked.
- </div>
- </div>
- <div>
- Hide:
- <div class="check-element animate-hide" ng-hide="checked">
- <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked.
- </div>
- </div>
- </file>
- <file name="glyphicons.css">
- @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);
- </file>
- <file name="animations.css">
- .animate-hide {
- -webkit-transition: all linear 0.5s;
- transition: all linear 0.5s;
- line-height: 20px;
- opacity: 1;
- padding: 10px;
- border: 1px solid black;
- background: white;
- }
-
- .animate-hide.ng-hide {
- line-height: 0;
- opacity: 0;
- padding: 0 10px;
- }
-
- .check-element {
- padding: 10px;
- border: 1px solid black;
- background: white;
- }
- </file>
- <file name="protractor.js" type="protractor">
- var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));
- var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));
-
- it('should check ng-show / ng-hide', function() {
- expect(thumbsUp.isDisplayed()).toBeFalsy();
- expect(thumbsDown.isDisplayed()).toBeTruthy();
-
- element(by.model('checked')).click();
-
- expect(thumbsUp.isDisplayed()).toBeTruthy();
- expect(thumbsDown.isDisplayed()).toBeFalsy();
- });
- </file>
- </example>
- */
-var ngHideDirective = ['$animate', function($animate) {
- return {
- restrict: 'A',
- multiElement: true,
- link: function(scope, element, attr) {
- scope.$watch(attr.ngHide, function ngHideWatchAction(value) {
- // The comment inside of the ngShowDirective explains why we add and
- // remove a temporary class for the show/hide animation
- $animate[value ? 'addClass' : 'removeClass'](element,NG_HIDE_CLASS, {
- tempClasses: NG_HIDE_IN_PROGRESS_CLASS
- });
- });
- }
- };
-}];
-
-/**
- * @ngdoc directive
- * @name ngStyle
- * @restrict AC
- *
- * @description
- * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally.
- *
- * @element ANY
- * @param {expression} ngStyle
- *
- * {@link guide/expression Expression} which evals to an
- * object whose keys are CSS style names and values are corresponding values for those CSS
- * keys.
- *
- * Since some CSS style names are not valid keys for an object, they must be quoted.
- * See the 'background-color' style in the example below.
- *
- * @example
- <example>
- <file name="index.html">
- <input type="button" value="set color" ng-click="myStyle={color:'red'}">
- <input type="button" value="set background" ng-click="myStyle={'background-color':'blue'}">
- <input type="button" value="clear" ng-click="myStyle={}">
- <br/>
- <span ng-style="myStyle">Sample Text</span>
- <pre>myStyle={{myStyle}}</pre>
- </file>
- <file name="style.css">
- span {
- color: black;
- }
- </file>
- <file name="protractor.js" type="protractor">
- var colorSpan = element(by.css('span'));
-
- it('should check ng-style', function() {
- expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');
- element(by.css('input[value=\'set color\']')).click();
- expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)');
- element(by.css('input[value=clear]')).click();
- expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');
- });
- </file>
- </example>
- */
-var ngStyleDirective = ngDirective(function(scope, element, attr) {
- scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) {
- if (oldStyles && (newStyles !== oldStyles)) {
- forEach(oldStyles, function(val, style) { element.css(style, '');});
- }
- if (newStyles) element.css(newStyles);
- }, true);
-});
-
-/**
- * @ngdoc directive
- * @name ngSwitch
- * @restrict EA
- *
- * @description
- * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression.
- * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location
- * as specified in the template.
- *
- * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it
- * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element
- * matches the value obtained from the evaluated expression. In other words, you define a container element
- * (where you place the directive), place an expression on the **`on="..."` attribute**
- * (or the **`ng-switch="..."` attribute**), define any inner elements inside of the directive and place
- * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on
- * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default
- * attribute is displayed.
- *
- * <div class="alert alert-info">
- * Be aware that the attribute values to match against cannot be expressions. They are interpreted
- * as literal string values to match against.
- * For example, **`ng-switch-when="someVal"`** will match against the string `"someVal"` not against the
- * value of the expression `$scope.someVal`.
- * </div>
-
- * @animations
- * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container
- * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM
- *
- * @usage
- *
- * ```
- * <ANY ng-switch="expression">
- * <ANY ng-switch-when="matchValue1">...</ANY>
- * <ANY ng-switch-when="matchValue2">...</ANY>
- * <ANY ng-switch-default>...</ANY>
- * </ANY>
- * ```
- *
- *
- * @scope
- * @priority 1200
- * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>.
- * On child elements add:
- *
- * * `ngSwitchWhen`: the case statement to match against. If match then this
- * case will be displayed. If the same match appears multiple times, all the
- * elements will be displayed.
- * * `ngSwitchDefault`: the default case when no other case match. If there
- * are multiple default cases, all of them will be displayed when no other
- * case match.
- *
- *
- * @example
- <example module="switchExample" deps="angular-animate.js" animations="true">
- <file name="index.html">
- <div ng-controller="ExampleController">
- <select ng-model="selection" ng-options="item for item in items">
- </select>
- <tt>selection={{selection}}</tt>
- <hr/>
- <div class="animate-switch-container"
- ng-switch on="selection">
- <div class="animate-switch" ng-switch-when="settings">Settings Div</div>
- <div class="animate-switch" ng-switch-when="home">Home Span</div>
- <div class="animate-switch" ng-switch-default>default</div>
- </div>
- </div>
- </file>
- <file name="script.js">
- angular.module('switchExample', ['ngAnimate'])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.items = ['settings', 'home', 'other'];
- $scope.selection = $scope.items[0];
- }]);
- </file>
- <file name="animations.css">
- .animate-switch-container {
- position:relative;
- background:white;
- border:1px solid black;
- height:40px;
- overflow:hidden;
- }
-
- .animate-switch {
- padding:10px;
- }
-
- .animate-switch.ng-animate {
- -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
- transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
-
- position:absolute;
- top:0;
- left:0;
- right:0;
- bottom:0;
- }
-
- .animate-switch.ng-leave.ng-leave-active,
- .animate-switch.ng-enter {
- top:-50px;
- }
- .animate-switch.ng-leave,
- .animate-switch.ng-enter.ng-enter-active {
- top:0;
- }
- </file>
- <file name="protractor.js" type="protractor">
- var switchElem = element(by.css('[ng-switch]'));
- var select = element(by.model('selection'));
-
- it('should start in settings', function() {
- expect(switchElem.getText()).toMatch(/Settings Div/);
- });
- it('should change to home', function() {
- select.all(by.css('option')).get(1).click();
- expect(switchElem.getText()).toMatch(/Home Span/);
- });
- it('should select default', function() {
- select.all(by.css('option')).get(2).click();
- expect(switchElem.getText()).toMatch(/default/);
- });
- </file>
- </example>
- */
-var ngSwitchDirective = ['$animate', function($animate) {
- return {
- restrict: 'EA',
- require: 'ngSwitch',
-
- // asks for $scope to fool the BC controller module
- controller: ['$scope', function ngSwitchController() {
- this.cases = {};
- }],
- link: function(scope, element, attr, ngSwitchController) {
- var watchExpr = attr.ngSwitch || attr.on,
- selectedTranscludes = [],
- selectedElements = [],
- previousLeaveAnimations = [],
- selectedScopes = [];
-
- var spliceFactory = function(array, index) {
- return function() { array.splice(index, 1); };
- };
-
- scope.$watch(watchExpr, function ngSwitchWatchAction(value) {
- var i, ii;
- for (i = 0, ii = previousLeaveAnimations.length; i < ii; ++i) {
- $animate.cancel(previousLeaveAnimations[i]);
- }
- previousLeaveAnimations.length = 0;
-
- for (i = 0, ii = selectedScopes.length; i < ii; ++i) {
- var selected = getBlockNodes(selectedElements[i].clone);
- selectedScopes[i].$destroy();
- var promise = previousLeaveAnimations[i] = $animate.leave(selected);
- promise.then(spliceFactory(previousLeaveAnimations, i));
- }
-
- selectedElements.length = 0;
- selectedScopes.length = 0;
-
- if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) {
- forEach(selectedTranscludes, function(selectedTransclude) {
- selectedTransclude.transclude(function(caseElement, selectedScope) {
- selectedScopes.push(selectedScope);
- var anchor = selectedTransclude.element;
- caseElement[caseElement.length++] = document.createComment(' end ngSwitchWhen: ');
- var block = { clone: caseElement };
-
- selectedElements.push(block);
- $animate.enter(caseElement, anchor.parent(), anchor);
- });
- });
- }
- });
- }
- };
-}];
-
-var ngSwitchWhenDirective = ngDirective({
- transclude: 'element',
- priority: 1200,
- require: '^ngSwitch',
- multiElement: true,
- link: function(scope, element, attrs, ctrl, $transclude) {
- ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);
- ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });
- }
-});
-
-var ngSwitchDefaultDirective = ngDirective({
- transclude: 'element',
- priority: 1200,
- require: '^ngSwitch',
- multiElement: true,
- link: function(scope, element, attr, ctrl, $transclude) {
- ctrl.cases['?'] = (ctrl.cases['?'] || []);
- ctrl.cases['?'].push({ transclude: $transclude, element: element });
- }
-});
-
-/**
- * @ngdoc directive
- * @name ngTransclude
- * @restrict EAC
- *
- * @description
- * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.
- *
- * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.
- *
- * @element ANY
- *
- * @example
- <example module="transcludeExample">
- <file name="index.html">
- <script>
- angular.module('transcludeExample', [])
- .directive('pane', function(){
- return {
- restrict: 'E',
- transclude: true,
- scope: { title:'@' },
- template: '<div style="border: 1px solid black;">' +
- '<div style="background-color: gray">{{title}}</div>' +
- '<ng-transclude></ng-transclude>' +
- '</div>'
- };
- })
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.title = 'Lorem Ipsum';
- $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';
- }]);
- </script>
- <div ng-controller="ExampleController">
- <input ng-model="title"><br>
- <textarea ng-model="text"></textarea> <br/>
- <pane title="{{title}}">{{text}}</pane>
- </div>
- </file>
- <file name="protractor.js" type="protractor">
- it('should have transcluded', function() {
- var titleElement = element(by.model('title'));
- titleElement.clear();
- titleElement.sendKeys('TITLE');
- var textElement = element(by.model('text'));
- textElement.clear();
- textElement.sendKeys('TEXT');
- expect(element(by.binding('title')).getText()).toEqual('TITLE');
- expect(element(by.binding('text')).getText()).toEqual('TEXT');
- });
- </file>
- </example>
- *
- */
-var ngTranscludeDirective = ngDirective({
- restrict: 'EAC',
- link: function($scope, $element, $attrs, controller, $transclude) {
- if (!$transclude) {
- throw minErr('ngTransclude')('orphan',
- 'Illegal use of ngTransclude directive in the template! ' +
- 'No parent directive that requires a transclusion found. ' +
- 'Element: {0}',
- startingTag($element));
- }
-
- $transclude(function(clone) {
- $element.empty();
- $element.append(clone);
- });
- }
-});
-
-/**
- * @ngdoc directive
- * @name script
- * @restrict E
- *
- * @description
- * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the
- * template can be used by {@link ng.directive:ngInclude `ngInclude`},
- * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the
- * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be
- * assigned through the element's `id`, which can then be used as a directive's `templateUrl`.
- *
- * @param {string} type Must be set to `'text/ng-template'`.
- * @param {string} id Cache name of the template.
- *
- * @example
- <example>
- <file name="index.html">
- <script type="text/ng-template" id="/tpl.html">
- Content of the template.
- </script>
-
- <a ng-click="currentTpl='/tpl.html'" id="tpl-link">Load inlined template</a>
- <div id="tpl-content" ng-include src="currentTpl"></div>
- </file>
- <file name="protractor.js" type="protractor">
- it('should load template defined inside script tag', function() {
- element(by.css('#tpl-link')).click();
- expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/);
- });
- </file>
- </example>
- */
-var scriptDirective = ['$templateCache', function($templateCache) {
- return {
- restrict: 'E',
- terminal: true,
- compile: function(element, attr) {
- if (attr.type == 'text/ng-template') {
- var templateUrl = attr.id,
- text = element[0].text;
-
- $templateCache.put(templateUrl, text);
- }
- }
- };
-}];
-
-var ngOptionsMinErr = minErr('ngOptions');
-/**
- * @ngdoc directive
- * @name select
- * @restrict E
- *
- * @description
- * HTML `SELECT` element with angular data-binding.
- *
- * # `ngOptions`
- *
- * The `ngOptions` attribute can be used to dynamically generate a list of `<option>`
- * elements for the `<select>` element using the array or object obtained by evaluating the
- * `ngOptions` comprehension_expression.
- *
- * In many cases, `ngRepeat` can be used on `<option>` elements instead of `ngOptions` to achieve a
- * similar result. However, the `ngOptions` provides some benefits such as reducing memory and
- * increasing speed by not creating a new scope for each repeated instance, as well as providing
- * more flexibility in how the `select`'s model is assigned via `select as`. `ngOptions` should be
- * used when the `select` model needs to be bound to a non-string value. This is because an option
- * element can only be bound to string values at present.
- *
- * When an item in the `<select>` menu is selected, the array element or object property
- * represented by the selected option will be bound to the model identified by the `ngModel`
- * directive.
- *
- * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can
- * be nested into the `<select>` element. This element will then represent the `null` or "not selected"
- * option. See example below for demonstration.
- *
- * <div class="alert alert-warning">
- * **Note:** `ngModel` compares by reference, not value. This is important when binding to an
- * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/).
- * </div>
- *
- * ## `select as`
- *
- * Using `select as` will bind the result of the `select as` expression to the model, but
- * the value of the `<select>` and `<option>` html elements will be either the index (for array data sources)
- * or property name (for object data sources) of the value within the collection. If a `track by` expression
- * is used, the result of that expression will be set as the value of the `option` and `select` elements.
- *
- * ### `select as` with `trackexpr`
- *
- * Using `select as` together with `trackexpr` is not recommended. Reasoning:
- *
- * - Example: &lt;select ng-options="item.subItem as item.label for item in values track by item.id" ng-model="selected"&gt;
- * values: [{id: 1, label: 'aLabel', subItem: {name: 'aSubItem'}}, {id: 2, label: 'bLabel', subItem: {name: 'bSubItem'}}],
- * $scope.selected = {name: 'aSubItem'};
- * - track by is always applied to `value`, with the purpose of preserving the selection,
- * (to `item` in this case)
- * - to calculate whether an item is selected we do the following:
- * 1. apply `track by` to the values in the array, e.g.
- * In the example: [1,2]
- * 2. apply `track by` to the already selected value in `ngModel`:
- * In the example: this is not possible, as `track by` refers to `item.id`, but the selected
- * value from `ngModel` is `{name: aSubItem}`.
- *
- * @param {string} ngModel Assignable angular expression to data-bind to.
- * @param {string=} name Property name of the form under which the control is published.
- * @param {string=} required The control is considered valid only if value is entered.
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
- * `required` when you want to data-bind to the `required` attribute.
- * @param {comprehension_expression=} ngOptions in one of the following forms:
- *
- * * for array data sources:
- * * `label` **`for`** `value` **`in`** `array`
- * * `select` **`as`** `label` **`for`** `value` **`in`** `array`
- * * `label` **`group by`** `group` **`for`** `value` **`in`** `array`
- * * `select` **`as`** `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`
- * * for object data sources:
- * * `label` **`for (`**`key` **`,`** `value`**`) in`** `object`
- * * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object`
- * * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object`
- * * `select` **`as`** `label` **`group by`** `group`
- * **`for` `(`**`key`**`,`** `value`**`) in`** `object`
- *
- * Where:
- *
- * * `array` / `object`: an expression which evaluates to an array / object to iterate over.
- * * `value`: local variable which will refer to each item in the `array` or each property value
- * of `object` during iteration.
- * * `key`: local variable which will refer to a property name in `object` during iteration.
- * * `label`: The result of this expression will be the label for `<option>` element. The
- * `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`).
- * * `select`: The result of this expression will be bound to the model of the parent `<select>`
- * element. If not specified, `select` expression will default to `value`.
- * * `group`: The result of this expression will be used to group options using the `<optgroup>`
- * DOM element.
- * * `trackexpr`: Used when working with an array of objects. The result of this expression will be
- * used to identify the objects in the array. The `trackexpr` will most likely refer to the
- * `value` variable (e.g. `value.propertyName`). With this the selection is preserved
- * even when the options are recreated (e.g. reloaded from the server).
- *
- * @example
- <example module="selectExample">
- <file name="index.html">
- <script>
- angular.module('selectExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.colors = [
- {name:'black', shade:'dark'},
- {name:'white', shade:'light'},
- {name:'red', shade:'dark'},
- {name:'blue', shade:'dark'},
- {name:'yellow', shade:'light'}
- ];
- $scope.myColor = $scope.colors[2]; // red
- }]);
- </script>
- <div ng-controller="ExampleController">
- <ul>
- <li ng-repeat="color in colors">
- Name: <input ng-model="color.name">
- [<a href ng-click="colors.splice($index, 1)">X</a>]
- </li>
- <li>
- [<a href ng-click="colors.push({})">add</a>]
- </li>
- </ul>
- <hr/>
- Color (null not allowed):
- <select ng-model="myColor" ng-options="color.name for color in colors"></select><br>
-
- Color (null allowed):
- <span class="nullable">
- <select ng-model="myColor" ng-options="color.name for color in colors">
- <option value="">-- choose color --</option>
- </select>
- </span><br/>
-
- Color grouped by shade:
- <select ng-model="myColor" ng-options="color.name group by color.shade for color in colors">
- </select><br/>
-
-
- Select <a href ng-click="myColor = { name:'not in list', shade: 'other' }">bogus</a>.<br>
- <hr/>
- Currently selected: {{ {selected_color:myColor} }}
- <div style="border:solid 1px black; height:20px"
- ng-style="{'background-color':myColor.name}">
- </div>
- </div>
- </file>
- <file name="protractor.js" type="protractor">
- it('should check ng-options', function() {
- expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('red');
- element.all(by.model('myColor')).first().click();
- element.all(by.css('select[ng-model="myColor"] option')).first().click();
- expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('black');
- element(by.css('.nullable select[ng-model="myColor"]')).click();
- element.all(by.css('.nullable select[ng-model="myColor"] option')).first().click();
- expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('null');
- });
- </file>
- </example>
- */
-
-var ngOptionsDirective = valueFn({
- restrict: 'A',
- terminal: true
-});
-
-// jshint maxlen: false
-var selectDirective = ['$compile', '$parse', function($compile, $parse) {
- //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888
- var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
- nullModelCtrl = {$setViewValue: noop};
-// jshint maxlen: 100
-
- return {
- restrict: 'E',
- require: ['select', '?ngModel'],
- controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) {
- var self = this,
- optionsMap = {},
- ngModelCtrl = nullModelCtrl,
- nullOption,
- unknownOption;
-
-
- self.databound = $attrs.ngModel;
-
-
- self.init = function(ngModelCtrl_, nullOption_, unknownOption_) {
- ngModelCtrl = ngModelCtrl_;
- nullOption = nullOption_;
- unknownOption = unknownOption_;
- };
-
-
- self.addOption = function(value, element) {
- assertNotHasOwnProperty(value, '"option value"');
- optionsMap[value] = true;
-
- if (ngModelCtrl.$viewValue == value) {
- $element.val(value);
- if (unknownOption.parent()) unknownOption.remove();
- }
- // Workaround for https://code.google.com/p/chromium/issues/detail?id=381459
- // Adding an <option selected="selected"> element to a <select required="required"> should
- // automatically select the new element
- if (element && element[0].hasAttribute('selected')) {
- element[0].selected = true;
- }
- };
-
-
- self.removeOption = function(value) {
- if (this.hasOption(value)) {
- delete optionsMap[value];
- if (ngModelCtrl.$viewValue === value) {
- this.renderUnknownOption(value);
- }
- }
- };
-
-
- self.renderUnknownOption = function(val) {
- var unknownVal = '? ' + hashKey(val) + ' ?';
- unknownOption.val(unknownVal);
- $element.prepend(unknownOption);
- $element.val(unknownVal);
- unknownOption.prop('selected', true); // needed for IE
- };
-
-
- self.hasOption = function(value) {
- return optionsMap.hasOwnProperty(value);
- };
-
- $scope.$on('$destroy', function() {
- // disable unknown option so that we don't do work when the whole select is being destroyed
- self.renderUnknownOption = noop;
- });
- }],
-
- link: function(scope, element, attr, ctrls) {
- // if ngModel is not defined, we don't need to do anything
- if (!ctrls[1]) return;
-
- var selectCtrl = ctrls[0],
- ngModelCtrl = ctrls[1],
- multiple = attr.multiple,
- optionsExp = attr.ngOptions,
- nullOption = false, // if false, user will not be able to select it (used by ngOptions)
- emptyOption,
- renderScheduled = false,
- // we can't just jqLite('<option>') since jqLite is not smart enough
- // to create it in <select> and IE barfs otherwise.
- optionTemplate = jqLite(document.createElement('option')),
- optGroupTemplate =jqLite(document.createElement('optgroup')),
- unknownOption = optionTemplate.clone();
-
- // find "null" option
- for (var i = 0, children = element.children(), ii = children.length; i < ii; i++) {
- if (children[i].value === '') {
- emptyOption = nullOption = children.eq(i);
- break;
- }
- }
-
- selectCtrl.init(ngModelCtrl, nullOption, unknownOption);
-
- // required validator
- if (multiple) {
- ngModelCtrl.$isEmpty = function(value) {
- return !value || value.length === 0;
- };
- }
-
- if (optionsExp) setupAsOptions(scope, element, ngModelCtrl);
- else if (multiple) setupAsMultiple(scope, element, ngModelCtrl);
- else setupAsSingle(scope, element, ngModelCtrl, selectCtrl);
-
-
- ////////////////////////////
-
-
-
- function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) {
- ngModelCtrl.$render = function() {
- var viewValue = ngModelCtrl.$viewValue;
-
- if (selectCtrl.hasOption(viewValue)) {
- if (unknownOption.parent()) unknownOption.remove();
- selectElement.val(viewValue);
- if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy
- } else {
- if (isUndefined(viewValue) && emptyOption) {
- selectElement.val('');
- } else {
- selectCtrl.renderUnknownOption(viewValue);
- }
- }
- };
-
- selectElement.on('change', function() {
- scope.$apply(function() {
- if (unknownOption.parent()) unknownOption.remove();
- ngModelCtrl.$setViewValue(selectElement.val());
- });
- });
- }
-
- function setupAsMultiple(scope, selectElement, ctrl) {
- var lastView;
- ctrl.$render = function() {
- var items = new HashMap(ctrl.$viewValue);
- forEach(selectElement.find('option'), function(option) {
- option.selected = isDefined(items.get(option.value));
- });
- };
-
- // we have to do it on each watch since ngModel watches reference, but
- // we need to work of an array, so we need to see if anything was inserted/removed
- scope.$watch(function selectMultipleWatch() {
- if (!equals(lastView, ctrl.$viewValue)) {
- lastView = shallowCopy(ctrl.$viewValue);
- ctrl.$render();
- }
- });
-
- selectElement.on('change', function() {
- scope.$apply(function() {
- var array = [];
- forEach(selectElement.find('option'), function(option) {
- if (option.selected) {
- array.push(option.value);
- }
- });
- ctrl.$setViewValue(array);
- });
- });
- }
-
- function setupAsOptions(scope, selectElement, ctrl) {
- var match;
-
- if (!(match = optionsExp.match(NG_OPTIONS_REGEXP))) {
- throw ngOptionsMinErr('iexp',
- "Expected expression in form of " +
- "'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" +
- " but got '{0}'. Element: {1}",
- optionsExp, startingTag(selectElement));
- }
-
- var displayFn = $parse(match[2] || match[1]),
- valueName = match[4] || match[6],
- selectAs = / as /.test(match[0]) && match[1],
- selectAsFn = selectAs ? $parse(selectAs) : null,
- keyName = match[5],
- groupByFn = $parse(match[3] || ''),
- valueFn = $parse(match[2] ? match[1] : valueName),
- valuesFn = $parse(match[7]),
- track = match[8],
- trackFn = track ? $parse(match[8]) : null,
- trackKeysCache = {},
- // This is an array of array of existing option groups in DOM.
- // We try to reuse these if possible
- // - optionGroupsCache[0] is the options with no option group
- // - optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element
- optionGroupsCache = [[{element: selectElement, label:''}]],
- //re-usable object to represent option's locals
- locals = {};
-
- if (nullOption) {
- // compile the element since there might be bindings in it
- $compile(nullOption)(scope);
-
- // remove the class, which is added automatically because we recompile the element and it
- // becomes the compilation root
- nullOption.removeClass('ng-scope');
-
- // we need to remove it before calling selectElement.empty() because otherwise IE will
- // remove the label from the element. wtf?
- nullOption.remove();
- }
-
- // clear contents, we'll add what's needed based on the model
- selectElement.empty();
-
- selectElement.on('change', selectionChanged);
-
- ctrl.$render = render;
-
- scope.$watchCollection(valuesFn, scheduleRendering);
- scope.$watchCollection(getLabels, scheduleRendering);
-
- if (multiple) {
- scope.$watchCollection(function() { return ctrl.$modelValue; }, scheduleRendering);
- }
-
- // ------------------------------------------------------------------ //
-
- function callExpression(exprFn, key, value) {
- locals[valueName] = value;
- if (keyName) locals[keyName] = key;
- return exprFn(scope, locals);
- }
-
- function selectionChanged() {
- scope.$apply(function() {
- var collection = valuesFn(scope) || [];
- var viewValue;
- if (multiple) {
- viewValue = [];
- forEach(selectElement.val(), function(selectedKey) {
- selectedKey = trackFn ? trackKeysCache[selectedKey] : selectedKey;
- viewValue.push(getViewValue(selectedKey, collection[selectedKey]));
- });
- } else {
- var selectedKey = trackFn ? trackKeysCache[selectElement.val()] : selectElement.val();
- viewValue = getViewValue(selectedKey, collection[selectedKey]);
- }
- ctrl.$setViewValue(viewValue);
- render();
- });
- }
-
- function getViewValue(key, value) {
- if (key === '?') {
- return undefined;
- } else if (key === '') {
- return null;
- } else {
- var viewValueFn = selectAsFn ? selectAsFn : valueFn;
- return callExpression(viewValueFn, key, value);
- }
- }
-
- function getLabels() {
- var values = valuesFn(scope);
- var toDisplay;
- if (values && isArray(values)) {
- toDisplay = new Array(values.length);
- for (var i = 0, ii = values.length; i < ii; i++) {
- toDisplay[i] = callExpression(displayFn, i, values[i]);
- }
- return toDisplay;
- } else if (values) {
- // TODO: Add a test for this case
- toDisplay = {};
- for (var prop in values) {
- if (values.hasOwnProperty(prop)) {
- toDisplay[prop] = callExpression(displayFn, prop, values[prop]);
- }
- }
- }
- return toDisplay;
- }
-
- function createIsSelectedFn(viewValue) {
- var selectedSet;
- if (multiple) {
- if (trackFn && isArray(viewValue)) {
-
- selectedSet = new HashMap([]);
- for (var trackIndex = 0; trackIndex < viewValue.length; trackIndex++) {
- // tracking by key
- selectedSet.put(callExpression(trackFn, null, viewValue[trackIndex]), true);
- }
- } else {
- selectedSet = new HashMap(viewValue);
- }
- } else if (trackFn) {
- viewValue = callExpression(trackFn, null, viewValue);
- }
-
- return function isSelected(key, value) {
- var compareValueFn;
- if (trackFn) {
- compareValueFn = trackFn;
- } else if (selectAsFn) {
- compareValueFn = selectAsFn;
- } else {
- compareValueFn = valueFn;
- }
-
- if (multiple) {
- return isDefined(selectedSet.remove(callExpression(compareValueFn, key, value)));
- } else {
- return viewValue === callExpression(compareValueFn, key, value);
- }
- };
- }
-
- function scheduleRendering() {
- if (!renderScheduled) {
- scope.$$postDigest(render);
- renderScheduled = true;
- }
- }
-
- /**
- * A new labelMap is created with each render.
- * This function is called for each existing option with added=false,
- * and each new option with added=true.
- * - Labels that are passed to this method twice,
- * (once with added=true and once with added=false) will end up with a value of 0, and
- * will cause no change to happen to the corresponding option.
- * - Labels that are passed to this method only once with added=false will end up with a
- * value of -1 and will eventually be passed to selectCtrl.removeOption()
- * - Labels that are passed to this method only once with added=true will end up with a
- * value of 1 and will eventually be passed to selectCtrl.addOption()
- */
- function updateLabelMap(labelMap, label, added) {
- labelMap[label] = labelMap[label] || 0;
- labelMap[label] += (added ? 1 : -1);
- }
-
- function render() {
- renderScheduled = false;
-
- // Temporary location for the option groups before we render them
- var optionGroups = {'':[]},
- optionGroupNames = [''],
- optionGroupName,
- optionGroup,
- option,
- existingParent, existingOptions, existingOption,
- viewValue = ctrl.$viewValue,
- values = valuesFn(scope) || [],
- keys = keyName ? sortedKeys(values) : values,
- key,
- value,
- groupLength, length,
- groupIndex, index,
- labelMap = {},
- selected,
- isSelected = createIsSelectedFn(viewValue),
- anySelected = false,
- lastElement,
- element,
- label,
- optionId;
-
- trackKeysCache = {};
-
- // We now build up the list of options we need (we merge later)
- for (index = 0; length = keys.length, index < length; index++) {
- key = index;
- if (keyName) {
- key = keys[index];
- if (key.charAt(0) === '$') continue;
- }
- value = values[key];
-
- optionGroupName = callExpression(groupByFn, key, value) || '';
- if (!(optionGroup = optionGroups[optionGroupName])) {
- optionGroup = optionGroups[optionGroupName] = [];
- optionGroupNames.push(optionGroupName);
- }
-
- selected = isSelected(key, value);
- anySelected = anySelected || selected;
-
- label = callExpression(displayFn, key, value); // what will be seen by the user
-
- // doing displayFn(scope, locals) || '' overwrites zero values
- label = isDefined(label) ? label : '';
- optionId = trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index);
- if (trackFn) {
- trackKeysCache[optionId] = key;
- }
-
- optionGroup.push({
- // either the index into array or key from object
- id: optionId,
- label: label,
- selected: selected // determine if we should be selected
- });
- }
- if (!multiple) {
- if (nullOption || viewValue === null) {
- // insert null option if we have a placeholder, or the model is null
- optionGroups[''].unshift({id:'', label:'', selected:!anySelected});
- } else if (!anySelected) {
- // option could not be found, we have to insert the undefined item
- optionGroups[''].unshift({id:'?', label:'', selected:true});
- }
- }
-
- // Now we need to update the list of DOM nodes to match the optionGroups we computed above
- for (groupIndex = 0, groupLength = optionGroupNames.length;
- groupIndex < groupLength;
- groupIndex++) {
- // current option group name or '' if no group
- optionGroupName = optionGroupNames[groupIndex];
-
- // list of options for that group. (first item has the parent)
- optionGroup = optionGroups[optionGroupName];
-
- if (optionGroupsCache.length <= groupIndex) {
- // we need to grow the optionGroups
- existingParent = {
- element: optGroupTemplate.clone().attr('label', optionGroupName),
- label: optionGroup.label
- };
- existingOptions = [existingParent];
- optionGroupsCache.push(existingOptions);
- selectElement.append(existingParent.element);
- } else {
- existingOptions = optionGroupsCache[groupIndex];
- existingParent = existingOptions[0]; // either SELECT (no group) or OPTGROUP element
-
- // update the OPTGROUP label if not the same.
- if (existingParent.label != optionGroupName) {
- existingParent.element.attr('label', existingParent.label = optionGroupName);
- }
- }
-
- lastElement = null; // start at the beginning
- for (index = 0, length = optionGroup.length; index < length; index++) {
- option = optionGroup[index];
- if ((existingOption = existingOptions[index + 1])) {
- // reuse elements
- lastElement = existingOption.element;
- if (existingOption.label !== option.label) {
- updateLabelMap(labelMap, existingOption.label, false);
- updateLabelMap(labelMap, option.label, true);
- lastElement.text(existingOption.label = option.label);
- lastElement.prop('label', existingOption.label);
- }
- if (existingOption.id !== option.id) {
- lastElement.val(existingOption.id = option.id);
- }
- // lastElement.prop('selected') provided by jQuery has side-effects
- if (lastElement[0].selected !== option.selected) {
- lastElement.prop('selected', (existingOption.selected = option.selected));
- if (msie) {
- // See #7692
- // The selected item wouldn't visually update on IE without this.
- // Tested on Win7: IE9, IE10 and IE11. Future IEs should be tested as well
- lastElement.prop('selected', existingOption.selected);
- }
- }
- } else {
- // grow elements
-
- // if it's a null option
- if (option.id === '' && nullOption) {
- // put back the pre-compiled element
- element = nullOption;
- } else {
- // jQuery(v1.4.2) Bug: We should be able to chain the method calls, but
- // in this version of jQuery on some browser the .text() returns a string
- // rather then the element.
- (element = optionTemplate.clone())
- .val(option.id)
- .prop('selected', option.selected)
- .attr('selected', option.selected)
- .prop('label', option.label)
- .text(option.label);
- }
-
- existingOptions.push(existingOption = {
- element: element,
- label: option.label,
- id: option.id,
- selected: option.selected
- });
- updateLabelMap(labelMap, option.label, true);
- if (lastElement) {
- lastElement.after(element);
- } else {
- existingParent.element.append(element);
- }
- lastElement = element;
- }
- }
- // remove any excessive OPTIONs in a group
- index++; // increment since the existingOptions[0] is parent element not OPTION
- while (existingOptions.length > index) {
- option = existingOptions.pop();
- updateLabelMap(labelMap, option.label, false);
- option.element.remove();
- }
- }
- // remove any excessive OPTGROUPs from select
- while (optionGroupsCache.length > groupIndex) {
- // remove all the labels in the option group
- optionGroup = optionGroupsCache.pop();
- for (index = 1; index < optionGroup.length; ++index) {
- updateLabelMap(labelMap, optionGroup[index].label, false);
- }
- optionGroup[0].element.remove();
- }
- forEach(labelMap, function(count, label) {
- if (count > 0) {
- selectCtrl.addOption(label);
- } else if (count < 0) {
- selectCtrl.removeOption(label);
- }
- });
- }
- }
- }
- };
-}];
-
-var optionDirective = ['$interpolate', function($interpolate) {
- var nullSelectCtrl = {
- addOption: noop,
- removeOption: noop
- };
-
- return {
- restrict: 'E',
- priority: 100,
- compile: function(element, attr) {
- if (isUndefined(attr.value)) {
- var interpolateFn = $interpolate(element.text(), true);
- if (!interpolateFn) {
- attr.$set('value', element.text());
- }
- }
-
- return function(scope, element, attr) {
- var selectCtrlName = '$selectController',
- parent = element.parent(),
- selectCtrl = parent.data(selectCtrlName) ||
- parent.parent().data(selectCtrlName); // in case we are in optgroup
-
- if (!selectCtrl || !selectCtrl.databound) {
- selectCtrl = nullSelectCtrl;
- }
-
- if (interpolateFn) {
- scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) {
- attr.$set('value', newVal);
- if (oldVal !== newVal) {
- selectCtrl.removeOption(oldVal);
- }
- selectCtrl.addOption(newVal, element);
- });
- } else {
- selectCtrl.addOption(attr.value, element);
- }
-
- element.on('$destroy', function() {
- selectCtrl.removeOption(attr.value);
- });
- };
- }
- };
-}];
-
-var styleDirective = valueFn({
- restrict: 'E',
- terminal: false
-});
-
- if (window.angular.bootstrap) {
- //AngularJS is already loaded, so we can return here...
- console.log('WARNING: Tried to load angular more than once.');
- return;
- }
-
- //try to bind to jquery now so that one can write jqLite(document).ready()
- //but we will rebind on bootstrap again.
- bindJQuery();
-
- publishExternalAPI(angular);
-
- jqLite(document).ready(function() {
- angularInit(document, bootstrap);
- });
-
-})(window, document);
-
-!window.angular.$$csp() && window.angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>'); \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/tp/angular.min.js b/framework/src/onos/web/gui/src/main/webapp/tp/angular.min.js
deleted file mode 100644
index c5583b48..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tp/angular.min.js
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- AngularJS v1.3.5
- (c) 2010-2014 Google, Inc. http://angularjs.org
- License: MIT
-*/
-(function(U,V,u){'use strict';function A(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.3.5/"+(b?b+"/":"")+a;for(a=1;a<arguments.length;a++){c=c+(1==a?"?":"&")+"p"+(a-1)+"=";var d=encodeURIComponent,e;e=arguments[a];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;c+=d(e)}return Error(c)}}function Ra(b){if(null==b||Sa(b))return!1;var a=b.length;return b.nodeType===
-na&&a?!0:I(b)||y(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function r(b,a,c){var d,e;if(b)if(F(b))for(d in b)"prototype"==d||"length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d)||a.call(c,b[d],d,b);else if(y(b)||Ra(b)){var f="object"!==typeof b;d=0;for(e=b.length;d<e;d++)(f||d in b)&&a.call(c,b[d],d,b)}else if(b.forEach&&b.forEach!==r)b.forEach(a,c,b);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d,b);return b}function Bd(b,a,c){for(var d=Object.keys(b).sort(),e=0;e<d.length;e++)a.call(c,
-b[d[e]],d[e]);return d}function kc(b){return function(a,c){b(c,a)}}function Cd(){return++kb}function lc(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function D(b){for(var a=b.$$hashKey,c=1,d=arguments.length;c<d;c++){var e=arguments[c];if(e)for(var f=Object.keys(e),g=0,h=f.length;g<h;g++){var k=f[g];b[k]=e[k]}}lc(b,a);return b}function $(b){return parseInt(b,10)}function x(){}function oa(b){return b}function ca(b){return function(){return b}}function G(b){return"undefined"===typeof b}function z(b){return"undefined"!==
-typeof b}function K(b){return null!==b&&"object"===typeof b}function I(b){return"string"===typeof b}function X(b){return"number"===typeof b}function fa(b){return"[object Date]"===Ja.call(b)}function F(b){return"function"===typeof b}function lb(b){return"[object RegExp]"===Ja.call(b)}function Sa(b){return b&&b.window===b}function Ta(b){return b&&b.$evalAsync&&b.$watch}function Ua(b){return"boolean"===typeof b}function mc(b){return!(!b||!(b.nodeName||b.prop&&b.attr&&b.find))}function Dd(b){var a={};
-b=b.split(",");var c;for(c=0;c<b.length;c++)a[b[c]]=!0;return a}function ta(b){return R(b.nodeName||b[0]&&b[0].nodeName)}function Va(b,a){var c=b.indexOf(a);0<=c&&b.splice(c,1);return a}function Ca(b,a,c,d){if(Sa(b)||Ta(b))throw Wa("cpws");if(a){if(b===a)throw Wa("cpi");c=c||[];d=d||[];if(K(b)){var e=c.indexOf(b);if(-1!==e)return d[e];c.push(b);d.push(a)}if(y(b))for(var f=a.length=0;f<b.length;f++)e=Ca(b[f],null,c,d),K(b[f])&&(c.push(b[f]),d.push(e)),a.push(e);else{var g=a.$$hashKey;y(a)?a.length=
-0:r(a,function(b,c){delete a[c]});for(f in b)b.hasOwnProperty(f)&&(e=Ca(b[f],null,c,d),K(b[f])&&(c.push(b[f]),d.push(e)),a[f]=e);lc(a,g)}}else if(a=b)y(b)?a=Ca(b,[],c,d):fa(b)?a=new Date(b.getTime()):lb(b)?(a=new RegExp(b.source,b.toString().match(/[^\/]*$/)[0]),a.lastIndex=b.lastIndex):K(b)&&(e=Object.create(Object.getPrototypeOf(b)),a=Ca(b,e,c,d));return a}function ua(b,a){if(y(b)){a=a||[];for(var c=0,d=b.length;c<d;c++)a[c]=b[c]}else if(K(b))for(c in a=a||{},b)if("$"!==c.charAt(0)||"$"!==c.charAt(1))a[c]=
-b[c];return a||b}function pa(b,a){if(b===a)return!0;if(null===b||null===a)return!1;if(b!==b&&a!==a)return!0;var c=typeof b,d;if(c==typeof a&&"object"==c)if(y(b)){if(!y(a))return!1;if((c=b.length)==a.length){for(d=0;d<c;d++)if(!pa(b[d],a[d]))return!1;return!0}}else{if(fa(b))return fa(a)?pa(b.getTime(),a.getTime()):!1;if(lb(b)&&lb(a))return b.toString()==a.toString();if(Ta(b)||Ta(a)||Sa(b)||Sa(a)||y(a))return!1;c={};for(d in b)if("$"!==d.charAt(0)&&!F(b[d])){if(!pa(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c.hasOwnProperty(d)&&
-"$"!==d.charAt(0)&&a[d]!==u&&!F(a[d]))return!1;return!0}return!1}function Xa(b,a,c){return b.concat(Ya.call(a,c))}function nc(b,a){var c=2<arguments.length?Ya.call(arguments,2):[];return!F(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?a.apply(b,Xa(c,arguments,0)):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}}function Ed(b,a){var c=a;"string"===typeof b&&"$"===b.charAt(0)&&"$"===b.charAt(1)?c=u:Sa(a)?c="$WINDOW":a&&V===a?c="$DOCUMENT":Ta(a)&&
-(c="$SCOPE");return c}function Za(b,a){return"undefined"===typeof b?u:JSON.stringify(b,Ed,a?" ":null)}function oc(b){return I(b)?JSON.parse(b):b}function va(b){b=B(b).clone();try{b.empty()}catch(a){}var c=B("<div>").append(b).html();try{return b[0].nodeType===mb?R(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+R(b)})}catch(d){return R(c)}}function pc(b){try{return decodeURIComponent(b)}catch(a){}}function qc(b){var a={},c,d;r((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g,
-"%20").split("="),d=pc(c[0]),z(d)&&(b=z(c[1])?pc(c[1]):!0,Jb.call(a,d)?y(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Kb(b){var a=[];r(b,function(b,d){y(b)?r(b,function(b){a.push(Da(d,!0)+(!0===b?"":"="+Da(b,!0)))}):a.push(Da(d,!0)+(!0===b?"":"="+Da(b,!0)))});return a.length?a.join("&"):""}function nb(b){return Da(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Da(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,
-"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Fd(b,a){var c,d,e=ob.length;b=B(b);for(d=0;d<e;++d)if(c=ob[d]+a,I(c=b.attr(c)))return c;return null}function Gd(b,a){var c,d,e={};r(ob,function(a){a+="app";!c&&b.hasAttribute&&b.hasAttribute(a)&&(c=b,d=b.getAttribute(a))});r(ob,function(a){a+="app";var e;!c&&(e=b.querySelector("["+a.replace(":","\\:")+"]"))&&(c=e,d=e.getAttribute(a))});c&&(e.strictDi=null!==Fd(c,"strict-di"),a(c,d?[d]:[],e))}function rc(b,a,c){K(c)||
-(c={});c=D({strictDi:!1},c);var d=function(){b=B(b);if(b.injector()){var d=b[0]===V?"document":va(b);throw Wa("btstrpd",d.replace(/</,"&lt;").replace(/>/,"&gt;"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=Lb(a,c.strictDi);d.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return d},e=
-/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;U&&e.test(U.name)&&(c.debugInfoEnabled=!0,U.name=U.name.replace(e,""));if(U&&!f.test(U.name))return d();U.name=U.name.replace(f,"");ha.resumeBootstrap=function(b){r(b,function(b){a.push(b)});d()}}function Hd(){U.name="NG_ENABLE_DEBUG_INFO!"+U.name;U.location.reload()}function Id(b){return ha.element(b).injector().get("$$testability")}function Mb(b,a){a=a||"_";return b.replace(Jd,function(b,d){return(d?a:"")+b.toLowerCase()})}function Kd(){var b;sc||
-((qa=U.jQuery)&&qa.fn.on?(B=qa,D(qa.fn,{scope:Ka.scope,isolateScope:Ka.isolateScope,controller:Ka.controller,injector:Ka.injector,inheritedData:Ka.inheritedData}),b=qa.cleanData,qa.cleanData=function(a){var c;if(Nb)Nb=!1;else for(var d=0,e;null!=(e=a[d]);d++)(c=qa._data(e,"events"))&&c.$destroy&&qa(e).triggerHandler("$destroy");b(a)}):B=S,ha.element=B,sc=!0)}function Ob(b,a,c){if(!b)throw Wa("areq",a||"?",c||"required");return b}function pb(b,a,c){c&&y(b)&&(b=b[b.length-1]);Ob(F(b),a,"not a function, got "+
-(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function La(b,a){if("hasOwnProperty"===b)throw Wa("badname",a);}function tc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g<f;g++)d=a[g],b&&(b=(e=b)[d]);return!c&&F(b)?nc(e,b):b}function qb(b){var a=b[0];b=b[b.length-1];var c=[a];do{a=a.nextSibling;if(!a)break;c.push(a)}while(a!==b);return B(c)}function ia(){return Object.create(null)}function Ld(b){function a(a,b,c){return a[b]||(a[b]=c())}var c=A("$injector"),
-d=A("ng");b=a(b,"angular",Object);b.$$minErr=b.$$minErr||A;return a(b,"module",function(){var b={};return function(f,g,h){if("hasOwnProperty"===f)throw d("badname","module");g&&b.hasOwnProperty(f)&&(b[f]=null);return a(b,f,function(){function a(c,d,e,f){f||(f=b);return function(){f[e||"push"]([c,d,arguments]);return t}}if(!g)throw c("nomod",f);var b=[],d=[],e=[],s=a("$injector","invoke","push",d),t={_invokeQueue:b,_configBlocks:d,_runBlocks:e,requires:g,name:f,provider:a("$provide","provider"),factory:a("$provide",
-"factory"),service:a("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),animation:a("$animateProvider","register"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:s,run:function(a){e.push(a);return this}};h&&s(h);return t})}})}function Md(b){D(b,{bootstrap:rc,copy:Ca,extend:D,equals:pa,element:B,forEach:r,injector:Lb,noop:x,bind:nc,toJson:Za,fromJson:oc,identity:oa,isUndefined:G,
-isDefined:z,isString:I,isFunction:F,isObject:K,isNumber:X,isElement:mc,isArray:y,version:Nd,isDate:fa,lowercase:R,uppercase:rb,callbacks:{counter:0},getTestability:Id,$$minErr:A,$$csp:$a,reloadWithDebugInfo:Hd});ab=Ld(U);try{ab("ngLocale")}catch(a){ab("ngLocale",[]).provider("$locale",Od)}ab("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Pd});a.provider("$compile",uc).directive({a:Qd,input:vc,textarea:vc,form:Rd,script:Sd,select:Td,style:Ud,option:Vd,ngBind:Wd,ngBindHtml:Xd,ngBindTemplate:Yd,
-ngClass:Zd,ngClassEven:$d,ngClassOdd:ae,ngCloak:be,ngController:ce,ngForm:de,ngHide:ee,ngIf:fe,ngInclude:ge,ngInit:he,ngNonBindable:ie,ngPluralize:je,ngRepeat:ke,ngShow:le,ngStyle:me,ngSwitch:ne,ngSwitchWhen:oe,ngSwitchDefault:pe,ngOptions:qe,ngTransclude:re,ngModel:se,ngList:te,ngChange:ue,pattern:wc,ngPattern:wc,required:xc,ngRequired:xc,minlength:yc,ngMinlength:yc,maxlength:zc,ngMaxlength:zc,ngValue:ve,ngModelOptions:we}).directive({ngInclude:xe}).directive(sb).directive(Ac);a.provider({$anchorScroll:ye,
-$animate:ze,$browser:Ae,$cacheFactory:Be,$controller:Ce,$document:De,$exceptionHandler:Ee,$filter:Bc,$interpolate:Fe,$interval:Ge,$http:He,$httpBackend:Ie,$location:Je,$log:Ke,$parse:Le,$rootScope:Me,$q:Ne,$$q:Oe,$sce:Pe,$sceDelegate:Qe,$sniffer:Re,$templateCache:Se,$templateRequest:Te,$$testability:Ue,$timeout:Ve,$window:We,$$rAF:Xe,$$asyncCallback:Ye})}])}function bb(b){return b.replace(Ze,function(a,b,d,e){return e?d.toUpperCase():d}).replace($e,"Moz$1")}function Cc(b){b=b.nodeType;return b===
-na||!b||9===b}function Dc(b,a){var c,d,e=a.createDocumentFragment(),f=[];if(Pb.test(b)){c=c||e.appendChild(a.createElement("div"));d=(af.exec(b)||["",""])[1].toLowerCase();d=ja[d]||ja._default;c.innerHTML=d[1]+b.replace(bf,"<$1></$2>")+d[2];for(d=d[0];d--;)c=c.lastChild;f=Xa(f,c.childNodes);c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML="";r(f,function(a){e.appendChild(a)});return e}function S(b){if(b instanceof S)return b;var a;I(b)&&(b=P(b),a=!0);if(!(this instanceof
-S)){if(a&&"<"!=b.charAt(0))throw Qb("nosel");return new S(b)}if(a){a=V;var c;b=(c=cf.exec(b))?[a.createElement(c[1])]:(c=Dc(b,a))?c.childNodes:[]}Ec(this,b)}function Rb(b){return b.cloneNode(!0)}function tb(b,a){a||ub(b);if(b.querySelectorAll)for(var c=b.querySelectorAll("*"),d=0,e=c.length;d<e;d++)ub(c[d])}function Fc(b,a,c,d){if(z(d))throw Qb("offargs");var e=(d=vb(b))&&d.events,f=d&&d.handle;if(f)if(a)r(a.split(" "),function(a){if(z(c)){var d=e[a];Va(d||[],c);if(d&&0<d.length)return}b.removeEventListener(a,
-f,!1);delete e[a]});else for(a in e)"$destroy"!==a&&b.removeEventListener(a,f,!1),delete e[a]}function ub(b,a){var c=b.ng339,d=c&&wb[c];d&&(a?delete d.data[a]:(d.handle&&(d.events.$destroy&&d.handle({},"$destroy"),Fc(b)),delete wb[c],b.ng339=u))}function vb(b,a){var c=b.ng339,c=c&&wb[c];a&&!c&&(b.ng339=c=++df,c=wb[c]={events:{},data:{},handle:u});return c}function Sb(b,a,c){if(Cc(b)){var d=z(c),e=!d&&a&&!K(a),f=!a;b=(b=vb(b,!e))&&b.data;if(d)b[a]=c;else{if(f)return b;if(e)return b&&b[a];D(b,a)}}}
-function Tb(b,a){return b.getAttribute?-1<(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+a+" "):!1}function Ub(b,a){a&&b.setAttribute&&r(a.split(" "),function(a){b.setAttribute("class",P((" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+P(a)+" "," ")))})}function Vb(b,a){if(a&&b.setAttribute){var c=(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");r(a.split(" "),function(a){a=P(a);-1===c.indexOf(" "+a+" ")&&(c+=a+" ")});b.setAttribute("class",
-P(c))}}function Ec(b,a){if(a)if(a.nodeType)b[b.length++]=a;else{var c=a.length;if("number"===typeof c&&a.window!==a){if(c)for(var d=0;d<c;d++)b[b.length++]=a[d]}else b[b.length++]=a}}function Gc(b,a){return xb(b,"$"+(a||"ngController")+"Controller")}function xb(b,a,c){9==b.nodeType&&(b=b.documentElement);for(a=y(a)?a:[a];b;){for(var d=0,e=a.length;d<e;d++)if((c=B.data(b,a[d]))!==u)return c;b=b.parentNode||11===b.nodeType&&b.host}}function Hc(b){for(tb(b,!0);b.firstChild;)b.removeChild(b.firstChild)}
-function Ic(b,a){a||tb(b);var c=b.parentNode;c&&c.removeChild(b)}function ef(b,a){a=a||U;if("complete"===a.document.readyState)a.setTimeout(b);else B(a).on("load",b)}function Jc(b,a){var c=yb[a.toLowerCase()];return c&&Kc[ta(b)]&&c}function ff(b,a){var c=b.nodeName;return("INPUT"===c||"TEXTAREA"===c)&&Lc[a]}function gf(b,a){var c=function(c,e){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=a[e||c.type],g=f?f.length:0;if(g){if(G(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;
-c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};1<g&&(f=ua(f));for(var k=0;k<g;k++)c.isImmediatePropagationStopped()||f[k].call(b,c)}};c.elem=b;return c}function Ma(b,a){var c=b&&b.$$hashKey;if(c)return"function"===typeof c&&(c=b.$$hashKey()),c;c=typeof b;return c="function"==c||"object"==c&&null!==b?b.$$hashKey=c+":"+(a||Cd)():c+":"+b}function cb(b,
-a){if(a){var c=0;this.nextUid=function(){return++c}}r(b,this.put,this)}function hf(b){return(b=b.toString().replace(Mc,"").match(Nc))?"function("+(b[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function Wb(b,a,c){var d;if("function"===typeof b){if(!(d=b.$inject)){d=[];if(b.length){if(a)throw I(c)&&c||(c=b.name||hf(b)),Ea("strictdi",c);a=b.toString().replace(Mc,"");a=a.match(Nc);r(a[1].split(jf),function(a){a.replace(kf,function(a,b,c){d.push(c)})})}b.$inject=d}}else y(b)?(a=b.length-1,pb(b[a],"fn"),
-d=b.slice(0,a)):pb(b,"fn",!0);return d}function Lb(b,a){function c(a){return function(b,c){if(K(b))r(b,kc(a));else return a(b,c)}}function d(a,b){La(a,"service");if(F(b)||y(b))b=s.instantiate(b);if(!b.$get)throw Ea("pget",a);return p[a+"Provider"]=b}function e(a,b){return function(){var c=q.invoke(b,this,u,a);if(G(c))throw Ea("undef",a);return c}}function f(a,b,c){return d(a,{$get:!1!==c?e(a,b):b})}function g(a){var b=[],c;r(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],
-f=s.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.put(a,!0);try{I(a)?(c=ab(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):F(a)?b.push(s.invoke(a)):y(a)?b.push(s.invoke(a)):pb(a,"module")}catch(e){throw y(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ea("modulerr",a,e.stack||e.message||e);}}});return b}function h(b,c){function d(a){if(b.hasOwnProperty(a)){if(b[a]===k)throw Ea("cdep",a+" <- "+l.join(" <- "));
-return b[a]}try{return l.unshift(a),b[a]=k,b[a]=c(a)}catch(e){throw b[a]===k&&delete b[a],e;}finally{l.shift()}}function e(b,c,f,g){"string"===typeof f&&(g=f,f=null);var k=[];g=Wb(b,a,g);var h,l,q;l=0;for(h=g.length;l<h;l++){q=g[l];if("string"!==typeof q)throw Ea("itkn",q);k.push(f&&f.hasOwnProperty(q)?f[q]:d(q))}y(b)&&(b=b[h]);return b.apply(c,k)}return{invoke:e,instantiate:function(a,b,c){var d=Object.create((y(a)?a[a.length-1]:a).prototype);a=e(a,d,b,c);return K(a)||F(a)?a:d},get:d,annotate:Wb,
-has:function(a){return p.hasOwnProperty(a+"Provider")||b.hasOwnProperty(a)}}}a=!0===a;var k={},l=[],m=new cb([],!0),p={$provide:{provider:c(d),factory:c(f),service:c(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:c(function(a,b){return f(a,ca(b),!1)}),constant:c(function(a,b){La(a,"constant");p[a]=b;t[a]=b}),decorator:function(a,b){var c=s.get(a+"Provider"),d=c.$get;c.$get=function(){var a=q.invoke(d,c);return q.invoke(b,null,{$delegate:a})}}}},s=p.$injector=
-h(p,function(){throw Ea("unpr",l.join(" <- "));}),t={},q=t.$injector=h(t,function(a){var b=s.get(a+"Provider");return q.invoke(b.$get,b,u,a)});r(g(b),function(a){q.invoke(a||x)});return q}function ye(){var b=!0;this.disableAutoScrolling=function(){b=!1};this.$get=["$window","$location","$rootScope",function(a,c,d){function e(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===ta(a))return b=a,!0});return b}function f(b){if(b){b.scrollIntoView();var c;c=g.yOffset;F(c)?c=c():mc(c)?(c=c[0],
-c="fixed"!==a.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):X(c)||(c=0);c&&(b=b.getBoundingClientRect().top,a.scrollBy(0,b-c))}else a.scrollTo(0,0)}function g(){var a=c.hash(),b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var h=a.document;b&&d.$watch(function(){return c.hash()},function(a,b){a===b&&""===a||ef(function(){d.$evalAsync(g)})});return g}]}function Ye(){this.$get=["$$rAF","$timeout",function(b,a){return b.supported?function(a){return b(a)}:
-function(b){return a(b,0,!1)}}]}function lf(b,a,c,d){function e(a){try{a.apply(null,Ya.call(arguments,1))}finally{if(v--,0===v)for(;w.length;)try{w.pop()()}catch(b){c.error(b)}}}function f(a,b){(function ya(){r(O,function(a){a()});E=b(ya,a)})()}function g(){h();k()}function h(){H=b.history.state;H=G(H)?null:H;pa(H,Q)&&(H=Q);Q=H}function k(){if(C!==m.url()||M!==H)C=m.url(),M=H,r(W,function(a){a(m.url(),H)})}function l(a){try{return decodeURIComponent(a)}catch(b){return a}}var m=this,p=a[0],s=b.location,
-t=b.history,q=b.setTimeout,N=b.clearTimeout,n={};m.isMock=!1;var v=0,w=[];m.$$completeOutstandingRequest=e;m.$$incOutstandingRequestCount=function(){v++};m.notifyWhenNoOutstandingRequests=function(a){r(O,function(a){a()});0===v?a():w.push(a)};var O=[],E;m.addPollFn=function(a){G(E)&&f(100,q);O.push(a);return a};var H,M,C=s.href,ea=a.find("base"),L=null;h();M=H;m.url=function(a,c,e){G(e)&&(e=null);s!==b.location&&(s=b.location);t!==b.history&&(t=b.history);if(a){var f=M===e;if(C===a&&(!d.history||
-f))return m;var g=C&&Fa(C)===Fa(a);C=a;M=e;!d.history||g&&f?(g||(L=a),c?s.replace(a):s.href=a):(t[c?"replaceState":"pushState"](e,"",a),h(),M=H);return m}return L||s.href.replace(/%27/g,"'")};m.state=function(){return H};var W=[],ba=!1,Q=null;m.onUrlChange=function(a){if(!ba){if(d.history)B(b).on("popstate",g);B(b).on("hashchange",g);ba=!0}W.push(a);return a};m.$$checkUrlChange=k;m.baseHref=function(){var a=ea.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};var aa={},z="",da=m.baseHref();
-m.cookies=function(a,b){var d,e,f,g;if(a)b===u?p.cookie=encodeURIComponent(a)+"=;path="+da+";expires=Thu, 01 Jan 1970 00:00:00 GMT":I(b)&&(d=(p.cookie=encodeURIComponent(a)+"="+encodeURIComponent(b)+";path="+da).length+1,4096<d&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!"));else{if(p.cookie!==z)for(z=p.cookie,d=z.split("; "),aa={},f=0;f<d.length;f++)e=d[f],g=e.indexOf("="),0<g&&(a=l(e.substring(0,g)),aa[a]===u&&(aa[a]=l(e.substring(g+1))));
-return aa}};m.defer=function(a,b){var c;v++;c=q(function(){delete n[c];e(a)},b||0);n[c]=!0;return c};m.defer.cancel=function(a){return n[a]?(delete n[a],N(a),e(x),!0):!1}}function Ae(){this.$get=["$window","$log","$sniffer","$document",function(b,a,c,d){return new lf(b,d,a,c)}]}function Be(){this.$get=function(){function b(b,d){function e(a){a!=p&&(s?s==a&&(s=a.n):s=a,f(a.n,a.p),f(a,p),p=a,p.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(b in a)throw A("$cacheFactory")("iid",b);var g=0,
-h=D({},d,{id:b}),k={},l=d&&d.capacity||Number.MAX_VALUE,m={},p=null,s=null;return a[b]={put:function(a,b){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}if(!G(b))return a in k||g++,k[a]=b,g>l&&this.remove(s.key),b},get:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return k[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b==p&&(p=b.p);b==s&&(s=b.n);f(b.n,b.p);delete m[a]}delete k[a];g--},removeAll:function(){k={};g=0;m={};p=s=null},destroy:function(){m=
-h=k=null;delete a[b]},info:function(){return D({},h,{size:g})}}}var a={};b.info=function(){var b={};r(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};return b}}function Se(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function uc(b,a){function c(a,b){var c=/^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/,d={};r(a,function(a,e){var f=a.match(c);if(!f)throw ka("iscp",b,e,a);d[e]={mode:f[1][0],collection:"*"===f[2],optional:"?"===f[3],attrName:f[4]||e}});return d}var d=
-{},e=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,f=/(([\w\-]+)(?:\:([^;]+))?;?)/,g=Dd("ngSrc,ngSrcset,src,srcset"),h=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,k=/^(on[a-z]+|formaction)$/;this.directive=function p(a,e){La(a,"directive");I(a)?(Ob(e,"directiveFactory"),d.hasOwnProperty(a)||(d[a]=[],b.factory(a+"Directive",["$injector","$exceptionHandler",function(b,e){var f=[];r(d[a],function(d,g){try{var h=b.invoke(d);F(h)?h={compile:ca(h)}:!h.compile&&h.link&&(h.compile=ca(h.link));h.priority=h.priority||0;h.index=
-g;h.name=h.name||a;h.require=h.require||h.controller&&h.name;h.restrict=h.restrict||"EA";K(h.scope)&&(h.$$isolateBindings=c(h.scope,h.name));f.push(h)}catch(k){e(k)}});return f}])),d[a].push(e)):r(a,kc(p));return this};this.aHrefSanitizationWhitelist=function(b){return z(b)?(a.aHrefSanitizationWhitelist(b),this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return z(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};var l=!0;this.debugInfoEnabled=
-function(a){return z(a)?(l=a,this):l};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,c,q,N,n,v,w,O,E,H){function M(a,b){try{a.addClass(b)}catch(c){}}function C(a,b,c,d,e){a instanceof B||(a=B(a));r(a,function(b,c){b.nodeType==mb&&b.nodeValue.match(/\S+/)&&(a[c]=B(b).wrap("<span></span>").parent()[0])});var f=ea(a,b,a,c,d,e);C.$$addScopeClass(a);var g=null;return function(b,
-c,d){Ob(b,"scope");d=d||{};var e=d.parentBoundTranscludeFn,h=d.transcludeControllers;d=d.futureParentElement;e&&e.$$boundTransclude&&(e=e.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ta(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?B(U(g,B("<div>").append(a).html())):c?Ka.clone.call(a):a;if(h)for(var k in h)d.data("$"+k+"Controller",h[k].instance);C.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,e);return d}}function ea(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,q,s,n,w;if(p)for(w=
-Array(c.length),q=0;q<h.length;q+=3)f=h[q],w[f]=c[f];else w=c;q=0;for(s=h.length;q<s;)k=w[h[q++]],c=h[q++],f=h[q++],c?(c.scope?(l=a.$new(),C.$$addScopeInfo(B(k),l)):l=a,n=c.transcludeOnThisElement?L(a,c.transclude,e,c.elementTranscludeOnThisElement):!c.templateOnThisElement&&e?e:!e&&b?L(a,b):null,c(f,l,k,d,n)):f&&f(a,k.childNodes,u,e)}for(var h=[],k,l,q,s,p,n=0;n<a.length;n++){k=new X;l=W(a[n],[],k,0===n?d:u,e);(f=l.length?aa(l,a[n],k,b,c,null,[],[],f):null)&&f.scope&&C.$$addScopeClass(k.$$element);
-k=f&&f.terminal||!(q=a[n].childNodes)||!q.length?null:ea(q,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||k)h.push(n,f,k),s=!0,p=p||f;f=null}return s?g:null}function L(a,b,c,d){return function(d,e,f,g,h){d||(d=a.$new(!1,h),d.$$transcluded=!0);return b(d,e,{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:g})}}function W(b,c,g,h,k){var l=g.$attr,q;switch(b.nodeType){case na:da(c,wa(ta(b)),"E",h,k);for(var s,n,w,N=b.attributes,t=0,O=N&&N.length;t<
-O;t++){var H=!1,v=!1;s=N[t];q=s.name;s=P(s.value);n=wa(q);if(w=Ga.test(n))q=Mb(n.substr(6),"-");var M=n.replace(/(Start|End)$/,""),E;a:{var C=M;if(d.hasOwnProperty(C)){E=void 0;for(var C=a.get(C+"Directive"),W=0,r=C.length;W<r;W++)if(E=C[W],E.multiElement){E=!0;break a}}E=!1}E&&n===M+"Start"&&(H=q,v=q.substr(0,q.length-5)+"end",q=q.substr(0,q.length-6));n=wa(q.toLowerCase());l[n]=q;if(w||!g.hasOwnProperty(n))g[n]=s,Jc(b,n)&&(g[n]=!0);S(b,c,s,n,w);da(c,n,"A",h,k,H,v)}b=b.className;if(I(b)&&""!==b)for(;q=
-f.exec(b);)n=wa(q[2]),da(c,n,"C",h,k)&&(g[n]=P(q[3])),b=b.substr(q.index+q[0].length);break;case mb:T(c,b.nodeValue);break;case 8:try{if(q=e.exec(b.nodeValue))n=wa(q[1]),da(c,n,"M",h,k)&&(g[n]=P(q[2]))}catch(Q){}}c.sort(A);return c}function ba(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ka("uterdir",b,c);a.nodeType==na&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return B(d)}function Q(a,b,c){return function(d,
-e,f,g,h){e=ba(e[0],b,c);return a(d,e,f,g,h)}}function aa(a,d,e,f,g,k,l,q,p){function w(a,b,c,d){if(a){c&&(a=Q(a,c,d));a.require=J.require;a.directiveName=ga;if(L===J||J.$$isolateScope)a=Y(a,{isolateScope:!0});l.push(a)}if(b){c&&(b=Q(b,c,d));b.require=J.require;b.directiveName=ga;if(L===J||J.$$isolateScope)b=Y(b,{isolateScope:!0});q.push(b)}}function O(a,b,c,d){var e,f="data",g=!1,k=c,l;if(I(b)){l=b.match(h);b=b.substring(l[0].length);l[3]&&(l[1]?l[3]=null:l[1]=l[3]);"^"===l[1]?f="inheritedData":"^^"===
-l[1]&&(f="inheritedData",k=c.parent());"?"===l[2]&&(g=!0);e=null;d&&"data"===f&&(e=d[b])&&(e=e.instance);e=e||k[f]("$"+b+"Controller");if(!e&&!g)throw ka("ctreq",b,a);return e||null}y(b)&&(e=[],r(b,function(b){e.push(O(a,b,c,d))}));return e}function H(a,c,f,g,h){function k(a,b,c){var d;Ta(a)||(c=b,b=a,a=u);D&&(d=M);c||(c=D?W.parent():W);return h(a,b,d,c,Xb)}var p,w,t,v,M,db,W,Q;d===f?(Q=e,W=e.$$element):(W=B(f),Q=new X(W,e));L&&(v=c.$new(!0));h&&(db=k,db.$$boundTransclude=h);E&&(ea={},M={},r(E,function(a){var b=
-{$scope:a===L||a.$$isolateScope?v:c,$element:W,$attrs:Q,$transclude:db};t=a.controller;"@"==t&&(t=Q[a.name]);b=n(t,b,!0,a.controllerAs);M[a.name]=b;D||W.data("$"+a.name+"Controller",b.instance);ea[a.name]=b}));if(L){C.$$addScopeInfo(W,v,!0,!(aa&&(aa===L||aa===L.$$originalDirective)));C.$$addScopeClass(W,!0);g=ea&&ea[L.name];var ba=v;g&&g.identifier&&!0===L.bindToController&&(ba=g.instance);r(v.$$isolateBindings=L.$$isolateBindings,function(a,d){var e=a.attrName,f=a.optional,g,h,k,l;switch(a.mode){case "@":Q.$observe(e,
-function(a){ba[d]=a});Q.$$observers[e].$$scope=c;Q[e]&&(ba[d]=b(Q[e])(c));break;case "=":if(f&&!Q[e])break;h=N(Q[e]);l=h.literal?pa:function(a,b){return a===b||a!==a&&b!==b};k=h.assign||function(){g=ba[d]=h(c);throw ka("nonassign",Q[e],L.name);};g=ba[d]=h(c);f=function(a){l(a,ba[d])||(l(a,g)?k(c,a=ba[d]):ba[d]=a);return g=a};f.$stateful=!0;f=a.collection?c.$watchCollection(Q[e],f):c.$watch(N(Q[e],f),null,h.literal);v.$on("$destroy",f);break;case "&":h=N(Q[e]),ba[d]=function(a){return h(c,a)}}})}ea&&
-(r(ea,function(a){a()}),ea=null);g=0;for(p=l.length;g<p;g++)w=l[g],Z(w,w.isolateScope?v:c,W,Q,w.require&&O(w.directiveName,w.require,W,M),db);var Xb=c;L&&(L.template||null===L.templateUrl)&&(Xb=v);a&&a(Xb,f.childNodes,u,h);for(g=q.length-1;0<=g;g--)w=q[g],Z(w,w.isolateScope?v:c,W,Q,w.require&&O(w.directiveName,w.require,W,M),db)}p=p||{};for(var v=-Number.MAX_VALUE,M,E=p.controllerDirectives,ea,L=p.newIsolateScopeDirective,aa=p.templateDirective,da=p.nonTlbTranscludeDirective,x=!1,Na=!1,D=p.hasElementTranscludeDirective,
-T=e.$$element=B(d),J,ga,A,Ga=f,za,R=0,S=a.length;R<S;R++){J=a[R];var zb=J.$$start,$=J.$$end;zb&&(T=ba(d,zb,$));A=u;if(v>J.priority)break;if(A=J.scope)J.templateUrl||(K(A)?(ya("new/isolated scope",L||M,J,T),L=J):ya("new/isolated scope",L,J,T)),M=M||J;ga=J.name;!J.templateUrl&&J.controller&&(A=J.controller,E=E||{},ya("'"+ga+"' controller",E[ga],J,T),E[ga]=J);if(A=J.transclude)x=!0,J.$$tlb||(ya("transclusion",da,J,T),da=J),"element"==A?(D=!0,v=J.priority,A=T,T=e.$$element=B(V.createComment(" "+ga+": "+
-e[ga]+" ")),d=T[0],Ab(g,Ya.call(A,0),d),Ga=C(A,f,v,k&&k.name,{nonTlbTranscludeDirective:da})):(A=B(Rb(d)).contents(),T.empty(),Ga=C(A,f));if(J.template)if(Na=!0,ya("template",aa,J,T),aa=J,A=F(J.template)?J.template(T,e):J.template,A=Pc(A),J.replace){k=J;A=Pb.test(A)?Qc(U(J.templateNamespace,P(A))):[];d=A[0];if(1!=A.length||d.nodeType!==na)throw ka("tplrt",ga,"");Ab(g,T,d);S={$attr:{}};A=W(d,[],S);var mf=a.splice(R+1,a.length-(R+1));L&&z(A);a=a.concat(A).concat(mf);Oc(e,S);S=a.length}else T.html(A);
-if(J.templateUrl)Na=!0,ya("template",aa,J,T),aa=J,J.replace&&(k=J),H=G(a.splice(R,a.length-R),T,e,g,x&&Ga,l,q,{controllerDirectives:E,newIsolateScopeDirective:L,templateDirective:aa,nonTlbTranscludeDirective:da}),S=a.length;else if(J.compile)try{za=J.compile(T,e,Ga),F(za)?w(null,za,zb,$):za&&w(za.pre,za.post,zb,$)}catch(ca){c(ca,va(T))}J.terminal&&(H.terminal=!0,v=Math.max(v,J.priority))}H.scope=M&&!0===M.scope;H.transcludeOnThisElement=x;H.elementTranscludeOnThisElement=D;H.templateOnThisElement=
-Na;H.transclude=Ga;p.hasElementTranscludeDirective=D;return H}function z(a){for(var b=0,c=a.length;b<c;b++){var d=b,e;e=D(Object.create(a[b]),{$$isolateScope:!0});a[d]=e}}function da(b,e,f,g,h,k,l){if(e===h)return null;h=null;if(d.hasOwnProperty(e)){var q;e=a.get(e+"Directive");for(var s=0,n=e.length;s<n;s++)try{if(q=e[s],(g===u||g>q.priority)&&-1!=q.restrict.indexOf(f)){if(k){var w={$$start:k,$$end:l};q=D(Object.create(q),w)}b.push(q);h=q}}catch(N){c(N)}}return h}function Oc(a,b){var c=b.$attr,d=
-a.$attr,e=a.$$element;r(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});r(b,function(b,f){"class"==f?(M(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function G(a,b,c,d,e,f,g,h){var k=[],l,s,p=b[0],n=a.shift(),w=D({},n,{templateUrl:null,transclude:null,replace:null,$$originalDirective:n}),N=F(n.templateUrl)?
-n.templateUrl(b,c):n.templateUrl,t=n.templateNamespace;b.empty();q(O.getTrustedResourceUrl(N)).then(function(q){var v,O;q=Pc(q);if(n.replace){q=Pb.test(q)?Qc(U(t,P(q))):[];v=q[0];if(1!=q.length||v.nodeType!==na)throw ka("tplrt",n.name,N);q={$attr:{}};Ab(d,b,v);var H=W(v,[],q);K(n.scope)&&z(H);a=H.concat(a);Oc(c,q)}else v=p,b.html(q);a.unshift(w);l=aa(a,v,c,e,b,n,f,g,h);r(d,function(a,c){a==v&&(d[c]=b[0])});for(s=ea(b[0].childNodes,e);k.length;){q=k.shift();O=k.shift();var E=k.shift(),C=k.shift(),
-H=b[0];if(!q.$$destroyed){if(O!==p){var Q=O.className;h.hasElementTranscludeDirective&&n.replace||(H=Rb(v));Ab(E,B(O),H);M(B(H),Q)}O=l.transcludeOnThisElement?L(q,l.transclude,C):C;l(s,q,H,d,O)}}k=null});return function(a,b,c,d,e){a=e;b.$$destroyed||(k?k.push(b,c,d,a):(l.transcludeOnThisElement&&(a=L(b,l.transclude,e)),l(s,b,c,d,a)))}}function A(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function ya(a,b,c,d){if(b)throw ka("multidir",b.name,c.name,
-a,va(d));}function T(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&C.$$addBindingClass(a);return function(a,c){var e=c.parent();b||C.$$addBindingClass(e);C.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function U(a,b){a=R(a||"html");switch(a){case "svg":case "math":var c=V.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function za(a,b){if("srcdoc"==b)return O.HTML;
-var c=ta(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return O.RESOURCE_URL}function S(a,c,d,e,f){var h=b(d,!0);if(h){if("multiple"===e&&"select"===ta(a))throw ka("selmulti",va(a));c.push({priority:100,compile:function(){return{pre:function(c,d,l){d=l.$$observers||(l.$$observers={});if(k.test(e))throw ka("nodomevents");l[e]&&(h=b(l[e],!0,za(a,e),g[e]||f))&&(l[e]=h(c),(d[e]||(d[e]=[])).$$inter=!0,(l.$$observers&&l.$$observers[e].$$scope||c).$watch(h,function(a,b){"class"===
-e&&a!=b?l.$updateClass(a,b):l.$set(e,a)}))}}}})}}function Ab(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c;h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=c);break}f&&f.replaceChild(c,d);a=V.createDocumentFragment();a.appendChild(d);B(c).data(B(d).data());qa?(Nb=!0,qa.cleanData([d])):delete B.cache[d[B.expando]];d=1;for(e=b.length;d<e;d++)f=b[d],B(f).remove(),a.appendChild(f),delete b[d];
-b[0]=c;b.length=1}function Y(a,b){return D(function(){return a.apply(null,arguments)},a,b)}function Z(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,va(d))}}var X=function(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a};X.prototype={$normalize:wa,$addClass:function(a){a&&0<a.length&&E.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&E.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=Rc(a,b);c&&
-c.length&&E.addClass(this.$$element,c);(c=Rc(b,a))&&c.length&&E.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=this.$$element[0],g=Jc(f,a),h=ff(f,a),f=a;g?(this.$$element.prop(a,b),e=g):h&&(this[h]=b,f=h);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=Mb(a,"-"));g=ta(this.$$element);if("a"===g&&"href"===a||"img"===g&&"src"===a)this[a]=b=H(b,"src"===a);else if("img"===g&&"srcset"===a){for(var g="",h=P(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(h)?k:/(,)/,h=
-h.split(k),k=Math.floor(h.length/2),l=0;l<k;l++)var q=2*l,g=g+H(P(h[q]),!0),g=g+(" "+P(h[q+1]));h=P(h[2*l]).split(/\s/);g+=H(P(h[0]),!0);2===h.length&&(g+=" "+P(h[1]));this[a]=b=g}!1!==d&&(null===b||b===u?this.$$element.removeAttr(e):this.$$element.attr(e,b));(a=this.$$observers)&&r(a[f],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=ia()),e=d[a]||(d[a]=[]);e.push(b);v.$evalAsync(function(){!e.$$inter&&c.hasOwnProperty(a)&&b(c[a])});return function(){Va(e,
-b)}}};var Na=b.startSymbol(),ga=b.endSymbol(),Pc="{{"==Na||"}}"==ga?oa:function(a){return a.replace(/\{\{/g,Na).replace(/}}/g,ga)},Ga=/^ngAttr[A-Z]/;C.$$addBindingInfo=l?function(a,b){var c=a.data("$binding")||[];y(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:x;C.$$addBindingClass=l?function(a){M(a,"ng-binding")}:x;C.$$addScopeInfo=l?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:x;C.$$addScopeClass=l?function(a,b){M(a,b?"ng-isolate-scope":"ng-scope")}:x;return C}]}
-function wa(b){return bb(b.replace(nf,""))}function Rc(b,a){var c="",d=b.split(/\s+/),e=a.split(/\s+/),f=0;a:for(;f<d.length;f++){for(var g=d[f],h=0;h<e.length;h++)if(g==e[h])continue a;c+=(0<c.length?" ":"")+g}return c}function Qc(b){b=B(b);var a=b.length;if(1>=a)return b;for(;a--;)8===b[a].nodeType&&of.call(b,a,1);return b}function Ce(){var b={},a=!1,c=/^(\S+)(\s+as\s+(\w+))?$/;this.register=function(a,c){La(a,"controller");K(a)?D(b,a):b[a]=c};this.allowGlobals=function(){a=!0};this.$get=["$injector",
-"$window",function(d,e){function f(a,b,c,d){if(!a||!K(a.$scope))throw A("$controller")("noscp",d,b);a.$scope[b]=c}return function(g,h,k,l){var m,p,s;k=!0===k;l&&I(l)&&(s=l);I(g)&&(l=g.match(c),p=l[1],s=s||l[3],g=b.hasOwnProperty(p)?b[p]:tc(h.$scope,p,!0)||(a?tc(e,p,!0):u),pb(g,p,!0));if(k)return k=(y(g)?g[g.length-1]:g).prototype,m=Object.create(k),s&&f(h,s,m,p||g.name),D(function(){d.invoke(g,m,h,p);return m},{instance:m,identifier:s});m=d.instantiate(g,h,p);s&&f(h,s,m,p||g.name);return m}}]}function De(){this.$get=
-["$window",function(b){return B(b.document)}]}function Ee(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function Yb(b,a){if(I(b)){b=b.replace(pf,"");var c=a("Content-Type");if(c&&0===c.indexOf(Sc)&&b.trim()||qf.test(b)&&rf.test(b))b=oc(b)}return b}function Tc(b){var a=ia(),c,d,e;if(!b)return a;r(b.split("\n"),function(b){e=b.indexOf(":");c=R(P(b.substr(0,e)));d=P(b.substr(e+1));c&&(a[c]=a[c]?a[c]+", "+d:d)});return a}function Uc(b){var a=K(b)?b:u;return function(c){a||
-(a=Tc(b));return c?(c=a[R(c)],void 0===c&&(c=null),c):a}}function Vc(b,a,c){if(F(c))return c(b,a);r(c,function(c){b=c(b,a)});return b}function He(){var b=this.defaults={transformResponse:[Yb],transformRequest:[function(a){return K(a)&&"[object File]"!==Ja.call(a)&&"[object Blob]"!==Ja.call(a)?Za(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ua(Zb),put:ua(Zb),patch:ua(Zb)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"},a=!1;this.useApplyAsync=function(b){return z(b)?
-(a=!!b,this):a};var c=this.interceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector",function(d,e,f,g,h,k){function l(a){function c(a){var b=D({},a);b.data=a.data?Vc(a.data,a.headers,d.transformResponse):a.data;a=a.status;return 200<=a&&300>a?b:h.reject(b)}var d={method:"get",transformRequest:b.transformRequest,transformResponse:b.transformResponse},e=function(a){var c=b.headers,d=D({},a.headers),e,f,c=D({},c.common,c[R(a.method)]);a:for(e in c){a=R(e);for(f in d)if(R(f)===
-a)continue a;d[e]=c[e]}(function(a){var b;r(a,function(c,d){F(c)&&(b=c(),null!=b?a[d]=b:delete a[d])})})(d);return d}(a);if(!ha.isObject(a))throw A("$http")("badreq",a);D(d,a);d.headers=e;d.method=rb(d.method);var f=[function(a){e=a.headers;var d=Vc(a.data,Uc(e),a.transformRequest);G(d)&&r(e,function(a,b){"content-type"===R(b)&&delete e[b]});G(a.withCredentials)&&!G(b.withCredentials)&&(a.withCredentials=b.withCredentials);return m(a,d,e).then(c,c)},u],g=h.when(d);for(r(t,function(a){(a.request||
-a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var k=f.shift(),g=g.then(a,k)}g.success=function(a){g.then(function(b){a(b.data,b.status,b.headers,d)});return g};g.error=function(a){g.then(null,function(b){a(b.data,b.status,b.headers,d)});return g};return g}function m(c,f,k){function m(b,c,d,e){function f(){w(c,b,d,e)}M&&(200<=b&&300>b?M.put(r,[b,c,Tc(d),e]):M.remove(r));a?g.$applyAsync(f):(f(),g.$$phase||
-g.$apply())}function w(a,b,d,e){b=Math.max(b,0);(200<=b&&300>b?E.resolve:E.reject)({data:a,status:b,headers:Uc(d),config:c,statusText:e})}function t(){var a=l.pendingRequests.indexOf(c);-1!==a&&l.pendingRequests.splice(a,1)}var E=h.defer(),H=E.promise,M,C,r=p(c.url,c.params);l.pendingRequests.push(c);H.then(t,t);!c.cache&&!b.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(M=K(c.cache)?c.cache:K(b.cache)?b.cache:s);if(M)if(C=M.get(r),z(C)){if(C&&F(C.then))return C.then(t,t),C;y(C)?w(C[1],
-C[0],ua(C[2]),C[3]):w(C,200,{},"OK")}else M.put(r,H);G(C)&&((C=Wc(c.url)?e.cookies()[c.xsrfCookieName||b.xsrfCookieName]:u)&&(k[c.xsrfHeaderName||b.xsrfHeaderName]=C),d(c.method,r,f,m,k,c.timeout,c.withCredentials,c.responseType));return H}function p(a,b){if(!b)return a;var c=[];Bd(b,function(a,b){null===a||G(a)||(y(a)||(a=[a]),r(a,function(a){K(a)&&(a=fa(a)?a.toISOString():Za(a));c.push(Da(b)+"="+Da(a))}))});0<c.length&&(a+=(-1==a.indexOf("?")?"?":"&")+c.join("&"));return a}var s=f("$http"),t=[];
-r(c,function(a){t.unshift(I(a)?k.get(a):k.invoke(a))});l.pendingRequests=[];(function(a){r(arguments,function(a){l[a]=function(b,c){return l(D(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){r(arguments,function(a){l[a]=function(b,c,d){return l(D(d||{},{method:a,url:b,data:c}))}})})("post","put","patch");l.defaults=b;return l}]}function sf(){return new U.XMLHttpRequest}function Ie(){this.$get=["$browser","$window","$document",function(b,a,c){return tf(b,sf,b.defer,a.angular.callbacks,
-c[0])}]}function tf(b,a,c,d,e){function f(a,b,c){var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load",m,!1);f.removeEventListener("error",m,!1);e.body.removeChild(f);f=null;var g=-1,t="unknown";a&&("load"!==a.type||d[b].called||(a={type:"error"}),t=a.type,g="error"===a.type?404:200);c&&c(g,t)};f.addEventListener("load",m,!1);f.addEventListener("error",m,!1);e.body.appendChild(f);return m}return function(e,h,k,l,m,p,s,t){function q(){v&&
-v();w&&w.abort()}function N(a,d,e,f,g){E!==u&&c.cancel(E);v=w=null;a(d,e,f,g);b.$$completeOutstandingRequest(x)}b.$$incOutstandingRequestCount();h=h||b.url();if("jsonp"==R(e)){var n="_"+(d.counter++).toString(36);d[n]=function(a){d[n].data=a;d[n].called=!0};var v=f(h.replace("JSON_CALLBACK","angular.callbacks."+n),n,function(a,b){N(l,a,d[n].data,"",b);d[n]=x})}else{var w=a();w.open(e,h,!0);r(m,function(a,b){z(a)&&w.setRequestHeader(b,a)});w.onload=function(){var a=w.statusText||"",b="response"in w?
-w.response:w.responseText,c=1223===w.status?204:w.status;0===c&&(c=b?200:"file"==Aa(h).protocol?404:0);N(l,c,b,w.getAllResponseHeaders(),a)};e=function(){N(l,-1,null,null,"")};w.onerror=e;w.onabort=e;s&&(w.withCredentials=!0);if(t)try{w.responseType=t}catch(O){if("json"!==t)throw O;}w.send(k||null)}if(0<p)var E=c(q,p);else p&&F(p.then)&&p.then(q)}}function Fe(){var b="{{",a="}}";this.startSymbol=function(a){return a?(b=a,this):b};this.endSymbol=function(b){return b?(a=b,this):a};this.$get=["$parse",
-"$exceptionHandler","$sce",function(c,d,e){function f(a){return"\\\\\\"+a}function g(f,g,t,q){function N(c){return c.replace(l,b).replace(m,a)}function n(a){try{var b=a;a=t?e.getTrusted(t,b):e.valueOf(b);var c;if(q&&!z(a))c=a;else if(null==a)c="";else{switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=Za(a)}c=a}return c}catch(g){c=$b("interr",f,g.toString()),d(c)}}q=!!q;for(var v,w,O=0,E=[],H=[],M=f.length,C=[],r=[];O<M;)if(-1!=(v=f.indexOf(b,O))&&-1!=(w=f.indexOf(a,v+h)))O!==
-v&&C.push(N(f.substring(O,v))),O=f.substring(v+h,w),E.push(O),H.push(c(O,n)),O=w+k,r.push(C.length),C.push("");else{O!==M&&C.push(N(f.substring(O)));break}if(t&&1<C.length)throw $b("noconcat",f);if(!g||E.length){var L=function(a){for(var b=0,c=E.length;b<c;b++){if(q&&G(a[b]))return;C[r[b]]=a[b]}return C.join("")};return D(function(a){var b=0,c=E.length,e=Array(c);try{for(;b<c;b++)e[b]=H[b](a);return L(e)}catch(g){a=$b("interr",f,g.toString()),d(a)}},{exp:f,expressions:E,$$watchDelegate:function(a,
-b,c){var d;return a.$watchGroup(H,function(c,e){var f=L(c);F(b)&&b.call(this,f,c!==e?d:f,a);d=f},c)}})}}var h=b.length,k=a.length,l=new RegExp(b.replace(/./g,f),"g"),m=new RegExp(a.replace(/./g,f),"g");g.startSymbol=function(){return b};g.endSymbol=function(){return a};return g}]}function Ge(){this.$get=["$rootScope","$window","$q","$$q",function(b,a,c,d){function e(e,h,k,l){var m=a.setInterval,p=a.clearInterval,s=0,t=z(l)&&!l,q=(t?d:c).defer(),N=q.promise;k=z(k)?k:0;N.then(null,null,e);N.$$intervalId=
-m(function(){q.notify(s++);0<k&&s>=k&&(q.resolve(s),p(N.$$intervalId),delete f[N.$$intervalId]);t||b.$apply()},h);f[N.$$intervalId]=q;return N}var f={};e.cancel=function(b){return b&&b.$$intervalId in f?(f[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),delete f[b.$$intervalId],!0):!1};return e}]}function Od(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,
-lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",
-fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function ac(b){b=b.split("/");for(var a=b.length;a--;)b[a]=nb(b[a]);return b.join("/")}function Xc(b,a){var c=Aa(b);a.$$protocol=c.protocol;a.$$host=c.hostname;a.$$port=$(c.port)||uf[c.protocol]||null}function Yc(b,a){var c="/"!==b.charAt(0);c&&(b="/"+b);var d=Aa(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?
-d.pathname.substring(1):d.pathname);a.$$search=qc(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function xa(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Fa(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function bc(b){return b.substr(0,Fa(b).lastIndexOf("/")+1)}function cc(b,a){this.$$html5=!0;a=a||"";var c=bc(b);Xc(b,this);this.$$parse=function(a){var b=xa(c,a);if(!I(b))throw eb("ipthprfx",a,c);Yc(b,this);this.$$path||
-(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Kb(this.$$search),b=this.$$hash?"#"+nb(this.$$hash):"";this.$$url=ac(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;(f=xa(b,d))!==u?(g=f,g=(f=xa(a,f))!==u?c+(xa("/",f)||f):b+g):(f=xa(c,d))!==u?g=c+f:c==d+"/"&&(g=c);g&&this.$$parse(g);return!!g}}function dc(b,a){var c=bc(b);Xc(b,this);this.$$parse=function(d){var e=xa(b,d)||
-xa(c,d),e="#"==e.charAt(0)?xa(a,e):this.$$html5?e:"";if(!I(e))throw eb("ihshprfx",d,a);Yc(e,this);d=this.$$path;var f=/^\/[A-Z]:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));f.exec(e)||(d=(e=f.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Kb(this.$$search),e=this.$$hash?"#"+nb(this.$$hash):"";this.$$url=ac(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$parseLinkUrl=function(a,c){return Fa(b)==Fa(a)?(this.$$parse(a),!0):!1}}function Zc(b,
-a){this.$$html5=!0;dc.apply(this,arguments);var c=bc(b);this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;b==Fa(d)?f=d:(g=xa(c,d))?f=b+a+g:c===d+"/"&&(f=c);f&&this.$$parse(f);return!!f};this.$$compose=function(){var c=Kb(this.$$search),e=this.$$hash?"#"+nb(this.$$hash):"";this.$$url=ac(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function Bb(b){return function(){return this[b]}}function $c(b,a){return function(c){if(G(c))return this[b];this[b]=
-a(c);this.$$compose();return this}}function Je(){var b="",a={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(a){return z(a)?(b=a,this):b};this.html5Mode=function(b){return Ua(b)?(a.enabled=b,this):K(b)?(Ua(b.enabled)&&(a.enabled=b.enabled),Ua(b.requireBase)&&(a.requireBase=b.requireBase),Ua(b.rewriteLinks)&&(a.rewriteLinks=b.rewriteLinks),this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,f){function g(a,b,c){var e=k.url(),f=k.$$state;try{d.url(a,
-b,c),k.$$state=d.state()}catch(g){throw k.url(e),k.$$state=f,g;}}function h(a,b){c.$broadcast("$locationChangeSuccess",k.absUrl(),a,k.$$state,b)}var k,l;l=d.baseHref();var m=d.url(),p;if(a.enabled){if(!l&&a.requireBase)throw eb("nobase");p=m.substring(0,m.indexOf("/",m.indexOf("//")+2))+(l||"/");l=e.history?cc:Zc}else p=Fa(m),l=dc;k=new l(p,"#"+b);k.$$parseLinkUrl(m,m);k.$$state=d.state();var s=/^\s*(javascript|mailto):/i;f.on("click",function(b){if(a.rewriteLinks&&!b.ctrlKey&&!b.metaKey&&2!=b.which){for(var e=
-B(b.target);"a"!==ta(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var g=e.prop("href"),h=e.attr("href")||e.attr("xlink:href");K(g)&&"[object SVGAnimatedString]"===g.toString()&&(g=Aa(g.animVal).href);s.test(g)||!g||e.attr("target")||b.isDefaultPrevented()||!k.$$parseLinkUrl(g,h)||(b.preventDefault(),k.absUrl()!=d.url()&&(c.$apply(),U.angular["ff-684208-preventDefault"]=!0))}});k.absUrl()!=m&&d.url(k.absUrl(),!0);var t=!0;d.onUrlChange(function(a,b){c.$evalAsync(function(){var d=k.absUrl(),e=k.$$state,
-f;k.$$parse(a);k.$$state=b;f=c.$broadcast("$locationChangeStart",a,d,b,e).defaultPrevented;k.absUrl()===a&&(f?(k.$$parse(d),k.$$state=e,g(d,!1,e)):(t=!1,h(d,e)))});c.$$phase||c.$digest()});c.$watch(function(){var a=d.url(),b=d.state(),f=k.$$replace,l=a!==k.absUrl()||k.$$html5&&e.history&&b!==k.$$state;if(t||l)t=!1,c.$evalAsync(function(){var d=k.absUrl(),e=c.$broadcast("$locationChangeStart",d,a,k.$$state,b).defaultPrevented;k.absUrl()===d&&(e?(k.$$parse(a),k.$$state=b):(l&&g(d,f,b===k.$$state?null:
-k.$$state),h(a,b)))});k.$$replace=!1});return k}]}function Ke(){var b=!0,a=this;this.debugEnabled=function(a){return z(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||x;a=!1;try{a=!!e.apply}catch(k){}return a?function(){var a=[];r(arguments,function(b){a.push(d(b))});
-return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function ra(b,a){if("__defineGetter__"===b||"__defineSetter__"===b||"__lookupGetter__"===b||"__lookupSetter__"===b||"__proto__"===b)throw la("isecfld",a);return b}function sa(b,a){if(b){if(b.constructor===b)throw la("isecfn",a);if(b.window===b)throw la("isecwindow",a);if(b.children&&(b.nodeName||
-b.prop&&b.attr&&b.find))throw la("isecdom",a);if(b===Object)throw la("isecobj",a);}return b}function ec(b){return b.constant}function Oa(b,a,c,d){sa(b,d);a=a.split(".");for(var e,f=0;1<a.length;f++){e=ra(a.shift(),d);var g=sa(b[e],d);g||(g={},b[e]=g);b=g}e=ra(a.shift(),d);sa(b[e],d);return b[e]=c}function Pa(b){return"constructor"==b}function ad(b,a,c,d,e,f,g){ra(b,f);ra(a,f);ra(c,f);ra(d,f);ra(e,f);var h=function(a){return sa(a,f)},k=g||Pa(b)?h:oa,l=g||Pa(a)?h:oa,m=g||Pa(c)?h:oa,p=g||Pa(d)?h:oa,
-s=g||Pa(e)?h:oa;return function(f,g){var h=g&&g.hasOwnProperty(b)?g:f;if(null==h)return h;h=k(h[b]);if(!a)return h;if(null==h)return u;h=l(h[a]);if(!c)return h;if(null==h)return u;h=m(h[c]);if(!d)return h;if(null==h)return u;h=p(h[d]);return e?null==h?u:h=s(h[e]):h}}function vf(b,a){return function(c,d){return b(c,d,sa,a)}}function bd(b,a,c){var d=a.expensiveChecks,e=d?wf:xf,f=e[b];if(f)return f;var g=b.split("."),h=g.length;if(a.csp)f=6>h?ad(g[0],g[1],g[2],g[3],g[4],c,d):function(a,b){var e=0,f;
-do f=ad(g[e++],g[e++],g[e++],g[e++],g[e++],c,d)(a,b),b=u,a=f;while(e<h);return f};else{var k="";d&&(k+="s = eso(s, fe);\nl = eso(l, fe);\n");var l=d;r(g,function(a,b){ra(a,c);var e=(b?"s":'((l&&l.hasOwnProperty("'+a+'"))?l:s)')+"."+a;if(d||Pa(a))e="eso("+e+", fe)",l=!0;k+="if(s == null) return undefined;\ns="+e+";\n"});k+="return s;";a=new Function("s","l","eso","fe",k);a.toString=ca(k);l&&(a=vf(a,c));f=a}f.sharedGetter=!0;f.assign=function(a,c){return Oa(a,b,c,b)};return e[b]=f}function fc(b){return F(b.valueOf)?
-b.valueOf():yf.call(b)}function Le(){var b=ia(),a=ia();this.$get=["$filter","$sniffer",function(c,d){function e(a){var b=a;a.sharedGetter&&(b=function(b,c){return a(b,c)},b.literal=a.literal,b.constant=a.constant,b.assign=a.assign);return b}function f(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];e.constant||(e.inputs?f(e.inputs,b):-1===b.indexOf(e)&&b.push(e))}return b}function g(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=fc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function h(a,
-b,c,d){var e=d.$$inputs||(d.$$inputs=f(d.inputs,[])),h;if(1===e.length){var k=g,e=e[0];return a.$watch(function(a){var b=e(a);g(b,k)||(h=d(a),k=b&&fc(b));return h},b,c)}for(var l=[],s=0,m=e.length;s<m;s++)l[s]=g;return a.$watch(function(a){for(var b=!1,c=0,f=e.length;c<f;c++){var k=e[c](a);if(b||(b=!g(k,l[c])))l[c]=k&&fc(k)}b&&(h=d(a));return h},b,c)}function k(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;F(b)&&b.apply(this,arguments);z(a)&&d.$$postDigest(function(){z(f)&&
-e()})},c)}function l(a,b,c,d){function e(a){var b=!0;r(a,function(a){z(a)||(b=!1)});return b}var f,g;return f=a.$watch(function(a){return d(a)},function(a,c,d){g=a;F(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function m(a,b,c,d){var e;return e=a.$watch(function(a){return d(a)},function(a,c,d){F(b)&&b.apply(this,arguments);e()},c)}function p(a,b){if(!b)return a;var c=a.$$watchDelegate,c=c!==l&&c!==k?function(c,d){var e=a(c,d);return b(e,c,d)}:function(c,d){var e=a(c,d),
-f=b(e,c,d);return z(e)?f:e};a.$$watchDelegate&&a.$$watchDelegate!==h?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=h,c.inputs=[a]);return c}var s={csp:d.csp,expensiveChecks:!1},t={csp:d.csp,expensiveChecks:!0};return function(d,f,g){var v,w,O;switch(typeof d){case "string":O=d=d.trim();var E=g?a:b;v=E[O];v||(":"===d.charAt(0)&&":"===d.charAt(1)&&(w=!0,d=d.substring(2)),g=g?t:s,v=new gc(g),v=(new fb(v,c,g)).parse(d),v.constant?v.$$watchDelegate=m:w?(v=e(v),v.$$watchDelegate=v.literal?
-l:k):v.inputs&&(v.$$watchDelegate=h),E[O]=v);return p(v,f);case "function":return p(d,f);default:return p(x,f)}}}]}function Ne(){this.$get=["$rootScope","$exceptionHandler",function(b,a){return cd(function(a){b.$evalAsync(a)},a)}]}function Oe(){this.$get=["$browser","$exceptionHandler",function(b,a){return cd(function(a){b.defer(a)},a)}]}function cd(b,a){function c(a,b,c){function d(b){return function(c){e||(e=!0,b.call(a,c))}}var e=!1;return[d(b),d(c)]}function d(){this.$$state={status:0}}function e(a,
-b){return function(c){b.call(a,c)}}function f(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,b(function(){var b,d,e;e=c.pending;c.processScheduled=!1;c.pending=u;for(var f=0,g=e.length;f<g;++f){d=e[f][0];b=e[f][c.status];try{F(b)?d.resolve(b(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),a(h)}}}))}function g(){this.promise=new d;this.resolve=e(this,this.resolve);this.reject=e(this,this.reject);this.notify=e(this,this.notify)}var h=A("$q",TypeError);d.prototype=
-{then:function(a,b,c){var d=new g;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&f(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return l(b,!0,a)},function(b){return l(b,!1,a)},b)}};g.prototype={resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(h("qcycle",a)):this.$$resolve(a))},$$resolve:function(b){var d,e;e=c(this,this.$$resolve,
-this.$$reject);try{if(K(b)||F(b))d=b&&b.then;F(d)?(this.promise.$$state.status=-1,d.call(b,e[0],e[1],this.notify)):(this.promise.$$state.value=b,this.promise.$$state.status=1,f(this.promise.$$state))}catch(g){e[1](g),a(g)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=a;this.promise.$$state.status=2;f(this.promise.$$state)},notify:function(c){var d=this.promise.$$state.pending;0>=this.promise.$$state.status&&d&&d.length&&b(function(){for(var b,
-e,f=0,g=d.length;f<g;f++){e=d[f][0];b=d[f][3];try{e.notify(F(b)?b(c):c)}catch(h){a(h)}}})}};var k=function(a,b){var c=new g;b?c.resolve(a):c.reject(a);return c.promise},l=function(a,b,c){var d=null;try{F(c)&&(d=c())}catch(e){return k(e,!1)}return d&&F(d.then)?d.then(function(){return k(a,b)},function(a){return k(a,!1)}):k(a,b)},m=function(a,b,c,d){var e=new g;e.resolve(a);return e.promise.then(b,c,d)},p=function t(a){if(!F(a))throw h("norslvr",a);if(!(this instanceof t))return new t(a);var b=new g;
-a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise};p.defer=function(){return new g};p.reject=function(a){var b=new g;b.reject(a);return b.promise};p.when=m;p.all=function(a){var b=new g,c=0,d=y(a)?[]:{};r(a,function(a,e){c++;m(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise};return p}function Xe(){this.$get=["$window","$timeout",function(b,a){var c=b.requestAnimationFrame||
-b.webkitRequestAnimationFrame||b.mozRequestAnimationFrame,d=b.cancelAnimationFrame||b.webkitCancelAnimationFrame||b.mozCancelAnimationFrame||b.webkitCancelRequestAnimationFrame,e=!!c,f=e?function(a){var b=c(a);return function(){d(b)}}:function(b){var c=a(b,16.66,!1);return function(){a.cancel(c)}};f.supported=e;return f}]}function Me(){var b=10,a=A("$rootScope"),c=null,d=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$injector","$exceptionHandler","$parse","$browser",
-function(e,f,g,h){function k(){this.$id=++kb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$isolateBindings=null}function l(b){if(q.$$phase)throw a("inprog",q.$$phase);q.$$phase=b}function m(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function p(){}function s(){for(;v.length;)try{v.shift()()}catch(a){f(a)}d=
-null}function t(){null===d&&(d=h.defer(function(){q.$apply(s)}))}k.prototype={constructor:k,$new:function(a,b){function c(){d.$$destroyed=!0}var d;b=b||this;a?(d=new k,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=function(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$id=++kb;this.$$ChildScope=null},this.$$ChildScope.prototype=this),d=new this.$$ChildScope);d.$parent=b;d.$$prevSibling=b.$$childTail;b.$$childHead?
-(b.$$childTail.$$nextSibling=d,b.$$childTail=d):b.$$childHead=b.$$childTail=d;(a||b!=this)&&d.$on("$destroy",c);return d},$watch:function(a,b,d){var e=g(a);if(e.$$watchDelegate)return e.$$watchDelegate(this,b,d,e);var f=this.$$watchers,h={fn:b,last:p,get:e,exp:a,eq:!!d};c=null;F(b)||(h.fn=x);f||(f=this.$$watchers=[]);f.unshift(h);return function(){Va(f,h);c=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=
-!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});r(a,function(a,b){var k=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(k)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!G(e)){if(K(e))if(Ra(e))for(f!==p&&(f=p,n=f.length=0,l++),a=e.length,n!==a&&(l++,f.length=n=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==
-g,d||h===g||(l++,f[b]=g);else{f!==s&&(f=s={},n=0,l++);a=0;for(b in e)e.hasOwnProperty(b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(n++,f[b]=g,l++));if(n>a)for(b in l++,f)e.hasOwnProperty(b)||(n--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,h,k=1<b.length,l=0,m=g(a,c),p=[],s={},q=!0,n=0;return this.$watch(m,function(){q?(q=!1,b(e,e,d)):b(e,h,d);if(k)if(K(e))if(Ra(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)Jb.call(e,
-a)&&(h[a]=e[a]);else h=e})},$digest:function(){var e,g,k,m,t,v,r=b,L,u=[],z,Q;l("$digest");h.$$checkUrlChange();this===q&&null!==d&&(h.defer.cancel(d),s());c=null;do{v=!1;for(L=this;N.length;){try{Q=N.shift(),Q.scope.$eval(Q.expression)}catch(A){f(A)}c=null}a:do{if(m=L.$$watchers)for(t=m.length;t--;)try{if(e=m[t])if((g=e.get(L))!==(k=e.last)&&!(e.eq?pa(g,k):"number"===typeof g&&"number"===typeof k&&isNaN(g)&&isNaN(k)))v=!0,c=e,e.last=e.eq?Ca(g,null):g,e.fn(g,k===p?g:k,L),5>r&&(z=4-r,u[z]||(u[z]=[]),
-u[z].push({msg:F(e.exp)?"fn: "+(e.exp.name||e.exp.toString()):e.exp,newVal:g,oldVal:k}));else if(e===c){v=!1;break a}}catch(B){f(B)}if(!(m=L.$$childHead||L!==this&&L.$$nextSibling))for(;L!==this&&!(m=L.$$nextSibling);)L=L.$parent}while(L=m);if((v||N.length)&&!r--)throw q.$$phase=null,a("infdig",b,u);}while(v||N.length);for(q.$$phase=null;n.length;)try{n.shift()()}catch(da){f(da)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;if(this!==
-q){for(var b in this.$$listenerCount)m(this,this.$$listenerCount[b],b);a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=x;this.$on=this.$watch=this.$watchGroup=function(){return x};this.$$listeners={};this.$parent=this.$$nextSibling=
-this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=this.$$watchers=null}}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a){q.$$phase||N.length||h.defer(function(){N.length&&q.$digest()});N.push({scope:this,expression:a})},$$postDigest:function(a){n.push(a)},$apply:function(a){try{return l("$apply"),this.$eval(a)}catch(b){f(b)}finally{q.$$phase=null;try{q.$digest()}catch(c){throw f(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&v.push(b);t()},$on:function(a,
-b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,m(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=Xa([h],arguments,1),l,m;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(m=d.length;l<
-m;l++)if(d[l])try{d[l].apply(null,k)}catch(p){f(p)}else d.splice(l,1),l--,m--;if(g)return h.currentScope=null,h;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;for(var g=Xa([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,g)}catch(l){f(l)}else d.splice(h,
-1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var q=new k,N=q.$$asyncQueue=[],n=q.$$postDigestQueue=[],v=q.$$applyAsyncQueue=[];return q}]}function Pd(){var b=/^\s*(https?|ftp|mailto|tel|file):/,a=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(a){return z(a)?(b=a,this):b};this.imgSrcSanitizationWhitelist=function(b){return z(b)?(a=b,this):a};this.$get=
-function(){return function(c,d){var e=d?a:b,f;f=Aa(c).href;return""===f||f.match(e)?c:"unsafe:"+f}}}function zf(b){if("self"===b)return b;if(I(b)){if(-1<b.indexOf("***"))throw Ba("iwcard",b);b=dd(b).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+b+"$")}if(lb(b))return new RegExp("^"+b.source+"$");throw Ba("imatcher");}function ed(b){var a=[];z(b)&&r(b,function(b){a.push(zf(b))});return a}function Qe(){this.SCE_CONTEXTS=ma;var b=["self"],a=[];this.resourceUrlWhitelist=function(a){arguments.length&&
-(b=ed(a));return b};this.resourceUrlBlacklist=function(b){arguments.length&&(a=ed(b));return a};this.$get=["$injector",function(c){function d(a,b){return"self"===a?Wc(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw Ba("unsafe");};c.has("$sanitize")&&
-(f=c.get("$sanitize"));var g=e(),h={};h[ma.HTML]=e(g);h[ma.CSS]=e(g);h[ma.URL]=e(g);h[ma.JS]=e(g);h[ma.RESOURCE_URL]=e(h[ma.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Ba("icontext",a,b);if(null===b||b===u||""===b)return b;if("string"!==typeof b)throw Ba("itype",a);return new c(b)},getTrusted:function(c,e){if(null===e||e===u||""===e)return e;var g=h.hasOwnProperty(c)?h[c]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(c===ma.RESOURCE_URL){var g=
-Aa(e.toString()),p,s,t=!1;p=0;for(s=b.length;p<s;p++)if(d(b[p],g)){t=!0;break}if(t)for(p=0,s=a.length;p<s;p++)if(d(a[p],g)){t=!1;break}if(t)return e;throw Ba("insecurl",e.toString());}if(c===ma.HTML)return f(e);throw Ba("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function Pe(){var b=!0;this.enabled=function(a){arguments.length&&(b=!!a);return b};this.$get=["$parse","$sceDelegate",function(a,c){if(b&&8>Ha)throw Ba("iequirks");var d=ua(ma);d.isEnabled=function(){return b};
-d.trustAs=c.trustAs;d.getTrusted=c.getTrusted;d.valueOf=c.valueOf;b||(d.trustAs=d.getTrusted=function(a,b){return b},d.valueOf=oa);d.parseAs=function(b,c){var e=a(c);return e.literal&&e.constant?e:a(c,function(a){return d.getTrusted(b,a)})};var e=d.parseAs,f=d.getTrusted,g=d.trustAs;r(ma,function(a,b){var c=R(b);d[bb("parse_as_"+c)]=function(b){return e(a,b)};d[bb("get_trusted_"+c)]=function(b){return f(a,b)};d[bb("trust_as_"+c)]=function(b){return g(a,b)}});return d}]}function Re(){this.$get=["$window",
-"$document",function(b,a){var c={},d=$((/android (\d+)/.exec(R((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,k=f.body&&f.body.style,l=!1,m=!1;if(k){for(var p in k)if(l=h.exec(p)){g=l[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in k&&"webkit");l=!!("transition"in k||g+"Transition"in k);m=!!("animation"in k||g+"Animation"in k);!d||l&&m||(l=I(f.body.style.webkitTransition),m=I(f.body.style.webkitAnimation))}return{history:!(!b.history||
-!b.history.pushState||4>d||e),hasEvent:function(a){if("input"==a&&9==Ha)return!1;if(G(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:$a(),vendorPrefix:g,transitions:l,animations:m,android:d}}]}function Te(){this.$get=["$templateCache","$http","$q",function(b,a,c){function d(e,f){d.totalPendingRequests++;var g=a.defaults&&a.defaults.transformResponse;y(g)?g=g.filter(function(a){return a!==Yb}):g===Yb&&(g=null);return a.get(e,{cache:b,transformResponse:g}).then(function(a){a=
-a.data;d.totalPendingRequests--;b.put(e,a);return a},function(a){d.totalPendingRequests--;if(!f)throw ka("tpload",e);return c.reject(a)})}d.totalPendingRequests=0;return d}]}function Ue(){this.$get=["$rootScope","$browser","$location",function(b,a,c){return{findBindings:function(a,b,c){a=a.getElementsByClassName("ng-binding");var g=[];r(a,function(a){var d=ha.element(a).data("$binding");d&&r(d,function(d){c?(new RegExp("(^|\\s)"+dd(b)+"(\\s|\\||$)")).test(d)&&g.push(a):-1!=d.indexOf(b)&&g.push(a)})});
-return g},findModels:function(a,b,c){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var k=a.querySelectorAll("["+g[h]+"model"+(c?"=":"*=")+'"'+b+'"]');if(k.length)return k}},getLocation:function(){return c.url()},setLocation:function(a){a!==c.url()&&(c.url(a),b.$digest())},whenStable:function(b){a.notifyWhenNoOutstandingRequests(b)}}}]}function Ve(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(b,a,c,d,e){function f(f,k,l){var m=z(l)&&!l,p=(m?d:c).defer(),s=
-p.promise;k=a.defer(function(){try{p.resolve(f())}catch(a){p.reject(a),e(a)}finally{delete g[s.$$timeoutId]}m||b.$apply()},k);s.$$timeoutId=k;g[k]=p;return s}var g={};f.cancel=function(b){return b&&b.$$timeoutId in g?(g[b.$$timeoutId].reject("canceled"),delete g[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return f}]}function Aa(b){Ha&&(Y.setAttribute("href",b),b=Y.href);Y.setAttribute("href",b);return{href:Y.href,protocol:Y.protocol?Y.protocol.replace(/:$/,""):"",host:Y.host,search:Y.search?
-Y.search.replace(/^\?/,""):"",hash:Y.hash?Y.hash.replace(/^#/,""):"",hostname:Y.hostname,port:Y.port,pathname:"/"===Y.pathname.charAt(0)?Y.pathname:"/"+Y.pathname}}function Wc(b){b=I(b)?Aa(b):b;return b.protocol===fd.protocol&&b.host===fd.host}function We(){this.$get=ca(U)}function Bc(b){function a(c,d){if(K(c)){var e={};r(c,function(b,c){e[c]=a(c,b)});return e}return b.factory(c+"Filter",d)}this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];a("currency",
-gd);a("date",hd);a("filter",Af);a("json",Bf);a("limitTo",Cf);a("lowercase",Df);a("number",id);a("orderBy",jd);a("uppercase",Ef)}function Af(){return function(b,a,c){if(!y(b))return b;var d=typeof c,e=[];e.check=function(a,b){for(var c=0;c<e.length;c++)if(!e[c](a,b))return!1;return!0};"function"!==d&&(c="boolean"===d&&c?function(a,b){return ha.equals(a,b)}:function(a,b){if(a&&b&&"object"===typeof a&&"object"===typeof b){for(var d in a)if("$"!==d.charAt(0)&&Jb.call(a,d)&&c(a[d],b[d]))return!0;return!1}b=
-(""+b).toLowerCase();return-1<(""+a).toLowerCase().indexOf(b)});var f=function(a,b){if("string"===typeof b&&"!"===b.charAt(0))return!f(a,b.substr(1));switch(typeof a){case "boolean":case "number":case "string":return c(a,b);case "object":switch(typeof b){case "object":return c(a,b);default:for(var d in a)if("$"!==d.charAt(0)&&f(a[d],b))return!0}return!1;case "array":for(d=0;d<a.length;d++)if(f(a[d],b))return!0;return!1;default:return!1}};switch(typeof a){case "boolean":case "number":case "string":a=
-{$:a};case "object":for(var g in a)(function(b){"undefined"!==typeof a[b]&&e.push(function(c){return f("$"==b?c:c&&c[b],a[b])})})(g);break;case "function":e.push(a);break;default:return b}d=[];for(g=0;g<b.length;g++){var h=b[g];e.check(h,g)&&d.push(h)}return d}}function gd(b){var a=b.NUMBER_FORMATS;return function(b,d,e){G(d)&&(d=a.CURRENCY_SYM);G(e)&&(e=a.PATTERNS[1].maxFrac);return null==b?b:kd(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,e).replace(/\u00A4/g,d)}}function id(b){var a=b.NUMBER_FORMATS;
-return function(b,d){return null==b?b:kd(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function kd(b,a,c,d,e){if(!isFinite(b)||K(b))return"";var f=0>b;b=Math.abs(b);var g=b+"",h="",k=[],l=!1;if(-1!==g.indexOf("e")){var m=g.match(/([\d\.]+)e(-?)(\d+)/);m&&"-"==m[2]&&m[3]>e+1?(g="0",b=0):(h=g,l=!0)}if(l)0<e&&-1<b&&1>b&&(h=b.toFixed(e));else{g=(g.split(ld)[1]||"").length;G(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);0===b&&(f=!1);b=(""+b).split(ld);
-g=b[0];b=b[1]||"";var m=0,p=a.lgSize,s=a.gSize;if(g.length>=p+s)for(m=g.length-p,l=0;l<m;l++)0===(m-l)%s&&0!==l&&(h+=c),h+=g.charAt(l);for(l=m;l<g.length;l++)0===(g.length-l)%p&&0!==l&&(h+=c),h+=g.charAt(l);for(;b.length<e;)b+="0";e&&"0"!==e&&(h+=d+b.substr(0,e))}k.push(f?a.negPre:a.posPre,h,f?a.negSuf:a.posSuf);return k.join("")}function Cb(b,a,c){var d="";0>b&&(d="-",b=-b);for(b=""+b;b.length<a;)b="0"+b;c&&(b=b.substr(b.length-a));return d+b}function Z(b,a,c,d){c=c||0;return function(e){e=e["get"+
-b]();if(0<c||e>-c)e+=c;0===e&&-12==c&&(e=12);return Cb(e,a,d)}}function Db(b,a){return function(c,d){var e=c["get"+b](),f=rb(a?"SHORT"+b:b);return d[f][e]}}function md(b){var a=(new Date(b,0,1)).getDay();return new Date(b,0,(4>=a?5:12)-a)}function nd(b){return function(a){var c=md(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return Cb(a,b)}}function hd(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:
-a.setFullYear,k=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=$(b[9]+b[10]),g=$(b[9]+b[11]));h.call(a,$(b[1]),$(b[2])-1,$(b[3]));f=$(b[4]||0)-f;g=$(b[5]||0)-g;h=$(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));k.call(a,f,g,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e,f){var g="",h=[],k,l;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;I(c)&&(c=Ff.test(c)?$(c):a(c));X(c)&&(c=new Date(c));if(!fa(c))return c;
-for(;e;)(l=Gf.exec(e))?(h=Xa(h,l,1),e=h.pop()):(h.push(e),e=null);f&&"UTC"===f&&(c=new Date(c.getTime()),c.setMinutes(c.getMinutes()+c.getTimezoneOffset()));r(h,function(a){k=Hf[a];g+=k?k(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Bf(){return function(b){return Za(b,!0)}}function Cf(){return function(b,a){X(b)&&(b=b.toString());if(!y(b)&&!I(b))return b;a=Infinity===Math.abs(Number(a))?Number(a):$(a);if(I(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):
-"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0<a?(d=0,e=a):(d=b.length+a,e=b.length);for(;d<e;d++)c.push(b[d]);return c}}function jd(b){return function(a,c,d){function e(a,b){return b?function(b,c){return a(c,b)}:a}function f(a,b){var c=typeof a,d=typeof b;return c==d?(fa(a)&&fa(b)&&(a=a.valueOf(),b=b.valueOf()),"string"==c&&(a=a.toLowerCase(),b=b.toLowerCase()),a===b?0:a<b?-1:1):c<d?-1:1}if(!Ra(a))return a;c=y(c)?c:[c];0===c.length&&(c=["+"]);c=c.map(function(a){var c=!1,d=a||
-oa;if(I(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))c="-"==a.charAt(0),a=a.substring(1);if(""===a)return e(function(a,b){return f(a,b)},c);d=b(a);if(d.constant){var l=d();return e(function(a,b){return f(a[l],b[l])},c)}}return e(function(a,b){return f(d(a),d(b))},c)});return Ya.call(a).sort(e(function(a,b){for(var d=0;d<c.length;d++){var e=c[d](a,b);if(0!==e)return e}return 0},d))}}function Ia(b){F(b)&&(b={link:b});b.restrict=b.restrict||"AC";return ca(b)}function od(b,a,c,d,e){var f=this,g=[],h=f.$$parentForm=
-b.parent().controller("form")||Eb;f.$error={};f.$$success={};f.$pending=u;f.$name=e(a.name||a.ngForm||"")(c);f.$dirty=!1;f.$pristine=!0;f.$valid=!0;f.$invalid=!1;f.$submitted=!1;h.$addControl(f);f.$rollbackViewValue=function(){r(g,function(a){a.$rollbackViewValue()})};f.$commitViewValue=function(){r(g,function(a){a.$commitViewValue()})};f.$addControl=function(a){La(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a)};f.$$renameControl=function(a,b){var c=a.$name;f[c]===a&&delete f[c];f[b]=a;a.$name=
-b};f.$removeControl=function(a){a.$name&&f[a.$name]===a&&delete f[a.$name];r(f.$pending,function(b,c){f.$setValidity(c,null,a)});r(f.$error,function(b,c){f.$setValidity(c,null,a)});Va(g,a)};pd({ctrl:this,$element:b,set:function(a,b,c){var d=a[b];d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(Va(d,c),0===d.length&&delete a[b])},parentForm:h,$animate:d});f.$setDirty=function(){d.removeClass(b,Qa);d.addClass(b,Fb);f.$dirty=!0;f.$pristine=!1;h.$setDirty()};f.$setPristine=
-function(){d.setClass(b,Qa,Fb+" ng-submitted");f.$dirty=!1;f.$pristine=!0;f.$submitted=!1;r(g,function(a){a.$setPristine()})};f.$setUntouched=function(){r(g,function(a){a.$setUntouched()})};f.$setSubmitted=function(){d.addClass(b,"ng-submitted");f.$submitted=!0;h.$setSubmitted()}}function hc(b){b.$formatters.push(function(a){return b.$isEmpty(a)?a:a.toString()})}function gb(b,a,c,d,e,f){var g=a[0].placeholder,h={},k=R(a[0].type);if(!e.android){var l=!1;a.on("compositionstart",function(a){l=!0});a.on("compositionend",
-function(){l=!1;m()})}var m=function(b){if(!l){var e=a.val(),f=b&&b.type;Ha&&"input"===(b||h).type&&a[0].placeholder!==g?g=a[0].placeholder:("password"===k||c.ngTrim&&"false"===c.ngTrim||(e=P(e)),(d.$viewValue!==e||""===e&&d.$$hasNativeValidators)&&d.$setViewValue(e,f))}};if(e.hasEvent("input"))a.on("input",m);else{var p,s=function(a){p||(p=f.defer(function(){m(a);p=null}))};a.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||s(a)});if(e.hasEvent("paste"))a.on("paste cut",
-s)}a.on("change",m);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)}}function Gb(b,a){return function(c,d){var e,f;if(fa(c))return c;if(I(c)){'"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1));if(If.test(c))return new Date(c);b.lastIndex=0;if(e=b.exec(c))return e.shift(),f=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},r(e,
-function(b,c){c<a.length&&(f[a[c]]=+b)}),new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function hb(b,a,c,d){return function(e,f,g,h,k,l,m){function p(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function s(a){return z(a)?fa(a)?a:c(a):u}qd(e,f,g,h);gb(e,f,g,h,k,l);var t=h&&h.$options&&h.$options.timezone,q;h.$$parserName=b;h.$parsers.push(function(b){return h.$isEmpty(b)?null:a.test(b)?(b=c(b,q),"UTC"===t&&b.setMinutes(b.getMinutes()-b.getTimezoneOffset()),b):u});
-h.$formatters.push(function(a){if(a&&!fa(a))throw Hb("datefmt",a);if(p(a)){if((q=a)&&"UTC"===t){var b=6E4*q.getTimezoneOffset();q=new Date(q.getTime()+b)}return m("date")(a,d,t)}q=null;return""});if(z(g.min)||g.ngMin){var r;h.$validators.min=function(a){return!p(a)||G(r)||c(a)>=r};g.$observe("min",function(a){r=s(a);h.$validate()})}if(z(g.max)||g.ngMax){var n;h.$validators.max=function(a){return!p(a)||G(n)||c(a)<=n};g.$observe("max",function(a){n=s(a);h.$validate()})}}}function qd(b,a,c,d){(d.$$hasNativeValidators=
-K(a[0].validity))&&d.$parsers.push(function(b){var c=a.prop("validity")||{};return c.badInput&&!c.typeMismatch?u:b})}function rd(b,a,c,d,e){if(z(d)){b=b(d);if(!b.constant)throw A("ngModel")("constexpr",c,d);return b(a)}return e}function pd(b){function a(a,b){b&&!f[a]?(l.addClass(e,a),f[a]=!0):!b&&f[a]&&(l.removeClass(e,a),f[a]=!1)}function c(b,c){b=b?"-"+Mb(b,"-"):"";a(ib+b,!0===c);a(sd+b,!1===c)}var d=b.ctrl,e=b.$element,f={},g=b.set,h=b.unset,k=b.parentForm,l=b.$animate;f[sd]=!(f[ib]=e.hasClass(ib));
-d.$setValidity=function(b,e,f){e===u?(d.$pending||(d.$pending={}),g(d.$pending,b,f)):(d.$pending&&h(d.$pending,b,f),td(d.$pending)&&(d.$pending=u));Ua(e)?e?(h(d.$error,b,f),g(d.$$success,b,f)):(g(d.$error,b,f),h(d.$$success,b,f)):(h(d.$error,b,f),h(d.$$success,b,f));d.$pending?(a(ud,!0),d.$valid=d.$invalid=u,c("",null)):(a(ud,!1),d.$valid=td(d.$error),d.$invalid=!d.$valid,c("",d.$valid));e=d.$pending&&d.$pending[b]?u:d.$error[b]?!1:d.$$success[b]?!0:null;c(b,e);k.$setValidity(b,e,d)}}function td(b){if(b)for(var a in b)return!1;
-return!0}function ic(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],m=0;m<b.length;m++)if(e==b[m])continue a;c.push(e)}return c}function e(a){if(!y(a)){if(I(a))return a.split(" ");if(K(a)){var b=[];r(a,function(a,c){a&&(b=b.concat(c.split(" ")))});return b}}return a}return{restrict:"AC",link:function(f,g,h){function k(a,b){var c=g.data("$classCounts")||{},d=[];r(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});
-g.data("$classCounts",c);return d.join(" ")}function l(b){if(!0===a||f.$index%2===a){var l=e(b||[]);if(!m){var t=k(l,1);h.$addClass(t)}else if(!pa(b,m)){var q=e(m),t=d(l,q),l=d(q,l),t=k(t,1),l=k(l,-1);t&&t.length&&c.addClass(g,t);l&&l.length&&c.removeClass(g,l)}}m=ua(b)}var m;f.$watch(h[b],l,!0);h.$observe("class",function(a){l(f.$eval(h[b]))});"ngClass"!==b&&f.$watch("$index",function(c,d){var g=c&1;if(g!==(d&1)){var l=e(f.$eval(h[b]));g===a?(g=k(l,1),h.$addClass(g)):(g=k(l,-1),h.$removeClass(g))}})}}}]}
-var Jf=/^\/(.+)\/([a-z]*)$/,R=function(b){return I(b)?b.toLowerCase():b},Jb=Object.prototype.hasOwnProperty,rb=function(b){return I(b)?b.toUpperCase():b},Ha,B,qa,Ya=[].slice,of=[].splice,Kf=[].push,Ja=Object.prototype.toString,Wa=A("ng"),ha=U.angular||(U.angular={}),ab,kb=0;Ha=V.documentMode;x.$inject=[];oa.$inject=[];var y=Array.isArray,P=function(b){return I(b)?b.trim():b},dd=function(b){return b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},$a=function(){if(z($a.isActive_))return $a.isActive_;
-var b=!(!V.querySelector("[ng-csp]")&&!V.querySelector("[data-ng-csp]"));if(!b)try{new Function("")}catch(a){b=!0}return $a.isActive_=b},ob=["ng-","data-ng-","ng:","x-ng-"],Jd=/[A-Z]/g,sc=!1,Nb,na=1,mb=3,Nd={full:"1.3.5",major:1,minor:3,dot:5,codeName:"cybernetic-mercantilism"};S.expando="ng339";var wb=S.cache={},df=1;S._data=function(b){return this.cache[b[this.expando]]||{}};var Ze=/([\:\-\_]+(.))/g,$e=/^moz([A-Z])/,Lf={mouseleave:"mouseout",mouseenter:"mouseover"},Qb=A("jqLite"),cf=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,
-Pb=/<|&#?\w+;/,af=/<([\w:]+)/,bf=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ja.optgroup=ja.option;ja.tbody=ja.tfoot=ja.colgroup=ja.caption=ja.thead;ja.th=ja.td;var Ka=S.prototype={ready:function(b){function a(){c||(c=
-!0,b())}var c=!1;"complete"===V.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),S(U).on("load",a))},toString:function(){var b=[];r(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?B(this[b]):B(this[this.length+b])},length:0,push:Kf,sort:[].sort,splice:[].splice},yb={};r("multiple selected checked disabled readOnly required open".split(" "),function(b){yb[R(b)]=b});var Kc={};r("input select option textarea button form details".split(" "),function(b){Kc[b]=
-!0});var Lc={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};r({data:Sb,removeData:ub},function(b,a){S[a]=b});r({data:Sb,inheritedData:xb,scope:function(b){return B.data(b,"$scope")||xb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return B.data(b,"$isolateScope")||B.data(b,"$isolateScopeNoTemplate")},controller:Gc,injector:function(b){return xb(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Tb,css:function(b,
-a,c){a=bb(a);if(z(c))b.style[a]=c;else return b.style[a]},attr:function(b,a,c){var d=R(a);if(yb[d])if(z(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||x).specified?d:u;else if(z(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?u:b},prop:function(b,a,c){if(z(c))b[a]=c;else return b[a]},text:function(){function b(a,b){if(G(b)){var d=a.nodeType;return d===na||d===mb?a.textContent:""}a.textContent=b}
-b.$dv="";return b}(),val:function(b,a){if(G(a)){if(b.multiple&&"select"===ta(b)){var c=[];r(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(G(a))return b.innerHTML;tb(b,!0);b.innerHTML=a},empty:Hc},function(b,a){S.prototype[a]=function(a,d){var e,f,g=this.length;if(b!==Hc&&(2==b.length&&b!==Tb&&b!==Gc?a:d)===u){if(K(a)){for(e=0;e<g;e++)if(b===Sb)b(this[e],a);else for(f in a)b(this[e],f,a[f]);return this}e=b.$dv;
-g=e===u?Math.min(g,1):g;for(f=0;f<g;f++){var h=b(this[f],a,d);e=e?e+h:h}return e}for(e=0;e<g;e++)b(this[e],a,d);return this}});r({removeData:ub,on:function a(c,d,e,f){if(z(f))throw Qb("onargs");if(Cc(c)){var g=vb(c,!0);f=g.events;var h=g.handle;h||(h=g.handle=gf(c,f));for(var g=0<=d.indexOf(" ")?d.split(" "):[d],k=g.length;k--;){d=g[k];var l=f[d];l||(f[d]=[],"mouseenter"===d||"mouseleave"===d?a(c,Lf[d],function(a){var c=a.relatedTarget;c&&(c===this||this.contains(c))||h(a,d)}):"$destroy"!==d&&c.addEventListener(d,
-h,!1),l=f[d]);l.push(e)}}},off:Fc,one:function(a,c,d){a=B(a);a.on(c,function f(){a.off(c,d);a.off(c,f)});a.on(c,d)},replaceWith:function(a,c){var d,e=a.parentNode;tb(a);r(new S(c),function(c){d?e.insertBefore(c,d.nextSibling):e.replaceChild(c,a);d=c})},children:function(a){var c=[];r(a.childNodes,function(a){a.nodeType===na&&c.push(a)});return c},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,c){var d=a.nodeType;if(d===na||11===d){c=new S(c);for(var d=0,e=c.length;d<
-e;d++)a.appendChild(c[d])}},prepend:function(a,c){if(a.nodeType===na){var d=a.firstChild;r(new S(c),function(c){a.insertBefore(c,d)})}},wrap:function(a,c){c=B(c).eq(0).clone()[0];var d=a.parentNode;d&&d.replaceChild(c,a);c.appendChild(a)},remove:Ic,detach:function(a){Ic(a,!0)},after:function(a,c){var d=a,e=a.parentNode;c=new S(c);for(var f=0,g=c.length;f<g;f++){var h=c[f];e.insertBefore(h,d.nextSibling);d=h}},addClass:Vb,removeClass:Ub,toggleClass:function(a,c,d){c&&r(c.split(" "),function(c){var f=
-d;G(f)&&(f=!Tb(a,c));(f?Vb:Ub)(a,c)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,c){return a.getElementsByTagName?a.getElementsByTagName(c):[]},clone:Rb,triggerHandler:function(a,c,d){var e,f,g=c.type||c,h=vb(a);if(h=(h=h&&h.events)&&h[g])e={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=
-!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:x,type:g,target:a},c.type&&(e=D(e,c)),c=ua(h),f=d?[e].concat(d):[e],r(c,function(c){e.isImmediatePropagationStopped()||c.apply(a,f)})}},function(a,c){S.prototype[c]=function(c,e,f){for(var g,h=0,k=this.length;h<k;h++)G(g)?(g=a(this[h],c,e,f),z(g)&&(g=B(g))):Ec(g,a(this[h],c,e,f));return z(g)?g:this};S.prototype.bind=S.prototype.on;S.prototype.unbind=S.prototype.off});cb.prototype={put:function(a,
-c){this[Ma(a,this.nextUid)]=c},get:function(a){return this[Ma(a,this.nextUid)]},remove:function(a){var c=this[a=Ma(a,this.nextUid)];delete this[a];return c}};var Nc=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,jf=/,/,kf=/^\s*(_?)(\S+?)\1\s*$/,Mc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ea=A("$injector");Lb.$$annotate=Wb;var Mf=A("$animate"),ze=["$provide",function(a){this.$$selectors={};this.register=function(c,d){var e=c+"-animation";if(c&&"."!=c.charAt(0))throw Mf("notcsel",c);this.$$selectors[c.substr(1)]=e;
-a.factory(e,d)};this.classNameFilter=function(a){1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null);return this.$$classNameFilter};this.$get=["$$q","$$asyncCallback","$rootScope",function(a,d,e){function f(d){var f,g=a.defer();g.promise.$$cancelFn=function(){f&&f()};e.$$postDigest(function(){f=d(function(){g.resolve()})});return g.promise}function g(a,c){var d=[],e=[],f=ia();r((a.attr("class")||"").split(/\s+/),function(a){f[a]=!0});r(c,function(a,c){var g=f[c];!1===a&&g?e.push(c):
-!0!==a||g||d.push(c)});return 0<d.length+e.length&&[d.length?d:null,e.length?e:null]}function h(a,c,d){for(var e=0,f=c.length;e<f;++e)a[c[e]]=d}function k(){m||(m=a.defer(),d(function(){m.resolve();m=null}));return m.promise}function l(a,c){if(ha.isObject(c)){var d=D(c.from||{},c.to||{});a.css(d)}}var m;return{animate:function(a,c,d){l(a,{from:c,to:d});return k()},enter:function(a,c,d,e){l(a,e);d?d.after(a):c.prepend(a);return k()},leave:function(a,c){a.remove();return k()},move:function(a,c,d,e){return this.enter(a,
-c,d,e)},addClass:function(a,c,d){return this.setClass(a,c,[],d)},$$addClassImmediately:function(a,c,d){a=B(a);c=I(c)?c:y(c)?c.join(" "):"";r(a,function(a){Vb(a,c)});l(a,d);return k()},removeClass:function(a,c,d){return this.setClass(a,[],c,d)},$$removeClassImmediately:function(a,c,d){a=B(a);c=I(c)?c:y(c)?c.join(" "):"";r(a,function(a){Ub(a,c)});l(a,d);return k()},setClass:function(a,c,d,e){var k=this,l=!1;a=B(a);var m=a.data("$$animateClasses");m?e&&m.options&&(m.options=ha.extend(m.options||{},e)):
-(m={classes:{},options:e},l=!0);e=m.classes;c=y(c)?c:c.split(" ");d=y(d)?d:d.split(" ");h(e,c,!0);h(e,d,!1);l&&(m.promise=f(function(c){var d=a.data("$$animateClasses");a.removeData("$$animateClasses");if(d){var e=g(a,d.classes);e&&k.$$setClassImmediately(a,e[0],e[1],d.options)}c()}),a.data("$$animateClasses",m));return m.promise},$$setClassImmediately:function(a,c,d,e){c&&this.$$addClassImmediately(a,c);d&&this.$$removeClassImmediately(a,d);l(a,e);return k()},enabled:x,cancel:x}}]}],ka=A("$compile");
-uc.$inject=["$provide","$$sanitizeUriProvider"];var nf=/^((?:x|data)[\:\-_])/i,Sc="application/json",Zb={"Content-Type":Sc+";charset=utf-8"},qf=/^\s*(\[|\{[^\{])/,rf=/[\}\]]\s*$/,pf=/^\)\]\}',?\n/,$b=A("$interpolate"),Nf=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,uf={http:80,https:443,ftp:21},eb=A("$location"),Of={$$html5:!1,$$replace:!1,absUrl:Bb("$$absUrl"),url:function(a){if(G(a))return this.$$url;var c=Nf.exec(a);(c[1]||""===a)&&this.path(decodeURIComponent(c[1]));(c[2]||c[1]||""===a)&&this.search(c[3]||
-"");this.hash(c[5]||"");return this},protocol:Bb("$$protocol"),host:Bb("$$host"),port:Bb("$$port"),path:$c("$$path",function(a){a=null!==a?a.toString():"";return"/"==a.charAt(0)?a:"/"+a}),search:function(a,c){switch(arguments.length){case 0:return this.$$search;case 1:if(I(a)||X(a))a=a.toString(),this.$$search=qc(a);else if(K(a))a=Ca(a,{}),r(a,function(c,e){null==c&&delete a[e]}),this.$$search=a;else throw eb("isrcharg");break;default:G(c)||null===c?delete this.$$search[a]:this.$$search[a]=c}this.$$compose();
-return this},hash:$c("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};r([Zc,dc,cc],function(a){a.prototype=Object.create(Of);a.prototype.state=function(c){if(!arguments.length)return this.$$state;if(a!==cc||!this.$$html5)throw eb("nostate");this.$$state=G(c)?null:c;return this}});var la=A("$parse"),Pf=Function.prototype.call,Qf=Function.prototype.apply,Rf=Function.prototype.bind,Ib=ia();r({"null":function(){return null},"true":function(){return!0},
-"false":function(){return!1},undefined:function(){}},function(a,c){a.constant=a.literal=a.sharedGetter=!0;Ib[c]=a});Ib["this"]=function(a){return a};Ib["this"].sharedGetter=!0;var jb=D(ia(),{"+":function(a,c,d,e){d=d(a,c);e=e(a,c);return z(d)?z(e)?d+e:d:z(e)?e:u},"-":function(a,c,d,e){d=d(a,c);e=e(a,c);return(z(d)?d:0)-(z(e)?e:0)},"*":function(a,c,d,e){return d(a,c)*e(a,c)},"/":function(a,c,d,e){return d(a,c)/e(a,c)},"%":function(a,c,d,e){return d(a,c)%e(a,c)},"===":function(a,c,d,e){return d(a,c)===
-e(a,c)},"!==":function(a,c,d,e){return d(a,c)!==e(a,c)},"==":function(a,c,d,e){return d(a,c)==e(a,c)},"!=":function(a,c,d,e){return d(a,c)!=e(a,c)},"<":function(a,c,d,e){return d(a,c)<e(a,c)},">":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"!":function(a,c,d){return!d(a,c)},"=":!0,"|":!0}),Sf={n:"\n",f:"\f",r:"\r",t:"\t",
-v:"\v","'":"'",'"':'"'},gc=function(a){this.options=a};gc.prototype={constructor:gc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(a))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++;else{var c=
-a+this.peek(),d=c+this.peek(2),e=jb[c],f=jb[d];jb[a]||e||f?(a=f?d:e?c:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,c){return-1!==c.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||
-"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=z(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw la("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index<this.text.length;){var d=R(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var e=this.peek();if("e"==
-d&&this.isExpOperator(e))a+=d;else if(this.isExpOperator(d)&&e&&this.isNumber(e)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||e&&this.isNumber(e)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:c,text:a,constant:!0,value:Number(a)})},readIdent:function(){for(var a=this.index;this.index<this.text.length;){var c=this.text.charAt(this.index);if(!this.isIdent(c)&&!this.isNumber(c))break;this.index++}this.tokens.push({index:a,
-text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var c=this.index;this.index++;for(var d="",e=a,f=!1;this.index<this.text.length;){var g=this.text.charAt(this.index),e=e+g;if(f)"u"===g?(f=this.text.substring(this.index+1,this.index+5),f.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+f+"]"),this.index+=4,d+=String.fromCharCode(parseInt(f,16))):d+=Sf[g]||g,f=!1;else if("\\"===g)f=!0;else{if(g===a){this.index++;this.tokens.push({index:c,text:e,constant:!0,
-value:d});return}d+=g}this.index++}this.throwError("Unterminated quote",c)}};var fb=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d};fb.ZERO=D(function(){return 0},{sharedGetter:!0,constant:!0});fb.prototype={constructor:fb,parse:function(a){this.text=a;this.tokens=this.lexer.lex(a);a=this.statements();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);a.literal=!!a.literal;a.constant=!!a.constant;return a},primary:function(){var a;this.expect("(")?(a=this.filterChain(),
-this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var c,d;c=this.expect("(","[",".");)"("===c.text?(a=this.functionCall(a,d),d=null):"["===c.text?(d=a,a=this.objectIndex(a)):"."===c.text?(d=a,a=this.fieldAccess(a)):this.throwError("IMPOSSIBLE");return a},throwError:function(a,c){throw la("syntax",c.text,a,c.index+
-1,this.text,this.text.substring(c.index));},peekToken:function(){if(0===this.tokens.length)throw la("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){return this.peekAhead(0,a,c,d,e)},peekAhead:function(a,c,d,e,f){if(this.tokens.length>a){a=this.tokens[a];var g=a.text;if(g===c||g===d||g===e||g===f||!(c||d||e||f))return a}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},consume:function(a){if(0===this.tokens.length)throw la("ueoe",this.text);
-var c=this.expect(a);c||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return c},unaryFn:function(a,c){var d=jb[a];return D(function(a,f){return d(a,f,c)},{constant:c.constant,inputs:[c]})},binaryFn:function(a,c,d,e){var f=jb[c];return D(function(c,e){return f(c,e,a,d)},{constant:a.constant&&d.constant,inputs:!e&&[a,d]})},identifier:function(){for(var a=this.consume().text;this.peek(".")&&this.peekAhead(1).identifier&&!this.peekAhead(2,"(");)a+=this.consume().text+this.consume().text;
-return Ib[a]||bd(a,this.options,this.text)},constant:function(){var a=this.consume().value;return D(function(){return a},{constant:!0,literal:!0})},statements:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.filterChain()),!this.expect(";"))return 1===a.length?a[0]:function(c,d){for(var e,f=0,g=a.length;f<g;f++)e=a[f](c,d);return e}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},filter:function(a){var c=this.$filter(this.consume().text),
-d,e;if(this.peek(":"))for(d=[],e=[];this.expect(":");)d.push(this.expression());var f=[a].concat(d||[]);return D(function(f,h){var k=a(f,h);if(e){e[0]=k;for(k=d.length;k--;)e[k+1]=d[k](f,h);return c.apply(u,e)}return c(k)},{constant:!c.$stateful&&f.every(ec),inputs:!c.$stateful&&f})},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary(),c,d;return(d=this.expect("="))?(a.assign||this.throwError("implies assignment but ["+this.text.substring(0,d.index)+"] can not be assigned to",
-d),c=this.ternary(),D(function(d,f){return a.assign(d,c(d,f),f)},{inputs:[a,c]})):a},ternary:function(){var a=this.logicalOR(),c;if(this.expect("?")&&(c=this.assignment(),this.consume(":"))){var d=this.assignment();return D(function(e,f){return a(e,f)?c(e,f):d(e,f)},{constant:a.constant&&c.constant&&d.constant})}return a},logicalOR:function(){for(var a=this.logicalAND(),c;c=this.expect("||");)a=this.binaryFn(a,c.text,this.logicalAND(),!0);return a},logicalAND:function(){var a=this.equality(),c;if(c=
-this.expect("&&"))a=this.binaryFn(a,c.text,this.logicalAND(),!0);return a},equality:function(){var a=this.relational(),c;if(c=this.expect("==","!=","===","!=="))a=this.binaryFn(a,c.text,this.equality());return a},relational:function(){var a=this.additive(),c;if(c=this.expect("<",">","<=",">="))a=this.binaryFn(a,c.text,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.text,this.multiplicative());return a},multiplicative:function(){for(var a=
-this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.text,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(fb.ZERO,a.text,this.unary()):(a=this.expect("!"))?this.unaryFn(a.text,this.unary()):this.primary()},fieldAccess:function(a){var c=this.text,d=this.consume().text,e=bd(d,this.options,c);return D(function(c,d,h){return e(h||a(c,d))},{assign:function(e,g,h){(h=a(e,h))||a.assign(e,h={});return Oa(h,d,g,c)}})},objectIndex:function(a){var c=
-this.text,d=this.expression();this.consume("]");return D(function(e,f){var g=a(e,f),h=d(e,f);ra(h,c);return g?sa(g[h],c):u},{assign:function(e,f,g){var h=ra(d(e,g),c);(g=sa(a(e,g),c))||a.assign(e,g={});return g[h]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this.text,f=d.length?[]:null;return function(g,h){var k=c?c(g,h):g,l=a(g,h,k)||x;if(f)for(var m=d.length;m--;)f[m]=sa(d[m](g,h),e);sa(k,
-e);if(l){if(l.constructor===l)throw la("isecfn",e);if(l===Pf||l===Qf||l===Rf)throw la("isecff",e);}k=l.apply?l.apply(k,f):l(f[0],f[1],f[2],f[3],f[4]);return sa(k,e)}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");return D(function(c,d){for(var e=[],f=0,g=a.length;f<g;f++)e.push(a[f](c,d));return e},{literal:!0,constant:a.every(ec),inputs:a})},object:function(){var a=[],c=[];if("}"!==
-this.peekToken().text){do{if(this.peek("}"))break;var d=this.consume();d.constant?a.push(d.value):d.identifier?a.push(d.text):this.throwError("invalid key",d);this.consume(":");c.push(this.expression())}while(this.expect(","))}this.consume("}");return D(function(d,f){for(var g={},h=0,k=c.length;h<k;h++)g[a[h]]=c[h](d,f);return g},{literal:!0,constant:c.every(ec),inputs:c})}};var xf=ia(),wf=ia(),yf=Object.prototype.valueOf,Ba=A("$sce"),ma={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",
-JS:"js"},ka=A("$compile"),Y=V.createElement("a"),fd=Aa(U.location.href);Bc.$inject=["$provide"];gd.$inject=["$locale"];id.$inject=["$locale"];var ld=".",Hf={yyyy:Z("FullYear",4),yy:Z("FullYear",2,0,!0),y:Z("FullYear",1),MMMM:Db("Month"),MMM:Db("Month",!0),MM:Z("Month",2,1),M:Z("Month",1,1),dd:Z("Date",2),d:Z("Date",1),HH:Z("Hours",2),H:Z("Hours",1),hh:Z("Hours",2,-12),h:Z("Hours",1,-12),mm:Z("Minutes",2),m:Z("Minutes",1),ss:Z("Seconds",2),s:Z("Seconds",1),sss:Z("Milliseconds",3),EEEE:Db("Day"),EEE:Db("Day",
-!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Cb(Math[0<a?"floor":"ceil"](a/60),2)+Cb(Math.abs(a%60),2))},ww:nd(2),w:nd(1)},Gf=/((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/,Ff=/^\-?\d+$/;hd.$inject=["$locale"];var Df=ca(R),Ef=ca(rb);jd.$inject=["$parse"];var Qd=ca({restrict:"E",compile:function(a,c){if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var f="[object SVGAnimatedString]"===
-Ja.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}),sb={};r(yb,function(a,c){if("multiple"!=a){var d=wa("ng-"+c);sb[d]=function(){return{restrict:"A",priority:100,link:function(a,f,g){a.$watch(g[d],function(a){g.$set(c,!!a)})}}}}});r(Lc,function(a,c){sb[c]=function(){return{priority:100,link:function(a,e,f){if("ngPattern"===c&&"/"==f.ngPattern.charAt(0)&&(e=f.ngPattern.match(Jf))){f.$set("ngPattern",new RegExp(e[1],e[2]));return}a.$watch(f[c],function(a){f.$set(c,
-a)})}}}});r(["src","srcset","href"],function(a){var c=wa("ng-"+a);sb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,h=a;"href"===a&&"[object SVGAnimatedString]"===Ja.call(e.prop("href"))&&(h="xlinkHref",f.$attr[h]="xlink:href",g=null);f.$observe(c,function(c){c?(f.$set(h,c),Ha&&g&&e.prop(g,f[h])):"href"===a&&f.$set(h,null)})}}}});var Eb={$addControl:x,$$renameControl:function(a,c){a.$name=c},$removeControl:x,$setValidity:x,$setDirty:x,$setPristine:x,$setSubmitted:x};od.$inject=["$element",
-"$attrs","$scope","$animate","$interpolate"];var vd=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:od,compile:function(a){a.addClass(Qa).addClass(ib);return{pre:function(a,d,g,h){if(!("action"in g)){var k=function(c){a.$apply(function(){h.$commitViewValue();h.$setSubmitted()});c.preventDefault()};d[0].addEventListener("submit",k,!1);d.on("$destroy",function(){c(function(){d[0].removeEventListener("submit",k,!1)},0,!1)})}var l=h.$$parentForm,m=h.$name;
-m&&(Oa(a,m,h,m),g.$observe(g.name?"name":"ngForm",function(c){m!==c&&(Oa(a,m,u,m),m=c,Oa(a,m,h,m),l.$$renameControl(h,m))}));d.on("$destroy",function(){l.$removeControl(h);m&&Oa(a,m,u,m);D(h,Eb)})}}}}}]},Rd=vd(),de=vd(!0),If=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,Tf=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,Uf=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,Vf=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,
-wd=/^(\d{4})-(\d{2})-(\d{2})$/,xd=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,jc=/^(\d{4})-W(\d\d)$/,yd=/^(\d{4})-(\d\d)$/,zd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Wf=/(\s+|^)default(\s+|$)/,Hb=new A("ngModel"),Ad={text:function(a,c,d,e,f,g){gb(a,c,d,e,f,g);hc(e)},date:hb("date",wd,Gb(wd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":hb("datetimelocal",xd,Gb(xd,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:hb("time",zd,Gb(zd,["HH","mm","ss","sss"]),
-"HH:mm:ss.sss"),week:hb("week",jc,function(a,c){if(fa(a))return a;if(I(a)){jc.lastIndex=0;var d=jc.exec(a);if(d){var e=+d[1],f=+d[2],g=d=0,h=0,k=0,l=md(e),f=7*(f-1);c&&(d=c.getHours(),g=c.getMinutes(),h=c.getSeconds(),k=c.getMilliseconds());return new Date(e,0,l.getDate()+f,d,g,h,k)}}return NaN},"yyyy-Www"),month:hb("month",yd,Gb(yd,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,g){qd(a,c,d,e);gb(a,c,d,e,f,g);e.$$parserName="number";e.$parsers.push(function(a){return e.$isEmpty(a)?null:Vf.test(a)?
-parseFloat(a):u});e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!X(a))throw Hb("numfmt",a);a=a.toString()}return a});if(d.min||d.ngMin){var h;e.$validators.min=function(a){return e.$isEmpty(a)||G(h)||a>=h};d.$observe("min",function(a){z(a)&&!X(a)&&(a=parseFloat(a,10));h=X(a)&&!isNaN(a)?a:u;e.$validate()})}if(d.max||d.ngMax){var k;e.$validators.max=function(a){return e.$isEmpty(a)||G(k)||a<=k};d.$observe("max",function(a){z(a)&&!X(a)&&(a=parseFloat(a,10));k=X(a)&&!isNaN(a)?a:u;e.$validate()})}},
-url:function(a,c,d,e,f,g){gb(a,c,d,e,f,g);hc(e);e.$$parserName="url";e.$validators.url=function(a,c){var d=a||c;return e.$isEmpty(d)||Tf.test(d)}},email:function(a,c,d,e,f,g){gb(a,c,d,e,f,g);hc(e);e.$$parserName="email";e.$validators.email=function(a,c){var d=a||c;return e.$isEmpty(d)||Uf.test(d)}},radio:function(a,c,d,e){G(d.name)&&c.attr("name",++kb);c.on("click",function(a){c[0].checked&&e.$setViewValue(d.value,a&&a.type)});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",
-e.$render)},checkbox:function(a,c,d,e,f,g,h,k){var l=rd(k,a,"ngTrueValue",d.ngTrueValue,!0),m=rd(k,a,"ngFalseValue",d.ngFalseValue,!1);c.on("click",function(a){e.$setViewValue(c[0].checked,a&&a.type)});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return!1===a};e.$formatters.push(function(a){return pa(a,l)});e.$parsers.push(function(a){return a?l:m})},hidden:x,button:x,submit:x,reset:x,file:x},vc=["$browser","$sniffer","$filter","$parse",function(a,c,d,e){return{restrict:"E",
-require:["?ngModel"],link:{pre:function(f,g,h,k){k[0]&&(Ad[R(h.type)]||Ad.text)(f,g,h,k[0],c,a,d,e)}}}}],ib="ng-valid",sd="ng-invalid",Qa="ng-pristine",Fb="ng-dirty",ud="ng-pending",Xf=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,c,d,e,f,g,h,k,l,m){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=u;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=
-[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=u;this.$name=m(d.name||"",!1)(a);var p=f(d.ngModel),s=p.assign,t=p,q=s,N=null,n=this;this.$$setOptions=function(a){if((n.$options=a)&&a.getterSetter){var c=f(d.ngModel+"()"),g=f(d.ngModel+"($$$p)");t=function(a){var d=p(a);F(d)&&(d=c(a));return d};q=function(a,c){F(p(a))?g(a,{$$$p:n.$modelValue}):s(a,n.$modelValue)}}else if(!p.assign)throw Hb("nonassign",
-d.ngModel,va(e));};this.$render=x;this.$isEmpty=function(a){return G(a)||""===a||null===a||a!==a};var v=e.inheritedData("$formController")||Eb,w=0;pd({ctrl:this,$element:e,set:function(a,c){a[c]=!0},unset:function(a,c){delete a[c]},parentForm:v,$animate:g});this.$setPristine=function(){n.$dirty=!1;n.$pristine=!0;g.removeClass(e,Fb);g.addClass(e,Qa)};this.$setDirty=function(){n.$dirty=!0;n.$pristine=!1;g.removeClass(e,Qa);g.addClass(e,Fb);v.$setDirty()};this.$setUntouched=function(){n.$touched=!1;
-n.$untouched=!0;g.setClass(e,"ng-untouched","ng-touched")};this.$setTouched=function(){n.$touched=!0;n.$untouched=!1;g.setClass(e,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){h.cancel(N);n.$viewValue=n.$$lastCommittedViewValue;n.$render()};this.$validate=function(){if(!X(n.$modelValue)||!isNaN(n.$modelValue)){var a=n.$$rawModelValue,c=n.$valid,d=n.$modelValue,e=n.$options&&n.$options.allowInvalid;n.$$runValidators(n.$error[n.$$parserName||"parse"]?!1:u,a,n.$$lastCommittedViewValue,
-function(f){e||c===f||(n.$modelValue=f?a:u,n.$modelValue!==d&&n.$$writeModelToScope())})}};this.$$runValidators=function(a,c,d,e){function f(){var a=!0;r(n.$validators,function(e,f){var g=e(c,d);a=a&&g;h(f,g)});return a?!0:(r(n.$asyncValidators,function(a,c){h(c,null)}),!1)}function g(){var a=[],e=!0;r(n.$asyncValidators,function(f,g){var k=f(c,d);if(!k||!F(k.then))throw Hb("$asyncValidators",k);h(g,u);a.push(k.then(function(){h(g,!0)},function(a){e=!1;h(g,!1)}))});a.length?l.all(a).then(function(){k(e)},
-x):k(!0)}function h(a,c){m===w&&n.$setValidity(a,c)}function k(a){m===w&&e(a)}w++;var m=w;(function(a){var c=n.$$parserName||"parse";if(a===u)h(c,null);else if(h(c,a),!a)return r(n.$validators,function(a,c){h(c,null)}),r(n.$asyncValidators,function(a,c){h(c,null)}),!1;return!0})(a)?f()?g():k(!1):k(!1)};this.$commitViewValue=function(){var a=n.$viewValue;h.cancel(N);if(n.$$lastCommittedViewValue!==a||""===a&&n.$$hasNativeValidators)n.$$lastCommittedViewValue=a,n.$pristine&&this.$setDirty(),this.$$parseAndValidate()};
-this.$$parseAndValidate=function(){var c=n.$$lastCommittedViewValue,d=c,e=G(d)?u:!0;if(e)for(var f=0;f<n.$parsers.length;f++)if(d=n.$parsers[f](d),G(d)){e=!1;break}X(n.$modelValue)&&isNaN(n.$modelValue)&&(n.$modelValue=t(a));var g=n.$modelValue,h=n.$options&&n.$options.allowInvalid;n.$$rawModelValue=d;h&&(n.$modelValue=d,n.$modelValue!==g&&n.$$writeModelToScope());n.$$runValidators(e,d,c,function(a){h||(n.$modelValue=a?d:u,n.$modelValue!==g&&n.$$writeModelToScope())})};this.$$writeModelToScope=function(){q(a,
-n.$modelValue);r(n.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}})};this.$setViewValue=function(a,c){n.$viewValue=a;n.$options&&!n.$options.updateOnDefault||n.$$debounceViewValueCommit(c)};this.$$debounceViewValueCommit=function(c){var d=0,e=n.$options;e&&z(e.debounce)&&(e=e.debounce,X(e)?d=e:X(e[c])?d=e[c]:X(e["default"])&&(d=e["default"]));h.cancel(N);d?N=h(function(){n.$commitViewValue()},d):k.$$phase?n.$commitViewValue():a.$apply(function(){n.$commitViewValue()})};a.$watch(function(){var c=
-t(a);if(c!==n.$modelValue){n.$modelValue=n.$$rawModelValue=c;for(var d=n.$formatters,e=d.length,f=c;e--;)f=d[e](f);n.$viewValue!==f&&(n.$viewValue=n.$$lastCommittedViewValue=f,n.$render(),n.$$runValidators(u,c,f,x))}return c})}],se=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:Xf,priority:1,compile:function(c){c.addClass(Qa).addClass("ng-untouched").addClass(ib);return{pre:function(a,c,f,g){var h=g[0],k=g[1]||Eb;h.$$setOptions(g[2]&&g[2].$options);
-k.$addControl(h);f.$observe("name",function(a){h.$name!==a&&k.$$renameControl(h,a)});a.$on("$destroy",function(){k.$removeControl(h)})},post:function(c,e,f,g){var h=g[0];if(h.$options&&h.$options.updateOn)e.on(h.$options.updateOn,function(a){h.$$debounceViewValueCommit(a&&a.type)});e.on("blur",function(e){h.$touched||(a.$$phase?c.$evalAsync(h.$setTouched):c.$apply(h.$setTouched))})}}}}}],ue=ca({restrict:"A",require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),
-xc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){e&&(d.required=!0,e.$validators.required=function(a,c){return!d.required||!e.$isEmpty(c)},d.$observe("required",function(){e.$validate()}))}}},wc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f,g=d.ngPattern||d.pattern;d.$observe("pattern",function(a){I(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw A("ngPattern")("noregexp",g,a,va(c));f=a||u;e.$validate()});e.$validators.pattern=
-function(a){return e.$isEmpty(a)||G(f)||f.test(a)}}}}},zc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=-1;d.$observe("maxlength",function(a){a=$(a);f=isNaN(a)?-1:a;e.$validate()});e.$validators.maxlength=function(a,c){return 0>f||e.$isEmpty(a)||c.length<=f}}}}},yc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=0;d.$observe("minlength",function(a){f=$(a)||0;e.$validate()});e.$validators.minlength=function(a,c){return e.$isEmpty(c)||
-c.length>=f}}}}},te=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,c,d,e){var f=c.attr(d.$attr.ngList)||", ",g="false"!==d.ngTrim,h=g?P(f):f;e.$parsers.push(function(a){if(!G(a)){var c=[];a&&r(a.split(h),function(a){a&&c.push(g?P(a):a)});return c}});e.$formatters.push(function(a){return y(a)?a.join(f):u});e.$isEmpty=function(a){return!a||!a.length}}}},Yf=/^(true|false|\d+)$/,ve=function(){return{restrict:"A",priority:100,compile:function(a,c){return Yf.test(c.ngValue)?
-function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},we=function(){return{restrict:"A",controller:["$scope","$attrs",function(a,c){var d=this;this.$options=a.$eval(c.ngModelOptions);this.$options.updateOn!==u?(this.$options.updateOnDefault=!1,this.$options.updateOn=P(this.$options.updateOn.replace(Wf,function(){d.$options.updateOnDefault=!0;return" "}))):this.$options.updateOnDefault=!0}]}},Wd=["$compile",function(a){return{restrict:"AC",
-compile:function(c){a.$$addBindingClass(c);return function(c,e,f){a.$$addBindingInfo(e,f.ngBind);e=e[0];c.$watch(f.ngBind,function(a){e.textContent=a===u?"":a})}}}}],Yd=["$interpolate","$compile",function(a,c){return{compile:function(d){c.$$addBindingClass(d);return function(d,f,g){d=a(f.attr(g.$attr.ngBindTemplate));c.$$addBindingInfo(f,d.expressions);f=f[0];g.$observe("ngBindTemplate",function(a){f.textContent=a===u?"":a})}}}}],Xd=["$sce","$parse","$compile",function(a,c,d){return{restrict:"A",
-compile:function(e,f){var g=c(f.ngBindHtml),h=c(f.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(e);return function(c,e,f){d.$$addBindingInfo(e,f.ngBindHtml);c.$watch(h,function(){e.html(a.getTrustedHtml(g(c))||"")})}}}}],Zd=ic("",!0),ae=ic("Odd",0),$d=ic("Even",1),be=Ia({compile:function(a,c){c.$set("ngCloak",u);a.removeClass("ng-cloak")}}),ce=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Ac={},Zf={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),
-function(a){var c=wa("ng-"+a);Ac[c]=["$parse","$rootScope",function(d,e){return{restrict:"A",compile:function(f,g){var h=d(g[c],null,!0);return function(c,d){d.on(a,function(d){var f=function(){h(c,{$event:d})};Zf[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var fe=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var h,k,l;c.$watch(e.ngIf,function(c){c?k||g(function(c,f){k=f;c[c.length++]=V.createComment(" end ngIf: "+
-e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)}):(l&&(l.remove(),l=null),k&&(k.$destroy(),k=null),h&&(l=qb(h.clone),a.leave(l).then(function(){l=null}),h=null))})}}}],ge=["$templateRequest","$anchorScroll","$animate","$sce",function(a,c,d,e){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:ha.noop,compile:function(f,g){var h=g.ngInclude||g.src,k=g.onload||"",l=g.autoscroll;return function(f,g,s,r,q){var u=0,n,v,w,O=function(){v&&(v.remove(),v=null);n&&(n.$destroy(),
-n=null);w&&(d.leave(w).then(function(){v=null}),v=w,w=null)};f.$watch(e.parseAsResourceUrl(h),function(e){var h=function(){!z(l)||l&&!f.$eval(l)||c()},s=++u;e?(a(e,!0).then(function(a){if(s===u){var c=f.$new();r.template=a;a=q(c,function(a){O();d.enter(a,null,g).then(h)});n=c;w=a;n.$emit("$includeContentLoaded",e);f.$eval(k)}},function(){s===u&&(O(),f.$emit("$includeContentError",e))}),f.$emit("$includeContentRequested",e)):(O(),r.template=null)})}}}}],xe=["$compile",function(a){return{restrict:"ECA",
-priority:-400,require:"ngInclude",link:function(c,d,e,f){/SVG/.test(d[0].toString())?(d.empty(),a(Dc(f.template,V).childNodes)(c,function(a){d.append(a)},{futureParentElement:d})):(d.html(f.template),a(d.contents())(c))}}}],he=Ia({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),ie=Ia({terminal:!0,priority:1E3}),je=["$locale","$interpolate",function(a,c){var d=/{}/g,e=/^when(Minus)?(.+)$/;return{restrict:"EA",link:function(f,g,h){function k(a){g.text(a||"")}var l=
-h.count,m=h.$attr.when&&g.attr(h.$attr.when),p=h.offset||0,s=f.$eval(m)||{},t={},m=c.startSymbol(),q=c.endSymbol(),u=m+l+"-"+p+q,n=ha.noop,v;r(h,function(a,c){var d=e.exec(c);d&&(d=(d[1]?"-":"")+R(d[2]),s[d]=g.attr(h.$attr[c]))});r(s,function(a,e){t[e]=c(a.replace(d,u))});f.$watch(l,function(c){c=parseFloat(c);var d=isNaN(c);d||c in s||(c=a.pluralCat(c-p));c===v||d&&isNaN(v)||(n(),n=f.$watch(t[c],k),v=c)})}}}],ke=["$parse","$animate",function(a,c){var d=A("ngRepeat"),e=function(a,c,d,e,l,m,p){a[d]=
-e;l&&(a[l]=m);a.$index=c;a.$first=0===c;a.$last=c===p-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(c&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(f,g){var h=g.ngRepeat,k=V.createComment(" end ngRepeat: "+h+" "),l=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!l)throw d("iexp",h);var m=l[1],p=l[2],s=l[3],t=l[4],l=m.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);
-if(!l)throw d("iidexp",m);var q=l[3]||l[1],z=l[2];if(s&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(s)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent)$/.test(s)))throw d("badident",s);var n,v,w,A,E={$id:Ma};t?n=a(t):(w=function(a,c){return Ma(c)},A=function(a){return a});return function(a,f,g,l,m){n&&(v=function(c,d,e){z&&(E[z]=c);E[q]=d;E.$index=e;return n(a,E)});var t=ia();a.$watchCollection(p,function(g){var l,n,p=f[0],C,E=ia(),D,x,G,T,y,F,I;s&&(a[s]=g);if(Ra(g))y=g,n=v||
-w;else{n=v||A;y=[];for(I in g)g.hasOwnProperty(I)&&"$"!=I.charAt(0)&&y.push(I);y.sort()}D=y.length;I=Array(D);for(l=0;l<D;l++)if(x=g===y?l:y[l],G=g[x],T=n(x,G,l),t[T])F=t[T],delete t[T],E[T]=F,I[l]=F;else{if(E[T])throw r(I,function(a){a&&a.scope&&(t[a.id]=a)}),d("dupes",h,T,G);I[l]={id:T,scope:u,clone:u};E[T]=!0}for(C in t){F=t[C];T=qb(F.clone);c.leave(T);if(T[0].parentNode)for(l=0,n=T.length;l<n;l++)T[l].$$NG_REMOVED=!0;F.scope.$destroy()}for(l=0;l<D;l++)if(x=g===y?l:y[l],G=g[x],F=I[l],F.scope){C=
-p;do C=C.nextSibling;while(C&&C.$$NG_REMOVED);F.clone[0]!=C&&c.move(qb(F.clone),null,B(p));p=F.clone[F.clone.length-1];e(F.scope,l,q,G,z,x,D)}else m(function(a,d){F.scope=d;var f=k.cloneNode(!1);a[a.length++]=f;c.enter(a,null,B(p));p=f;F.clone=a;E[F.id]=F;e(F.scope,l,q,G,z,x,D)});t=E})}}}}],le=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngShow,function(c){a[c?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],ee=["$animate",
-function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngHide,function(c){a[c?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],me=Ia(function(a,c,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&r(d,function(a,d){c.css(d,"")});a&&c.css(a)},!0)}),ne=["$animate",function(a){return{restrict:"EA",require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(c,d,e,f){var g=[],h=[],k=[],l=[],m=function(a,c){return function(){a.splice(c,
-1)}};c.$watch(e.ngSwitch||e.on,function(c){var d,e;d=0;for(e=k.length;d<e;++d)a.cancel(k[d]);d=k.length=0;for(e=l.length;d<e;++d){var q=qb(h[d].clone);l[d].$destroy();(k[d]=a.leave(q)).then(m(k,d))}h.length=0;l.length=0;(g=f.cases["!"+c]||f.cases["?"])&&r(g,function(c){c.transclude(function(d,e){l.push(e);var f=c.element;d[d.length++]=V.createComment(" end ngSwitchWhen: ");h.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],oe=Ia({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,
-link:function(a,c,d,e,f){e.cases["!"+d.ngSwitchWhen]=e.cases["!"+d.ngSwitchWhen]||[];e.cases["!"+d.ngSwitchWhen].push({transclude:f,element:c})}}),pe=Ia({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,c,d,e,f){e.cases["?"]=e.cases["?"]||[];e.cases["?"].push({transclude:f,element:c})}}),re=Ia({restrict:"EAC",link:function(a,c,d,e,f){if(!f)throw A("ngTransclude")("orphan",va(c));f(function(a){c.empty();c.append(a)})}}),Sd=["$templateCache",function(a){return{restrict:"E",
-terminal:!0,compile:function(c,d){"text/ng-template"==d.type&&a.put(d.id,c[0].text)}}}],$f=A("ngOptions"),qe=ca({restrict:"A",terminal:!0}),Td=["$compile","$parse",function(a,c){var d=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,e={$setViewValue:x};return{restrict:"E",require:["select","?ngModel"],controller:["$element","$scope","$attrs",function(a,
-c,d){var k=this,l={},m=e,p;k.databound=d.ngModel;k.init=function(a,c,d){m=a;p=d};k.addOption=function(c,d){La(c,'"option value"');l[c]=!0;m.$viewValue==c&&(a.val(c),p.parent()&&p.remove());d&&d[0].hasAttribute("selected")&&(d[0].selected=!0)};k.removeOption=function(a){this.hasOption(a)&&(delete l[a],m.$viewValue===a&&this.renderUnknownOption(a))};k.renderUnknownOption=function(c){c="? "+Ma(c)+" ?";p.val(c);a.prepend(p);a.val(c);p.prop("selected",!0)};k.hasOption=function(a){return l.hasOwnProperty(a)};
-c.$on("$destroy",function(){k.renderUnknownOption=x})}],link:function(e,g,h,k){function l(a,c,d,e){d.$render=function(){var a=d.$viewValue;e.hasOption(a)?(E.parent()&&E.remove(),c.val(a),""===a&&n.prop("selected",!0)):G(a)&&n?c.val(""):e.renderUnknownOption(a)};c.on("change",function(){a.$apply(function(){E.parent()&&E.remove();d.$setViewValue(c.val())})})}function m(a,c,d){var e;d.$render=function(){var a=new cb(d.$viewValue);r(c.find("option"),function(c){c.selected=z(a.get(c.value))})};a.$watch(function(){pa(e,
-d.$viewValue)||(e=ua(d.$viewValue),d.$render())});c.on("change",function(){a.$apply(function(){var a=[];r(c.find("option"),function(c){c.selected&&a.push(c.value)});d.$setViewValue(a)})})}function p(e,f,g){function h(a,c,d){U[x]=d;G&&(U[G]=c);return a(e,U)}function k(a){var c;if(t)if(K&&y(a)){c=new cb([]);for(var d=0;d<a.length;d++)c.put(h(K,null,a[d]),!0)}else c=new cb(a);else K&&(a=h(K,null,a));return function(d,e){var f;f=K?K:D?D:H;return t?z(c.remove(h(f,d,e))):a===h(f,d,e)}}function l(){v||(e.$$postDigest(n),
-v=!0)}function m(a,c,d){a[c]=a[c]||0;a[c]+=d?1:-1}function n(){v=!1;var a={"":[]},c=[""],d,l,p,q,u;p=g.$viewValue;q=M(e)||[];var D=G?Object.keys(q).sort():q,x,B,H,y,Q={};u=k(p);var P=!1,V,X;R={};for(y=0;H=D.length,y<H;y++){x=y;if(G&&(x=D[y],"$"===x.charAt(0)))continue;B=q[x];d=h(I,x,B)||"";(l=a[d])||(l=a[d]=[],c.push(d));d=u(x,B);P=P||d;B=h(E,x,B);B=z(B)?B:"";X=K?K(e,U):G?D[y]:y;K&&(R[X]=x);l.push({id:X,label:B,selected:d})}t||(A||null===p?a[""].unshift({id:"",label:"",selected:!P}):P||a[""].unshift({id:"?",
-label:"",selected:!0}));x=0;for(D=c.length;x<D;x++){d=c[x];l=a[d];S.length<=x?(p={element:F.clone().attr("label",d),label:l.label},q=[p],S.push(q),f.append(p.element)):(q=S[x],p=q[0],p.label!=d&&p.element.attr("label",p.label=d));P=null;y=0;for(H=l.length;y<H;y++)d=l[y],(u=q[y+1])?(P=u.element,u.label!==d.label&&(m(Q,u.label,!1),m(Q,d.label,!0),P.text(u.label=d.label),P.prop("label",u.label)),u.id!==d.id&&P.val(u.id=d.id),P[0].selected!==d.selected&&(P.prop("selected",u.selected=d.selected),Ha&&P.prop("selected",
-u.selected))):(""===d.id&&A?V=A:(V=w.clone()).val(d.id).prop("selected",d.selected).attr("selected",d.selected).prop("label",d.label).text(d.label),q.push(u={element:V,label:d.label,id:d.id,selected:d.selected}),m(Q,d.label,!0),P?P.after(V):p.element.append(V),P=V);for(y++;q.length>y;)d=q.pop(),m(Q,d.label,!1),d.element.remove()}for(;S.length>x;){l=S.pop();for(y=1;y<l.length;++y)m(Q,l[y].label,!1);l[0].element.remove()}r(Q,function(a,c){0<a?s.addOption(c):0>a&&s.removeOption(c)})}var p;if(!(p=q.match(d)))throw $f("iexp",
-q,va(f));var E=c(p[2]||p[1]),x=p[4]||p[6],B=/ as /.test(p[0])&&p[1],D=B?c(B):null,G=p[5],I=c(p[3]||""),H=c(p[2]?p[1]:x),M=c(p[7]),K=p[8]?c(p[8]):null,R={},S=[[{element:f,label:""}]],U={};A&&(a(A)(e),A.removeClass("ng-scope"),A.remove());f.empty();f.on("change",function(){e.$apply(function(){var a=M(e)||[],c;if(t)c=[],r(f.val(),function(d){d=K?R[d]:d;c.push("?"===d?u:""===d?null:h(D?D:H,d,a[d]))});else{var d=K?R[f.val()]:f.val();c="?"===d?u:""===d?null:h(D?D:H,d,a[d])}g.$setViewValue(c);n()})});g.$render=
-n;e.$watchCollection(M,l);e.$watchCollection(function(){var a=M(e),c;if(a&&y(a)){c=Array(a.length);for(var d=0,f=a.length;d<f;d++)c[d]=h(E,d,a[d])}else if(a)for(d in c={},a)a.hasOwnProperty(d)&&(c[d]=h(E,d,a[d]));return c},l);t&&e.$watchCollection(function(){return g.$modelValue},l)}if(k[1]){var s=k[0];k=k[1];var t=h.multiple,q=h.ngOptions,A=!1,n,v=!1,w=B(V.createElement("option")),F=B(V.createElement("optgroup")),E=w.clone();h=0;for(var x=g.children(),D=x.length;h<D;h++)if(""===x[h].value){n=A=x.eq(h);
-break}s.init(k,A,E);t&&(k.$isEmpty=function(a){return!a||0===a.length});q?p(e,g,k):t?m(e,g,k):l(e,g,k,s)}}}}],Vd=["$interpolate",function(a){var c={addOption:x,removeOption:x};return{restrict:"E",priority:100,compile:function(d,e){if(G(e.value)){var f=a(d.text(),!0);f||e.$set("value",d.text())}return function(a,d,e){var l=d.parent(),m=l.data("$selectController")||l.parent().data("$selectController");m&&m.databound||(m=c);f?a.$watch(f,function(a,c){e.$set("value",a);c!==a&&m.removeOption(c);m.addOption(a,
-d)}):m.addOption(e.value,d);d.on("$destroy",function(){m.removeOption(e.value)})}}}}],Ud=ca({restrict:"E",terminal:!1});U.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(Kd(),Md(ha),B(V).ready(function(){Gd(V,rc)}))})(window,document);!window.angular.$$csp()&&window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>');
-//# sourceMappingURL=angular.min.js.map
diff --git a/framework/src/onos/web/gui/src/main/webapp/tp/d3.js b/framework/src/onos/web/gui/src/main/webapp/tp/d3.js
deleted file mode 100644
index fa4d7fa9..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tp/d3.js
+++ /dev/null
@@ -1,9243 +0,0 @@
-!function() {
- var d3 = {
- version: "3.4.12"
- };
- if (!Date.now) Date.now = function() {
- return +new Date();
- };
- var d3_arraySlice = [].slice, d3_array = function(list) {
- return d3_arraySlice.call(list);
- };
- var d3_document = document, d3_documentElement = d3_document.documentElement, d3_window = window;
- try {
- d3_array(d3_documentElement.childNodes)[0].nodeType;
- } catch (e) {
- d3_array = function(list) {
- var i = list.length, array = new Array(i);
- while (i--) array[i] = list[i];
- return array;
- };
- }
- try {
- d3_document.createElement("div").style.setProperty("opacity", 0, "");
- } catch (error) {
- var d3_element_prototype = d3_window.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = d3_window.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;
- d3_element_prototype.setAttribute = function(name, value) {
- d3_element_setAttribute.call(this, name, value + "");
- };
- d3_element_prototype.setAttributeNS = function(space, local, value) {
- d3_element_setAttributeNS.call(this, space, local, value + "");
- };
- d3_style_prototype.setProperty = function(name, value, priority) {
- d3_style_setProperty.call(this, name, value + "", priority);
- };
- }
- d3.ascending = d3_ascending;
- function d3_ascending(a, b) {
- return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
- }
- d3.descending = function(a, b) {
- return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
- };
- d3.min = function(array, f) {
- var i = -1, n = array.length, a, b;
- if (arguments.length === 1) {
- while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined;
- while (++i < n) if ((b = array[i]) != null && a > b) a = b;
- } else {
- while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined;
- while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
- }
- return a;
- };
- d3.max = function(array, f) {
- var i = -1, n = array.length, a, b;
- if (arguments.length === 1) {
- while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined;
- while (++i < n) if ((b = array[i]) != null && b > a) a = b;
- } else {
- while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined;
- while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
- }
- return a;
- };
- d3.extent = function(array, f) {
- var i = -1, n = array.length, a, b, c;
- if (arguments.length === 1) {
- while (++i < n && !((a = c = array[i]) != null && a <= a)) a = c = undefined;
- while (++i < n) if ((b = array[i]) != null) {
- if (a > b) a = b;
- if (c < b) c = b;
- }
- } else {
- while (++i < n && !((a = c = f.call(array, array[i], i)) != null && a <= a)) a = undefined;
- while (++i < n) if ((b = f.call(array, array[i], i)) != null) {
- if (a > b) a = b;
- if (c < b) c = b;
- }
- }
- return [ a, c ];
- };
- d3.sum = function(array, f) {
- var s = 0, n = array.length, a, i = -1;
- if (arguments.length === 1) {
- while (++i < n) if (!isNaN(a = +array[i])) s += a;
- } else {
- while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a;
- }
- return s;
- };
- function d3_number(x) {
- return x != null && !isNaN(x);
- }
- d3.mean = function(array, f) {
- var s = 0, n = array.length, a, i = -1, j = n;
- if (arguments.length === 1) {
- while (++i < n) if (d3_number(a = array[i])) s += a; else --j;
- } else {
- while (++i < n) if (d3_number(a = f.call(array, array[i], i))) s += a; else --j;
- }
- return j ? s / j : undefined;
- };
- d3.quantile = function(values, p) {
- var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;
- return e ? v + e * (values[h] - v) : v;
- };
- d3.median = function(array, f) {
- if (arguments.length > 1) array = array.map(f);
- array = array.filter(d3_number);
- return array.length ? d3.quantile(array.sort(d3_ascending), .5) : undefined;
- };
- function d3_bisector(compare) {
- return {
- left: function(a, x, lo, hi) {
- if (arguments.length < 3) lo = 0;
- if (arguments.length < 4) hi = a.length;
- while (lo < hi) {
- var mid = lo + hi >>> 1;
- if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid;
- }
- return lo;
- },
- right: function(a, x, lo, hi) {
- if (arguments.length < 3) lo = 0;
- if (arguments.length < 4) hi = a.length;
- while (lo < hi) {
- var mid = lo + hi >>> 1;
- if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1;
- }
- return lo;
- }
- };
- }
- var d3_bisect = d3_bisector(d3_ascending);
- d3.bisectLeft = d3_bisect.left;
- d3.bisect = d3.bisectRight = d3_bisect.right;
- d3.bisector = function(f) {
- return d3_bisector(f.length === 1 ? function(d, x) {
- return d3_ascending(f(d), x);
- } : f);
- };
- d3.shuffle = function(array) {
- var m = array.length, t, i;
- while (m) {
- i = Math.random() * m-- | 0;
- t = array[m], array[m] = array[i], array[i] = t;
- }
- return array;
- };
- d3.permute = function(array, indexes) {
- var i = indexes.length, permutes = new Array(i);
- while (i--) permutes[i] = array[indexes[i]];
- return permutes;
- };
- d3.pairs = function(array) {
- var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);
- while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ];
- return pairs;
- };
- d3.zip = function() {
- if (!(n = arguments.length)) return [];
- for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) {
- for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) {
- zip[j] = arguments[j][i];
- }
- }
- return zips;
- };
- function d3_zipLength(d) {
- return d.length;
- }
- d3.transpose = function(matrix) {
- return d3.zip.apply(d3, matrix);
- };
- d3.keys = function(map) {
- var keys = [];
- for (var key in map) keys.push(key);
- return keys;
- };
- d3.values = function(map) {
- var values = [];
- for (var key in map) values.push(map[key]);
- return values;
- };
- d3.entries = function(map) {
- var entries = [];
- for (var key in map) entries.push({
- key: key,
- value: map[key]
- });
- return entries;
- };
- d3.merge = function(arrays) {
- var n = arrays.length, m, i = -1, j = 0, merged, array;
- while (++i < n) j += arrays[i].length;
- merged = new Array(j);
- while (--n >= 0) {
- array = arrays[n];
- m = array.length;
- while (--m >= 0) {
- merged[--j] = array[m];
- }
- }
- return merged;
- };
- var abs = Math.abs;
- d3.range = function(start, stop, step) {
- if (arguments.length < 3) {
- step = 1;
- if (arguments.length < 2) {
- stop = start;
- start = 0;
- }
- }
- if ((stop - start) / step === Infinity) throw new Error("infinite range");
- var range = [], k = d3_range_integerScale(abs(step)), i = -1, j;
- start *= k, stop *= k, step *= k;
- if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k);
- return range;
- };
- function d3_range_integerScale(x) {
- var k = 1;
- while (x * k % 1) k *= 10;
- return k;
- }
- function d3_class(ctor, properties) {
- try {
- for (var key in properties) {
- Object.defineProperty(ctor.prototype, key, {
- value: properties[key],
- enumerable: false
- });
- }
- } catch (e) {
- ctor.prototype = properties;
- }
- }
- d3.map = function(object) {
- var map = new d3_Map();
- if (object instanceof d3_Map) object.forEach(function(key, value) {
- map.set(key, value);
- }); else for (var key in object) map.set(key, object[key]);
- return map;
- };
- function d3_Map() {}
- d3_class(d3_Map, {
- has: d3_map_has,
- get: function(key) {
- return this[d3_map_prefix + key];
- },
- set: function(key, value) {
- return this[d3_map_prefix + key] = value;
- },
- remove: d3_map_remove,
- keys: d3_map_keys,
- values: function() {
- var values = [];
- this.forEach(function(key, value) {
- values.push(value);
- });
- return values;
- },
- entries: function() {
- var entries = [];
- this.forEach(function(key, value) {
- entries.push({
- key: key,
- value: value
- });
- });
- return entries;
- },
- size: d3_map_size,
- empty: d3_map_empty,
- forEach: function(f) {
- for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) f.call(this, key.slice(1), this[key]);
- }
- });
- var d3_map_prefix = "\x00", d3_map_prefixCode = d3_map_prefix.charCodeAt(0);
- function d3_map_has(key) {
- return d3_map_prefix + key in this;
- }
- function d3_map_remove(key) {
- key = d3_map_prefix + key;
- return key in this && delete this[key];
- }
- function d3_map_keys() {
- var keys = [];
- this.forEach(function(key) {
- keys.push(key);
- });
- return keys;
- }
- function d3_map_size() {
- var size = 0;
- for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) ++size;
- return size;
- }
- function d3_map_empty() {
- for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) return false;
- return true;
- }
- d3.nest = function() {
- var nest = {}, keys = [], sortKeys = [], sortValues, rollup;
- function map(mapType, array, depth) {
- if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array;
- var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values;
- while (++i < n) {
- if (values = valuesByKey.get(keyValue = key(object = array[i]))) {
- values.push(object);
- } else {
- valuesByKey.set(keyValue, [ object ]);
- }
- }
- if (mapType) {
- object = mapType();
- setter = function(keyValue, values) {
- object.set(keyValue, map(mapType, values, depth));
- };
- } else {
- object = {};
- setter = function(keyValue, values) {
- object[keyValue] = map(mapType, values, depth);
- };
- }
- valuesByKey.forEach(setter);
- return object;
- }
- function entries(map, depth) {
- if (depth >= keys.length) return map;
- var array = [], sortKey = sortKeys[depth++];
- map.forEach(function(key, keyMap) {
- array.push({
- key: key,
- values: entries(keyMap, depth)
- });
- });
- return sortKey ? array.sort(function(a, b) {
- return sortKey(a.key, b.key);
- }) : array;
- }
- nest.map = function(array, mapType) {
- return map(mapType, array, 0);
- };
- nest.entries = function(array) {
- return entries(map(d3.map, array, 0), 0);
- };
- nest.key = function(d) {
- keys.push(d);
- return nest;
- };
- nest.sortKeys = function(order) {
- sortKeys[keys.length - 1] = order;
- return nest;
- };
- nest.sortValues = function(order) {
- sortValues = order;
- return nest;
- };
- nest.rollup = function(f) {
- rollup = f;
- return nest;
- };
- return nest;
- };
- d3.set = function(array) {
- var set = new d3_Set();
- if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);
- return set;
- };
- function d3_Set() {}
- d3_class(d3_Set, {
- has: d3_map_has,
- add: function(value) {
- this[d3_map_prefix + value] = true;
- return value;
- },
- remove: function(value) {
- value = d3_map_prefix + value;
- return value in this && delete this[value];
- },
- values: d3_map_keys,
- size: d3_map_size,
- empty: d3_map_empty,
- forEach: function(f) {
- for (var value in this) if (value.charCodeAt(0) === d3_map_prefixCode) f.call(this, value.slice(1));
- }
- });
- d3.behavior = {};
- d3.rebind = function(target, source) {
- var i = 1, n = arguments.length, method;
- while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);
- return target;
- };
- function d3_rebind(target, source, method) {
- return function() {
- var value = method.apply(source, arguments);
- return value === source ? target : value;
- };
- }
- function d3_vendorSymbol(object, name) {
- if (name in object) return name;
- name = name.charAt(0).toUpperCase() + name.slice(1);
- for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {
- var prefixName = d3_vendorPrefixes[i] + name;
- if (prefixName in object) return prefixName;
- }
- }
- var d3_vendorPrefixes = [ "webkit", "ms", "moz", "Moz", "o", "O" ];
- function d3_noop() {}
- d3.dispatch = function() {
- var dispatch = new d3_dispatch(), i = -1, n = arguments.length;
- while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
- return dispatch;
- };
- function d3_dispatch() {}
- d3_dispatch.prototype.on = function(type, listener) {
- var i = type.indexOf("."), name = "";
- if (i >= 0) {
- name = type.slice(i + 1);
- type = type.slice(0, i);
- }
- if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);
- if (arguments.length === 2) {
- if (listener == null) for (type in this) {
- if (this.hasOwnProperty(type)) this[type].on(name, null);
- }
- return this;
- }
- };
- function d3_dispatch_event(dispatch) {
- var listeners = [], listenerByName = new d3_Map();
- function event() {
- var z = listeners, i = -1, n = z.length, l;
- while (++i < n) if (l = z[i].on) l.apply(this, arguments);
- return dispatch;
- }
- event.on = function(name, listener) {
- var l = listenerByName.get(name), i;
- if (arguments.length < 2) return l && l.on;
- if (l) {
- l.on = null;
- listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));
- listenerByName.remove(name);
- }
- if (listener) listeners.push(listenerByName.set(name, {
- on: listener
- }));
- return dispatch;
- };
- return event;
- }
- d3.event = null;
- function d3_eventPreventDefault() {
- d3.event.preventDefault();
- }
- function d3_eventSource() {
- var e = d3.event, s;
- while (s = e.sourceEvent) e = s;
- return e;
- }
- function d3_eventDispatch(target) {
- var dispatch = new d3_dispatch(), i = 0, n = arguments.length;
- while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
- dispatch.of = function(thiz, argumentz) {
- return function(e1) {
- try {
- var e0 = e1.sourceEvent = d3.event;
- e1.target = target;
- d3.event = e1;
- dispatch[e1.type].apply(thiz, argumentz);
- } finally {
- d3.event = e0;
- }
- };
- };
- return dispatch;
- }
- d3.requote = function(s) {
- return s.replace(d3_requote_re, "\\$&");
- };
- var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
- var d3_subclass = {}.__proto__ ? function(object, prototype) {
- object.__proto__ = prototype;
- } : function(object, prototype) {
- for (var property in prototype) object[property] = prototype[property];
- };
- function d3_selection(groups) {
- d3_subclass(groups, d3_selectionPrototype);
- return groups;
- }
- var d3_select = function(s, n) {
- return n.querySelector(s);
- }, d3_selectAll = function(s, n) {
- return n.querySelectorAll(s);
- }, d3_selectMatcher = d3_documentElement.matches || d3_documentElement[d3_vendorSymbol(d3_documentElement, "matchesSelector")], d3_selectMatches = function(n, s) {
- return d3_selectMatcher.call(n, s);
- };
- if (typeof Sizzle === "function") {
- d3_select = function(s, n) {
- return Sizzle(s, n)[0] || null;
- };
- d3_selectAll = Sizzle;
- d3_selectMatches = Sizzle.matchesSelector;
- }
- d3.selection = function() {
- return d3_selectionRoot;
- };
- var d3_selectionPrototype = d3.selection.prototype = [];
- d3_selectionPrototype.select = function(selector) {
- var subgroups = [], subgroup, subnode, group, node;
- selector = d3_selection_selector(selector);
- for (var j = -1, m = this.length; ++j < m; ) {
- subgroups.push(subgroup = []);
- subgroup.parentNode = (group = this[j]).parentNode;
- for (var i = -1, n = group.length; ++i < n; ) {
- if (node = group[i]) {
- subgroup.push(subnode = selector.call(node, node.__data__, i, j));
- if (subnode && "__data__" in node) subnode.__data__ = node.__data__;
- } else {
- subgroup.push(null);
- }
- }
- }
- return d3_selection(subgroups);
- };
- function d3_selection_selector(selector) {
- return typeof selector === "function" ? selector : function() {
- return d3_select(selector, this);
- };
- }
- d3_selectionPrototype.selectAll = function(selector) {
- var subgroups = [], subgroup, node;
- selector = d3_selection_selectorAll(selector);
- for (var j = -1, m = this.length; ++j < m; ) {
- for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
- if (node = group[i]) {
- subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j)));
- subgroup.parentNode = node;
- }
- }
- }
- return d3_selection(subgroups);
- };
- function d3_selection_selectorAll(selector) {
- return typeof selector === "function" ? selector : function() {
- return d3_selectAll(selector, this);
- };
- }
- var d3_nsPrefix = {
- svg: "http://www.w3.org/2000/svg",
- xhtml: "http://www.w3.org/1999/xhtml",
- xlink: "http://www.w3.org/1999/xlink",
- xml: "http://www.w3.org/XML/1998/namespace",
- xmlns: "http://www.w3.org/2000/xmlns/"
- };
- d3.ns = {
- prefix: d3_nsPrefix,
- qualify: function(name) {
- var i = name.indexOf(":"), prefix = name;
- if (i >= 0) {
- prefix = name.slice(0, i);
- name = name.slice(i + 1);
- }
- return d3_nsPrefix.hasOwnProperty(prefix) ? {
- space: d3_nsPrefix[prefix],
- local: name
- } : name;
- }
- };
- d3_selectionPrototype.attr = function(name, value) {
- if (arguments.length < 2) {
- if (typeof name === "string") {
- var node = this.node();
- name = d3.ns.qualify(name);
- return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name);
- }
- for (value in name) this.each(d3_selection_attr(value, name[value]));
- return this;
- }
- return this.each(d3_selection_attr(name, value));
- };
- function d3_selection_attr(name, value) {
- name = d3.ns.qualify(name);
- function attrNull() {
- this.removeAttribute(name);
- }
- function attrNullNS() {
- this.removeAttributeNS(name.space, name.local);
- }
- function attrConstant() {
- this.setAttribute(name, value);
- }
- function attrConstantNS() {
- this.setAttributeNS(name.space, name.local, value);
- }
- function attrFunction() {
- var x = value.apply(this, arguments);
- if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);
- }
- function attrFunctionNS() {
- var x = value.apply(this, arguments);
- if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);
- }
- return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;
- }
- function d3_collapse(s) {
- return s.trim().replace(/\s+/g, " ");
- }
- d3_selectionPrototype.classed = function(name, value) {
- if (arguments.length < 2) {
- if (typeof name === "string") {
- var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1;
- if (value = node.classList) {
- while (++i < n) if (!value.contains(name[i])) return false;
- } else {
- value = node.getAttribute("class");
- while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false;
- }
- return true;
- }
- for (value in name) this.each(d3_selection_classed(value, name[value]));
- return this;
- }
- return this.each(d3_selection_classed(name, value));
- };
- function d3_selection_classedRe(name) {
- return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g");
- }
- function d3_selection_classes(name) {
- return (name + "").trim().split(/^|\s+/);
- }
- function d3_selection_classed(name, value) {
- name = d3_selection_classes(name).map(d3_selection_classedName);
- var n = name.length;
- function classedConstant() {
- var i = -1;
- while (++i < n) name[i](this, value);
- }
- function classedFunction() {
- var i = -1, x = value.apply(this, arguments);
- while (++i < n) name[i](this, x);
- }
- return typeof value === "function" ? classedFunction : classedConstant;
- }
- function d3_selection_classedName(name) {
- var re = d3_selection_classedRe(name);
- return function(node, value) {
- if (c = node.classList) return value ? c.add(name) : c.remove(name);
- var c = node.getAttribute("class") || "";
- if (value) {
- re.lastIndex = 0;
- if (!re.test(c)) node.setAttribute("class", d3_collapse(c + " " + name));
- } else {
- node.setAttribute("class", d3_collapse(c.replace(re, " ")));
- }
- };
- }
- d3_selectionPrototype.style = function(name, value, priority) {
- var n = arguments.length;
- if (n < 3) {
- if (typeof name !== "string") {
- if (n < 2) value = "";
- for (priority in name) this.each(d3_selection_style(priority, name[priority], value));
- return this;
- }
- if (n < 2) return d3_window.getComputedStyle(this.node(), null).getPropertyValue(name);
- priority = "";
- }
- return this.each(d3_selection_style(name, value, priority));
- };
- function d3_selection_style(name, value, priority) {
- function styleNull() {
- this.style.removeProperty(name);
- }
- function styleConstant() {
- this.style.setProperty(name, value, priority);
- }
- function styleFunction() {
- var x = value.apply(this, arguments);
- if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);
- }
- return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant;
- }
- d3_selectionPrototype.property = function(name, value) {
- if (arguments.length < 2) {
- if (typeof name === "string") return this.node()[name];
- for (value in name) this.each(d3_selection_property(value, name[value]));
- return this;
- }
- return this.each(d3_selection_property(name, value));
- };
- function d3_selection_property(name, value) {
- function propertyNull() {
- delete this[name];
- }
- function propertyConstant() {
- this[name] = value;
- }
- function propertyFunction() {
- var x = value.apply(this, arguments);
- if (x == null) delete this[name]; else this[name] = x;
- }
- return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant;
- }
- d3_selectionPrototype.text = function(value) {
- return arguments.length ? this.each(typeof value === "function" ? function() {
- var v = value.apply(this, arguments);
- this.textContent = v == null ? "" : v;
- } : value == null ? function() {
- this.textContent = "";
- } : function() {
- this.textContent = value;
- }) : this.node().textContent;
- };
- d3_selectionPrototype.html = function(value) {
- return arguments.length ? this.each(typeof value === "function" ? function() {
- var v = value.apply(this, arguments);
- this.innerHTML = v == null ? "" : v;
- } : value == null ? function() {
- this.innerHTML = "";
- } : function() {
- this.innerHTML = value;
- }) : this.node().innerHTML;
- };
- d3_selectionPrototype.append = function(name) {
- name = d3_selection_creator(name);
- return this.select(function() {
- return this.appendChild(name.apply(this, arguments));
- });
- };
- function d3_selection_creator(name) {
- return typeof name === "function" ? name : (name = d3.ns.qualify(name)).local ? function() {
- return this.ownerDocument.createElementNS(name.space, name.local);
- } : function() {
- return this.ownerDocument.createElementNS(this.namespaceURI, name);
- };
- }
- d3_selectionPrototype.insert = function(name, before) {
- name = d3_selection_creator(name);
- before = d3_selection_selector(before);
- return this.select(function() {
- return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null);
- });
- };
- d3_selectionPrototype.remove = function() {
- return this.each(function() {
- var parent = this.parentNode;
- if (parent) parent.removeChild(this);
- });
- };
- d3_selectionPrototype.data = function(value, key) {
- var i = -1, n = this.length, group, node;
- if (!arguments.length) {
- value = new Array(n = (group = this[0]).length);
- while (++i < n) {
- if (node = group[i]) {
- value[i] = node.__data__;
- }
- }
- return value;
- }
- function bind(group, groupData) {
- var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;
- if (key) {
- var nodeByKeyValue = new d3_Map(), dataByKeyValue = new d3_Map(), keyValues = [], keyValue;
- for (i = -1; ++i < n; ) {
- keyValue = key.call(node = group[i], node.__data__, i);
- if (nodeByKeyValue.has(keyValue)) {
- exitNodes[i] = node;
- } else {
- nodeByKeyValue.set(keyValue, node);
- }
- keyValues.push(keyValue);
- }
- for (i = -1; ++i < m; ) {
- keyValue = key.call(groupData, nodeData = groupData[i], i);
- if (node = nodeByKeyValue.get(keyValue)) {
- updateNodes[i] = node;
- node.__data__ = nodeData;
- } else if (!dataByKeyValue.has(keyValue)) {
- enterNodes[i] = d3_selection_dataNode(nodeData);
- }
- dataByKeyValue.set(keyValue, nodeData);
- nodeByKeyValue.remove(keyValue);
- }
- for (i = -1; ++i < n; ) {
- if (nodeByKeyValue.has(keyValues[i])) {
- exitNodes[i] = group[i];
- }
- }
- } else {
- for (i = -1; ++i < n0; ) {
- node = group[i];
- nodeData = groupData[i];
- if (node) {
- node.__data__ = nodeData;
- updateNodes[i] = node;
- } else {
- enterNodes[i] = d3_selection_dataNode(nodeData);
- }
- }
- for (;i < m; ++i) {
- enterNodes[i] = d3_selection_dataNode(groupData[i]);
- }
- for (;i < n; ++i) {
- exitNodes[i] = group[i];
- }
- }
- enterNodes.update = updateNodes;
- enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;
- enter.push(enterNodes);
- update.push(updateNodes);
- exit.push(exitNodes);
- }
- var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]);
- if (typeof value === "function") {
- while (++i < n) {
- bind(group = this[i], value.call(group, group.parentNode.__data__, i));
- }
- } else {
- while (++i < n) {
- bind(group = this[i], value);
- }
- }
- update.enter = function() {
- return enter;
- };
- update.exit = function() {
- return exit;
- };
- return update;
- };
- function d3_selection_dataNode(data) {
- return {
- __data__: data
- };
- }
- d3_selectionPrototype.datum = function(value) {
- return arguments.length ? this.property("__data__", value) : this.property("__data__");
- };
- d3_selectionPrototype.filter = function(filter) {
- var subgroups = [], subgroup, group, node;
- if (typeof filter !== "function") filter = d3_selection_filter(filter);
- for (var j = 0, m = this.length; j < m; j++) {
- subgroups.push(subgroup = []);
- subgroup.parentNode = (group = this[j]).parentNode;
- for (var i = 0, n = group.length; i < n; i++) {
- if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {
- subgroup.push(node);
- }
- }
- }
- return d3_selection(subgroups);
- };
- function d3_selection_filter(selector) {
- return function() {
- return d3_selectMatches(this, selector);
- };
- }
- d3_selectionPrototype.order = function() {
- for (var j = -1, m = this.length; ++j < m; ) {
- for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {
- if (node = group[i]) {
- if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);
- next = node;
- }
- }
- }
- return this;
- };
- d3_selectionPrototype.sort = function(comparator) {
- comparator = d3_selection_sortComparator.apply(this, arguments);
- for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator);
- return this.order();
- };
- function d3_selection_sortComparator(comparator) {
- if (!arguments.length) comparator = d3_ascending;
- return function(a, b) {
- return a && b ? comparator(a.__data__, b.__data__) : !a - !b;
- };
- }
- d3_selectionPrototype.each = function(callback) {
- return d3_selection_each(this, function(node, i, j) {
- callback.call(node, node.__data__, i, j);
- });
- };
- function d3_selection_each(groups, callback) {
- for (var j = 0, m = groups.length; j < m; j++) {
- for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) {
- if (node = group[i]) callback(node, i, j);
- }
- }
- return groups;
- }
- d3_selectionPrototype.call = function(callback) {
- var args = d3_array(arguments);
- callback.apply(args[0] = this, args);
- return this;
- };
- d3_selectionPrototype.empty = function() {
- return !this.node();
- };
- d3_selectionPrototype.node = function() {
- for (var j = 0, m = this.length; j < m; j++) {
- for (var group = this[j], i = 0, n = group.length; i < n; i++) {
- var node = group[i];
- if (node) return node;
- }
- }
- return null;
- };
- d3_selectionPrototype.size = function() {
- var n = 0;
- d3_selection_each(this, function() {
- ++n;
- });
- return n;
- };
- function d3_selection_enter(selection) {
- d3_subclass(selection, d3_selection_enterPrototype);
- return selection;
- }
- var d3_selection_enterPrototype = [];
- d3.selection.enter = d3_selection_enter;
- d3.selection.enter.prototype = d3_selection_enterPrototype;
- d3_selection_enterPrototype.append = d3_selectionPrototype.append;
- d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;
- d3_selection_enterPrototype.node = d3_selectionPrototype.node;
- d3_selection_enterPrototype.call = d3_selectionPrototype.call;
- d3_selection_enterPrototype.size = d3_selectionPrototype.size;
- d3_selection_enterPrototype.select = function(selector) {
- var subgroups = [], subgroup, subnode, upgroup, group, node;
- for (var j = -1, m = this.length; ++j < m; ) {
- upgroup = (group = this[j]).update;
- subgroups.push(subgroup = []);
- subgroup.parentNode = group.parentNode;
- for (var i = -1, n = group.length; ++i < n; ) {
- if (node = group[i]) {
- subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j));
- subnode.__data__ = node.__data__;
- } else {
- subgroup.push(null);
- }
- }
- }
- return d3_selection(subgroups);
- };
- d3_selection_enterPrototype.insert = function(name, before) {
- if (arguments.length < 2) before = d3_selection_enterInsertBefore(this);
- return d3_selectionPrototype.insert.call(this, name, before);
- };
- function d3_selection_enterInsertBefore(enter) {
- var i0, j0;
- return function(d, i, j) {
- var group = enter[j].update, n = group.length, node;
- if (j != j0) j0 = j, i0 = 0;
- if (i >= i0) i0 = i + 1;
- while (!(node = group[i0]) && ++i0 < n) ;
- return node;
- };
- }
- d3_selectionPrototype.transition = function() {
- var id = d3_transitionInheritId || ++d3_transitionId, subgroups = [], subgroup, node, transition = d3_transitionInherit || {
- time: Date.now(),
- ease: d3_ease_cubicInOut,
- delay: 0,
- duration: 250
- };
- for (var j = -1, m = this.length; ++j < m; ) {
- subgroups.push(subgroup = []);
- for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
- if (node = group[i]) d3_transitionNode(node, i, id, transition);
- subgroup.push(node);
- }
- }
- return d3_transition(subgroups, id);
- };
- d3_selectionPrototype.interrupt = function() {
- return this.each(d3_selection_interrupt);
- };
- function d3_selection_interrupt() {
- var lock = this.__transition__;
- if (lock) ++lock.active;
- }
- d3.select = function(node) {
- var group = [ typeof node === "string" ? d3_select(node, d3_document) : node ];
- group.parentNode = d3_documentElement;
- return d3_selection([ group ]);
- };
- d3.selectAll = function(nodes) {
- var group = d3_array(typeof nodes === "string" ? d3_selectAll(nodes, d3_document) : nodes);
- group.parentNode = d3_documentElement;
- return d3_selection([ group ]);
- };
- var d3_selectionRoot = d3.select(d3_documentElement);
- d3_selectionPrototype.on = function(type, listener, capture) {
- var n = arguments.length;
- if (n < 3) {
- if (typeof type !== "string") {
- if (n < 2) listener = false;
- for (capture in type) this.each(d3_selection_on(capture, type[capture], listener));
- return this;
- }
- if (n < 2) return (n = this.node()["__on" + type]) && n._;
- capture = false;
- }
- return this.each(d3_selection_on(type, listener, capture));
- };
- function d3_selection_on(type, listener, capture) {
- var name = "__on" + type, i = type.indexOf("."), wrap = d3_selection_onListener;
- if (i > 0) type = type.slice(0, i);
- var filter = d3_selection_onFilters.get(type);
- if (filter) type = filter, wrap = d3_selection_onFilter;
- function onRemove() {
- var l = this[name];
- if (l) {
- this.removeEventListener(type, l, l.$);
- delete this[name];
- }
- }
- function onAdd() {
- var l = wrap(listener, d3_array(arguments));
- onRemove.call(this);
- this.addEventListener(type, this[name] = l, l.$ = capture);
- l._ = listener;
- }
- function removeAll() {
- var re = new RegExp("^__on([^.]+)" + d3.requote(type) + "$"), match;
- for (var name in this) {
- if (match = name.match(re)) {
- var l = this[name];
- this.removeEventListener(match[1], l, l.$);
- delete this[name];
- }
- }
- }
- return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll;
- }
- var d3_selection_onFilters = d3.map({
- mouseenter: "mouseover",
- mouseleave: "mouseout"
- });
- d3_selection_onFilters.forEach(function(k) {
- if ("on" + k in d3_document) d3_selection_onFilters.remove(k);
- });
- function d3_selection_onListener(listener, argumentz) {
- return function(e) {
- var o = d3.event;
- d3.event = e;
- argumentz[0] = this.__data__;
- try {
- listener.apply(this, argumentz);
- } finally {
- d3.event = o;
- }
- };
- }
- function d3_selection_onFilter(listener, argumentz) {
- var l = d3_selection_onListener(listener, argumentz);
- return function(e) {
- var target = this, related = e.relatedTarget;
- if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) {
- l.call(target, e);
- }
- };
- }
- var d3_event_dragSelect = "onselectstart" in d3_document ? null : d3_vendorSymbol(d3_documentElement.style, "userSelect"), d3_event_dragId = 0;
- function d3_event_dragSuppress() {
- var name = ".dragsuppress-" + ++d3_event_dragId, click = "click" + name, w = d3.select(d3_window).on("touchmove" + name, d3_eventPreventDefault).on("dragstart" + name, d3_eventPreventDefault).on("selectstart" + name, d3_eventPreventDefault);
- if (d3_event_dragSelect) {
- var style = d3_documentElement.style, select = style[d3_event_dragSelect];
- style[d3_event_dragSelect] = "none";
- }
- return function(suppressClick) {
- w.on(name, null);
- if (d3_event_dragSelect) style[d3_event_dragSelect] = select;
- if (suppressClick) {
- function off() {
- w.on(click, null);
- }
- w.on(click, function() {
- d3_eventPreventDefault();
- off();
- }, true);
- setTimeout(off, 0);
- }
- };
- }
- d3.mouse = function(container) {
- return d3_mousePoint(container, d3_eventSource());
- };
- var d3_mouse_bug44083 = /WebKit/.test(d3_window.navigator.userAgent) ? -1 : 0;
- function d3_mousePoint(container, e) {
- if (e.changedTouches) e = e.changedTouches[0];
- var svg = container.ownerSVGElement || container;
- if (svg.createSVGPoint) {
- var point = svg.createSVGPoint();
- if (d3_mouse_bug44083 < 0 && (d3_window.scrollX || d3_window.scrollY)) {
- svg = d3.select("body").append("svg").style({
- position: "absolute",
- top: 0,
- left: 0,
- margin: 0,
- padding: 0,
- border: "none"
- }, "important");
- var ctm = svg[0][0].getScreenCTM();
- d3_mouse_bug44083 = !(ctm.f || ctm.e);
- svg.remove();
- }
- if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX,
- point.y = e.clientY;
- point = point.matrixTransform(container.getScreenCTM().inverse());
- return [ point.x, point.y ];
- }
- var rect = container.getBoundingClientRect();
- return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];
- }
- d3.touch = function(container, touches, identifier) {
- if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;
- if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {
- if ((touch = touches[i]).identifier === identifier) {
- return d3_mousePoint(container, touch);
- }
- }
- };
- d3.behavior.drag = function() {
- var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_behavior_dragMouseSubject, "mousemove", "mouseup"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_behavior_dragTouchSubject, "touchmove", "touchend");
- function drag() {
- this.on("mousedown.drag", mousedown).on("touchstart.drag", touchstart);
- }
- function dragstart(id, position, subject, move, end) {
- return function() {
- var that = this, target = d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = ".drag" + (dragId == null ? "" : "-" + dragId), dragOffset, dragSubject = d3.select(subject()).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(), position0 = position(parent, dragId);
- if (origin) {
- dragOffset = origin.apply(that, arguments);
- dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ];
- } else {
- dragOffset = [ 0, 0 ];
- }
- dispatch({
- type: "dragstart"
- });
- function moved() {
- var position1 = position(parent, dragId), dx, dy;
- if (!position1) return;
- dx = position1[0] - position0[0];
- dy = position1[1] - position0[1];
- dragged |= dx | dy;
- position0 = position1;
- dispatch({
- type: "drag",
- x: position1[0] + dragOffset[0],
- y: position1[1] + dragOffset[1],
- dx: dx,
- dy: dy
- });
- }
- function ended() {
- if (!position(parent, dragId)) return;
- dragSubject.on(move + dragName, null).on(end + dragName, null);
- dragRestore(dragged && d3.event.target === target);
- dispatch({
- type: "dragend"
- });
- }
- };
- }
- drag.origin = function(x) {
- if (!arguments.length) return origin;
- origin = x;
- return drag;
- };
- return d3.rebind(drag, event, "on");
- };
- function d3_behavior_dragTouchId() {
- return d3.event.changedTouches[0].identifier;
- }
- function d3_behavior_dragTouchSubject() {
- return d3.event.target;
- }
- function d3_behavior_dragMouseSubject() {
- return d3_window;
- }
- d3.touches = function(container, touches) {
- if (arguments.length < 2) touches = d3_eventSource().touches;
- return touches ? d3_array(touches).map(function(touch) {
- var point = d3_mousePoint(container, touch);
- point.identifier = touch.identifier;
- return point;
- }) : [];
- };
- var π = Math.PI, τ = 2 * π, halfπ = π / 2, ε = 1e-6, ε2 = ε * ε, d3_radians = π / 180, d3_degrees = 180 / π;
- function d3_sgn(x) {
- return x > 0 ? 1 : x < 0 ? -1 : 0;
- }
- function d3_cross2d(a, b, c) {
- return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
- }
- function d3_acos(x) {
- return x > 1 ? 0 : x < -1 ? π : Math.acos(x);
- }
- function d3_asin(x) {
- return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x);
- }
- function d3_sinh(x) {
- return ((x = Math.exp(x)) - 1 / x) / 2;
- }
- function d3_cosh(x) {
- return ((x = Math.exp(x)) + 1 / x) / 2;
- }
- function d3_tanh(x) {
- return ((x = Math.exp(2 * x)) - 1) / (x + 1);
- }
- function d3_haversin(x) {
- return (x = Math.sin(x / 2)) * x;
- }
- var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4;
- d3.interpolateZoom = function(p0, p1) {
- var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2];
- var dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1), dr = r1 - r0, S = (dr || Math.log(w1 / w0)) / ρ;
- function interpolate(t) {
- var s = t * S;
- if (dr) {
- var coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));
- return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ];
- }
- return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * s) ];
- }
- interpolate.duration = S * 1e3;
- return interpolate;
- };
- d3.behavior.zoom = function() {
- var view = {
- x: 0,
- y: 0,
- k: 1
- }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", mousewheelTimer, touchstart = "touchstart.zoom", touchtime, event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"), x0, x1, y0, y1;
- function zoom(g) {
- g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + ".zoom", mousewheeled).on("dblclick.zoom", dblclicked).on(touchstart, touchstarted);
- }
- zoom.event = function(g) {
- g.each(function() {
- var dispatch = event.of(this, arguments), view1 = view;
- if (d3_transitionInheritId) {
- d3.select(this).transition().each("start.zoom", function() {
- view = this.__chart__ || {
- x: 0,
- y: 0,
- k: 1
- };
- zoomstarted(dispatch);
- }).tween("zoom:zoom", function() {
- var dx = size[0], dy = size[1], cx = dx / 2, cy = dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);
- return function(t) {
- var l = i(t), k = dx / l[2];
- this.__chart__ = view = {
- x: cx - l[0] * k,
- y: cy - l[1] * k,
- k: k
- };
- zoomed(dispatch);
- };
- }).each("end.zoom", function() {
- zoomended(dispatch);
- });
- } else {
- this.__chart__ = view;
- zoomstarted(dispatch);
- zoomed(dispatch);
- zoomended(dispatch);
- }
- });
- };
- zoom.translate = function(_) {
- if (!arguments.length) return [ view.x, view.y ];
- view = {
- x: +_[0],
- y: +_[1],
- k: view.k
- };
- rescale();
- return zoom;
- };
- zoom.scale = function(_) {
- if (!arguments.length) return view.k;
- view = {
- x: view.x,
- y: view.y,
- k: +_
- };
- rescale();
- return zoom;
- };
- zoom.scaleExtent = function(_) {
- if (!arguments.length) return scaleExtent;
- scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ];
- return zoom;
- };
- zoom.center = function(_) {
- if (!arguments.length) return center;
- center = _ && [ +_[0], +_[1] ];
- return zoom;
- };
- zoom.size = function(_) {
- if (!arguments.length) return size;
- size = _ && [ +_[0], +_[1] ];
- return zoom;
- };
- zoom.x = function(z) {
- if (!arguments.length) return x1;
- x1 = z;
- x0 = z.copy();
- view = {
- x: 0,
- y: 0,
- k: 1
- };
- return zoom;
- };
- zoom.y = function(z) {
- if (!arguments.length) return y1;
- y1 = z;
- y0 = z.copy();
- view = {
- x: 0,
- y: 0,
- k: 1
- };
- return zoom;
- };
- function location(p) {
- return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ];
- }
- function point(l) {
- return [ l[0] * view.k + view.x, l[1] * view.k + view.y ];
- }
- function scaleTo(s) {
- view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));
- }
- function translateTo(p, l) {
- l = point(l);
- view.x += p[0] - l[0];
- view.y += p[1] - l[1];
- }
- function rescale() {
- if (x1) x1.domain(x0.range().map(function(x) {
- return (x - view.x) / view.k;
- }).map(x0.invert));
- if (y1) y1.domain(y0.range().map(function(y) {
- return (y - view.y) / view.k;
- }).map(y0.invert));
- }
- function zoomstarted(dispatch) {
- dispatch({
- type: "zoomstart"
- });
- }
- function zoomed(dispatch) {
- rescale();
- dispatch({
- type: "zoom",
- scale: view.k,
- translate: [ view.x, view.y ]
- });
- }
- function zoomended(dispatch) {
- dispatch({
- type: "zoomend"
- });
- }
- function mousedowned() {
- var that = this, target = d3.event.target, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress();
- d3_selection_interrupt.call(that);
- zoomstarted(dispatch);
- function moved() {
- dragged = 1;
- translateTo(d3.mouse(that), location0);
- zoomed(dispatch);
- }
- function ended() {
- subject.on(mousemove, null).on(mouseup, null);
- dragRestore(dragged && d3.event.target === target);
- zoomended(dispatch);
- }
- }
- function touchstarted() {
- var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, touchmove = "touchmove" + zoomName, touchend = "touchend" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress();
- d3_selection_interrupt.call(that);
- started();
- zoomstarted(dispatch);
- subject.on(mousedown, null).on(touchstart, started);
- function relocate() {
- var touches = d3.touches(that);
- scale0 = view.k;
- touches.forEach(function(t) {
- if (t.identifier in locations0) locations0[t.identifier] = location(t);
- });
- return touches;
- }
- function started() {
- var target = d3.event.target;
- d3.select(target).on(touchmove, moved).on(touchend, ended);
- targets.push(target);
- var changed = d3.event.changedTouches;
- for (var i = 0, n = changed.length; i < n; ++i) {
- locations0[changed[i].identifier] = null;
- }
- var touches = relocate(), now = Date.now();
- if (touches.length === 1) {
- if (now - touchtime < 500) {
- var p = touches[0], l = locations0[p.identifier];
- scaleTo(view.k * 2);
- translateTo(p, l);
- d3_eventPreventDefault();
- zoomed(dispatch);
- }
- touchtime = now;
- } else if (touches.length > 1) {
- var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1];
- distance0 = dx * dx + dy * dy;
- }
- }
- function moved() {
- var touches = d3.touches(that), p0, l0, p1, l1;
- for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {
- p1 = touches[i];
- if (l1 = locations0[p1.identifier]) {
- if (l0) break;
- p0 = p1, l0 = l1;
- }
- }
- if (l1) {
- var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0);
- p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ];
- l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ];
- scaleTo(scale1 * scale0);
- }
- touchtime = null;
- translateTo(p0, l0);
- zoomed(dispatch);
- }
- function ended() {
- if (d3.event.touches.length) {
- var changed = d3.event.changedTouches;
- for (var i = 0, n = changed.length; i < n; ++i) {
- delete locations0[changed[i].identifier];
- }
- for (var identifier in locations0) {
- return void relocate();
- }
- }
- d3.selectAll(targets).on(zoomName, null);
- subject.on(mousedown, mousedowned).on(touchstart, touchstarted);
- dragRestore();
- zoomended(dispatch);
- }
- }
- function mousewheeled() {
- var dispatch = event.of(this, arguments);
- if (mousewheelTimer) clearTimeout(mousewheelTimer); else translate0 = location(center0 = center || d3.mouse(this)),
- d3_selection_interrupt.call(this), zoomstarted(dispatch);
- mousewheelTimer = setTimeout(function() {
- mousewheelTimer = null;
- zoomended(dispatch);
- }, 50);
- d3_eventPreventDefault();
- scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);
- translateTo(center0, translate0);
- zoomed(dispatch);
- }
- function dblclicked() {
- var dispatch = event.of(this, arguments), p = d3.mouse(this), l = location(p), k = Math.log(view.k) / Math.LN2;
- zoomstarted(dispatch);
- scaleTo(Math.pow(2, d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1));
- translateTo(p, l);
- zoomed(dispatch);
- zoomended(dispatch);
- }
- return d3.rebind(zoom, event, "on");
- };
- var d3_behavior_zoomInfinity = [ 0, Infinity ];
- var d3_behavior_zoomDelta, d3_behavior_zoomWheel = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function() {
- return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);
- }, "wheel") : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function() {
- return d3.event.wheelDelta;
- }, "mousewheel") : (d3_behavior_zoomDelta = function() {
- return -d3.event.detail;
- }, "MozMousePixelScroll");
- d3.color = d3_color;
- function d3_color() {}
- d3_color.prototype.toString = function() {
- return this.rgb() + "";
- };
- d3.hsl = d3_hsl;
- function d3_hsl(h, s, l) {
- return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l);
- }
- var d3_hslPrototype = d3_hsl.prototype = new d3_color();
- d3_hslPrototype.brighter = function(k) {
- k = Math.pow(.7, arguments.length ? k : 1);
- return new d3_hsl(this.h, this.s, this.l / k);
- };
- d3_hslPrototype.darker = function(k) {
- k = Math.pow(.7, arguments.length ? k : 1);
- return new d3_hsl(this.h, this.s, k * this.l);
- };
- d3_hslPrototype.rgb = function() {
- return d3_hsl_rgb(this.h, this.s, this.l);
- };
- function d3_hsl_rgb(h, s, l) {
- var m1, m2;
- h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;
- s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s;
- l = l < 0 ? 0 : l > 1 ? 1 : l;
- m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
- m1 = 2 * l - m2;
- function v(h) {
- if (h > 360) h -= 360; else if (h < 0) h += 360;
- if (h < 60) return m1 + (m2 - m1) * h / 60;
- if (h < 180) return m2;
- if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
- return m1;
- }
- function vv(h) {
- return Math.round(v(h) * 255);
- }
- return new d3_rgb(vv(h + 120), vv(h), vv(h - 120));
- }
- d3.hcl = d3_hcl;
- function d3_hcl(h, c, l) {
- return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l);
- }
- var d3_hclPrototype = d3_hcl.prototype = new d3_color();
- d3_hclPrototype.brighter = function(k) {
- return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));
- };
- d3_hclPrototype.darker = function(k) {
- return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));
- };
- d3_hclPrototype.rgb = function() {
- return d3_hcl_lab(this.h, this.c, this.l).rgb();
- };
- function d3_hcl_lab(h, c, l) {
- if (isNaN(h)) h = 0;
- if (isNaN(c)) c = 0;
- return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);
- }
- d3.lab = d3_lab;
- function d3_lab(l, a, b) {
- return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.l, l.c, l.h) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);
- }
- var d3_lab_K = 18;
- var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;
- var d3_labPrototype = d3_lab.prototype = new d3_color();
- d3_labPrototype.brighter = function(k) {
- return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
- };
- d3_labPrototype.darker = function(k) {
- return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
- };
- d3_labPrototype.rgb = function() {
- return d3_lab_rgb(this.l, this.a, this.b);
- };
- function d3_lab_rgb(l, a, b) {
- var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;
- x = d3_lab_xyz(x) * d3_lab_X;
- y = d3_lab_xyz(y) * d3_lab_Y;
- z = d3_lab_xyz(z) * d3_lab_Z;
- return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));
- }
- function d3_lab_hcl(l, a, b) {
- return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l);
- }
- function d3_lab_xyz(x) {
- return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;
- }
- function d3_xyz_lab(x) {
- return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;
- }
- function d3_xyz_rgb(r) {
- return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));
- }
- d3.rgb = d3_rgb;
- function d3_rgb(r, g, b) {
- return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b);
- }
- function d3_rgbNumber(value) {
- return new d3_rgb(value >> 16, value >> 8 & 255, value & 255);
- }
- function d3_rgbString(value) {
- return d3_rgbNumber(value) + "";
- }
- var d3_rgbPrototype = d3_rgb.prototype = new d3_color();
- d3_rgbPrototype.brighter = function(k) {
- k = Math.pow(.7, arguments.length ? k : 1);
- var r = this.r, g = this.g, b = this.b, i = 30;
- if (!r && !g && !b) return new d3_rgb(i, i, i);
- if (r && r < i) r = i;
- if (g && g < i) g = i;
- if (b && b < i) b = i;
- return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k));
- };
- d3_rgbPrototype.darker = function(k) {
- k = Math.pow(.7, arguments.length ? k : 1);
- return new d3_rgb(k * this.r, k * this.g, k * this.b);
- };
- d3_rgbPrototype.hsl = function() {
- return d3_rgb_hsl(this.r, this.g, this.b);
- };
- d3_rgbPrototype.toString = function() {
- return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
- };
- function d3_rgb_hex(v) {
- return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);
- }
- function d3_rgb_parse(format, rgb, hsl) {
- var r = 0, g = 0, b = 0, m1, m2, color;
- m1 = /([a-z]+)\((.*)\)/i.exec(format);
- if (m1) {
- m2 = m1[2].split(",");
- switch (m1[1]) {
- case "hsl":
- {
- return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);
- }
-
- case "rgb":
- {
- return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));
- }
- }
- }
- if (color = d3_rgb_names.get(format)) return rgb(color.r, color.g, color.b);
- if (format != null && format.charAt(0) === "#" && !isNaN(color = parseInt(format.slice(1), 16))) {
- if (format.length === 4) {
- r = (color & 3840) >> 4;
- r = r >> 4 | r;
- g = color & 240;
- g = g >> 4 | g;
- b = color & 15;
- b = b << 4 | b;
- } else if (format.length === 7) {
- r = (color & 16711680) >> 16;
- g = (color & 65280) >> 8;
- b = color & 255;
- }
- }
- return rgb(r, g, b);
- }
- function d3_rgb_hsl(r, g, b) {
- var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;
- if (d) {
- s = l < .5 ? d / (max + min) : d / (2 - max - min);
- if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;
- h *= 60;
- } else {
- h = NaN;
- s = l > 0 && l < 1 ? 0 : h;
- }
- return new d3_hsl(h, s, l);
- }
- function d3_rgb_lab(r, g, b) {
- r = d3_rgb_xyz(r);
- g = d3_rgb_xyz(g);
- b = d3_rgb_xyz(b);
- var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);
- return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));
- }
- function d3_rgb_xyz(r) {
- return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);
- }
- function d3_rgb_parseNumber(c) {
- var f = parseFloat(c);
- return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f;
- }
- var d3_rgb_names = d3.map({
- aliceblue: 15792383,
- antiquewhite: 16444375,
- aqua: 65535,
- aquamarine: 8388564,
- azure: 15794175,
- beige: 16119260,
- bisque: 16770244,
- black: 0,
- blanchedalmond: 16772045,
- blue: 255,
- blueviolet: 9055202,
- brown: 10824234,
- burlywood: 14596231,
- cadetblue: 6266528,
- chartreuse: 8388352,
- chocolate: 13789470,
- coral: 16744272,
- cornflowerblue: 6591981,
- cornsilk: 16775388,
- crimson: 14423100,
- cyan: 65535,
- darkblue: 139,
- darkcyan: 35723,
- darkgoldenrod: 12092939,
- darkgray: 11119017,
- darkgreen: 25600,
- darkgrey: 11119017,
- darkkhaki: 12433259,
- darkmagenta: 9109643,
- darkolivegreen: 5597999,
- darkorange: 16747520,
- darkorchid: 10040012,
- darkred: 9109504,
- darksalmon: 15308410,
- darkseagreen: 9419919,
- darkslateblue: 4734347,
- darkslategray: 3100495,
- darkslategrey: 3100495,
- darkturquoise: 52945,
- darkviolet: 9699539,
- deeppink: 16716947,
- deepskyblue: 49151,
- dimgray: 6908265,
- dimgrey: 6908265,
- dodgerblue: 2003199,
- firebrick: 11674146,
- floralwhite: 16775920,
- forestgreen: 2263842,
- fuchsia: 16711935,
- gainsboro: 14474460,
- ghostwhite: 16316671,
- gold: 16766720,
- goldenrod: 14329120,
- gray: 8421504,
- green: 32768,
- greenyellow: 11403055,
- grey: 8421504,
- honeydew: 15794160,
- hotpink: 16738740,
- indianred: 13458524,
- indigo: 4915330,
- ivory: 16777200,
- khaki: 15787660,
- lavender: 15132410,
- lavenderblush: 16773365,
- lawngreen: 8190976,
- lemonchiffon: 16775885,
- lightblue: 11393254,
- lightcoral: 15761536,
- lightcyan: 14745599,
- lightgoldenrodyellow: 16448210,
- lightgray: 13882323,
- lightgreen: 9498256,
- lightgrey: 13882323,
- lightpink: 16758465,
- lightsalmon: 16752762,
- lightseagreen: 2142890,
- lightskyblue: 8900346,
- lightslategray: 7833753,
- lightslategrey: 7833753,
- lightsteelblue: 11584734,
- lightyellow: 16777184,
- lime: 65280,
- limegreen: 3329330,
- linen: 16445670,
- magenta: 16711935,
- maroon: 8388608,
- mediumaquamarine: 6737322,
- mediumblue: 205,
- mediumorchid: 12211667,
- mediumpurple: 9662683,
- mediumseagreen: 3978097,
- mediumslateblue: 8087790,
- mediumspringgreen: 64154,
- mediumturquoise: 4772300,
- mediumvioletred: 13047173,
- midnightblue: 1644912,
- mintcream: 16121850,
- mistyrose: 16770273,
- moccasin: 16770229,
- navajowhite: 16768685,
- navy: 128,
- oldlace: 16643558,
- olive: 8421376,
- olivedrab: 7048739,
- orange: 16753920,
- orangered: 16729344,
- orchid: 14315734,
- palegoldenrod: 15657130,
- palegreen: 10025880,
- paleturquoise: 11529966,
- palevioletred: 14381203,
- papayawhip: 16773077,
- peachpuff: 16767673,
- peru: 13468991,
- pink: 16761035,
- plum: 14524637,
- powderblue: 11591910,
- purple: 8388736,
- red: 16711680,
- rosybrown: 12357519,
- royalblue: 4286945,
- saddlebrown: 9127187,
- salmon: 16416882,
- sandybrown: 16032864,
- seagreen: 3050327,
- seashell: 16774638,
- sienna: 10506797,
- silver: 12632256,
- skyblue: 8900331,
- slateblue: 6970061,
- slategray: 7372944,
- slategrey: 7372944,
- snow: 16775930,
- springgreen: 65407,
- steelblue: 4620980,
- tan: 13808780,
- teal: 32896,
- thistle: 14204888,
- tomato: 16737095,
- turquoise: 4251856,
- violet: 15631086,
- wheat: 16113331,
- white: 16777215,
- whitesmoke: 16119285,
- yellow: 16776960,
- yellowgreen: 10145074
- });
- d3_rgb_names.forEach(function(key, value) {
- d3_rgb_names.set(key, d3_rgbNumber(value));
- });
- function d3_functor(v) {
- return typeof v === "function" ? v : function() {
- return v;
- };
- }
- d3.functor = d3_functor;
- function d3_identity(d) {
- return d;
- }
- d3.xhr = d3_xhrType(d3_identity);
- function d3_xhrType(response) {
- return function(url, mimeType, callback) {
- if (arguments.length === 2 && typeof mimeType === "function") callback = mimeType,
- mimeType = null;
- return d3_xhr(url, mimeType, response, callback);
- };
- }
- function d3_xhr(url, mimeType, response, callback) {
- var xhr = {}, dispatch = d3.dispatch("beforesend", "progress", "load", "error"), headers = {}, request = new XMLHttpRequest(), responseType = null;
- if (d3_window.XDomainRequest && !("withCredentials" in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest();
- "onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {
- request.readyState > 3 && respond();
- };
- function respond() {
- var status = request.status, result;
- if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) {
- try {
- result = response.call(xhr, request);
- } catch (e) {
- dispatch.error.call(xhr, e);
- return;
- }
- dispatch.load.call(xhr, result);
- } else {
- dispatch.error.call(xhr, request);
- }
- }
- request.onprogress = function(event) {
- var o = d3.event;
- d3.event = event;
- try {
- dispatch.progress.call(xhr, request);
- } finally {
- d3.event = o;
- }
- };
- xhr.header = function(name, value) {
- name = (name + "").toLowerCase();
- if (arguments.length < 2) return headers[name];
- if (value == null) delete headers[name]; else headers[name] = value + "";
- return xhr;
- };
- xhr.mimeType = function(value) {
- if (!arguments.length) return mimeType;
- mimeType = value == null ? null : value + "";
- return xhr;
- };
- xhr.responseType = function(value) {
- if (!arguments.length) return responseType;
- responseType = value;
- return xhr;
- };
- xhr.response = function(value) {
- response = value;
- return xhr;
- };
- [ "get", "post" ].forEach(function(method) {
- xhr[method] = function() {
- return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments)));
- };
- });
- xhr.send = function(method, data, callback) {
- if (arguments.length === 2 && typeof data === "function") callback = data, data = null;
- request.open(method, url, true);
- if (mimeType != null && !("accept" in headers)) headers["accept"] = mimeType + ",*/*";
- if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);
- if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);
- if (responseType != null) request.responseType = responseType;
- if (callback != null) xhr.on("error", callback).on("load", function(request) {
- callback(null, request);
- });
- dispatch.beforesend.call(xhr, request);
- request.send(data == null ? null : data);
- return xhr;
- };
- xhr.abort = function() {
- request.abort();
- return xhr;
- };
- d3.rebind(xhr, dispatch, "on");
- return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback));
- }
- function d3_xhr_fixCallback(callback) {
- return callback.length === 1 ? function(error, request) {
- callback(error == null ? request : null);
- } : callback;
- }
- function d3_xhrHasResponse(request) {
- var type = request.responseType;
- return type && type !== "text" ? request.response : request.responseText;
- }
- d3.dsv = function(delimiter, mimeType) {
- var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0);
- function dsv(url, row, callback) {
- if (arguments.length < 3) callback = row, row = null;
- var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback);
- xhr.row = function(_) {
- return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row;
- };
- return xhr;
- }
- function response(request) {
- return dsv.parse(request.responseText);
- }
- function typedResponse(f) {
- return function(request) {
- return dsv.parse(request.responseText, f);
- };
- }
- dsv.parse = function(text, f) {
- var o;
- return dsv.parseRows(text, function(row, i) {
- if (o) return o(row, i - 1);
- var a = new Function("d", "return {" + row.map(function(name, i) {
- return JSON.stringify(name) + ": d[" + i + "]";
- }).join(",") + "}");
- o = f ? function(row, i) {
- return f(a(row), i);
- } : a;
- });
- };
- dsv.parseRows = function(text, f) {
- var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol;
- function token() {
- if (I >= N) return EOF;
- if (eol) return eol = false, EOL;
- var j = I;
- if (text.charCodeAt(j) === 34) {
- var i = j;
- while (i++ < N) {
- if (text.charCodeAt(i) === 34) {
- if (text.charCodeAt(i + 1) !== 34) break;
- ++i;
- }
- }
- I = i + 2;
- var c = text.charCodeAt(i + 1);
- if (c === 13) {
- eol = true;
- if (text.charCodeAt(i + 2) === 10) ++I;
- } else if (c === 10) {
- eol = true;
- }
- return text.slice(j + 1, i).replace(/""/g, '"');
- }
- while (I < N) {
- var c = text.charCodeAt(I++), k = 1;
- if (c === 10) eol = true; else if (c === 13) {
- eol = true;
- if (text.charCodeAt(I) === 10) ++I, ++k;
- } else if (c !== delimiterCode) continue;
- return text.slice(j, I - k);
- }
- return text.slice(j);
- }
- while ((t = token()) !== EOF) {
- var a = [];
- while (t !== EOL && t !== EOF) {
- a.push(t);
- t = token();
- }
- if (f && !(a = f(a, n++))) continue;
- rows.push(a);
- }
- return rows;
- };
- dsv.format = function(rows) {
- if (Array.isArray(rows[0])) return dsv.formatRows(rows);
- var fieldSet = new d3_Set(), fields = [];
- rows.forEach(function(row) {
- for (var field in row) {
- if (!fieldSet.has(field)) {
- fields.push(fieldSet.add(field));
- }
- }
- });
- return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) {
- return fields.map(function(field) {
- return formatValue(row[field]);
- }).join(delimiter);
- })).join("\n");
- };
- dsv.formatRows = function(rows) {
- return rows.map(formatRow).join("\n");
- };
- function formatRow(row) {
- return row.map(formatValue).join(delimiter);
- }
- function formatValue(text) {
- return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text;
- }
- return dsv;
- };
- d3.csv = d3.dsv(",", "text/csv");
- d3.tsv = d3.dsv(" ", "text/tab-separated-values");
- var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_active, d3_timer_frame = d3_window[d3_vendorSymbol(d3_window, "requestAnimationFrame")] || function(callback) {
- setTimeout(callback, 17);
- };
- d3.timer = function(callback, delay, then) {
- var n = arguments.length;
- if (n < 2) delay = 0;
- if (n < 3) then = Date.now();
- var time = then + delay, timer = {
- c: callback,
- t: time,
- f: false,
- n: null
- };
- if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer;
- d3_timer_queueTail = timer;
- if (!d3_timer_interval) {
- d3_timer_timeout = clearTimeout(d3_timer_timeout);
- d3_timer_interval = 1;
- d3_timer_frame(d3_timer_step);
- }
- };
- function d3_timer_step() {
- var now = d3_timer_mark(), delay = d3_timer_sweep() - now;
- if (delay > 24) {
- if (isFinite(delay)) {
- clearTimeout(d3_timer_timeout);
- d3_timer_timeout = setTimeout(d3_timer_step, delay);
- }
- d3_timer_interval = 0;
- } else {
- d3_timer_interval = 1;
- d3_timer_frame(d3_timer_step);
- }
- }
- d3.timer.flush = function() {
- d3_timer_mark();
- d3_timer_sweep();
- };
- function d3_timer_mark() {
- var now = Date.now();
- d3_timer_active = d3_timer_queueHead;
- while (d3_timer_active) {
- if (now >= d3_timer_active.t) d3_timer_active.f = d3_timer_active.c(now - d3_timer_active.t);
- d3_timer_active = d3_timer_active.n;
- }
- return now;
- }
- function d3_timer_sweep() {
- var t0, t1 = d3_timer_queueHead, time = Infinity;
- while (t1) {
- if (t1.f) {
- t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;
- } else {
- if (t1.t < time) time = t1.t;
- t1 = (t0 = t1).n;
- }
- }
- d3_timer_queueTail = t0;
- return time;
- }
- function d3_format_precision(x, p) {
- return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1);
- }
- d3.round = function(x, n) {
- return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);
- };
- var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix);
- d3.formatPrefix = function(value, precision) {
- var i = 0;
- if (value) {
- if (value < 0) value *= -1;
- if (precision) value = d3.round(value, d3_format_precision(value, precision));
- i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);
- i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3));
- }
- return d3_formatPrefixes[8 + i / 3];
- };
- function d3_formatPrefix(d, i) {
- var k = Math.pow(10, abs(8 - i) * 3);
- return {
- scale: i > 8 ? function(d) {
- return d / k;
- } : function(d) {
- return d * k;
- },
- symbol: d
- };
- }
- function d3_locale_numberFormat(locale) {
- var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping ? function(value) {
- var i = value.length, t = [], j = 0, g = locale_grouping[0];
- while (g > 0 && i > 0) {
- t.push(value.substring(i -= g, i + g));
- g = locale_grouping[j = (j + 1) % locale_grouping.length];
- }
- return t.reverse().join(locale_thousands);
- } : d3_identity;
- return function(specifier) {
- var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "", symbol = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = "", suffix = "", integer = false;
- if (precision) precision = +precision.substring(1);
- if (zfill || fill === "0" && align === "=") {
- zfill = fill = "0";
- align = "=";
- if (comma) width -= Math.floor((width - 1) / 4);
- }
- switch (type) {
- case "n":
- comma = true;
- type = "g";
- break;
-
- case "%":
- scale = 100;
- suffix = "%";
- type = "f";
- break;
-
- case "p":
- scale = 100;
- suffix = "%";
- type = "r";
- break;
-
- case "b":
- case "o":
- case "x":
- case "X":
- if (symbol === "#") prefix = "0" + type.toLowerCase();
-
- case "c":
- case "d":
- integer = true;
- precision = 0;
- break;
-
- case "s":
- scale = -1;
- type = "r";
- break;
- }
- if (symbol === "$") prefix = locale_currency[0], suffix = locale_currency[1];
- if (type == "r" && !precision) type = "g";
- if (precision != null) {
- if (type == "g") precision = Math.max(1, Math.min(21, precision)); else if (type == "e" || type == "f") precision = Math.max(0, Math.min(20, precision));
- }
- type = d3_format_types.get(type) || d3_format_typeDefault;
- var zcomma = zfill && comma;
- return function(value) {
- var fullSuffix = suffix;
- if (integer && value % 1) return "";
- var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign;
- if (scale < 0) {
- var unit = d3.formatPrefix(value, precision);
- value = unit.scale(value);
- fullSuffix = unit.symbol + suffix;
- } else {
- value *= scale;
- }
- value = type(value, precision);
- var i = value.lastIndexOf("."), before = i < 0 ? value : value.substring(0, i), after = i < 0 ? "" : locale_decimal + value.substring(i + 1);
- if (!zfill && comma) before = formatGroup(before);
- var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : "";
- if (zcomma) before = formatGroup(padding + before);
- negative += prefix;
- value = before + after;
- return (align === "<" ? negative + value + padding : align === ">" ? padding + negative + value : align === "^" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix;
- };
- };
- }
- var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i;
- var d3_format_types = d3.map({
- b: function(x) {
- return x.toString(2);
- },
- c: function(x) {
- return String.fromCharCode(x);
- },
- o: function(x) {
- return x.toString(8);
- },
- x: function(x) {
- return x.toString(16);
- },
- X: function(x) {
- return x.toString(16).toUpperCase();
- },
- g: function(x, p) {
- return x.toPrecision(p);
- },
- e: function(x, p) {
- return x.toExponential(p);
- },
- f: function(x, p) {
- return x.toFixed(p);
- },
- r: function(x, p) {
- return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p))));
- }
- });
- function d3_format_typeDefault(x) {
- return x + "";
- }
- var d3_time = d3.time = {}, d3_date = Date;
- function d3_date_utc() {
- this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]);
- }
- d3_date_utc.prototype = {
- getDate: function() {
- return this._.getUTCDate();
- },
- getDay: function() {
- return this._.getUTCDay();
- },
- getFullYear: function() {
- return this._.getUTCFullYear();
- },
- getHours: function() {
- return this._.getUTCHours();
- },
- getMilliseconds: function() {
- return this._.getUTCMilliseconds();
- },
- getMinutes: function() {
- return this._.getUTCMinutes();
- },
- getMonth: function() {
- return this._.getUTCMonth();
- },
- getSeconds: function() {
- return this._.getUTCSeconds();
- },
- getTime: function() {
- return this._.getTime();
- },
- getTimezoneOffset: function() {
- return 0;
- },
- valueOf: function() {
- return this._.valueOf();
- },
- setDate: function() {
- d3_time_prototype.setUTCDate.apply(this._, arguments);
- },
- setDay: function() {
- d3_time_prototype.setUTCDay.apply(this._, arguments);
- },
- setFullYear: function() {
- d3_time_prototype.setUTCFullYear.apply(this._, arguments);
- },
- setHours: function() {
- d3_time_prototype.setUTCHours.apply(this._, arguments);
- },
- setMilliseconds: function() {
- d3_time_prototype.setUTCMilliseconds.apply(this._, arguments);
- },
- setMinutes: function() {
- d3_time_prototype.setUTCMinutes.apply(this._, arguments);
- },
- setMonth: function() {
- d3_time_prototype.setUTCMonth.apply(this._, arguments);
- },
- setSeconds: function() {
- d3_time_prototype.setUTCSeconds.apply(this._, arguments);
- },
- setTime: function() {
- d3_time_prototype.setTime.apply(this._, arguments);
- }
- };
- var d3_time_prototype = Date.prototype;
- function d3_time_interval(local, step, number) {
- function round(date) {
- var d0 = local(date), d1 = offset(d0, 1);
- return date - d0 < d1 - date ? d0 : d1;
- }
- function ceil(date) {
- step(date = local(new d3_date(date - 1)), 1);
- return date;
- }
- function offset(date, k) {
- step(date = new d3_date(+date), k);
- return date;
- }
- function range(t0, t1, dt) {
- var time = ceil(t0), times = [];
- if (dt > 1) {
- while (time < t1) {
- if (!(number(time) % dt)) times.push(new Date(+time));
- step(time, 1);
- }
- } else {
- while (time < t1) times.push(new Date(+time)), step(time, 1);
- }
- return times;
- }
- function range_utc(t0, t1, dt) {
- try {
- d3_date = d3_date_utc;
- var utc = new d3_date_utc();
- utc._ = t0;
- return range(utc, t1, dt);
- } finally {
- d3_date = Date;
- }
- }
- local.floor = local;
- local.round = round;
- local.ceil = ceil;
- local.offset = offset;
- local.range = range;
- var utc = local.utc = d3_time_interval_utc(local);
- utc.floor = utc;
- utc.round = d3_time_interval_utc(round);
- utc.ceil = d3_time_interval_utc(ceil);
- utc.offset = d3_time_interval_utc(offset);
- utc.range = range_utc;
- return local;
- }
- function d3_time_interval_utc(method) {
- return function(date, k) {
- try {
- d3_date = d3_date_utc;
- var utc = new d3_date_utc();
- utc._ = date;
- return method(utc, k)._;
- } finally {
- d3_date = Date;
- }
- };
- }
- d3_time.year = d3_time_interval(function(date) {
- date = d3_time.day(date);
- date.setMonth(0, 1);
- return date;
- }, function(date, offset) {
- date.setFullYear(date.getFullYear() + offset);
- }, function(date) {
- return date.getFullYear();
- });
- d3_time.years = d3_time.year.range;
- d3_time.years.utc = d3_time.year.utc.range;
- d3_time.day = d3_time_interval(function(date) {
- var day = new d3_date(2e3, 0);
- day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
- return day;
- }, function(date, offset) {
- date.setDate(date.getDate() + offset);
- }, function(date) {
- return date.getDate() - 1;
- });
- d3_time.days = d3_time.day.range;
- d3_time.days.utc = d3_time.day.utc.range;
- d3_time.dayOfYear = function(date) {
- var year = d3_time.year(date);
- return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);
- };
- [ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ].forEach(function(day, i) {
- i = 7 - i;
- var interval = d3_time[day] = d3_time_interval(function(date) {
- (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);
- return date;
- }, function(date, offset) {
- date.setDate(date.getDate() + Math.floor(offset) * 7);
- }, function(date) {
- var day = d3_time.year(date).getDay();
- return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);
- });
- d3_time[day + "s"] = interval.range;
- d3_time[day + "s"].utc = interval.utc.range;
- d3_time[day + "OfYear"] = function(date) {
- var day = d3_time.year(date).getDay();
- return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7);
- };
- });
- d3_time.week = d3_time.sunday;
- d3_time.weeks = d3_time.sunday.range;
- d3_time.weeks.utc = d3_time.sunday.utc.range;
- d3_time.weekOfYear = d3_time.sundayOfYear;
- function d3_locale_timeFormat(locale) {
- var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths;
- function d3_time_format(template) {
- var n = template.length;
- function format(date) {
- var string = [], i = -1, j = 0, c, p, f;
- while (++i < n) {
- if (template.charCodeAt(i) === 37) {
- string.push(template.slice(j, i));
- if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);
- if (f = d3_time_formats[c]) c = f(date, p == null ? c === "e" ? " " : "0" : p);
- string.push(c);
- j = i + 1;
- }
- }
- string.push(template.slice(j, i));
- return string.join("");
- }
- format.parse = function(string) {
- var d = {
- y: 1900,
- m: 0,
- d: 1,
- H: 0,
- M: 0,
- S: 0,
- L: 0,
- Z: null
- }, i = d3_time_parse(d, template, string, 0);
- if (i != string.length) return null;
- if ("p" in d) d.H = d.H % 12 + d.p * 12;
- var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)();
- if ("j" in d) date.setFullYear(d.y, 0, d.j); else if ("w" in d && ("W" in d || "U" in d)) {
- date.setFullYear(d.y, 0, 1);
- date.setFullYear(d.y, 0, "W" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7);
- } else date.setFullYear(d.y, d.m, d.d);
- date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L);
- return localZ ? date._ : date;
- };
- format.toString = function() {
- return template;
- };
- return format;
- }
- function d3_time_parse(date, template, string, j) {
- var c, p, t, i = 0, n = template.length, m = string.length;
- while (i < n) {
- if (j >= m) return -1;
- c = template.charCodeAt(i++);
- if (c === 37) {
- t = template.charAt(i++);
- p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t];
- if (!p || (j = p(date, string, j)) < 0) return -1;
- } else if (c != string.charCodeAt(j++)) {
- return -1;
- }
- }
- return j;
- }
- d3_time_format.utc = function(template) {
- var local = d3_time_format(template);
- function format(date) {
- try {
- d3_date = d3_date_utc;
- var utc = new d3_date();
- utc._ = date;
- return local(utc);
- } finally {
- d3_date = Date;
- }
- }
- format.parse = function(string) {
- try {
- d3_date = d3_date_utc;
- var date = local.parse(string);
- return date && date._;
- } finally {
- d3_date = Date;
- }
- };
- format.toString = local.toString;
- return format;
- };
- d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti;
- var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths);
- locale_periods.forEach(function(p, i) {
- d3_time_periodLookup.set(p.toLowerCase(), i);
- });
- var d3_time_formats = {
- a: function(d) {
- return locale_shortDays[d.getDay()];
- },
- A: function(d) {
- return locale_days[d.getDay()];
- },
- b: function(d) {
- return locale_shortMonths[d.getMonth()];
- },
- B: function(d) {
- return locale_months[d.getMonth()];
- },
- c: d3_time_format(locale_dateTime),
- d: function(d, p) {
- return d3_time_formatPad(d.getDate(), p, 2);
- },
- e: function(d, p) {
- return d3_time_formatPad(d.getDate(), p, 2);
- },
- H: function(d, p) {
- return d3_time_formatPad(d.getHours(), p, 2);
- },
- I: function(d, p) {
- return d3_time_formatPad(d.getHours() % 12 || 12, p, 2);
- },
- j: function(d, p) {
- return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3);
- },
- L: function(d, p) {
- return d3_time_formatPad(d.getMilliseconds(), p, 3);
- },
- m: function(d, p) {
- return d3_time_formatPad(d.getMonth() + 1, p, 2);
- },
- M: function(d, p) {
- return d3_time_formatPad(d.getMinutes(), p, 2);
- },
- p: function(d) {
- return locale_periods[+(d.getHours() >= 12)];
- },
- S: function(d, p) {
- return d3_time_formatPad(d.getSeconds(), p, 2);
- },
- U: function(d, p) {
- return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2);
- },
- w: function(d) {
- return d.getDay();
- },
- W: function(d, p) {
- return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2);
- },
- x: d3_time_format(locale_date),
- X: d3_time_format(locale_time),
- y: function(d, p) {
- return d3_time_formatPad(d.getFullYear() % 100, p, 2);
- },
- Y: function(d, p) {
- return d3_time_formatPad(d.getFullYear() % 1e4, p, 4);
- },
- Z: d3_time_zone,
- "%": function() {
- return "%";
- }
- };
- var d3_time_parsers = {
- a: d3_time_parseWeekdayAbbrev,
- A: d3_time_parseWeekday,
- b: d3_time_parseMonthAbbrev,
- B: d3_time_parseMonth,
- c: d3_time_parseLocaleFull,
- d: d3_time_parseDay,
- e: d3_time_parseDay,
- H: d3_time_parseHour24,
- I: d3_time_parseHour24,
- j: d3_time_parseDayOfYear,
- L: d3_time_parseMilliseconds,
- m: d3_time_parseMonthNumber,
- M: d3_time_parseMinutes,
- p: d3_time_parseAmPm,
- S: d3_time_parseSeconds,
- U: d3_time_parseWeekNumberSunday,
- w: d3_time_parseWeekdayNumber,
- W: d3_time_parseWeekNumberMonday,
- x: d3_time_parseLocaleDate,
- X: d3_time_parseLocaleTime,
- y: d3_time_parseYear,
- Y: d3_time_parseFullYear,
- Z: d3_time_parseZone,
- "%": d3_time_parseLiteralPercent
- };
- function d3_time_parseWeekdayAbbrev(date, string, i) {
- d3_time_dayAbbrevRe.lastIndex = 0;
- var n = d3_time_dayAbbrevRe.exec(string.slice(i));
- return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
- }
- function d3_time_parseWeekday(date, string, i) {
- d3_time_dayRe.lastIndex = 0;
- var n = d3_time_dayRe.exec(string.slice(i));
- return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
- }
- function d3_time_parseMonthAbbrev(date, string, i) {
- d3_time_monthAbbrevRe.lastIndex = 0;
- var n = d3_time_monthAbbrevRe.exec(string.slice(i));
- return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
- }
- function d3_time_parseMonth(date, string, i) {
- d3_time_monthRe.lastIndex = 0;
- var n = d3_time_monthRe.exec(string.slice(i));
- return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
- }
- function d3_time_parseLocaleFull(date, string, i) {
- return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
- }
- function d3_time_parseLocaleDate(date, string, i) {
- return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
- }
- function d3_time_parseLocaleTime(date, string, i) {
- return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
- }
- function d3_time_parseAmPm(date, string, i) {
- var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase());
- return n == null ? -1 : (date.p = n, i);
- }
- return d3_time_format;
- }
- var d3_time_formatPads = {
- "-": "",
- _: " ",
- "0": "0"
- }, d3_time_numberRe = /^\s*\d+/, d3_time_percentRe = /^%/;
- function d3_time_formatPad(value, fill, width) {
- var sign = value < 0 ? "-" : "", string = (sign ? -value : value) + "", length = string.length;
- return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
- }
- function d3_time_formatRe(names) {
- return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i");
- }
- function d3_time_formatLookup(names) {
- var map = new d3_Map(), i = -1, n = names.length;
- while (++i < n) map.set(names[i].toLowerCase(), i);
- return map;
- }
- function d3_time_parseWeekdayNumber(date, string, i) {
- d3_time_numberRe.lastIndex = 0;
- var n = d3_time_numberRe.exec(string.slice(i, i + 1));
- return n ? (date.w = +n[0], i + n[0].length) : -1;
- }
- function d3_time_parseWeekNumberSunday(date, string, i) {
- d3_time_numberRe.lastIndex = 0;
- var n = d3_time_numberRe.exec(string.slice(i));
- return n ? (date.U = +n[0], i + n[0].length) : -1;
- }
- function d3_time_parseWeekNumberMonday(date, string, i) {
- d3_time_numberRe.lastIndex = 0;
- var n = d3_time_numberRe.exec(string.slice(i));
- return n ? (date.W = +n[0], i + n[0].length) : -1;
- }
- function d3_time_parseFullYear(date, string, i) {
- d3_time_numberRe.lastIndex = 0;
- var n = d3_time_numberRe.exec(string.slice(i, i + 4));
- return n ? (date.y = +n[0], i + n[0].length) : -1;
- }
- function d3_time_parseYear(date, string, i) {
- d3_time_numberRe.lastIndex = 0;
- var n = d3_time_numberRe.exec(string.slice(i, i + 2));
- return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1;
- }
- function d3_time_parseZone(date, string, i) {
- return /^[+-]\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string,
- i + 5) : -1;
- }
- function d3_time_expandYear(d) {
- return d + (d > 68 ? 1900 : 2e3);
- }
- function d3_time_parseMonthNumber(date, string, i) {
- d3_time_numberRe.lastIndex = 0;
- var n = d3_time_numberRe.exec(string.slice(i, i + 2));
- return n ? (date.m = n[0] - 1, i + n[0].length) : -1;
- }
- function d3_time_parseDay(date, string, i) {
- d3_time_numberRe.lastIndex = 0;
- var n = d3_time_numberRe.exec(string.slice(i, i + 2));
- return n ? (date.d = +n[0], i + n[0].length) : -1;
- }
- function d3_time_parseDayOfYear(date, string, i) {
- d3_time_numberRe.lastIndex = 0;
- var n = d3_time_numberRe.exec(string.slice(i, i + 3));
- return n ? (date.j = +n[0], i + n[0].length) : -1;
- }
- function d3_time_parseHour24(date, string, i) {
- d3_time_numberRe.lastIndex = 0;
- var n = d3_time_numberRe.exec(string.slice(i, i + 2));
- return n ? (date.H = +n[0], i + n[0].length) : -1;
- }
- function d3_time_parseMinutes(date, string, i) {
- d3_time_numberRe.lastIndex = 0;
- var n = d3_time_numberRe.exec(string.slice(i, i + 2));
- return n ? (date.M = +n[0], i + n[0].length) : -1;
- }
- function d3_time_parseSeconds(date, string, i) {
- d3_time_numberRe.lastIndex = 0;
- var n = d3_time_numberRe.exec(string.slice(i, i + 2));
- return n ? (date.S = +n[0], i + n[0].length) : -1;
- }
- function d3_time_parseMilliseconds(date, string, i) {
- d3_time_numberRe.lastIndex = 0;
- var n = d3_time_numberRe.exec(string.slice(i, i + 3));
- return n ? (date.L = +n[0], i + n[0].length) : -1;
- }
- function d3_time_zone(d) {
- var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = abs(z) / 60 | 0, zm = abs(z) % 60;
- return zs + d3_time_formatPad(zh, "0", 2) + d3_time_formatPad(zm, "0", 2);
- }
- function d3_time_parseLiteralPercent(date, string, i) {
- d3_time_percentRe.lastIndex = 0;
- var n = d3_time_percentRe.exec(string.slice(i, i + 1));
- return n ? i + n[0].length : -1;
- }
- function d3_time_formatMulti(formats) {
- var n = formats.length, i = -1;
- while (++i < n) formats[i][0] = this(formats[i][0]);
- return function(date) {
- var i = 0, f = formats[i];
- while (!f[1](date)) f = formats[++i];
- return f[0](date);
- };
- }
- d3.locale = function(locale) {
- return {
- numberFormat: d3_locale_numberFormat(locale),
- timeFormat: d3_locale_timeFormat(locale)
- };
- };
- var d3_locale_enUS = d3.locale({
- decimal: ".",
- thousands: ",",
- grouping: [ 3 ],
- currency: [ "$", "" ],
- dateTime: "%a %b %e %X %Y",
- date: "%m/%d/%Y",
- time: "%H:%M:%S",
- periods: [ "AM", "PM" ],
- days: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ],
- shortDays: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
- months: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ],
- shortMonths: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]
- });
- d3.format = d3_locale_enUS.numberFormat;
- d3.geo = {};
- function d3_adder() {}
- d3_adder.prototype = {
- s: 0,
- t: 0,
- add: function(y) {
- d3_adderSum(y, this.t, d3_adderTemp);
- d3_adderSum(d3_adderTemp.s, this.s, this);
- if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t;
- },
- reset: function() {
- this.s = this.t = 0;
- },
- valueOf: function() {
- return this.s;
- }
- };
- var d3_adderTemp = new d3_adder();
- function d3_adderSum(a, b, o) {
- var x = o.s = a + b, bv = x - a, av = x - bv;
- o.t = a - av + (b - bv);
- }
- d3.geo.stream = function(object, listener) {
- if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) {
- d3_geo_streamObjectType[object.type](object, listener);
- } else {
- d3_geo_streamGeometry(object, listener);
- }
- };
- function d3_geo_streamGeometry(geometry, listener) {
- if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {
- d3_geo_streamGeometryType[geometry.type](geometry, listener);
- }
- }
- var d3_geo_streamObjectType = {
- Feature: function(feature, listener) {
- d3_geo_streamGeometry(feature.geometry, listener);
- },
- FeatureCollection: function(object, listener) {
- var features = object.features, i = -1, n = features.length;
- while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);
- }
- };
- var d3_geo_streamGeometryType = {
- Sphere: function(object, listener) {
- listener.sphere();
- },
- Point: function(object, listener) {
- object = object.coordinates;
- listener.point(object[0], object[1], object[2]);
- },
- MultiPoint: function(object, listener) {
- var coordinates = object.coordinates, i = -1, n = coordinates.length;
- while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);
- },
- LineString: function(object, listener) {
- d3_geo_streamLine(object.coordinates, listener, 0);
- },
- MultiLineString: function(object, listener) {
- var coordinates = object.coordinates, i = -1, n = coordinates.length;
- while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);
- },
- Polygon: function(object, listener) {
- d3_geo_streamPolygon(object.coordinates, listener);
- },
- MultiPolygon: function(object, listener) {
- var coordinates = object.coordinates, i = -1, n = coordinates.length;
- while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);
- },
- GeometryCollection: function(object, listener) {
- var geometries = object.geometries, i = -1, n = geometries.length;
- while (++i < n) d3_geo_streamGeometry(geometries[i], listener);
- }
- };
- function d3_geo_streamLine(coordinates, listener, closed) {
- var i = -1, n = coordinates.length - closed, coordinate;
- listener.lineStart();
- while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);
- listener.lineEnd();
- }
- function d3_geo_streamPolygon(coordinates, listener) {
- var i = -1, n = coordinates.length;
- listener.polygonStart();
- while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);
- listener.polygonEnd();
- }
- d3.geo.area = function(object) {
- d3_geo_areaSum = 0;
- d3.geo.stream(object, d3_geo_area);
- return d3_geo_areaSum;
- };
- var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder();
- var d3_geo_area = {
- sphere: function() {
- d3_geo_areaSum += 4 * π;
- },
- point: d3_noop,
- lineStart: d3_noop,
- lineEnd: d3_noop,
- polygonStart: function() {
- d3_geo_areaRingSum.reset();
- d3_geo_area.lineStart = d3_geo_areaRingStart;
- },
- polygonEnd: function() {
- var area = 2 * d3_geo_areaRingSum;
- d3_geo_areaSum += area < 0 ? 4 * π + area : area;
- d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;
- }
- };
- function d3_geo_areaRingStart() {
- var λ00, φ00, λ0, cosφ0, sinφ0;
- d3_geo_area.point = function(λ, φ) {
- d3_geo_area.point = nextPoint;
- λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4),
- sinφ0 = Math.sin(φ);
- };
- function nextPoint(λ, φ) {
- λ *= d3_radians;
- φ = φ * d3_radians / 2 + π / 4;
- var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ);
- d3_geo_areaRingSum.add(Math.atan2(v, u));
- λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;
- }
- d3_geo_area.lineEnd = function() {
- nextPoint(λ00, φ00);
- };
- }
- function d3_geo_cartesian(spherical) {
- var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);
- return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ];
- }
- function d3_geo_cartesianDot(a, b) {
- return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
- }
- function d3_geo_cartesianCross(a, b) {
- return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ];
- }
- function d3_geo_cartesianAdd(a, b) {
- a[0] += b[0];
- a[1] += b[1];
- a[2] += b[2];
- }
- function d3_geo_cartesianScale(vector, k) {
- return [ vector[0] * k, vector[1] * k, vector[2] * k ];
- }
- function d3_geo_cartesianNormalize(d) {
- var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
- d[0] /= l;
- d[1] /= l;
- d[2] /= l;
- }
- function d3_geo_spherical(cartesian) {
- return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ];
- }
- function d3_geo_sphericalEqual(a, b) {
- return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε;
- }
- d3.geo.bounds = function() {
- var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range;
- var bound = {
- point: point,
- lineStart: lineStart,
- lineEnd: lineEnd,
- polygonStart: function() {
- bound.point = ringPoint;
- bound.lineStart = ringStart;
- bound.lineEnd = ringEnd;
- dλSum = 0;
- d3_geo_area.polygonStart();
- },
- polygonEnd: function() {
- d3_geo_area.polygonEnd();
- bound.point = point;
- bound.lineStart = lineStart;
- bound.lineEnd = lineEnd;
- if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90;
- range[0] = λ0, range[1] = λ1;
- }
- };
- function point(λ, φ) {
- ranges.push(range = [ λ0 = λ, λ1 = λ ]);
- if (φ < φ0) φ0 = φ;
- if (φ > φ1) φ1 = φ;
- }
- function linePoint(λ, φ) {
- var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]);
- if (p0) {
- var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal);
- d3_geo_cartesianNormalize(inflection);
- inflection = d3_geo_spherical(inflection);
- var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180;
- if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) {
- var φi = inflection[1] * d3_degrees;
- if (φi > φ1) φ1 = φi;
- } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) {
- var φi = -inflection[1] * d3_degrees;
- if (φi < φ0) φ0 = φi;
- } else {
- if (φ < φ0) φ0 = φ;
- if (φ > φ1) φ1 = φ;
- }
- if (antimeridian) {
- if (λ < λ_) {
- if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;
- } else {
- if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;
- }
- } else {
- if (λ1 >= λ0) {
- if (λ < λ0) λ0 = λ;
- if (λ > λ1) λ1 = λ;
- } else {
- if (λ > λ_) {
- if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;
- } else {
- if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;
- }
- }
- }
- } else {
- point(λ, φ);
- }
- p0 = p, λ_ = λ;
- }
- function lineStart() {
- bound.point = linePoint;
- }
- function lineEnd() {
- range[0] = λ0, range[1] = λ1;
- bound.point = point;
- p0 = null;
- }
- function ringPoint(λ, φ) {
- if (p0) {
- var dλ = λ - λ_;
- dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;
- } else λ__ = λ, φ__ = φ;
- d3_geo_area.point(λ, φ);
- linePoint(λ, φ);
- }
- function ringStart() {
- d3_geo_area.lineStart();
- }
- function ringEnd() {
- ringPoint(λ__, φ__);
- d3_geo_area.lineEnd();
- if (abs(dλSum) > ε) λ0 = -(λ1 = 180);
- range[0] = λ0, range[1] = λ1;
- p0 = null;
- }
- function angle(λ0, λ1) {
- return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1;
- }
- function compareRanges(a, b) {
- return a[0] - b[0];
- }
- function withinRange(x, range) {
- return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
- }
- return function(feature) {
- φ1 = λ1 = -(λ0 = φ0 = Infinity);
- ranges = [];
- d3.geo.stream(feature, bound);
- var n = ranges.length;
- if (n) {
- ranges.sort(compareRanges);
- for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) {
- b = ranges[i];
- if (withinRange(b[0], a) || withinRange(b[1], a)) {
- if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
- if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
- } else {
- merged.push(a = b);
- }
- }
- var best = -Infinity, dλ;
- for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {
- b = merged[i];
- if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1];
- }
- }
- ranges = range = null;
- return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ];
- };
- }();
- d3.geo.centroid = function(object) {
- d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;
- d3.geo.stream(object, d3_geo_centroid);
- var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z;
- if (m < ε2) {
- x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1;
- if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0;
- m = x * x + y * y + z * z;
- if (m < ε2) return [ NaN, NaN ];
- }
- return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ];
- };
- var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2;
- var d3_geo_centroid = {
- sphere: d3_noop,
- point: d3_geo_centroidPoint,
- lineStart: d3_geo_centroidLineStart,
- lineEnd: d3_geo_centroidLineEnd,
- polygonStart: function() {
- d3_geo_centroid.lineStart = d3_geo_centroidRingStart;
- },
- polygonEnd: function() {
- d3_geo_centroid.lineStart = d3_geo_centroidLineStart;
- }
- };
- function d3_geo_centroidPoint(λ, φ) {
- λ *= d3_radians;
- var cosφ = Math.cos(φ *= d3_radians);
- d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ));
- }
- function d3_geo_centroidPointXYZ(x, y, z) {
- ++d3_geo_centroidW0;
- d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0;
- d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0;
- d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0;
- }
- function d3_geo_centroidLineStart() {
- var x0, y0, z0;
- d3_geo_centroid.point = function(λ, φ) {
- λ *= d3_radians;
- var cosφ = Math.cos(φ *= d3_radians);
- x0 = cosφ * Math.cos(λ);
- y0 = cosφ * Math.sin(λ);
- z0 = Math.sin(φ);
- d3_geo_centroid.point = nextPoint;
- d3_geo_centroidPointXYZ(x0, y0, z0);
- };
- function nextPoint(λ, φ) {
- λ *= d3_radians;
- var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
- d3_geo_centroidW1 += w;
- d3_geo_centroidX1 += w * (x0 + (x0 = x));
- d3_geo_centroidY1 += w * (y0 + (y0 = y));
- d3_geo_centroidZ1 += w * (z0 + (z0 = z));
- d3_geo_centroidPointXYZ(x0, y0, z0);
- }
- }
- function d3_geo_centroidLineEnd() {
- d3_geo_centroid.point = d3_geo_centroidPoint;
- }
- function d3_geo_centroidRingStart() {
- var λ00, φ00, x0, y0, z0;
- d3_geo_centroid.point = function(λ, φ) {
- λ00 = λ, φ00 = φ;
- d3_geo_centroid.point = nextPoint;
- λ *= d3_radians;
- var cosφ = Math.cos(φ *= d3_radians);
- x0 = cosφ * Math.cos(λ);
- y0 = cosφ * Math.sin(λ);
- z0 = Math.sin(φ);
- d3_geo_centroidPointXYZ(x0, y0, z0);
- };
- d3_geo_centroid.lineEnd = function() {
- nextPoint(λ00, φ00);
- d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;
- d3_geo_centroid.point = d3_geo_centroidPoint;
- };
- function nextPoint(λ, φ) {
- λ *= d3_radians;
- var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u);
- d3_geo_centroidX2 += v * cx;
- d3_geo_centroidY2 += v * cy;
- d3_geo_centroidZ2 += v * cz;
- d3_geo_centroidW1 += w;
- d3_geo_centroidX1 += w * (x0 + (x0 = x));
- d3_geo_centroidY1 += w * (y0 + (y0 = y));
- d3_geo_centroidZ1 += w * (z0 + (z0 = z));
- d3_geo_centroidPointXYZ(x0, y0, z0);
- }
- }
- function d3_true() {
- return true;
- }
- function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) {
- var subject = [], clip = [];
- segments.forEach(function(segment) {
- if ((n = segment.length - 1) <= 0) return;
- var n, p0 = segment[0], p1 = segment[n];
- if (d3_geo_sphericalEqual(p0, p1)) {
- listener.lineStart();
- for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]);
- listener.lineEnd();
- return;
- }
- var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false);
- a.o = b;
- subject.push(a);
- clip.push(b);
- a = new d3_geo_clipPolygonIntersection(p1, segment, null, false);
- b = new d3_geo_clipPolygonIntersection(p1, null, a, true);
- a.o = b;
- subject.push(a);
- clip.push(b);
- });
- clip.sort(compare);
- d3_geo_clipPolygonLinkCircular(subject);
- d3_geo_clipPolygonLinkCircular(clip);
- if (!subject.length) return;
- for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) {
- clip[i].e = entry = !entry;
- }
- var start = subject[0], points, point;
- while (1) {
- var current = start, isSubject = true;
- while (current.v) if ((current = current.n) === start) return;
- points = current.z;
- listener.lineStart();
- do {
- current.v = current.o.v = true;
- if (current.e) {
- if (isSubject) {
- for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]);
- } else {
- interpolate(current.x, current.n.x, 1, listener);
- }
- current = current.n;
- } else {
- if (isSubject) {
- points = current.p.z;
- for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]);
- } else {
- interpolate(current.x, current.p.x, -1, listener);
- }
- current = current.p;
- }
- current = current.o;
- points = current.z;
- isSubject = !isSubject;
- } while (!current.v);
- listener.lineEnd();
- }
- }
- function d3_geo_clipPolygonLinkCircular(array) {
- if (!(n = array.length)) return;
- var n, i = 0, a = array[0], b;
- while (++i < n) {
- a.n = b = array[i];
- b.p = a;
- a = b;
- }
- a.n = b = array[0];
- b.p = a;
- }
- function d3_geo_clipPolygonIntersection(point, points, other, entry) {
- this.x = point;
- this.z = points;
- this.o = other;
- this.e = entry;
- this.v = false;
- this.n = this.p = null;
- }
- function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) {
- return function(rotate, listener) {
- var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]);
- var clip = {
- point: point,
- lineStart: lineStart,
- lineEnd: lineEnd,
- polygonStart: function() {
- clip.point = pointRing;
- clip.lineStart = ringStart;
- clip.lineEnd = ringEnd;
- segments = [];
- polygon = [];
- },
- polygonEnd: function() {
- clip.point = point;
- clip.lineStart = lineStart;
- clip.lineEnd = lineEnd;
- segments = d3.merge(segments);
- var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon);
- if (segments.length) {
- if (!polygonStarted) listener.polygonStart(), polygonStarted = true;
- d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener);
- } else if (clipStartInside) {
- if (!polygonStarted) listener.polygonStart(), polygonStarted = true;
- listener.lineStart();
- interpolate(null, null, 1, listener);
- listener.lineEnd();
- }
- if (polygonStarted) listener.polygonEnd(), polygonStarted = false;
- segments = polygon = null;
- },
- sphere: function() {
- listener.polygonStart();
- listener.lineStart();
- interpolate(null, null, 1, listener);
- listener.lineEnd();
- listener.polygonEnd();
- }
- };
- function point(λ, φ) {
- var point = rotate(λ, φ);
- if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ);
- }
- function pointLine(λ, φ) {
- var point = rotate(λ, φ);
- line.point(point[0], point[1]);
- }
- function lineStart() {
- clip.point = pointLine;
- line.lineStart();
- }
- function lineEnd() {
- clip.point = point;
- line.lineEnd();
- }
- var segments;
- var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring;
- function pointRing(λ, φ) {
- ring.push([ λ, φ ]);
- var point = rotate(λ, φ);
- ringListener.point(point[0], point[1]);
- }
- function ringStart() {
- ringListener.lineStart();
- ring = [];
- }
- function ringEnd() {
- pointRing(ring[0][0], ring[0][1]);
- ringListener.lineEnd();
- var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length;
- ring.pop();
- polygon.push(ring);
- ring = null;
- if (!n) return;
- if (clean & 1) {
- segment = ringSegments[0];
- var n = segment.length - 1, i = -1, point;
- if (n > 0) {
- if (!polygonStarted) listener.polygonStart(), polygonStarted = true;
- listener.lineStart();
- while (++i < n) listener.point((point = segment[i])[0], point[1]);
- listener.lineEnd();
- }
- return;
- }
- if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
- segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));
- }
- return clip;
- };
- }
- function d3_geo_clipSegmentLength1(segment) {
- return segment.length > 1;
- }
- function d3_geo_clipBufferListener() {
- var lines = [], line;
- return {
- lineStart: function() {
- lines.push(line = []);
- },
- point: function(λ, φ) {
- line.push([ λ, φ ]);
- },
- lineEnd: d3_noop,
- buffer: function() {
- var buffer = lines;
- lines = [];
- line = null;
- return buffer;
- },
- rejoin: function() {
- if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
- }
- };
- }
- function d3_geo_clipSort(a, b) {
- return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]);
- }
- var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]);
- function d3_geo_clipAntimeridianLine(listener) {
- var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;
- return {
- lineStart: function() {
- listener.lineStart();
- clean = 1;
- },
- point: function(λ1, φ1) {
- var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0);
- if (abs(dλ - π) < ε) {
- listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ);
- listener.point(sλ0, φ0);
- listener.lineEnd();
- listener.lineStart();
- listener.point(sλ1, φ0);
- listener.point(λ1, φ0);
- clean = 0;
- } else if (sλ0 !== sλ1 && dλ >= π) {
- if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;
- if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;
- φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1);
- listener.point(sλ0, φ0);
- listener.lineEnd();
- listener.lineStart();
- listener.point(sλ1, φ0);
- clean = 0;
- }
- listener.point(λ0 = λ1, φ0 = φ1);
- sλ0 = sλ1;
- },
- lineEnd: function() {
- listener.lineEnd();
- λ0 = φ0 = NaN;
- },
- clean: function() {
- return 2 - clean;
- }
- };
- }
- function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) {
- var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1);
- return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2;
- }
- function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {
- var φ;
- if (from == null) {
- φ = direction * halfπ;
- listener.point(-π, φ);
- listener.point(0, φ);
- listener.point(π, φ);
- listener.point(π, 0);
- listener.point(π, -φ);
- listener.point(0, -φ);
- listener.point(-π, -φ);
- listener.point(-π, 0);
- listener.point(-π, φ);
- } else if (abs(from[0] - to[0]) > ε) {
- var s = from[0] < to[0] ? π : -π;
- φ = direction * s / 2;
- listener.point(-s, φ);
- listener.point(0, φ);
- listener.point(s, φ);
- } else {
- listener.point(to[0], to[1]);
- }
- }
- function d3_geo_pointInPolygon(point, polygon) {
- var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;
- d3_geo_areaRingSum.reset();
- for (var i = 0, n = polygon.length; i < n; ++i) {
- var ring = polygon[i], m = ring.length;
- if (!m) continue;
- var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;
- while (true) {
- if (j === m) j = 0;
- point = ring[j];
- var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ;
- d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ)));
- polarAngle += antimeridian ? dλ + sdλ * τ : dλ;
- if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {
- var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));
- d3_geo_cartesianNormalize(arc);
- var intersection = d3_geo_cartesianCross(meridianNormal, arc);
- d3_geo_cartesianNormalize(intersection);
- var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);
- if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {
- winding += antimeridian ^ dλ >= 0 ? 1 : -1;
- }
- }
- if (!j++) break;
- λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;
- }
- }
- return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1;
- }
- function d3_geo_clipCircle(radius) {
- var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);
- return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]);
- function visible(λ, φ) {
- return Math.cos(λ) * Math.cos(φ) > cr;
- }
- function clipLine(listener) {
- var point0, c0, v0, v00, clean;
- return {
- lineStart: function() {
- v00 = v0 = false;
- clean = 1;
- },
- point: function(λ, φ) {
- var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0;
- if (!point0 && (v00 = v0 = v)) listener.lineStart();
- if (v !== v0) {
- point2 = intersect(point0, point1);
- if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) {
- point1[0] += ε;
- point1[1] += ε;
- v = visible(point1[0], point1[1]);
- }
- }
- if (v !== v0) {
- clean = 0;
- if (v) {
- listener.lineStart();
- point2 = intersect(point1, point0);
- listener.point(point2[0], point2[1]);
- } else {
- point2 = intersect(point0, point1);
- listener.point(point2[0], point2[1]);
- listener.lineEnd();
- }
- point0 = point2;
- } else if (notHemisphere && point0 && smallRadius ^ v) {
- var t;
- if (!(c & c0) && (t = intersect(point1, point0, true))) {
- clean = 0;
- if (smallRadius) {
- listener.lineStart();
- listener.point(t[0][0], t[0][1]);
- listener.point(t[1][0], t[1][1]);
- listener.lineEnd();
- } else {
- listener.point(t[1][0], t[1][1]);
- listener.lineEnd();
- listener.lineStart();
- listener.point(t[0][0], t[0][1]);
- }
- }
- }
- if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) {
- listener.point(point1[0], point1[1]);
- }
- point0 = point1, v0 = v, c0 = c;
- },
- lineEnd: function() {
- if (v0) listener.lineEnd();
- point0 = null;
- },
- clean: function() {
- return clean | (v00 && v0) << 1;
- }
- };
- }
- function intersect(a, b, two) {
- var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b);
- var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2;
- if (!determinant) return !two && a;
- var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2);
- d3_geo_cartesianAdd(A, B);
- var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1);
- if (t2 < 0) return;
- var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu);
- d3_geo_cartesianAdd(q, A);
- q = d3_geo_spherical(q);
- if (!two) return q;
- var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z;
- if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z;
- var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε;
- if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z;
- if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) {
- var q1 = d3_geo_cartesianScale(u, (-w + t) / uu);
- d3_geo_cartesianAdd(q1, A);
- return [ q, d3_geo_spherical(q1) ];
- }
- }
- function code(λ, φ) {
- var r = smallRadius ? radius : π - radius, code = 0;
- if (λ < -r) code |= 1; else if (λ > r) code |= 2;
- if (φ < -r) code |= 4; else if (φ > r) code |= 8;
- return code;
- }
- }
- function d3_geom_clipLine(x0, y0, x1, y1) {
- return function(line) {
- var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;
- r = x0 - ax;
- if (!dx && r > 0) return;
- r /= dx;
- if (dx < 0) {
- if (r < t0) return;
- if (r < t1) t1 = r;
- } else if (dx > 0) {
- if (r > t1) return;
- if (r > t0) t0 = r;
- }
- r = x1 - ax;
- if (!dx && r < 0) return;
- r /= dx;
- if (dx < 0) {
- if (r > t1) return;
- if (r > t0) t0 = r;
- } else if (dx > 0) {
- if (r < t0) return;
- if (r < t1) t1 = r;
- }
- r = y0 - ay;
- if (!dy && r > 0) return;
- r /= dy;
- if (dy < 0) {
- if (r < t0) return;
- if (r < t1) t1 = r;
- } else if (dy > 0) {
- if (r > t1) return;
- if (r > t0) t0 = r;
- }
- r = y1 - ay;
- if (!dy && r < 0) return;
- r /= dy;
- if (dy < 0) {
- if (r > t1) return;
- if (r > t0) t0 = r;
- } else if (dy > 0) {
- if (r < t0) return;
- if (r < t1) t1 = r;
- }
- if (t0 > 0) line.a = {
- x: ax + t0 * dx,
- y: ay + t0 * dy
- };
- if (t1 < 1) line.b = {
- x: ax + t1 * dx,
- y: ay + t1 * dy
- };
- return line;
- };
- }
- var d3_geo_clipExtentMAX = 1e9;
- d3.geo.clipExtent = function() {
- var x0, y0, x1, y1, stream, clip, clipExtent = {
- stream: function(output) {
- if (stream) stream.valid = false;
- stream = clip(output);
- stream.valid = true;
- return stream;
- },
- extent: function(_) {
- if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];
- clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]);
- if (stream) stream.valid = false, stream = null;
- return clipExtent;
- }
- };
- return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]);
- };
- function d3_geo_clipExtent(x0, y0, x1, y1) {
- return function(listener) {
- var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring;
- var clip = {
- point: point,
- lineStart: lineStart,
- lineEnd: lineEnd,
- polygonStart: function() {
- listener = bufferListener;
- segments = [];
- polygon = [];
- clean = true;
- },
- polygonEnd: function() {
- listener = listener_;
- segments = d3.merge(segments);
- var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length;
- if (inside || visible) {
- listener.polygonStart();
- if (inside) {
- listener.lineStart();
- interpolate(null, null, 1, listener);
- listener.lineEnd();
- }
- if (visible) {
- d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener);
- }
- listener.polygonEnd();
- }
- segments = polygon = ring = null;
- }
- };
- function insidePolygon(p) {
- var wn = 0, n = polygon.length, y = p[1];
- for (var i = 0; i < n; ++i) {
- for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) {
- b = v[j];
- if (a[1] <= y) {
- if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn;
- } else {
- if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn;
- }
- a = b;
- }
- }
- return wn !== 0;
- }
- function interpolate(from, to, direction, listener) {
- var a = 0, a1 = 0;
- if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) {
- do {
- listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);
- } while ((a = (a + direction + 4) % 4) !== a1);
- } else {
- listener.point(to[0], to[1]);
- }
- }
- function pointVisible(x, y) {
- return x0 <= x && x <= x1 && y0 <= y && y <= y1;
- }
- function point(x, y) {
- if (pointVisible(x, y)) listener.point(x, y);
- }
- var x__, y__, v__, x_, y_, v_, first, clean;
- function lineStart() {
- clip.point = linePoint;
- if (polygon) polygon.push(ring = []);
- first = true;
- v_ = false;
- x_ = y_ = NaN;
- }
- function lineEnd() {
- if (segments) {
- linePoint(x__, y__);
- if (v__ && v_) bufferListener.rejoin();
- segments.push(bufferListener.buffer());
- }
- clip.point = point;
- if (v_) listener.lineEnd();
- }
- function linePoint(x, y) {
- x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x));
- y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y));
- var v = pointVisible(x, y);
- if (polygon) ring.push([ x, y ]);
- if (first) {
- x__ = x, y__ = y, v__ = v;
- first = false;
- if (v) {
- listener.lineStart();
- listener.point(x, y);
- }
- } else {
- if (v && v_) listener.point(x, y); else {
- var l = {
- a: {
- x: x_,
- y: y_
- },
- b: {
- x: x,
- y: y
- }
- };
- if (clipLine(l)) {
- if (!v_) {
- listener.lineStart();
- listener.point(l.a.x, l.a.y);
- }
- listener.point(l.b.x, l.b.y);
- if (!v) listener.lineEnd();
- clean = false;
- } else if (v) {
- listener.lineStart();
- listener.point(x, y);
- clean = false;
- }
- }
- }
- x_ = x, y_ = y, v_ = v;
- }
- return clip;
- };
- function corner(p, direction) {
- return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2;
- }
- function compare(a, b) {
- return comparePoints(a.x, b.x);
- }
- function comparePoints(a, b) {
- var ca = corner(a, 1), cb = corner(b, 1);
- return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];
- }
- }
- function d3_geo_compose(a, b) {
- function compose(x, y) {
- return x = a(x, y), b(x[0], x[1]);
- }
- if (a.invert && b.invert) compose.invert = function(x, y) {
- return x = b.invert(x, y), x && a.invert(x[0], x[1]);
- };
- return compose;
- }
- function d3_geo_conic(projectAt) {
- var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1);
- p.parallels = function(_) {
- if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ];
- return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180);
- };
- return p;
- }
- function d3_geo_conicEqualArea(φ0, φ1) {
- var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n;
- function forward(λ, φ) {
- var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n;
- return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ];
- }
- forward.invert = function(x, y) {
- var ρ0_y = ρ0 - y;
- return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ];
- };
- return forward;
- }
- (d3.geo.conicEqualArea = function() {
- return d3_geo_conic(d3_geo_conicEqualArea);
- }).raw = d3_geo_conicEqualArea;
- d3.geo.albers = function() {
- return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070);
- };
- d3.geo.albersUsa = function() {
- var lower48 = d3.geo.albers();
- var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]);
- var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]);
- var point, pointStream = {
- point: function(x, y) {
- point = [ x, y ];
- }
- }, lower48Point, alaskaPoint, hawaiiPoint;
- function albersUsa(coordinates) {
- var x = coordinates[0], y = coordinates[1];
- point = null;
- (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y);
- return point;
- }
- albersUsa.invert = function(coordinates) {
- var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;
- return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates);
- };
- albersUsa.stream = function(stream) {
- var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream);
- return {
- point: function(x, y) {
- lower48Stream.point(x, y);
- alaskaStream.point(x, y);
- hawaiiStream.point(x, y);
- },
- sphere: function() {
- lower48Stream.sphere();
- alaskaStream.sphere();
- hawaiiStream.sphere();
- },
- lineStart: function() {
- lower48Stream.lineStart();
- alaskaStream.lineStart();
- hawaiiStream.lineStart();
- },
- lineEnd: function() {
- lower48Stream.lineEnd();
- alaskaStream.lineEnd();
- hawaiiStream.lineEnd();
- },
- polygonStart: function() {
- lower48Stream.polygonStart();
- alaskaStream.polygonStart();
- hawaiiStream.polygonStart();
- },
- polygonEnd: function() {
- lower48Stream.polygonEnd();
- alaskaStream.polygonEnd();
- hawaiiStream.polygonEnd();
- }
- };
- };
- albersUsa.precision = function(_) {
- if (!arguments.length) return lower48.precision();
- lower48.precision(_);
- alaska.precision(_);
- hawaii.precision(_);
- return albersUsa;
- };
- albersUsa.scale = function(_) {
- if (!arguments.length) return lower48.scale();
- lower48.scale(_);
- alaska.scale(_ * .35);
- hawaii.scale(_);
- return albersUsa.translate(lower48.translate());
- };
- albersUsa.translate = function(_) {
- if (!arguments.length) return lower48.translate();
- var k = lower48.scale(), x = +_[0], y = +_[1];
- lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point;
- alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;
- hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;
- return albersUsa;
- };
- return albersUsa.scale(1070);
- };
- var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = {
- point: d3_noop,
- lineStart: d3_noop,
- lineEnd: d3_noop,
- polygonStart: function() {
- d3_geo_pathAreaPolygon = 0;
- d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;
- },
- polygonEnd: function() {
- d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;
- d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2);
- }
- };
- function d3_geo_pathAreaRingStart() {
- var x00, y00, x0, y0;
- d3_geo_pathArea.point = function(x, y) {
- d3_geo_pathArea.point = nextPoint;
- x00 = x0 = x, y00 = y0 = y;
- };
- function nextPoint(x, y) {
- d3_geo_pathAreaPolygon += y0 * x - x0 * y;
- x0 = x, y0 = y;
- }
- d3_geo_pathArea.lineEnd = function() {
- nextPoint(x00, y00);
- };
- }
- var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1;
- var d3_geo_pathBounds = {
- point: d3_geo_pathBoundsPoint,
- lineStart: d3_noop,
- lineEnd: d3_noop,
- polygonStart: d3_noop,
- polygonEnd: d3_noop
- };
- function d3_geo_pathBoundsPoint(x, y) {
- if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x;
- if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x;
- if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y;
- if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y;
- }
- function d3_geo_pathBuffer() {
- var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = [];
- var stream = {
- point: point,
- lineStart: function() {
- stream.point = pointLineStart;
- },
- lineEnd: lineEnd,
- polygonStart: function() {
- stream.lineEnd = lineEndPolygon;
- },
- polygonEnd: function() {
- stream.lineEnd = lineEnd;
- stream.point = point;
- },
- pointRadius: function(_) {
- pointCircle = d3_geo_pathBufferCircle(_);
- return stream;
- },
- result: function() {
- if (buffer.length) {
- var result = buffer.join("");
- buffer = [];
- return result;
- }
- }
- };
- function point(x, y) {
- buffer.push("M", x, ",", y, pointCircle);
- }
- function pointLineStart(x, y) {
- buffer.push("M", x, ",", y);
- stream.point = pointLine;
- }
- function pointLine(x, y) {
- buffer.push("L", x, ",", y);
- }
- function lineEnd() {
- stream.point = point;
- }
- function lineEndPolygon() {
- buffer.push("Z");
- }
- return stream;
- }
- function d3_geo_pathBufferCircle(radius) {
- return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z";
- }
- var d3_geo_pathCentroid = {
- point: d3_geo_pathCentroidPoint,
- lineStart: d3_geo_pathCentroidLineStart,
- lineEnd: d3_geo_pathCentroidLineEnd,
- polygonStart: function() {
- d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;
- },
- polygonEnd: function() {
- d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;
- d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;
- d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;
- }
- };
- function d3_geo_pathCentroidPoint(x, y) {
- d3_geo_centroidX0 += x;
- d3_geo_centroidY0 += y;
- ++d3_geo_centroidZ0;
- }
- function d3_geo_pathCentroidLineStart() {
- var x0, y0;
- d3_geo_pathCentroid.point = function(x, y) {
- d3_geo_pathCentroid.point = nextPoint;
- d3_geo_pathCentroidPoint(x0 = x, y0 = y);
- };
- function nextPoint(x, y) {
- var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);
- d3_geo_centroidX1 += z * (x0 + x) / 2;
- d3_geo_centroidY1 += z * (y0 + y) / 2;
- d3_geo_centroidZ1 += z;
- d3_geo_pathCentroidPoint(x0 = x, y0 = y);
- }
- }
- function d3_geo_pathCentroidLineEnd() {
- d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;
- }
- function d3_geo_pathCentroidRingStart() {
- var x00, y00, x0, y0;
- d3_geo_pathCentroid.point = function(x, y) {
- d3_geo_pathCentroid.point = nextPoint;
- d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y);
- };
- function nextPoint(x, y) {
- var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);
- d3_geo_centroidX1 += z * (x0 + x) / 2;
- d3_geo_centroidY1 += z * (y0 + y) / 2;
- d3_geo_centroidZ1 += z;
- z = y0 * x - x0 * y;
- d3_geo_centroidX2 += z * (x0 + x);
- d3_geo_centroidY2 += z * (y0 + y);
- d3_geo_centroidZ2 += z * 3;
- d3_geo_pathCentroidPoint(x0 = x, y0 = y);
- }
- d3_geo_pathCentroid.lineEnd = function() {
- nextPoint(x00, y00);
- };
- }
- function d3_geo_pathContext(context) {
- var pointRadius = 4.5;
- var stream = {
- point: point,
- lineStart: function() {
- stream.point = pointLineStart;
- },
- lineEnd: lineEnd,
- polygonStart: function() {
- stream.lineEnd = lineEndPolygon;
- },
- polygonEnd: function() {
- stream.lineEnd = lineEnd;
- stream.point = point;
- },
- pointRadius: function(_) {
- pointRadius = _;
- return stream;
- },
- result: d3_noop
- };
- function point(x, y) {
- context.moveTo(x, y);
- context.arc(x, y, pointRadius, 0, τ);
- }
- function pointLineStart(x, y) {
- context.moveTo(x, y);
- stream.point = pointLine;
- }
- function pointLine(x, y) {
- context.lineTo(x, y);
- }
- function lineEnd() {
- stream.point = point;
- }
- function lineEndPolygon() {
- context.closePath();
- }
- return stream;
- }
- function d3_geo_resample(project) {
- var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16;
- function resample(stream) {
- return (maxDepth ? resampleRecursive : resampleNone)(stream);
- }
- function resampleNone(stream) {
- return d3_geo_transformPoint(stream, function(x, y) {
- x = project(x, y);
- stream.point(x[0], x[1]);
- });
- }
- function resampleRecursive(stream) {
- var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0;
- var resample = {
- point: point,
- lineStart: lineStart,
- lineEnd: lineEnd,
- polygonStart: function() {
- stream.polygonStart();
- resample.lineStart = ringStart;
- },
- polygonEnd: function() {
- stream.polygonEnd();
- resample.lineStart = lineStart;
- }
- };
- function point(x, y) {
- x = project(x, y);
- stream.point(x[0], x[1]);
- }
- function lineStart() {
- x0 = NaN;
- resample.point = linePoint;
- stream.lineStart();
- }
- function linePoint(λ, φ) {
- var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ);
- resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
- stream.point(x0, y0);
- }
- function lineEnd() {
- resample.point = point;
- stream.lineEnd();
- }
- function ringStart() {
- lineStart();
- resample.point = ringPoint;
- resample.lineEnd = ringEnd;
- }
- function ringPoint(λ, φ) {
- linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
- resample.point = linePoint;
- }
- function ringEnd() {
- resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream);
- resample.lineEnd = lineEnd;
- lineEnd();
- }
- return resample;
- }
- function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) {
- var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;
- if (d2 > 4 * δ2 && depth--) {
- var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;
- if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {
- resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream);
- stream.point(x2, y2);
- resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream);
- }
- }
- }
- resample.precision = function(_) {
- if (!arguments.length) return Math.sqrt(δ2);
- maxDepth = (δ2 = _ * _) > 0 && 16;
- return resample;
- };
- return resample;
- }
- d3.geo.path = function() {
- var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream;
- function path(object) {
- if (object) {
- if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
- if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream);
- d3.geo.stream(object, cacheStream);
- }
- return contextStream.result();
- }
- path.area = function(object) {
- d3_geo_pathAreaSum = 0;
- d3.geo.stream(object, projectStream(d3_geo_pathArea));
- return d3_geo_pathAreaSum;
- };
- path.centroid = function(object) {
- d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;
- d3.geo.stream(object, projectStream(d3_geo_pathCentroid));
- return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ];
- };
- path.bounds = function(object) {
- d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);
- d3.geo.stream(object, projectStream(d3_geo_pathBounds));
- return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ];
- };
- path.projection = function(_) {
- if (!arguments.length) return projection;
- projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity;
- return reset();
- };
- path.context = function(_) {
- if (!arguments.length) return context;
- contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_);
- if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
- return reset();
- };
- path.pointRadius = function(_) {
- if (!arguments.length) return pointRadius;
- pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
- return path;
- };
- function reset() {
- cacheStream = null;
- return path;
- }
- return path.projection(d3.geo.albersUsa()).context(null);
- };
- function d3_geo_pathProjectStream(project) {
- var resample = d3_geo_resample(function(x, y) {
- return project([ x * d3_degrees, y * d3_degrees ]);
- });
- return function(stream) {
- return d3_geo_projectionRadians(resample(stream));
- };
- }
- d3.geo.transform = function(methods) {
- return {
- stream: function(stream) {
- var transform = new d3_geo_transform(stream);
- for (var k in methods) transform[k] = methods[k];
- return transform;
- }
- };
- };
- function d3_geo_transform(stream) {
- this.stream = stream;
- }
- d3_geo_transform.prototype = {
- point: function(x, y) {
- this.stream.point(x, y);
- },
- sphere: function() {
- this.stream.sphere();
- },
- lineStart: function() {
- this.stream.lineStart();
- },
- lineEnd: function() {
- this.stream.lineEnd();
- },
- polygonStart: function() {
- this.stream.polygonStart();
- },
- polygonEnd: function() {
- this.stream.polygonEnd();
- }
- };
- function d3_geo_transformPoint(stream, point) {
- return {
- point: point,
- sphere: function() {
- stream.sphere();
- },
- lineStart: function() {
- stream.lineStart();
- },
- lineEnd: function() {
- stream.lineEnd();
- },
- polygonStart: function() {
- stream.polygonStart();
- },
- polygonEnd: function() {
- stream.polygonEnd();
- }
- };
- }
- d3.geo.projection = d3_geo_projection;
- d3.geo.projectionMutator = d3_geo_projectionMutator;
- function d3_geo_projection(project) {
- return d3_geo_projectionMutator(function() {
- return project;
- })();
- }
- function d3_geo_projectionMutator(projectAt) {
- var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) {
- x = project(x, y);
- return [ x[0] * k + δx, δy - x[1] * k ];
- }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream;
- function projection(point) {
- point = projectRotate(point[0] * d3_radians, point[1] * d3_radians);
- return [ point[0] * k + δx, δy - point[1] * k ];
- }
- function invert(point) {
- point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k);
- return point && [ point[0] * d3_degrees, point[1] * d3_degrees ];
- }
- projection.stream = function(output) {
- if (stream) stream.valid = false;
- stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output))));
- stream.valid = true;
- return stream;
- };
- projection.clipAngle = function(_) {
- if (!arguments.length) return clipAngle;
- preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians);
- return invalidate();
- };
- projection.clipExtent = function(_) {
- if (!arguments.length) return clipExtent;
- clipExtent = _;
- postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity;
- return invalidate();
- };
- projection.scale = function(_) {
- if (!arguments.length) return k;
- k = +_;
- return reset();
- };
- projection.translate = function(_) {
- if (!arguments.length) return [ x, y ];
- x = +_[0];
- y = +_[1];
- return reset();
- };
- projection.center = function(_) {
- if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ];
- λ = _[0] % 360 * d3_radians;
- φ = _[1] % 360 * d3_radians;
- return reset();
- };
- projection.rotate = function(_) {
- if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ];
- δλ = _[0] % 360 * d3_radians;
- δφ = _[1] % 360 * d3_radians;
- δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0;
- return reset();
- };
- d3.rebind(projection, projectResample, "precision");
- function reset() {
- projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project);
- var center = project(λ, φ);
- δx = x - center[0] * k;
- δy = y + center[1] * k;
- return invalidate();
- }
- function invalidate() {
- if (stream) stream.valid = false, stream = null;
- return projection;
- }
- return function() {
- project = projectAt.apply(this, arguments);
- projection.invert = project.invert && invert;
- return reset();
- };
- }
- function d3_geo_projectionRadians(stream) {
- return d3_geo_transformPoint(stream, function(x, y) {
- stream.point(x * d3_radians, y * d3_radians);
- });
- }
- function d3_geo_equirectangular(λ, φ) {
- return [ λ, φ ];
- }
- (d3.geo.equirectangular = function() {
- return d3_geo_projection(d3_geo_equirectangular);
- }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;
- d3.geo.rotation = function(rotate) {
- rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0);
- function forward(coordinates) {
- coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians);
- return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;
- }
- forward.invert = function(coordinates) {
- coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians);
- return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;
- };
- return forward;
- };
- function d3_geo_identityRotation(λ, φ) {
- return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];
- }
- d3_geo_identityRotation.invert = d3_geo_equirectangular;
- function d3_geo_rotation(δλ, δφ, δγ) {
- return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation;
- }
- function d3_geo_forwardRotationλ(δλ) {
- return function(λ, φ) {
- return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];
- };
- }
- function d3_geo_rotationλ(δλ) {
- var rotation = d3_geo_forwardRotationλ(δλ);
- rotation.invert = d3_geo_forwardRotationλ(-δλ);
- return rotation;
- }
- function d3_geo_rotationφγ(δφ, δγ) {
- var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ);
- function rotation(λ, φ) {
- var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ;
- return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ];
- }
- rotation.invert = function(λ, φ) {
- var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ;
- return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ];
- };
- return rotation;
- }
- d3.geo.circle = function() {
- var origin = [ 0, 0 ], angle, precision = 6, interpolate;
- function circle() {
- var center = typeof origin === "function" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = [];
- interpolate(null, null, 1, {
- point: function(x, y) {
- ring.push(x = rotate(x, y));
- x[0] *= d3_degrees, x[1] *= d3_degrees;
- }
- });
- return {
- type: "Polygon",
- coordinates: [ ring ]
- };
- }
- circle.origin = function(x) {
- if (!arguments.length) return origin;
- origin = x;
- return circle;
- };
- circle.angle = function(x) {
- if (!arguments.length) return angle;
- interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians);
- return circle;
- };
- circle.precision = function(_) {
- if (!arguments.length) return precision;
- interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians);
- return circle;
- };
- return circle.angle(90);
- };
- function d3_geo_circleInterpolate(radius, precision) {
- var cr = Math.cos(radius), sr = Math.sin(radius);
- return function(from, to, direction, listener) {
- var step = direction * precision;
- if (from != null) {
- from = d3_geo_circleAngle(cr, from);
- to = d3_geo_circleAngle(cr, to);
- if (direction > 0 ? from < to : from > to) from += direction * τ;
- } else {
- from = radius + direction * τ;
- to = radius - .5 * step;
- }
- for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) {
- listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]);
- }
- };
- }
- function d3_geo_circleAngle(cr, point) {
- var a = d3_geo_cartesian(point);
- a[0] -= cr;
- d3_geo_cartesianNormalize(a);
- var angle = d3_acos(-a[1]);
- return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI);
- }
- d3.geo.distance = function(a, b) {
- var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t;
- return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ);
- };
- d3.geo.graticule = function() {
- var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5;
- function graticule() {
- return {
- type: "MultiLineString",
- coordinates: lines()
- };
- }
- function lines() {
- return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) {
- return abs(x % DX) > ε;
- }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) {
- return abs(y % DY) > ε;
- }).map(y));
- }
- graticule.lines = function() {
- return lines().map(function(coordinates) {
- return {
- type: "LineString",
- coordinates: coordinates
- };
- });
- };
- graticule.outline = function() {
- return {
- type: "Polygon",
- coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ]
- };
- };
- graticule.extent = function(_) {
- if (!arguments.length) return graticule.minorExtent();
- return graticule.majorExtent(_).minorExtent(_);
- };
- graticule.majorExtent = function(_) {
- if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ];
- X0 = +_[0][0], X1 = +_[1][0];
- Y0 = +_[0][1], Y1 = +_[1][1];
- if (X0 > X1) _ = X0, X0 = X1, X1 = _;
- if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;
- return graticule.precision(precision);
- };
- graticule.minorExtent = function(_) {
- if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];
- x0 = +_[0][0], x1 = +_[1][0];
- y0 = +_[0][1], y1 = +_[1][1];
- if (x0 > x1) _ = x0, x0 = x1, x1 = _;
- if (y0 > y1) _ = y0, y0 = y1, y1 = _;
- return graticule.precision(precision);
- };
- graticule.step = function(_) {
- if (!arguments.length) return graticule.minorStep();
- return graticule.majorStep(_).minorStep(_);
- };
- graticule.majorStep = function(_) {
- if (!arguments.length) return [ DX, DY ];
- DX = +_[0], DY = +_[1];
- return graticule;
- };
- graticule.minorStep = function(_) {
- if (!arguments.length) return [ dx, dy ];
- dx = +_[0], dy = +_[1];
- return graticule;
- };
- graticule.precision = function(_) {
- if (!arguments.length) return precision;
- precision = +_;
- x = d3_geo_graticuleX(y0, y1, 90);
- y = d3_geo_graticuleY(x0, x1, precision);
- X = d3_geo_graticuleX(Y0, Y1, 90);
- Y = d3_geo_graticuleY(X0, X1, precision);
- return graticule;
- };
- return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]);
- };
- function d3_geo_graticuleX(y0, y1, dy) {
- var y = d3.range(y0, y1 - ε, dy).concat(y1);
- return function(x) {
- return y.map(function(y) {
- return [ x, y ];
- });
- };
- }
- function d3_geo_graticuleY(x0, x1, dx) {
- var x = d3.range(x0, x1 - ε, dx).concat(x1);
- return function(y) {
- return x.map(function(x) {
- return [ x, y ];
- });
- };
- }
- function d3_source(d) {
- return d.source;
- }
- function d3_target(d) {
- return d.target;
- }
- d3.geo.greatArc = function() {
- var source = d3_source, source_, target = d3_target, target_;
- function greatArc() {
- return {
- type: "LineString",
- coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ]
- };
- }
- greatArc.distance = function() {
- return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments));
- };
- greatArc.source = function(_) {
- if (!arguments.length) return source;
- source = _, source_ = typeof _ === "function" ? null : _;
- return greatArc;
- };
- greatArc.target = function(_) {
- if (!arguments.length) return target;
- target = _, target_ = typeof _ === "function" ? null : _;
- return greatArc;
- };
- greatArc.precision = function() {
- return arguments.length ? greatArc : 0;
- };
- return greatArc;
- };
- d3.geo.interpolate = function(source, target) {
- return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians);
- };
- function d3_geo_interpolate(x0, y0, x1, y1) {
- var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d);
- var interpolate = d ? function(t) {
- var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;
- return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ];
- } : function() {
- return [ x0 * d3_degrees, y0 * d3_degrees ];
- };
- interpolate.distance = d;
- return interpolate;
- }
- d3.geo.length = function(object) {
- d3_geo_lengthSum = 0;
- d3.geo.stream(object, d3_geo_length);
- return d3_geo_lengthSum;
- };
- var d3_geo_lengthSum;
- var d3_geo_length = {
- sphere: d3_noop,
- point: d3_noop,
- lineStart: d3_geo_lengthLineStart,
- lineEnd: d3_noop,
- polygonStart: d3_noop,
- polygonEnd: d3_noop
- };
- function d3_geo_lengthLineStart() {
- var λ0, sinφ0, cosφ0;
- d3_geo_length.point = function(λ, φ) {
- λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ);
- d3_geo_length.point = nextPoint;
- };
- d3_geo_length.lineEnd = function() {
- d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;
- };
- function nextPoint(λ, φ) {
- var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t);
- d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);
- λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ;
- }
- }
- function d3_geo_azimuthal(scale, angle) {
- function azimuthal(λ, φ) {
- var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ);
- return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ];
- }
- azimuthal.invert = function(x, y) {
- var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c);
- return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ];
- };
- return azimuthal;
- }
- var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) {
- return Math.sqrt(2 / (1 + cosλcosφ));
- }, function(ρ) {
- return 2 * Math.asin(ρ / 2);
- });
- (d3.geo.azimuthalEqualArea = function() {
- return d3_geo_projection(d3_geo_azimuthalEqualArea);
- }).raw = d3_geo_azimuthalEqualArea;
- var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) {
- var c = Math.acos(cosλcosφ);
- return c && c / Math.sin(c);
- }, d3_identity);
- (d3.geo.azimuthalEquidistant = function() {
- return d3_geo_projection(d3_geo_azimuthalEquidistant);
- }).raw = d3_geo_azimuthalEquidistant;
- function d3_geo_conicConformal(φ0, φ1) {
- var cosφ0 = Math.cos(φ0), t = function(φ) {
- return Math.tan(π / 4 + φ / 2);
- }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n;
- if (!n) return d3_geo_mercator;
- function forward(λ, φ) {
- if (F > 0) {
- if (φ < -halfπ + ε) φ = -halfπ + ε;
- } else {
- if (φ > halfπ - ε) φ = halfπ - ε;
- }
- var ρ = F / Math.pow(t(φ), n);
- return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ];
- }
- forward.invert = function(x, y) {
- var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);
- return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ];
- };
- return forward;
- }
- (d3.geo.conicConformal = function() {
- return d3_geo_conic(d3_geo_conicConformal);
- }).raw = d3_geo_conicConformal;
- function d3_geo_conicEquidistant(φ0, φ1) {
- var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0;
- if (abs(n) < ε) return d3_geo_equirectangular;
- function forward(λ, φ) {
- var ρ = G - φ;
- return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ];
- }
- forward.invert = function(x, y) {
- var ρ0_y = G - y;
- return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ];
- };
- return forward;
- }
- (d3.geo.conicEquidistant = function() {
- return d3_geo_conic(d3_geo_conicEquidistant);
- }).raw = d3_geo_conicEquidistant;
- var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) {
- return 1 / cosλcosφ;
- }, Math.atan);
- (d3.geo.gnomonic = function() {
- return d3_geo_projection(d3_geo_gnomonic);
- }).raw = d3_geo_gnomonic;
- function d3_geo_mercator(λ, φ) {
- return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ];
- }
- d3_geo_mercator.invert = function(x, y) {
- return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ];
- };
- function d3_geo_mercatorProjection(project) {
- var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto;
- m.scale = function() {
- var v = scale.apply(m, arguments);
- return v === m ? clipAuto ? m.clipExtent(null) : m : v;
- };
- m.translate = function() {
- var v = translate.apply(m, arguments);
- return v === m ? clipAuto ? m.clipExtent(null) : m : v;
- };
- m.clipExtent = function(_) {
- var v = clipExtent.apply(m, arguments);
- if (v === m) {
- if (clipAuto = _ == null) {
- var k = π * scale(), t = translate();
- clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]);
- }
- } else if (clipAuto) {
- v = null;
- }
- return v;
- };
- return m.clipExtent(null);
- }
- (d3.geo.mercator = function() {
- return d3_geo_mercatorProjection(d3_geo_mercator);
- }).raw = d3_geo_mercator;
- var d3_geo_orthographic = d3_geo_azimuthal(function() {
- return 1;
- }, Math.asin);
- (d3.geo.orthographic = function() {
- return d3_geo_projection(d3_geo_orthographic);
- }).raw = d3_geo_orthographic;
- var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) {
- return 1 / (1 + cosλcosφ);
- }, function(ρ) {
- return 2 * Math.atan(ρ);
- });
- (d3.geo.stereographic = function() {
- return d3_geo_projection(d3_geo_stereographic);
- }).raw = d3_geo_stereographic;
- function d3_geo_transverseMercator(λ, φ) {
- return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ];
- }
- d3_geo_transverseMercator.invert = function(x, y) {
- return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ];
- };
- (d3.geo.transverseMercator = function() {
- var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate;
- projection.center = function(_) {
- return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]);
- };
- projection.rotate = function(_) {
- return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(),
- [ _[0], _[1], _[2] - 90 ]);
- };
- return rotate([ 0, 0, 90 ]);
- }).raw = d3_geo_transverseMercator;
- d3.geom = {};
- function d3_geom_pointX(d) {
- return d[0];
- }
- function d3_geom_pointY(d) {
- return d[1];
- }
- d3.geom.hull = function(vertices) {
- var x = d3_geom_pointX, y = d3_geom_pointY;
- if (arguments.length) return hull(vertices);
- function hull(data) {
- if (data.length < 3) return [];
- var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = [];
- for (i = 0; i < n; i++) {
- points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]);
- }
- points.sort(d3_geom_hullOrder);
- for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]);
- var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints);
- var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = [];
- for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]);
- for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]);
- return polygon;
- }
- hull.x = function(_) {
- return arguments.length ? (x = _, hull) : x;
- };
- hull.y = function(_) {
- return arguments.length ? (y = _, hull) : y;
- };
- return hull;
- };
- function d3_geom_hullUpper(points) {
- var n = points.length, hull = [ 0, 1 ], hs = 2;
- for (var i = 2; i < n; i++) {
- while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs;
- hull[hs++] = i;
- }
- return hull.slice(0, hs);
- }
- function d3_geom_hullOrder(a, b) {
- return a[0] - b[0] || a[1] - b[1];
- }
- d3.geom.polygon = function(coordinates) {
- d3_subclass(coordinates, d3_geom_polygonPrototype);
- return coordinates;
- };
- var d3_geom_polygonPrototype = d3.geom.polygon.prototype = [];
- d3_geom_polygonPrototype.area = function() {
- var i = -1, n = this.length, a, b = this[n - 1], area = 0;
- while (++i < n) {
- a = b;
- b = this[i];
- area += a[1] * b[0] - a[0] * b[1];
- }
- return area * .5;
- };
- d3_geom_polygonPrototype.centroid = function(k) {
- var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c;
- if (!arguments.length) k = -1 / (6 * this.area());
- while (++i < n) {
- a = b;
- b = this[i];
- c = a[0] * b[1] - b[0] * a[1];
- x += (a[0] + b[0]) * c;
- y += (a[1] + b[1]) * c;
- }
- return [ x * k, y * k ];
- };
- d3_geom_polygonPrototype.clip = function(subject) {
- var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d;
- while (++i < n) {
- input = subject.slice();
- subject.length = 0;
- b = this[i];
- c = input[(m = input.length - closed) - 1];
- j = -1;
- while (++j < m) {
- d = input[j];
- if (d3_geom_polygonInside(d, a, b)) {
- if (!d3_geom_polygonInside(c, a, b)) {
- subject.push(d3_geom_polygonIntersect(c, d, a, b));
- }
- subject.push(d);
- } else if (d3_geom_polygonInside(c, a, b)) {
- subject.push(d3_geom_polygonIntersect(c, d, a, b));
- }
- c = d;
- }
- if (closed) subject.push(subject[0]);
- a = b;
- }
- return subject;
- };
- function d3_geom_polygonInside(p, a, b) {
- return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);
- }
- function d3_geom_polygonIntersect(c, d, a, b) {
- var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);
- return [ x1 + ua * x21, y1 + ua * y21 ];
- }
- function d3_geom_polygonClosed(coordinates) {
- var a = coordinates[0], b = coordinates[coordinates.length - 1];
- return !(a[0] - b[0] || a[1] - b[1]);
- }
- var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = [];
- function d3_geom_voronoiBeach() {
- d3_geom_voronoiRedBlackNode(this);
- this.edge = this.site = this.circle = null;
- }
- function d3_geom_voronoiCreateBeach(site) {
- var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach();
- beach.site = site;
- return beach;
- }
- function d3_geom_voronoiDetachBeach(beach) {
- d3_geom_voronoiDetachCircle(beach);
- d3_geom_voronoiBeaches.remove(beach);
- d3_geom_voronoiBeachPool.push(beach);
- d3_geom_voronoiRedBlackNode(beach);
- }
- function d3_geom_voronoiRemoveBeach(beach) {
- var circle = beach.circle, x = circle.x, y = circle.cy, vertex = {
- x: x,
- y: y
- }, previous = beach.P, next = beach.N, disappearing = [ beach ];
- d3_geom_voronoiDetachBeach(beach);
- var lArc = previous;
- while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) {
- previous = lArc.P;
- disappearing.unshift(lArc);
- d3_geom_voronoiDetachBeach(lArc);
- lArc = previous;
- }
- disappearing.unshift(lArc);
- d3_geom_voronoiDetachCircle(lArc);
- var rArc = next;
- while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) {
- next = rArc.N;
- disappearing.push(rArc);
- d3_geom_voronoiDetachBeach(rArc);
- rArc = next;
- }
- disappearing.push(rArc);
- d3_geom_voronoiDetachCircle(rArc);
- var nArcs = disappearing.length, iArc;
- for (iArc = 1; iArc < nArcs; ++iArc) {
- rArc = disappearing[iArc];
- lArc = disappearing[iArc - 1];
- d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
- }
- lArc = disappearing[0];
- rArc = disappearing[nArcs - 1];
- rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex);
- d3_geom_voronoiAttachCircle(lArc);
- d3_geom_voronoiAttachCircle(rArc);
- }
- function d3_geom_voronoiAddBeach(site) {
- var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._;
- while (node) {
- dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x;
- if (dxl > ε) node = node.L; else {
- dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix);
- if (dxr > ε) {
- if (!node.R) {
- lArc = node;
- break;
- }
- node = node.R;
- } else {
- if (dxl > -ε) {
- lArc = node.P;
- rArc = node;
- } else if (dxr > -ε) {
- lArc = node;
- rArc = node.N;
- } else {
- lArc = rArc = node;
- }
- break;
- }
- }
- }
- var newArc = d3_geom_voronoiCreateBeach(site);
- d3_geom_voronoiBeaches.insert(lArc, newArc);
- if (!lArc && !rArc) return;
- if (lArc === rArc) {
- d3_geom_voronoiDetachCircle(lArc);
- rArc = d3_geom_voronoiCreateBeach(lArc.site);
- d3_geom_voronoiBeaches.insert(newArc, rArc);
- newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);
- d3_geom_voronoiAttachCircle(lArc);
- d3_geom_voronoiAttachCircle(rArc);
- return;
- }
- if (!rArc) {
- newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);
- return;
- }
- d3_geom_voronoiDetachCircle(lArc);
- d3_geom_voronoiDetachCircle(rArc);
- var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = {
- x: (cy * hb - by * hc) / d + ax,
- y: (bx * hc - cx * hb) / d + ay
- };
- d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex);
- newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex);
- rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex);
- d3_geom_voronoiAttachCircle(lArc);
- d3_geom_voronoiAttachCircle(rArc);
- }
- function d3_geom_voronoiLeftBreakPoint(arc, directrix) {
- var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix;
- if (!pby2) return rfocx;
- var lArc = arc.P;
- if (!lArc) return -Infinity;
- site = lArc.site;
- var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix;
- if (!plby2) return lfocx;
- var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2;
- if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;
- return (rfocx + lfocx) / 2;
- }
- function d3_geom_voronoiRightBreakPoint(arc, directrix) {
- var rArc = arc.N;
- if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix);
- var site = arc.site;
- return site.y === directrix ? site.x : Infinity;
- }
- function d3_geom_voronoiCell(site) {
- this.site = site;
- this.edges = [];
- }
- d3_geom_voronoiCell.prototype.prepare = function() {
- var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge;
- while (iHalfEdge--) {
- edge = halfEdges[iHalfEdge].edge;
- if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1);
- }
- halfEdges.sort(d3_geom_voronoiHalfEdgeOrder);
- return halfEdges.length;
- };
- function d3_geom_voronoiCloseCells(extent) {
- var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end;
- while (iCell--) {
- cell = cells[iCell];
- if (!cell || !cell.prepare()) continue;
- halfEdges = cell.edges;
- nHalfEdges = halfEdges.length;
- iHalfEdge = 0;
- while (iHalfEdge < nHalfEdges) {
- end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y;
- start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y;
- if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) {
- halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? {
- x: x0,
- y: abs(x2 - x0) < ε ? y2 : y1
- } : abs(y3 - y1) < ε && x1 - x3 > ε ? {
- x: abs(y2 - y1) < ε ? x2 : x1,
- y: y1
- } : abs(x3 - x1) < ε && y3 - y0 > ε ? {
- x: x1,
- y: abs(x2 - x1) < ε ? y2 : y0
- } : abs(y3 - y0) < ε && x3 - x0 > ε ? {
- x: abs(y2 - y0) < ε ? x2 : x0,
- y: y0
- } : null), cell.site, null));
- ++nHalfEdges;
- }
- }
- }
- }
- function d3_geom_voronoiHalfEdgeOrder(a, b) {
- return b.angle - a.angle;
- }
- function d3_geom_voronoiCircle() {
- d3_geom_voronoiRedBlackNode(this);
- this.x = this.y = this.arc = this.site = this.cy = null;
- }
- function d3_geom_voronoiAttachCircle(arc) {
- var lArc = arc.P, rArc = arc.N;
- if (!lArc || !rArc) return;
- var lSite = lArc.site, cSite = arc.site, rSite = rArc.site;
- if (lSite === rSite) return;
- var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by;
- var d = 2 * (ax * cy - ay * cx);
- if (d >= -ε2) return;
- var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by;
- var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle();
- circle.arc = arc;
- circle.site = cSite;
- circle.x = x + bx;
- circle.y = cy + Math.sqrt(x * x + y * y);
- circle.cy = cy;
- arc.circle = circle;
- var before = null, node = d3_geom_voronoiCircles._;
- while (node) {
- if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) {
- if (node.L) node = node.L; else {
- before = node.P;
- break;
- }
- } else {
- if (node.R) node = node.R; else {
- before = node;
- break;
- }
- }
- }
- d3_geom_voronoiCircles.insert(before, circle);
- if (!before) d3_geom_voronoiFirstCircle = circle;
- }
- function d3_geom_voronoiDetachCircle(arc) {
- var circle = arc.circle;
- if (circle) {
- if (!circle.P) d3_geom_voronoiFirstCircle = circle.N;
- d3_geom_voronoiCircles.remove(circle);
- d3_geom_voronoiCirclePool.push(circle);
- d3_geom_voronoiRedBlackNode(circle);
- arc.circle = null;
- }
- }
- function d3_geom_voronoiClipEdges(extent) {
- var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e;
- while (i--) {
- e = edges[i];
- if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) {
- e.a = e.b = null;
- edges.splice(i, 1);
- }
- }
- }
- function d3_geom_voronoiConnectEdge(edge, extent) {
- var vb = edge.b;
- if (vb) return true;
- var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb;
- if (ry === ly) {
- if (fx < x0 || fx >= x1) return;
- if (lx > rx) {
- if (!va) va = {
- x: fx,
- y: y0
- }; else if (va.y >= y1) return;
- vb = {
- x: fx,
- y: y1
- };
- } else {
- if (!va) va = {
- x: fx,
- y: y1
- }; else if (va.y < y0) return;
- vb = {
- x: fx,
- y: y0
- };
- }
- } else {
- fm = (lx - rx) / (ry - ly);
- fb = fy - fm * fx;
- if (fm < -1 || fm > 1) {
- if (lx > rx) {
- if (!va) va = {
- x: (y0 - fb) / fm,
- y: y0
- }; else if (va.y >= y1) return;
- vb = {
- x: (y1 - fb) / fm,
- y: y1
- };
- } else {
- if (!va) va = {
- x: (y1 - fb) / fm,
- y: y1
- }; else if (va.y < y0) return;
- vb = {
- x: (y0 - fb) / fm,
- y: y0
- };
- }
- } else {
- if (ly < ry) {
- if (!va) va = {
- x: x0,
- y: fm * x0 + fb
- }; else if (va.x >= x1) return;
- vb = {
- x: x1,
- y: fm * x1 + fb
- };
- } else {
- if (!va) va = {
- x: x1,
- y: fm * x1 + fb
- }; else if (va.x < x0) return;
- vb = {
- x: x0,
- y: fm * x0 + fb
- };
- }
- }
- }
- edge.a = va;
- edge.b = vb;
- return true;
- }
- function d3_geom_voronoiEdge(lSite, rSite) {
- this.l = lSite;
- this.r = rSite;
- this.a = this.b = null;
- }
- function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) {
- var edge = new d3_geom_voronoiEdge(lSite, rSite);
- d3_geom_voronoiEdges.push(edge);
- if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va);
- if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb);
- d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite));
- d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite));
- return edge;
- }
- function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) {
- var edge = new d3_geom_voronoiEdge(lSite, null);
- edge.a = va;
- edge.b = vb;
- d3_geom_voronoiEdges.push(edge);
- return edge;
- }
- function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) {
- if (!edge.a && !edge.b) {
- edge.a = vertex;
- edge.l = lSite;
- edge.r = rSite;
- } else if (edge.l === rSite) {
- edge.b = vertex;
- } else {
- edge.a = vertex;
- }
- }
- function d3_geom_voronoiHalfEdge(edge, lSite, rSite) {
- var va = edge.a, vb = edge.b;
- this.edge = edge;
- this.site = lSite;
- this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y);
- }
- d3_geom_voronoiHalfEdge.prototype = {
- start: function() {
- return this.edge.l === this.site ? this.edge.a : this.edge.b;
- },
- end: function() {
- return this.edge.l === this.site ? this.edge.b : this.edge.a;
- }
- };
- function d3_geom_voronoiRedBlackTree() {
- this._ = null;
- }
- function d3_geom_voronoiRedBlackNode(node) {
- node.U = node.C = node.L = node.R = node.P = node.N = null;
- }
- d3_geom_voronoiRedBlackTree.prototype = {
- insert: function(after, node) {
- var parent, grandpa, uncle;
- if (after) {
- node.P = after;
- node.N = after.N;
- if (after.N) after.N.P = node;
- after.N = node;
- if (after.R) {
- after = after.R;
- while (after.L) after = after.L;
- after.L = node;
- } else {
- after.R = node;
- }
- parent = after;
- } else if (this._) {
- after = d3_geom_voronoiRedBlackFirst(this._);
- node.P = null;
- node.N = after;
- after.P = after.L = node;
- parent = after;
- } else {
- node.P = node.N = null;
- this._ = node;
- parent = null;
- }
- node.L = node.R = null;
- node.U = parent;
- node.C = true;
- after = node;
- while (parent && parent.C) {
- grandpa = parent.U;
- if (parent === grandpa.L) {
- uncle = grandpa.R;
- if (uncle && uncle.C) {
- parent.C = uncle.C = false;
- grandpa.C = true;
- after = grandpa;
- } else {
- if (after === parent.R) {
- d3_geom_voronoiRedBlackRotateLeft(this, parent);
- after = parent;
- parent = after.U;
- }
- parent.C = false;
- grandpa.C = true;
- d3_geom_voronoiRedBlackRotateRight(this, grandpa);
- }
- } else {
- uncle = grandpa.L;
- if (uncle && uncle.C) {
- parent.C = uncle.C = false;
- grandpa.C = true;
- after = grandpa;
- } else {
- if (after === parent.L) {
- d3_geom_voronoiRedBlackRotateRight(this, parent);
- after = parent;
- parent = after.U;
- }
- parent.C = false;
- grandpa.C = true;
- d3_geom_voronoiRedBlackRotateLeft(this, grandpa);
- }
- }
- parent = after.U;
- }
- this._.C = false;
- },
- remove: function(node) {
- if (node.N) node.N.P = node.P;
- if (node.P) node.P.N = node.N;
- node.N = node.P = null;
- var parent = node.U, sibling, left = node.L, right = node.R, next, red;
- if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right);
- if (parent) {
- if (parent.L === node) parent.L = next; else parent.R = next;
- } else {
- this._ = next;
- }
- if (left && right) {
- red = next.C;
- next.C = node.C;
- next.L = left;
- left.U = next;
- if (next !== right) {
- parent = next.U;
- next.U = node.U;
- node = next.R;
- parent.L = node;
- next.R = right;
- right.U = next;
- } else {
- next.U = parent;
- parent = next;
- node = next.R;
- }
- } else {
- red = node.C;
- node = next;
- }
- if (node) node.U = parent;
- if (red) return;
- if (node && node.C) {
- node.C = false;
- return;
- }
- do {
- if (node === this._) break;
- if (node === parent.L) {
- sibling = parent.R;
- if (sibling.C) {
- sibling.C = false;
- parent.C = true;
- d3_geom_voronoiRedBlackRotateLeft(this, parent);
- sibling = parent.R;
- }
- if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {
- if (!sibling.R || !sibling.R.C) {
- sibling.L.C = false;
- sibling.C = true;
- d3_geom_voronoiRedBlackRotateRight(this, sibling);
- sibling = parent.R;
- }
- sibling.C = parent.C;
- parent.C = sibling.R.C = false;
- d3_geom_voronoiRedBlackRotateLeft(this, parent);
- node = this._;
- break;
- }
- } else {
- sibling = parent.L;
- if (sibling.C) {
- sibling.C = false;
- parent.C = true;
- d3_geom_voronoiRedBlackRotateRight(this, parent);
- sibling = parent.L;
- }
- if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {
- if (!sibling.L || !sibling.L.C) {
- sibling.R.C = false;
- sibling.C = true;
- d3_geom_voronoiRedBlackRotateLeft(this, sibling);
- sibling = parent.L;
- }
- sibling.C = parent.C;
- parent.C = sibling.L.C = false;
- d3_geom_voronoiRedBlackRotateRight(this, parent);
- node = this._;
- break;
- }
- }
- sibling.C = true;
- node = parent;
- parent = parent.U;
- } while (!node.C);
- if (node) node.C = false;
- }
- };
- function d3_geom_voronoiRedBlackRotateLeft(tree, node) {
- var p = node, q = node.R, parent = p.U;
- if (parent) {
- if (parent.L === p) parent.L = q; else parent.R = q;
- } else {
- tree._ = q;
- }
- q.U = parent;
- p.U = q;
- p.R = q.L;
- if (p.R) p.R.U = p;
- q.L = p;
- }
- function d3_geom_voronoiRedBlackRotateRight(tree, node) {
- var p = node, q = node.L, parent = p.U;
- if (parent) {
- if (parent.L === p) parent.L = q; else parent.R = q;
- } else {
- tree._ = q;
- }
- q.U = parent;
- p.U = q;
- p.L = q.R;
- if (p.L) p.L.U = p;
- q.R = p;
- }
- function d3_geom_voronoiRedBlackFirst(node) {
- while (node.L) node = node.L;
- return node;
- }
- function d3_geom_voronoi(sites, bbox) {
- var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle;
- d3_geom_voronoiEdges = [];
- d3_geom_voronoiCells = new Array(sites.length);
- d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree();
- d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree();
- while (true) {
- circle = d3_geom_voronoiFirstCircle;
- if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) {
- if (site.x !== x0 || site.y !== y0) {
- d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site);
- d3_geom_voronoiAddBeach(site);
- x0 = site.x, y0 = site.y;
- }
- site = sites.pop();
- } else if (circle) {
- d3_geom_voronoiRemoveBeach(circle.arc);
- } else {
- break;
- }
- }
- if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox);
- var diagram = {
- cells: d3_geom_voronoiCells,
- edges: d3_geom_voronoiEdges
- };
- d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null;
- return diagram;
- }
- function d3_geom_voronoiVertexOrder(a, b) {
- return b.y - a.y || b.x - a.x;
- }
- d3.geom.voronoi = function(points) {
- var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent;
- if (points) return voronoi(points);
- function voronoi(data) {
- var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1];
- d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) {
- var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) {
- var s = e.start();
- return [ s.x, s.y ];
- }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : [];
- polygon.point = data[i];
- });
- return polygons;
- }
- function sites(data) {
- return data.map(function(d, i) {
- return {
- x: Math.round(fx(d, i) / ε) * ε,
- y: Math.round(fy(d, i) / ε) * ε,
- i: i
- };
- });
- }
- voronoi.links = function(data) {
- return d3_geom_voronoi(sites(data)).edges.filter(function(edge) {
- return edge.l && edge.r;
- }).map(function(edge) {
- return {
- source: data[edge.l.i],
- target: data[edge.r.i]
- };
- });
- };
- voronoi.triangles = function(data) {
- var triangles = [];
- d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {
- var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l;
- while (++j < m) {
- e0 = e1;
- s0 = s1;
- e1 = edges[j].edge;
- s1 = e1.l === site ? e1.r : e1.l;
- if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {
- triangles.push([ data[i], data[s0.i], data[s1.i] ]);
- }
- }
- });
- return triangles;
- };
- voronoi.x = function(_) {
- return arguments.length ? (fx = d3_functor(x = _), voronoi) : x;
- };
- voronoi.y = function(_) {
- return arguments.length ? (fy = d3_functor(y = _), voronoi) : y;
- };
- voronoi.clipExtent = function(_) {
- if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent;
- clipExtent = _ == null ? d3_geom_voronoiClipExtent : _;
- return voronoi;
- };
- voronoi.size = function(_) {
- if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1];
- return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]);
- };
- return voronoi;
- };
- var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ];
- function d3_geom_voronoiTriangleArea(a, b, c) {
- return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);
- }
- d3.geom.delaunay = function(vertices) {
- return d3.geom.voronoi().triangles(vertices);
- };
- d3.geom.quadtree = function(points, x1, y1, x2, y2) {
- var x = d3_geom_pointX, y = d3_geom_pointY, compat;
- if (compat = arguments.length) {
- x = d3_geom_quadtreeCompatX;
- y = d3_geom_quadtreeCompatY;
- if (compat === 3) {
- y2 = y1;
- x2 = x1;
- y1 = x1 = 0;
- }
- return quadtree(points);
- }
- function quadtree(data) {
- var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_;
- if (x1 != null) {
- x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2;
- } else {
- x2_ = y2_ = -(x1_ = y1_ = Infinity);
- xs = [], ys = [];
- n = data.length;
- if (compat) for (i = 0; i < n; ++i) {
- d = data[i];
- if (d.x < x1_) x1_ = d.x;
- if (d.y < y1_) y1_ = d.y;
- if (d.x > x2_) x2_ = d.x;
- if (d.y > y2_) y2_ = d.y;
- xs.push(d.x);
- ys.push(d.y);
- } else for (i = 0; i < n; ++i) {
- var x_ = +fx(d = data[i], i), y_ = +fy(d, i);
- if (x_ < x1_) x1_ = x_;
- if (y_ < y1_) y1_ = y_;
- if (x_ > x2_) x2_ = x_;
- if (y_ > y2_) y2_ = y_;
- xs.push(x_);
- ys.push(y_);
- }
- }
- var dx = x2_ - x1_, dy = y2_ - y1_;
- if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy;
- function insert(n, d, x, y, x1, y1, x2, y2) {
- if (isNaN(x) || isNaN(y)) return;
- if (n.leaf) {
- var nx = n.x, ny = n.y;
- if (nx != null) {
- if (abs(nx - x) + abs(ny - y) < .01) {
- insertChild(n, d, x, y, x1, y1, x2, y2);
- } else {
- var nPoint = n.point;
- n.x = n.y = n.point = null;
- insertChild(n, nPoint, nx, ny, x1, y1, x2, y2);
- insertChild(n, d, x, y, x1, y1, x2, y2);
- }
- } else {
- n.x = x, n.y = y, n.point = d;
- }
- } else {
- insertChild(n, d, x, y, x1, y1, x2, y2);
- }
- }
- function insertChild(n, d, x, y, x1, y1, x2, y2) {
- var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, right = x >= sx, bottom = y >= sy, i = (bottom << 1) + right;
- n.leaf = false;
- n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());
- if (right) x1 = sx; else x2 = sx;
- if (bottom) y1 = sy; else y2 = sy;
- insert(n, d, x, y, x1, y1, x2, y2);
- }
- var root = d3_geom_quadtreeNode();
- root.add = function(d) {
- insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_);
- };
- root.visit = function(f) {
- d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);
- };
- i = -1;
- if (x1 == null) {
- while (++i < n) {
- insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_);
- }
- --i;
- } else data.forEach(root.add);
- xs = ys = data = d = null;
- return root;
- }
- quadtree.x = function(_) {
- return arguments.length ? (x = _, quadtree) : x;
- };
- quadtree.y = function(_) {
- return arguments.length ? (y = _, quadtree) : y;
- };
- quadtree.extent = function(_) {
- if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ];
- if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0],
- y2 = +_[1][1];
- return quadtree;
- };
- quadtree.size = function(_) {
- if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ];
- if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1];
- return quadtree;
- };
- return quadtree;
- };
- function d3_geom_quadtreeCompatX(d) {
- return d.x;
- }
- function d3_geom_quadtreeCompatY(d) {
- return d.y;
- }
- function d3_geom_quadtreeNode() {
- return {
- leaf: true,
- nodes: [],
- point: null,
- x: null,
- y: null
- };
- }
- function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {
- if (!f(node, x1, y1, x2, y2)) {
- var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;
- if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);
- if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);
- if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);
- if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);
- }
- }
- d3.interpolateRgb = d3_interpolateRgb;
- function d3_interpolateRgb(a, b) {
- a = d3.rgb(a);
- b = d3.rgb(b);
- var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;
- return function(t) {
- return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));
- };
- }
- d3.interpolateObject = d3_interpolateObject;
- function d3_interpolateObject(a, b) {
- var i = {}, c = {}, k;
- for (k in a) {
- if (k in b) {
- i[k] = d3_interpolate(a[k], b[k]);
- } else {
- c[k] = a[k];
- }
- }
- for (k in b) {
- if (!(k in a)) {
- c[k] = b[k];
- }
- }
- return function(t) {
- for (k in i) c[k] = i[k](t);
- return c;
- };
- }
- d3.interpolateNumber = d3_interpolateNumber;
- function d3_interpolateNumber(a, b) {
- b -= a = +a;
- return function(t) {
- return a + b * t;
- };
- }
- d3.interpolateString = d3_interpolateString;
- function d3_interpolateString(a, b) {
- var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = [];
- a = a + "", b = b + "";
- while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {
- if ((bs = bm.index) > bi) {
- bs = b.slice(bi, bs);
- if (s[i]) s[i] += bs; else s[++i] = bs;
- }
- if ((am = am[0]) === (bm = bm[0])) {
- if (s[i]) s[i] += bm; else s[++i] = bm;
- } else {
- s[++i] = null;
- q.push({
- i: i,
- x: d3_interpolateNumber(am, bm)
- });
- }
- bi = d3_interpolate_numberB.lastIndex;
- }
- if (bi < b.length) {
- bs = b.slice(bi);
- if (s[i]) s[i] += bs; else s[++i] = bs;
- }
- return s.length < 2 ? q[0] ? (b = q[0].x, function(t) {
- return b(t) + "";
- }) : function() {
- return b;
- } : (b = q.length, function(t) {
- for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
- return s.join("");
- });
- }
- var d3_interpolate_numberA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, "g");
- d3.interpolate = d3_interpolate;
- function d3_interpolate(a, b) {
- var i = d3.interpolators.length, f;
- while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ;
- return f;
- }
- d3.interpolators = [ function(a, b) {
- var t = typeof b;
- return (t === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === "object" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b);
- } ];
- d3.interpolateArray = d3_interpolateArray;
- function d3_interpolateArray(a, b) {
- var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i;
- for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i]));
- for (;i < na; ++i) c[i] = a[i];
- for (;i < nb; ++i) c[i] = b[i];
- return function(t) {
- for (i = 0; i < n0; ++i) c[i] = x[i](t);
- return c;
- };
- }
- var d3_ease_default = function() {
- return d3_identity;
- };
- var d3_ease = d3.map({
- linear: d3_ease_default,
- poly: d3_ease_poly,
- quad: function() {
- return d3_ease_quad;
- },
- cubic: function() {
- return d3_ease_cubic;
- },
- sin: function() {
- return d3_ease_sin;
- },
- exp: function() {
- return d3_ease_exp;
- },
- circle: function() {
- return d3_ease_circle;
- },
- elastic: d3_ease_elastic,
- back: d3_ease_back,
- bounce: function() {
- return d3_ease_bounce;
- }
- });
- var d3_ease_mode = d3.map({
- "in": d3_identity,
- out: d3_ease_reverse,
- "in-out": d3_ease_reflect,
- "out-in": function(f) {
- return d3_ease_reflect(d3_ease_reverse(f));
- }
- });
- d3.ease = function(name) {
- var i = name.indexOf("-"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : "in";
- t = d3_ease.get(t) || d3_ease_default;
- m = d3_ease_mode.get(m) || d3_identity;
- return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));
- };
- function d3_ease_clamp(f) {
- return function(t) {
- return t <= 0 ? 0 : t >= 1 ? 1 : f(t);
- };
- }
- function d3_ease_reverse(f) {
- return function(t) {
- return 1 - f(1 - t);
- };
- }
- function d3_ease_reflect(f) {
- return function(t) {
- return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));
- };
- }
- function d3_ease_quad(t) {
- return t * t;
- }
- function d3_ease_cubic(t) {
- return t * t * t;
- }
- function d3_ease_cubicInOut(t) {
- if (t <= 0) return 0;
- if (t >= 1) return 1;
- var t2 = t * t, t3 = t2 * t;
- return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);
- }
- function d3_ease_poly(e) {
- return function(t) {
- return Math.pow(t, e);
- };
- }
- function d3_ease_sin(t) {
- return 1 - Math.cos(t * halfπ);
- }
- function d3_ease_exp(t) {
- return Math.pow(2, 10 * (t - 1));
- }
- function d3_ease_circle(t) {
- return 1 - Math.sqrt(1 - t * t);
- }
- function d3_ease_elastic(a, p) {
- var s;
- if (arguments.length < 2) p = .45;
- if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4;
- return function(t) {
- return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p);
- };
- }
- function d3_ease_back(s) {
- if (!s) s = 1.70158;
- return function(t) {
- return t * t * ((s + 1) * t - s);
- };
- }
- function d3_ease_bounce(t) {
- return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
- }
- d3.interpolateHcl = d3_interpolateHcl;
- function d3_interpolateHcl(a, b) {
- a = d3.hcl(a);
- b = d3.hcl(b);
- var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;
- if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;
- if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;
- return function(t) {
- return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + "";
- };
- }
- d3.interpolateHsl = d3_interpolateHsl;
- function d3_interpolateHsl(a, b) {
- a = d3.hsl(a);
- b = d3.hsl(b);
- var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;
- if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;
- if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;
- return function(t) {
- return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + "";
- };
- }
- d3.interpolateLab = d3_interpolateLab;
- function d3_interpolateLab(a, b) {
- a = d3.lab(a);
- b = d3.lab(b);
- var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;
- return function(t) {
- return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + "";
- };
- }
- d3.interpolateRound = d3_interpolateRound;
- function d3_interpolateRound(a, b) {
- b -= a;
- return function(t) {
- return Math.round(a + b * t);
- };
- }
- d3.transform = function(string) {
- var g = d3_document.createElementNS(d3.ns.prefix.svg, "g");
- return (d3.transform = function(string) {
- if (string != null) {
- g.setAttribute("transform", string);
- var t = g.transform.baseVal.consolidate();
- }
- return new d3_transform(t ? t.matrix : d3_transformIdentity);
- })(string);
- };
- function d3_transform(m) {
- var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;
- if (r0[0] * r1[1] < r1[0] * r0[1]) {
- r0[0] *= -1;
- r0[1] *= -1;
- kx *= -1;
- kz *= -1;
- }
- this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees;
- this.translate = [ m.e, m.f ];
- this.scale = [ kx, ky ];
- this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0;
- }
- d3_transform.prototype.toString = function() {
- return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")";
- };
- function d3_transformDot(a, b) {
- return a[0] * b[0] + a[1] * b[1];
- }
- function d3_transformNormalize(a) {
- var k = Math.sqrt(d3_transformDot(a, a));
- if (k) {
- a[0] /= k;
- a[1] /= k;
- }
- return k;
- }
- function d3_transformCombine(a, b, k) {
- a[0] += k * b[0];
- a[1] += k * b[1];
- return a;
- }
- var d3_transformIdentity = {
- a: 1,
- b: 0,
- c: 0,
- d: 1,
- e: 0,
- f: 0
- };
- d3.interpolateTransform = d3_interpolateTransform;
- function d3_interpolateTransform(a, b) {
- var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale;
- if (ta[0] != tb[0] || ta[1] != tb[1]) {
- s.push("translate(", null, ",", null, ")");
- q.push({
- i: 1,
- x: d3_interpolateNumber(ta[0], tb[0])
- }, {
- i: 3,
- x: d3_interpolateNumber(ta[1], tb[1])
- });
- } else if (tb[0] || tb[1]) {
- s.push("translate(" + tb + ")");
- } else {
- s.push("");
- }
- if (ra != rb) {
- if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;
- q.push({
- i: s.push(s.pop() + "rotate(", null, ")") - 2,
- x: d3_interpolateNumber(ra, rb)
- });
- } else if (rb) {
- s.push(s.pop() + "rotate(" + rb + ")");
- }
- if (wa != wb) {
- q.push({
- i: s.push(s.pop() + "skewX(", null, ")") - 2,
- x: d3_interpolateNumber(wa, wb)
- });
- } else if (wb) {
- s.push(s.pop() + "skewX(" + wb + ")");
- }
- if (ka[0] != kb[0] || ka[1] != kb[1]) {
- n = s.push(s.pop() + "scale(", null, ",", null, ")");
- q.push({
- i: n - 4,
- x: d3_interpolateNumber(ka[0], kb[0])
- }, {
- i: n - 2,
- x: d3_interpolateNumber(ka[1], kb[1])
- });
- } else if (kb[0] != 1 || kb[1] != 1) {
- s.push(s.pop() + "scale(" + kb + ")");
- }
- n = q.length;
- return function(t) {
- var i = -1, o;
- while (++i < n) s[(o = q[i]).i] = o.x(t);
- return s.join("");
- };
- }
- function d3_uninterpolateNumber(a, b) {
- b = b - (a = +a) ? 1 / (b - a) : 0;
- return function(x) {
- return (x - a) * b;
- };
- }
- function d3_uninterpolateClamp(a, b) {
- b = b - (a = +a) ? 1 / (b - a) : 0;
- return function(x) {
- return Math.max(0, Math.min(1, (x - a) * b));
- };
- }
- d3.layout = {};
- d3.layout.bundle = function() {
- return function(links) {
- var paths = [], i = -1, n = links.length;
- while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
- return paths;
- };
- };
- function d3_layout_bundlePath(link) {
- var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ];
- while (start !== lca) {
- start = start.parent;
- points.push(start);
- }
- var k = points.length;
- while (end !== lca) {
- points.splice(k, 0, end);
- end = end.parent;
- }
- return points;
- }
- function d3_layout_bundleAncestors(node) {
- var ancestors = [], parent = node.parent;
- while (parent != null) {
- ancestors.push(node);
- node = parent;
- parent = parent.parent;
- }
- ancestors.push(node);
- return ancestors;
- }
- function d3_layout_bundleLeastCommonAncestor(a, b) {
- if (a === b) return a;
- var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;
- while (aNode === bNode) {
- sharedNode = aNode;
- aNode = aNodes.pop();
- bNode = bNodes.pop();
- }
- return sharedNode;
- }
- d3.layout.chord = function() {
- var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords;
- function relayout() {
- var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j;
- chords = [];
- groups = [];
- k = 0, i = -1;
- while (++i < n) {
- x = 0, j = -1;
- while (++j < n) {
- x += matrix[i][j];
- }
- groupSums.push(x);
- subgroupIndex.push(d3.range(n));
- k += x;
- }
- if (sortGroups) {
- groupIndex.sort(function(a, b) {
- return sortGroups(groupSums[a], groupSums[b]);
- });
- }
- if (sortSubgroups) {
- subgroupIndex.forEach(function(d, i) {
- d.sort(function(a, b) {
- return sortSubgroups(matrix[i][a], matrix[i][b]);
- });
- });
- }
- k = (τ - padding * n) / k;
- x = 0, i = -1;
- while (++i < n) {
- x0 = x, j = -1;
- while (++j < n) {
- var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k;
- subgroups[di + "-" + dj] = {
- index: di,
- subindex: dj,
- startAngle: a0,
- endAngle: a1,
- value: v
- };
- }
- groups[di] = {
- index: di,
- startAngle: x0,
- endAngle: x,
- value: (x - x0) / k
- };
- x += padding;
- }
- i = -1;
- while (++i < n) {
- j = i - 1;
- while (++j < n) {
- var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i];
- if (source.value || target.value) {
- chords.push(source.value < target.value ? {
- source: target,
- target: source
- } : {
- source: source,
- target: target
- });
- }
- }
- }
- if (sortChords) resort();
- }
- function resort() {
- chords.sort(function(a, b) {
- return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2);
- });
- }
- chord.matrix = function(x) {
- if (!arguments.length) return matrix;
- n = (matrix = x) && matrix.length;
- chords = groups = null;
- return chord;
- };
- chord.padding = function(x) {
- if (!arguments.length) return padding;
- padding = x;
- chords = groups = null;
- return chord;
- };
- chord.sortGroups = function(x) {
- if (!arguments.length) return sortGroups;
- sortGroups = x;
- chords = groups = null;
- return chord;
- };
- chord.sortSubgroups = function(x) {
- if (!arguments.length) return sortSubgroups;
- sortSubgroups = x;
- chords = null;
- return chord;
- };
- chord.sortChords = function(x) {
- if (!arguments.length) return sortChords;
- sortChords = x;
- if (chords) resort();
- return chord;
- };
- chord.chords = function() {
- if (!chords) relayout();
- return chords;
- };
- chord.groups = function() {
- if (!groups) relayout();
- return groups;
- };
- return chord;
- };
- d3.layout.force = function() {
- var force = {}, event = d3.dispatch("start", "tick", "end"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges;
- function repulse(node) {
- return function(quad, x1, _, x2) {
- if (quad.point !== node) {
- var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy;
- if (dw * dw / theta2 < dn) {
- if (dn < chargeDistance2) {
- var k = quad.charge / dn;
- node.px -= dx * k;
- node.py -= dy * k;
- }
- return true;
- }
- if (quad.point && dn && dn < chargeDistance2) {
- var k = quad.pointCharge / dn;
- node.px -= dx * k;
- node.py -= dy * k;
- }
- }
- return !quad.charge;
- };
- }
- force.tick = function() {
- if ((alpha *= .99) < .005) {
- event.end({
- type: "end",
- alpha: alpha = 0
- });
- return true;
- }
- var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y;
- for (i = 0; i < m; ++i) {
- o = links[i];
- s = o.source;
- t = o.target;
- x = t.x - s.x;
- y = t.y - s.y;
- if (l = x * x + y * y) {
- l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
- x *= l;
- y *= l;
- t.x -= x * (k = s.weight / (t.weight + s.weight));
- t.y -= y * k;
- s.x += x * (k = 1 - k);
- s.y += y * k;
- }
- }
- if (k = alpha * gravity) {
- x = size[0] / 2;
- y = size[1] / 2;
- i = -1;
- if (k) while (++i < n) {
- o = nodes[i];
- o.x += (x - o.x) * k;
- o.y += (y - o.y) * k;
- }
- }
- if (charge) {
- d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);
- i = -1;
- while (++i < n) {
- if (!(o = nodes[i]).fixed) {
- q.visit(repulse(o));
- }
- }
- }
- i = -1;
- while (++i < n) {
- o = nodes[i];
- if (o.fixed) {
- o.x = o.px;
- o.y = o.py;
- } else {
- o.x -= (o.px - (o.px = o.x)) * friction;
- o.y -= (o.py - (o.py = o.y)) * friction;
- }
- }
- event.tick({
- type: "tick",
- alpha: alpha
- });
- };
- force.nodes = function(x) {
- if (!arguments.length) return nodes;
- nodes = x;
- return force;
- };
- force.links = function(x) {
- if (!arguments.length) return links;
- links = x;
- return force;
- };
- force.size = function(x) {
- if (!arguments.length) return size;
- size = x;
- return force;
- };
- force.linkDistance = function(x) {
- if (!arguments.length) return linkDistance;
- linkDistance = typeof x === "function" ? x : +x;
- return force;
- };
- force.distance = force.linkDistance;
- force.linkStrength = function(x) {
- if (!arguments.length) return linkStrength;
- linkStrength = typeof x === "function" ? x : +x;
- return force;
- };
- force.friction = function(x) {
- if (!arguments.length) return friction;
- friction = +x;
- return force;
- };
- force.charge = function(x) {
- if (!arguments.length) return charge;
- charge = typeof x === "function" ? x : +x;
- return force;
- };
- force.chargeDistance = function(x) {
- if (!arguments.length) return Math.sqrt(chargeDistance2);
- chargeDistance2 = x * x;
- return force;
- };
- force.gravity = function(x) {
- if (!arguments.length) return gravity;
- gravity = +x;
- return force;
- };
- force.theta = function(x) {
- if (!arguments.length) return Math.sqrt(theta2);
- theta2 = x * x;
- return force;
- };
- force.alpha = function(x) {
- if (!arguments.length) return alpha;
- x = +x;
- if (alpha) {
- if (x > 0) alpha = x; else alpha = 0;
- } else if (x > 0) {
- event.start({
- type: "start",
- alpha: alpha = x
- });
- //d3.timer(force.tick);
- setTimeout(function tick(){
- force.tick();
- if(alpha >= .005);
- setTimeout(tick, 0);
- }, 0);
- }
- return force;
- };
- force.start = function() {
- var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o;
- for (i = 0; i < n; ++i) {
- (o = nodes[i]).index = i;
- o.weight = 0;
- }
- for (i = 0; i < m; ++i) {
- o = links[i];
- if (typeof o.source == "number") o.source = nodes[o.source];
- if (typeof o.target == "number") o.target = nodes[o.target];
- ++o.source.weight;
- ++o.target.weight;
- }
- for (i = 0; i < n; ++i) {
- o = nodes[i];
- if (isNaN(o.x)) o.x = position("x", w);
- if (isNaN(o.y)) o.y = position("y", h);
- if (isNaN(o.px)) o.px = o.x;
- if (isNaN(o.py)) o.py = o.y;
- }
- distances = [];
- if (typeof linkDistance === "function") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance;
- strengths = [];
- if (typeof linkStrength === "function") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength;
- charges = [];
- if (typeof charge === "function") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge;
- function position(dimension, size) {
- if (!neighbors) {
- neighbors = new Array(n);
- for (j = 0; j < n; ++j) {
- neighbors[j] = [];
- }
- for (j = 0; j < m; ++j) {
- var o = links[j];
- neighbors[o.source.index].push(o.target);
- neighbors[o.target.index].push(o.source);
- }
- }
- var candidates = neighbors[i], j = -1, m = candidates.length, x;
- while (++j < m) if (!isNaN(x = candidates[j][dimension])) return x;
- return Math.random() * size;
- }
- return force.resume();
- };
- force.resume = function() {
- return force.alpha(.1);
- };
- force.stop = function() {
- return force.alpha(0);
- };
- force.drag = function() {
- if (!drag) drag = d3.behavior.drag().origin(d3_identity).on("dragstart.force", d3_layout_forceDragstart).on("drag.force", dragmove).on("dragend.force", d3_layout_forceDragend);
- if (!arguments.length) return drag;
- this.on("mouseover.force", d3_layout_forceMouseover).on("mouseout.force", d3_layout_forceMouseout).call(drag);
- };
- function dragmove(d) {
- d.px = d3.event.x, d.py = d3.event.y;
- force.resume();
- }
- return d3.rebind(force, event, "on");
- };
- function d3_layout_forceDragstart(d) {
- d.fixed |= 2;
- }
- function d3_layout_forceDragend(d) {
- d.fixed &= ~6;
- }
- function d3_layout_forceMouseover(d) {
- d.fixed |= 4;
- d.px = d.x, d.py = d.y;
- }
- function d3_layout_forceMouseout(d) {
- d.fixed &= ~4;
- }
- function d3_layout_forceAccumulate(quad, alpha, charges) {
- var cx = 0, cy = 0;
- quad.charge = 0;
- if (!quad.leaf) {
- var nodes = quad.nodes, n = nodes.length, i = -1, c;
- while (++i < n) {
- c = nodes[i];
- if (c == null) continue;
- d3_layout_forceAccumulate(c, alpha, charges);
- quad.charge += c.charge;
- cx += c.charge * c.cx;
- cy += c.charge * c.cy;
- }
- }
- if (quad.point) {
- if (!quad.leaf) {
- quad.point.x += Math.random() - .5;
- quad.point.y += Math.random() - .5;
- }
- var k = alpha * charges[quad.point.index];
- quad.charge += quad.pointCharge = k;
- cx += k * quad.point.x;
- cy += k * quad.point.y;
- }
- quad.cx = cx / quad.charge;
- quad.cy = cy / quad.charge;
- }
- var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity;
- d3.layout.hierarchy = function() {
- var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;
- function hierarchy(root) {
- var stack = [ root ], nodes = [], node;
- root.depth = 0;
- while ((node = stack.pop()) != null) {
- nodes.push(node);
- if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) {
- var n, childs, child;
- while (--n >= 0) {
- stack.push(child = childs[n]);
- child.parent = node;
- child.depth = node.depth + 1;
- }
- if (value) node.value = 0;
- node.children = childs;
- } else {
- if (value) node.value = +value.call(hierarchy, node, node.depth) || 0;
- delete node.children;
- }
- }
- d3_layout_hierarchyVisitAfter(root, function(node) {
- var childs, parent;
- if (sort && (childs = node.children)) childs.sort(sort);
- if (value && (parent = node.parent)) parent.value += node.value;
- });
- return nodes;
- }
- hierarchy.sort = function(x) {
- if (!arguments.length) return sort;
- sort = x;
- return hierarchy;
- };
- hierarchy.children = function(x) {
- if (!arguments.length) return children;
- children = x;
- return hierarchy;
- };
- hierarchy.value = function(x) {
- if (!arguments.length) return value;
- value = x;
- return hierarchy;
- };
- hierarchy.revalue = function(root) {
- if (value) {
- d3_layout_hierarchyVisitBefore(root, function(node) {
- if (node.children) node.value = 0;
- });
- d3_layout_hierarchyVisitAfter(root, function(node) {
- var parent;
- if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0;
- if (parent = node.parent) parent.value += node.value;
- });
- }
- return root;
- };
- return hierarchy;
- };
- function d3_layout_hierarchyRebind(object, hierarchy) {
- d3.rebind(object, hierarchy, "sort", "children", "value");
- object.nodes = object;
- object.links = d3_layout_hierarchyLinks;
- return object;
- }
- function d3_layout_hierarchyVisitBefore(node, callback) {
- var nodes = [ node ];
- while ((node = nodes.pop()) != null) {
- callback(node);
- if ((children = node.children) && (n = children.length)) {
- var n, children;
- while (--n >= 0) nodes.push(children[n]);
- }
- }
- }
- function d3_layout_hierarchyVisitAfter(node, callback) {
- var nodes = [ node ], nodes2 = [];
- while ((node = nodes.pop()) != null) {
- nodes2.push(node);
- if ((children = node.children) && (n = children.length)) {
- var i = -1, n, children;
- while (++i < n) nodes.push(children[i]);
- }
- }
- while ((node = nodes2.pop()) != null) {
- callback(node);
- }
- }
- function d3_layout_hierarchyChildren(d) {
- return d.children;
- }
- function d3_layout_hierarchyValue(d) {
- return d.value;
- }
- function d3_layout_hierarchySort(a, b) {
- return b.value - a.value;
- }
- function d3_layout_hierarchyLinks(nodes) {
- return d3.merge(nodes.map(function(parent) {
- return (parent.children || []).map(function(child) {
- return {
- source: parent,
- target: child
- };
- });
- }));
- }
- d3.layout.partition = function() {
- var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ];
- function position(node, x, dx, dy) {
- var children = node.children;
- node.x = x;
- node.y = node.depth * dy;
- node.dx = dx;
- node.dy = dy;
- if (children && (n = children.length)) {
- var i = -1, n, c, d;
- dx = node.value ? dx / node.value : 0;
- while (++i < n) {
- position(c = children[i], x, d = c.value * dx, dy);
- x += d;
- }
- }
- }
- function depth(node) {
- var children = node.children, d = 0;
- if (children && (n = children.length)) {
- var i = -1, n;
- while (++i < n) d = Math.max(d, depth(children[i]));
- }
- return 1 + d;
- }
- function partition(d, i) {
- var nodes = hierarchy.call(this, d, i);
- position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
- return nodes;
- }
- partition.size = function(x) {
- if (!arguments.length) return size;
- size = x;
- return partition;
- };
- return d3_layout_hierarchyRebind(partition, hierarchy);
- };
- d3.layout.pie = function() {
- var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ;
- function pie(data) {
- var values = data.map(function(d, i) {
- return +value.call(pie, d, i);
- });
- var a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle);
- var k = ((typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a) / d3.sum(values);
- var index = d3.range(data.length);
- if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {
- return values[j] - values[i];
- } : function(i, j) {
- return sort(data[i], data[j]);
- });
- var arcs = [];
- index.forEach(function(i) {
- var d;
- arcs[i] = {
- data: data[i],
- value: d = values[i],
- startAngle: a,
- endAngle: a += d * k
- };
- });
- return arcs;
- }
- pie.value = function(x) {
- if (!arguments.length) return value;
- value = x;
- return pie;
- };
- pie.sort = function(x) {
- if (!arguments.length) return sort;
- sort = x;
- return pie;
- };
- pie.startAngle = function(x) {
- if (!arguments.length) return startAngle;
- startAngle = x;
- return pie;
- };
- pie.endAngle = function(x) {
- if (!arguments.length) return endAngle;
- endAngle = x;
- return pie;
- };
- return pie;
- };
- var d3_layout_pieSortByValue = {};
- d3.layout.stack = function() {
- var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;
- function stack(data, index) {
- var series = data.map(function(d, i) {
- return values.call(stack, d, i);
- });
- var points = series.map(function(d) {
- return d.map(function(v, i) {
- return [ x.call(stack, v, i), y.call(stack, v, i) ];
- });
- });
- var orders = order.call(stack, points, index);
- series = d3.permute(series, orders);
- points = d3.permute(points, orders);
- var offsets = offset.call(stack, points, index);
- var n = series.length, m = series[0].length, i, j, o;
- for (j = 0; j < m; ++j) {
- out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
- for (i = 1; i < n; ++i) {
- out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);
- }
- }
- return data;
- }
- stack.values = function(x) {
- if (!arguments.length) return values;
- values = x;
- return stack;
- };
- stack.order = function(x) {
- if (!arguments.length) return order;
- order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;
- return stack;
- };
- stack.offset = function(x) {
- if (!arguments.length) return offset;
- offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;
- return stack;
- };
- stack.x = function(z) {
- if (!arguments.length) return x;
- x = z;
- return stack;
- };
- stack.y = function(z) {
- if (!arguments.length) return y;
- y = z;
- return stack;
- };
- stack.out = function(z) {
- if (!arguments.length) return out;
- out = z;
- return stack;
- };
- return stack;
- };
- function d3_layout_stackX(d) {
- return d.x;
- }
- function d3_layout_stackY(d) {
- return d.y;
- }
- function d3_layout_stackOut(d, y0, y) {
- d.y0 = y0;
- d.y = y;
- }
- var d3_layout_stackOrders = d3.map({
- "inside-out": function(data) {
- var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) {
- return max[a] - max[b];
- }), top = 0, bottom = 0, tops = [], bottoms = [];
- for (i = 0; i < n; ++i) {
- j = index[i];
- if (top < bottom) {
- top += sums[j];
- tops.push(j);
- } else {
- bottom += sums[j];
- bottoms.push(j);
- }
- }
- return bottoms.reverse().concat(tops);
- },
- reverse: function(data) {
- return d3.range(data.length).reverse();
- },
- "default": d3_layout_stackOrderDefault
- });
- var d3_layout_stackOffsets = d3.map({
- silhouette: function(data) {
- var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [];
- for (j = 0; j < m; ++j) {
- for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
- if (o > max) max = o;
- sums.push(o);
- }
- for (j = 0; j < m; ++j) {
- y0[j] = (max - sums[j]) / 2;
- }
- return y0;
- },
- wiggle: function(data) {
- var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [];
- y0[0] = o = o0 = 0;
- for (j = 1; j < m; ++j) {
- for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];
- for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {
- for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {
- s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;
- }
- s2 += s3 * data[i][j][1];
- }
- y0[j] = o -= s1 ? s2 / s1 * dx : 0;
- if (o < o0) o0 = o;
- }
- for (j = 0; j < m; ++j) y0[j] -= o0;
- return y0;
- },
- expand: function(data) {
- var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [];
- for (j = 0; j < m; ++j) {
- for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
- if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k;
- }
- for (j = 0; j < m; ++j) y0[j] = 0;
- return y0;
- },
- zero: d3_layout_stackOffsetZero
- });
- function d3_layout_stackOrderDefault(data) {
- return d3.range(data.length);
- }
- function d3_layout_stackOffsetZero(data) {
- var j = -1, m = data[0].length, y0 = [];
- while (++j < m) y0[j] = 0;
- return y0;
- }
- function d3_layout_stackMaxIndex(array) {
- var i = 1, j = 0, v = array[0][1], k, n = array.length;
- for (;i < n; ++i) {
- if ((k = array[i][1]) > v) {
- j = i;
- v = k;
- }
- }
- return j;
- }
- function d3_layout_stackReduceSum(d) {
- return d.reduce(d3_layout_stackSum, 0);
- }
- function d3_layout_stackSum(p, d) {
- return p + d[1];
- }
- d3.layout.histogram = function() {
- var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges;
- function histogram(data, i) {
- var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x;
- while (++i < m) {
- bin = bins[i] = [];
- bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);
- bin.y = 0;
- }
- if (m > 0) {
- i = -1;
- while (++i < n) {
- x = values[i];
- if (x >= range[0] && x <= range[1]) {
- bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
- bin.y += k;
- bin.push(data[i]);
- }
- }
- }
- return bins;
- }
- histogram.value = function(x) {
- if (!arguments.length) return valuer;
- valuer = x;
- return histogram;
- };
- histogram.range = function(x) {
- if (!arguments.length) return ranger;
- ranger = d3_functor(x);
- return histogram;
- };
- histogram.bins = function(x) {
- if (!arguments.length) return binner;
- binner = typeof x === "number" ? function(range) {
- return d3_layout_histogramBinFixed(range, x);
- } : d3_functor(x);
- return histogram;
- };
- histogram.frequency = function(x) {
- if (!arguments.length) return frequency;
- frequency = !!x;
- return histogram;
- };
- return histogram;
- };
- function d3_layout_histogramBinSturges(range, values) {
- return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
- }
- function d3_layout_histogramBinFixed(range, n) {
- var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];
- while (++x <= n) f[x] = m * x + b;
- return f;
- }
- function d3_layout_histogramRange(values) {
- return [ d3.min(values), d3.max(values) ];
- }
- d3.layout.pack = function() {
- var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius;
- function pack(d, i) {
- var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === "function" ? radius : function() {
- return radius;
- };
- root.x = root.y = 0;
- d3_layout_hierarchyVisitAfter(root, function(d) {
- d.r = +r(d.value);
- });
- d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);
- if (padding) {
- var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2;
- d3_layout_hierarchyVisitAfter(root, function(d) {
- d.r += dr;
- });
- d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);
- d3_layout_hierarchyVisitAfter(root, function(d) {
- d.r -= dr;
- });
- }
- d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h));
- return nodes;
- }
- pack.size = function(_) {
- if (!arguments.length) return size;
- size = _;
- return pack;
- };
- pack.radius = function(_) {
- if (!arguments.length) return radius;
- radius = _ == null || typeof _ === "function" ? _ : +_;
- return pack;
- };
- pack.padding = function(_) {
- if (!arguments.length) return padding;
- padding = +_;
- return pack;
- };
- return d3_layout_hierarchyRebind(pack, hierarchy);
- };
- function d3_layout_packSort(a, b) {
- return a.value - b.value;
- }
- function d3_layout_packInsert(a, b) {
- var c = a._pack_next;
- a._pack_next = b;
- b._pack_prev = a;
- b._pack_next = c;
- c._pack_prev = b;
- }
- function d3_layout_packSplice(a, b) {
- a._pack_next = b;
- b._pack_prev = a;
- }
- function d3_layout_packIntersects(a, b) {
- var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;
- return .999 * dr * dr > dx * dx + dy * dy;
- }
- function d3_layout_packSiblings(node) {
- if (!(nodes = node.children) || !(n = nodes.length)) return;
- var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;
- function bound(node) {
- xMin = Math.min(node.x - node.r, xMin);
- xMax = Math.max(node.x + node.r, xMax);
- yMin = Math.min(node.y - node.r, yMin);
- yMax = Math.max(node.y + node.r, yMax);
- }
- nodes.forEach(d3_layout_packLink);
- a = nodes[0];
- a.x = -a.r;
- a.y = 0;
- bound(a);
- if (n > 1) {
- b = nodes[1];
- b.x = b.r;
- b.y = 0;
- bound(b);
- if (n > 2) {
- c = nodes[2];
- d3_layout_packPlace(a, b, c);
- bound(c);
- d3_layout_packInsert(a, c);
- a._pack_prev = c;
- d3_layout_packInsert(c, b);
- b = a._pack_next;
- for (i = 3; i < n; i++) {
- d3_layout_packPlace(a, b, c = nodes[i]);
- var isect = 0, s1 = 1, s2 = 1;
- for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
- if (d3_layout_packIntersects(j, c)) {
- isect = 1;
- break;
- }
- }
- if (isect == 1) {
- for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
- if (d3_layout_packIntersects(k, c)) {
- break;
- }
- }
- }
- if (isect) {
- if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);
- i--;
- } else {
- d3_layout_packInsert(a, c);
- b = c;
- bound(c);
- }
- }
- }
- }
- var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;
- for (i = 0; i < n; i++) {
- c = nodes[i];
- c.x -= cx;
- c.y -= cy;
- cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));
- }
- node.r = cr;
- nodes.forEach(d3_layout_packUnlink);
- }
- function d3_layout_packLink(node) {
- node._pack_next = node._pack_prev = node;
- }
- function d3_layout_packUnlink(node) {
- delete node._pack_next;
- delete node._pack_prev;
- }
- function d3_layout_packTransform(node, x, y, k) {
- var children = node.children;
- node.x = x += k * node.x;
- node.y = y += k * node.y;
- node.r *= k;
- if (children) {
- var i = -1, n = children.length;
- while (++i < n) d3_layout_packTransform(children[i], x, y, k);
- }
- }
- function d3_layout_packPlace(a, b, c) {
- var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;
- if (db && (dx || dy)) {
- var da = b.r + c.r, dc = dx * dx + dy * dy;
- da *= da;
- db *= db;
- var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);
- c.x = a.x + x * dx + y * dy;
- c.y = a.y + x * dy - y * dx;
- } else {
- c.x = a.x + db;
- c.y = a.y;
- }
- }
- d3.layout.tree = function() {
- var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null;
- function tree(d, i) {
- var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0);
- d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z;
- d3_layout_hierarchyVisitBefore(root1, secondWalk);
- if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else {
- var left = root0, right = root0, bottom = root0;
- d3_layout_hierarchyVisitBefore(root0, function(node) {
- if (node.x < left.x) left = node;
- if (node.x > right.x) right = node;
- if (node.depth > bottom.depth) bottom = node;
- });
- var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1);
- d3_layout_hierarchyVisitBefore(root0, function(node) {
- node.x = (node.x + tx) * kx;
- node.y = node.depth * ky;
- });
- }
- return nodes;
- }
- function wrapTree(root0) {
- var root1 = {
- A: null,
- children: [ root0 ]
- }, queue = [ root1 ], node1;
- while ((node1 = queue.pop()) != null) {
- for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) {
- queue.push((children[i] = child = {
- _: children[i],
- parent: node1,
- children: (child = children[i].children) && child.slice() || [],
- A: null,
- a: null,
- z: 0,
- m: 0,
- c: 0,
- s: 0,
- t: null,
- i: i
- }).a = child);
- }
- }
- return root1.children[0];
- }
- function firstWalk(v) {
- var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null;
- if (children.length) {
- d3_layout_treeShift(v);
- var midpoint = (children[0].z + children[children.length - 1].z) / 2;
- if (w) {
- v.z = w.z + separation(v._, w._);
- v.m = v.z - midpoint;
- } else {
- v.z = midpoint;
- }
- } else if (w) {
- v.z = w.z + separation(v._, w._);
- }
- v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
- }
- function secondWalk(v) {
- v._.x = v.z + v.parent.m;
- v.m += v.parent.m;
- }
- function apportion(v, w, ancestor) {
- if (w) {
- var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift;
- while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
- vom = d3_layout_treeLeft(vom);
- vop = d3_layout_treeRight(vop);
- vop.a = v;
- shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
- if (shift > 0) {
- d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift);
- sip += shift;
- sop += shift;
- }
- sim += vim.m;
- sip += vip.m;
- som += vom.m;
- sop += vop.m;
- }
- if (vim && !d3_layout_treeRight(vop)) {
- vop.t = vim;
- vop.m += sim - sop;
- }
- if (vip && !d3_layout_treeLeft(vom)) {
- vom.t = vip;
- vom.m += sip - som;
- ancestor = v;
- }
- }
- return ancestor;
- }
- function sizeNode(node) {
- node.x *= size[0];
- node.y = node.depth * size[1];
- }
- tree.separation = function(x) {
- if (!arguments.length) return separation;
- separation = x;
- return tree;
- };
- tree.size = function(x) {
- if (!arguments.length) return nodeSize ? null : size;
- nodeSize = (size = x) == null ? sizeNode : null;
- return tree;
- };
- tree.nodeSize = function(x) {
- if (!arguments.length) return nodeSize ? size : null;
- nodeSize = (size = x) == null ? null : sizeNode;
- return tree;
- };
- return d3_layout_hierarchyRebind(tree, hierarchy);
- };
- function d3_layout_treeSeparation(a, b) {
- return a.parent == b.parent ? 1 : 2;
- }
- function d3_layout_treeLeft(v) {
- var children = v.children;
- return children.length ? children[0] : v.t;
- }
- function d3_layout_treeRight(v) {
- var children = v.children, n;
- return (n = children.length) ? children[n - 1] : v.t;
- }
- function d3_layout_treeMove(wm, wp, shift) {
- var change = shift / (wp.i - wm.i);
- wp.c -= change;
- wp.s += shift;
- wm.c += change;
- wp.z += shift;
- wp.m += shift;
- }
- function d3_layout_treeShift(v) {
- var shift = 0, change = 0, children = v.children, i = children.length, w;
- while (--i >= 0) {
- w = children[i];
- w.z += shift;
- w.m += shift;
- shift += w.s + (change += w.c);
- }
- }
- function d3_layout_treeAncestor(vim, v, ancestor) {
- return vim.a.parent === v.parent ? vim.a : ancestor;
- }
- d3.layout.cluster = function() {
- var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;
- function cluster(d, i) {
- var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;
- d3_layout_hierarchyVisitAfter(root, function(node) {
- var children = node.children;
- if (children && children.length) {
- node.x = d3_layout_clusterX(children);
- node.y = d3_layout_clusterY(children);
- } else {
- node.x = previousNode ? x += separation(node, previousNode) : 0;
- node.y = 0;
- previousNode = node;
- }
- });
- var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;
- d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) {
- node.x = (node.x - root.x) * size[0];
- node.y = (root.y - node.y) * size[1];
- } : function(node) {
- node.x = (node.x - x0) / (x1 - x0) * size[0];
- node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];
- });
- return nodes;
- }
- cluster.separation = function(x) {
- if (!arguments.length) return separation;
- separation = x;
- return cluster;
- };
- cluster.size = function(x) {
- if (!arguments.length) return nodeSize ? null : size;
- nodeSize = (size = x) == null;
- return cluster;
- };
- cluster.nodeSize = function(x) {
- if (!arguments.length) return nodeSize ? size : null;
- nodeSize = (size = x) != null;
- return cluster;
- };
- return d3_layout_hierarchyRebind(cluster, hierarchy);
- };
- function d3_layout_clusterY(children) {
- return 1 + d3.max(children, function(child) {
- return child.y;
- });
- }
- function d3_layout_clusterX(children) {
- return children.reduce(function(x, child) {
- return x + child.x;
- }, 0) / children.length;
- }
- function d3_layout_clusterLeft(node) {
- var children = node.children;
- return children && children.length ? d3_layout_clusterLeft(children[0]) : node;
- }
- function d3_layout_clusterRight(node) {
- var children = node.children, n;
- return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;
- }
- d3.layout.treemap = function() {
- var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = "squarify", ratio = .5 * (1 + Math.sqrt(5));
- function scale(children, k) {
- var i = -1, n = children.length, child, area;
- while (++i < n) {
- area = (child = children[i]).value * (k < 0 ? 0 : k);
- child.area = isNaN(area) || area <= 0 ? 0 : area;
- }
- }
- function squarify(node) {
- var children = node.children;
- if (children && children.length) {
- var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === "slice" ? rect.dx : mode === "dice" ? rect.dy : mode === "slice-dice" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n;
- scale(remaining, rect.dx * rect.dy / node.value);
- row.area = 0;
- while ((n = remaining.length) > 0) {
- row.push(child = remaining[n - 1]);
- row.area += child.area;
- if (mode !== "squarify" || (score = worst(row, u)) <= best) {
- remaining.pop();
- best = score;
- } else {
- row.area -= row.pop().area;
- position(row, u, rect, false);
- u = Math.min(rect.dx, rect.dy);
- row.length = row.area = 0;
- best = Infinity;
- }
- }
- if (row.length) {
- position(row, u, rect, true);
- row.length = row.area = 0;
- }
- children.forEach(squarify);
- }
- }
- function stickify(node) {
- var children = node.children;
- if (children && children.length) {
- var rect = pad(node), remaining = children.slice(), child, row = [];
- scale(remaining, rect.dx * rect.dy / node.value);
- row.area = 0;
- while (child = remaining.pop()) {
- row.push(child);
- row.area += child.area;
- if (child.z != null) {
- position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);
- row.length = row.area = 0;
- }
- }
- children.forEach(stickify);
- }
- }
- function worst(row, u) {
- var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length;
- while (++i < n) {
- if (!(r = row[i].area)) continue;
- if (r < rmin) rmin = r;
- if (r > rmax) rmax = r;
- }
- s *= s;
- u *= u;
- return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity;
- }
- function position(row, u, rect, flush) {
- var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o;
- if (u == rect.dx) {
- if (flush || v > rect.dy) v = rect.dy;
- while (++i < n) {
- o = row[i];
- o.x = x;
- o.y = y;
- o.dy = v;
- x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);
- }
- o.z = true;
- o.dx += rect.x + rect.dx - x;
- rect.y += v;
- rect.dy -= v;
- } else {
- if (flush || v > rect.dx) v = rect.dx;
- while (++i < n) {
- o = row[i];
- o.x = x;
- o.y = y;
- o.dx = v;
- y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);
- }
- o.z = false;
- o.dy += rect.y + rect.dy - y;
- rect.x += v;
- rect.dx -= v;
- }
- }
- function treemap(d) {
- var nodes = stickies || hierarchy(d), root = nodes[0];
- root.x = 0;
- root.y = 0;
- root.dx = size[0];
- root.dy = size[1];
- if (stickies) hierarchy.revalue(root);
- scale([ root ], root.dx * root.dy / root.value);
- (stickies ? stickify : squarify)(root);
- if (sticky) stickies = nodes;
- return nodes;
- }
- treemap.size = function(x) {
- if (!arguments.length) return size;
- size = x;
- return treemap;
- };
- treemap.padding = function(x) {
- if (!arguments.length) return padding;
- function padFunction(node) {
- var p = x.call(treemap, node, node.depth);
- return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [ p, p, p, p ] : p);
- }
- function padConstant(node) {
- return d3_layout_treemapPad(node, x);
- }
- var type;
- pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ],
- padConstant) : padConstant;
- return treemap;
- };
- treemap.round = function(x) {
- if (!arguments.length) return round != Number;
- round = x ? Math.round : Number;
- return treemap;
- };
- treemap.sticky = function(x) {
- if (!arguments.length) return sticky;
- sticky = x;
- stickies = null;
- return treemap;
- };
- treemap.ratio = function(x) {
- if (!arguments.length) return ratio;
- ratio = x;
- return treemap;
- };
- treemap.mode = function(x) {
- if (!arguments.length) return mode;
- mode = x + "";
- return treemap;
- };
- return d3_layout_hierarchyRebind(treemap, hierarchy);
- };
- function d3_layout_treemapPadNull(node) {
- return {
- x: node.x,
- y: node.y,
- dx: node.dx,
- dy: node.dy
- };
- }
- function d3_layout_treemapPad(node, padding) {
- var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];
- if (dx < 0) {
- x += dx / 2;
- dx = 0;
- }
- if (dy < 0) {
- y += dy / 2;
- dy = 0;
- }
- return {
- x: x,
- y: y,
- dx: dx,
- dy: dy
- };
- }
- d3.random = {
- normal: function(µ, σ) {
- var n = arguments.length;
- if (n < 2) σ = 1;
- if (n < 1) µ = 0;
- return function() {
- var x, y, r;
- do {
- x = Math.random() * 2 - 1;
- y = Math.random() * 2 - 1;
- r = x * x + y * y;
- } while (!r || r > 1);
- return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);
- };
- },
- logNormal: function() {
- var random = d3.random.normal.apply(d3, arguments);
- return function() {
- return Math.exp(random());
- };
- },
- bates: function(m) {
- var random = d3.random.irwinHall(m);
- return function() {
- return random() / m;
- };
- },
- irwinHall: function(m) {
- return function() {
- for (var s = 0, j = 0; j < m; j++) s += Math.random();
- return s;
- };
- }
- };
- d3.scale = {};
- function d3_scaleExtent(domain) {
- var start = domain[0], stop = domain[domain.length - 1];
- return start < stop ? [ start, stop ] : [ stop, start ];
- }
- function d3_scaleRange(scale) {
- return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());
- }
- function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
- var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);
- return function(x) {
- return i(u(x));
- };
- }
- function d3_scale_nice(domain, nice) {
- var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;
- if (x1 < x0) {
- dx = i0, i0 = i1, i1 = dx;
- dx = x0, x0 = x1, x1 = dx;
- }
- domain[i0] = nice.floor(x0);
- domain[i1] = nice.ceil(x1);
- return domain;
- }
- function d3_scale_niceStep(step) {
- return step ? {
- floor: function(x) {
- return Math.floor(x / step) * step;
- },
- ceil: function(x) {
- return Math.ceil(x / step) * step;
- }
- } : d3_scale_niceIdentity;
- }
- var d3_scale_niceIdentity = {
- floor: d3_identity,
- ceil: d3_identity
- };
- function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
- var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;
- if (domain[k] < domain[0]) {
- domain = domain.slice().reverse();
- range = range.slice().reverse();
- }
- while (++j <= k) {
- u.push(uninterpolate(domain[j - 1], domain[j]));
- i.push(interpolate(range[j - 1], range[j]));
- }
- return function(x) {
- var j = d3.bisect(domain, x, 1, k) - 1;
- return i[j](u[j](x));
- };
- }
- d3.scale.linear = function() {
- return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false);
- };
- function d3_scale_linear(domain, range, interpolate, clamp) {
- var output, input;
- function rescale() {
- var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
- output = linear(domain, range, uninterpolate, interpolate);
- input = linear(range, domain, uninterpolate, d3_interpolate);
- return scale;
- }
- function scale(x) {
- return output(x);
- }
- scale.invert = function(y) {
- return input(y);
- };
- scale.domain = function(x) {
- if (!arguments.length) return domain;
- domain = x.map(Number);
- return rescale();
- };
- scale.range = function(x) {
- if (!arguments.length) return range;
- range = x;
- return rescale();
- };
- scale.rangeRound = function(x) {
- return scale.range(x).interpolate(d3_interpolateRound);
- };
- scale.clamp = function(x) {
- if (!arguments.length) return clamp;
- clamp = x;
- return rescale();
- };
- scale.interpolate = function(x) {
- if (!arguments.length) return interpolate;
- interpolate = x;
- return rescale();
- };
- scale.ticks = function(m) {
- return d3_scale_linearTicks(domain, m);
- };
- scale.tickFormat = function(m, format) {
- return d3_scale_linearTickFormat(domain, m, format);
- };
- scale.nice = function(m) {
- d3_scale_linearNice(domain, m);
- return rescale();
- };
- scale.copy = function() {
- return d3_scale_linear(domain, range, interpolate, clamp);
- };
- return rescale();
- }
- function d3_scale_linearRebind(scale, linear) {
- return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp");
- }
- function d3_scale_linearNice(domain, m) {
- return d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));
- }
- function d3_scale_linearTickRange(domain, m) {
- if (m == null) m = 10;
- var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;
- if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;
- extent[0] = Math.ceil(extent[0] / step) * step;
- extent[1] = Math.floor(extent[1] / step) * step + step * .5;
- extent[2] = step;
- return extent;
- }
- function d3_scale_linearTicks(domain, m) {
- return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
- }
- function d3_scale_linearTickFormat(domain, m, format) {
- var range = d3_scale_linearTickRange(domain, m);
- if (format) {
- var match = d3_format_re.exec(format);
- match.shift();
- if (match[8] === "s") {
- var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1])));
- if (!match[7]) match[7] = "." + d3_scale_linearPrecision(prefix.scale(range[2]));
- match[8] = "f";
- format = d3.format(match.join(""));
- return function(d) {
- return format(prefix.scale(d)) + prefix.symbol;
- };
- }
- if (!match[7]) match[7] = "." + d3_scale_linearFormatPrecision(match[8], range);
- format = match.join("");
- } else {
- format = ",." + d3_scale_linearPrecision(range[2]) + "f";
- }
- return d3.format(format);
- }
- var d3_scale_linearFormatSignificant = {
- s: 1,
- g: 1,
- p: 1,
- r: 1,
- e: 1
- };
- function d3_scale_linearPrecision(value) {
- return -Math.floor(Math.log(value) / Math.LN10 + .01);
- }
- function d3_scale_linearFormatPrecision(type, range) {
- var p = d3_scale_linearPrecision(range[2]);
- return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== "e") : p - (type === "%") * 2;
- }
- d3.scale.log = function() {
- return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]);
- };
- function d3_scale_log(linear, base, positive, domain) {
- function log(x) {
- return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base);
- }
- function pow(x) {
- return positive ? Math.pow(base, x) : -Math.pow(base, -x);
- }
- function scale(x) {
- return linear(log(x));
- }
- scale.invert = function(x) {
- return pow(linear.invert(x));
- };
- scale.domain = function(x) {
- if (!arguments.length) return domain;
- positive = x[0] >= 0;
- linear.domain((domain = x.map(Number)).map(log));
- return scale;
- };
- scale.base = function(_) {
- if (!arguments.length) return base;
- base = +_;
- linear.domain(domain.map(log));
- return scale;
- };
- scale.nice = function() {
- var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative);
- linear.domain(niced);
- domain = niced.map(pow);
- return scale;
- };
- scale.ticks = function() {
- var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base;
- if (isFinite(j - i)) {
- if (positive) {
- for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k);
- ticks.push(pow(i));
- } else {
- ticks.push(pow(i));
- for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k);
- }
- for (i = 0; ticks[i] < u; i++) {}
- for (j = ticks.length; ticks[j - 1] > v; j--) {}
- ticks = ticks.slice(i, j);
- }
- return ticks;
- };
- scale.tickFormat = function(n, format) {
- if (!arguments.length) return d3_scale_logFormat;
- if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== "function") format = d3.format(format);
- var k = Math.max(.1, n / scale.ticks().length), f = positive ? (e = 1e-12, Math.ceil) : (e = -1e-12,
- Math.floor), e;
- return function(d) {
- return d / pow(f(log(d) + e)) <= k ? format(d) : "";
- };
- };
- scale.copy = function() {
- return d3_scale_log(linear.copy(), base, positive, domain);
- };
- return d3_scale_linearRebind(scale, linear);
- }
- var d3_scale_logFormat = d3.format(".0e"), d3_scale_logNiceNegative = {
- floor: function(x) {
- return -Math.ceil(-x);
- },
- ceil: function(x) {
- return -Math.floor(-x);
- }
- };
- d3.scale.pow = function() {
- return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]);
- };
- function d3_scale_pow(linear, exponent, domain) {
- var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);
- function scale(x) {
- return linear(powp(x));
- }
- scale.invert = function(x) {
- return powb(linear.invert(x));
- };
- scale.domain = function(x) {
- if (!arguments.length) return domain;
- linear.domain((domain = x.map(Number)).map(powp));
- return scale;
- };
- scale.ticks = function(m) {
- return d3_scale_linearTicks(domain, m);
- };
- scale.tickFormat = function(m, format) {
- return d3_scale_linearTickFormat(domain, m, format);
- };
- scale.nice = function(m) {
- return scale.domain(d3_scale_linearNice(domain, m));
- };
- scale.exponent = function(x) {
- if (!arguments.length) return exponent;
- powp = d3_scale_powPow(exponent = x);
- powb = d3_scale_powPow(1 / exponent);
- linear.domain(domain.map(powp));
- return scale;
- };
- scale.copy = function() {
- return d3_scale_pow(linear.copy(), exponent, domain);
- };
- return d3_scale_linearRebind(scale, linear);
- }
- function d3_scale_powPow(e) {
- return function(x) {
- return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
- };
- }
- d3.scale.sqrt = function() {
- return d3.scale.pow().exponent(.5);
- };
- d3.scale.ordinal = function() {
- return d3_scale_ordinal([], {
- t: "range",
- a: [ [] ]
- });
- };
- function d3_scale_ordinal(domain, ranger) {
- var index, range, rangeBand;
- function scale(x) {
- return range[((index.get(x) || (ranger.t === "range" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length];
- }
- function steps(start, step) {
- return d3.range(domain.length).map(function(i) {
- return start + step * i;
- });
- }
- scale.domain = function(x) {
- if (!arguments.length) return domain;
- domain = [];
- index = new d3_Map();
- var i = -1, n = x.length, xi;
- while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));
- return scale[ranger.t].apply(scale, ranger.a);
- };
- scale.range = function(x) {
- if (!arguments.length) return range;
- range = x;
- rangeBand = 0;
- ranger = {
- t: "range",
- a: arguments
- };
- return scale;
- };
- scale.rangePoints = function(x, padding) {
- if (arguments.length < 2) padding = 0;
- var start = x[0], stop = x[1], step = (stop - start) / (Math.max(1, domain.length - 1) + padding);
- range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step);
- rangeBand = 0;
- ranger = {
- t: "rangePoints",
- a: arguments
- };
- return scale;
- };
- scale.rangeBands = function(x, padding, outerPadding) {
- if (arguments.length < 2) padding = 0;
- if (arguments.length < 3) outerPadding = padding;
- var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);
- range = steps(start + step * outerPadding, step);
- if (reverse) range.reverse();
- rangeBand = step * (1 - padding);
- ranger = {
- t: "rangeBands",
- a: arguments
- };
- return scale;
- };
- scale.rangeRoundBands = function(x, padding, outerPadding) {
- if (arguments.length < 2) padding = 0;
- if (arguments.length < 3) outerPadding = padding;
- var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)), error = stop - start - (domain.length - padding) * step;
- range = steps(start + Math.round(error / 2), step);
- if (reverse) range.reverse();
- rangeBand = Math.round(step * (1 - padding));
- ranger = {
- t: "rangeRoundBands",
- a: arguments
- };
- return scale;
- };
- scale.rangeBand = function() {
- return rangeBand;
- };
- scale.rangeExtent = function() {
- return d3_scaleExtent(ranger.a[0]);
- };
- scale.copy = function() {
- return d3_scale_ordinal(domain, ranger);
- };
- return scale.domain(domain);
- }
- d3.scale.category10 = function() {
- return d3.scale.ordinal().range(d3_category10);
- };
- d3.scale.category20 = function() {
- return d3.scale.ordinal().range(d3_category20);
- };
- d3.scale.category20b = function() {
- return d3.scale.ordinal().range(d3_category20b);
- };
- d3.scale.category20c = function() {
- return d3.scale.ordinal().range(d3_category20c);
- };
- var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString);
- var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString);
- var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString);
- var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString);
- d3.scale.quantile = function() {
- return d3_scale_quantile([], []);
- };
- function d3_scale_quantile(domain, range) {
- var thresholds;
- function rescale() {
- var k = 0, q = range.length;
- thresholds = [];
- while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);
- return scale;
- }
- function scale(x) {
- if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)];
- }
- scale.domain = function(x) {
- if (!arguments.length) return domain;
- domain = x.filter(d3_number).sort(d3_ascending);
- return rescale();
- };
- scale.range = function(x) {
- if (!arguments.length) return range;
- range = x;
- return rescale();
- };
- scale.quantiles = function() {
- return thresholds;
- };
- scale.invertExtent = function(y) {
- y = range.indexOf(y);
- return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ];
- };
- scale.copy = function() {
- return d3_scale_quantile(domain, range);
- };
- return rescale();
- }
- d3.scale.quantize = function() {
- return d3_scale_quantize(0, 1, [ 0, 1 ]);
- };
- function d3_scale_quantize(x0, x1, range) {
- var kx, i;
- function scale(x) {
- return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
- }
- function rescale() {
- kx = range.length / (x1 - x0);
- i = range.length - 1;
- return scale;
- }
- scale.domain = function(x) {
- if (!arguments.length) return [ x0, x1 ];
- x0 = +x[0];
- x1 = +x[x.length - 1];
- return rescale();
- };
- scale.range = function(x) {
- if (!arguments.length) return range;
- range = x;
- return rescale();
- };
- scale.invertExtent = function(y) {
- y = range.indexOf(y);
- y = y < 0 ? NaN : y / kx + x0;
- return [ y, y + 1 / kx ];
- };
- scale.copy = function() {
- return d3_scale_quantize(x0, x1, range);
- };
- return rescale();
- }
- d3.scale.threshold = function() {
- return d3_scale_threshold([ .5 ], [ 0, 1 ]);
- };
- function d3_scale_threshold(domain, range) {
- function scale(x) {
- if (x <= x) return range[d3.bisect(domain, x)];
- }
- scale.domain = function(_) {
- if (!arguments.length) return domain;
- domain = _;
- return scale;
- };
- scale.range = function(_) {
- if (!arguments.length) return range;
- range = _;
- return scale;
- };
- scale.invertExtent = function(y) {
- y = range.indexOf(y);
- return [ domain[y - 1], domain[y] ];
- };
- scale.copy = function() {
- return d3_scale_threshold(domain, range);
- };
- return scale;
- }
- d3.scale.identity = function() {
- return d3_scale_identity([ 0, 1 ]);
- };
- function d3_scale_identity(domain) {
- function identity(x) {
- return +x;
- }
- identity.invert = identity;
- identity.domain = identity.range = function(x) {
- if (!arguments.length) return domain;
- domain = x.map(identity);
- return identity;
- };
- identity.ticks = function(m) {
- return d3_scale_linearTicks(domain, m);
- };
- identity.tickFormat = function(m, format) {
- return d3_scale_linearTickFormat(domain, m, format);
- };
- identity.copy = function() {
- return d3_scale_identity(domain);
- };
- return identity;
- }
- d3.svg = {};
- d3.svg.arc = function() {
- var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;
- function arc() {
- var r0 = innerRadius.apply(this, arguments), r1 = outerRadius.apply(this, arguments), a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset, a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset, da = (a1 < a0 && (da = a0,
- a0 = a1, a1 = da), a1 - a0), df = da < π ? "0" : "1", c0 = Math.cos(a0), s0 = Math.sin(a0), c1 = Math.cos(a1), s1 = Math.sin(a1);
- return da >= d3_svg_arcMax ? r0 ? "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "M0," + r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + -r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + r0 + "Z" : "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "Z" : r0 ? "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L" + r0 * c1 + "," + r0 * s1 + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0 + "Z" : "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L0,0" + "Z";
- }
- arc.innerRadius = function(v) {
- if (!arguments.length) return innerRadius;
- innerRadius = d3_functor(v);
- return arc;
- };
- arc.outerRadius = function(v) {
- if (!arguments.length) return outerRadius;
- outerRadius = d3_functor(v);
- return arc;
- };
- arc.startAngle = function(v) {
- if (!arguments.length) return startAngle;
- startAngle = d3_functor(v);
- return arc;
- };
- arc.endAngle = function(v) {
- if (!arguments.length) return endAngle;
- endAngle = d3_functor(v);
- return arc;
- };
- arc.centroid = function() {
- var r = (innerRadius.apply(this, arguments) + outerRadius.apply(this, arguments)) / 2, a = (startAngle.apply(this, arguments) + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
- return [ Math.cos(a) * r, Math.sin(a) * r ];
- };
- return arc;
- };
- var d3_svg_arcOffset = -halfπ, d3_svg_arcMax = τ - ε;
- function d3_svg_arcInnerRadius(d) {
- return d.innerRadius;
- }
- function d3_svg_arcOuterRadius(d) {
- return d.outerRadius;
- }
- function d3_svg_arcStartAngle(d) {
- return d.startAngle;
- }
- function d3_svg_arcEndAngle(d) {
- return d.endAngle;
- }
- function d3_svg_line(projection) {
- var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;
- function line(data) {
- var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);
- function segment() {
- segments.push("M", interpolate(projection(points), tension));
- }
- while (++i < n) {
- if (defined.call(this, d = data[i], i)) {
- points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]);
- } else if (points.length) {
- segment();
- points = [];
- }
- }
- if (points.length) segment();
- return segments.length ? segments.join("") : null;
- }
- line.x = function(_) {
- if (!arguments.length) return x;
- x = _;
- return line;
- };
- line.y = function(_) {
- if (!arguments.length) return y;
- y = _;
- return line;
- };
- line.defined = function(_) {
- if (!arguments.length) return defined;
- defined = _;
- return line;
- };
- line.interpolate = function(_) {
- if (!arguments.length) return interpolateKey;
- if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;
- return line;
- };
- line.tension = function(_) {
- if (!arguments.length) return tension;
- tension = _;
- return line;
- };
- return line;
- }
- d3.svg.line = function() {
- return d3_svg_line(d3_identity);
- };
- var d3_svg_lineInterpolators = d3.map({
- linear: d3_svg_lineLinear,
- "linear-closed": d3_svg_lineLinearClosed,
- step: d3_svg_lineStep,
- "step-before": d3_svg_lineStepBefore,
- "step-after": d3_svg_lineStepAfter,
- basis: d3_svg_lineBasis,
- "basis-open": d3_svg_lineBasisOpen,
- "basis-closed": d3_svg_lineBasisClosed,
- bundle: d3_svg_lineBundle,
- cardinal: d3_svg_lineCardinal,
- "cardinal-open": d3_svg_lineCardinalOpen,
- "cardinal-closed": d3_svg_lineCardinalClosed,
- monotone: d3_svg_lineMonotone
- });
- d3_svg_lineInterpolators.forEach(function(key, value) {
- value.key = key;
- value.closed = /-closed$/.test(key);
- });
- function d3_svg_lineLinear(points) {
- return points.join("L");
- }
- function d3_svg_lineLinearClosed(points) {
- return d3_svg_lineLinear(points) + "Z";
- }
- function d3_svg_lineStep(points) {
- var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
- while (++i < n) path.push("H", (p[0] + (p = points[i])[0]) / 2, "V", p[1]);
- if (n > 1) path.push("H", p[0]);
- return path.join("");
- }
- function d3_svg_lineStepBefore(points) {
- var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
- while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
- return path.join("");
- }
- function d3_svg_lineStepAfter(points) {
- var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
- while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
- return path.join("");
- }
- function d3_svg_lineCardinalOpen(points, tension) {
- return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1), d3_svg_lineCardinalTangents(points, tension));
- }
- function d3_svg_lineCardinalClosed(points, tension) {
- return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]),
- points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));
- }
- function d3_svg_lineCardinal(points, tension) {
- return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));
- }
- function d3_svg_lineHermite(points, tangents) {
- if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {
- return d3_svg_lineLinear(points);
- }
- var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;
- if (quad) {
- path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1];
- p0 = points[1];
- pi = 2;
- }
- if (tangents.length > 1) {
- t = tangents[1];
- p = points[pi];
- pi++;
- path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1];
- for (var i = 2; i < tangents.length; i++, pi++) {
- p = points[pi];
- t = tangents[i];
- path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1];
- }
- }
- if (quad) {
- var lp = points[pi];
- path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1];
- }
- return path;
- }
- function d3_svg_lineCardinalTangents(points, tension) {
- var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;
- while (++i < n) {
- p0 = p1;
- p1 = p2;
- p2 = points[i];
- tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]);
- }
- return tangents;
- }
- function d3_svg_lineBasis(points) {
- if (points.length < 3) return d3_svg_lineLinear(points);
- var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ",", y0, "L", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];
- points.push(points[n - 1]);
- while (++i <= n) {
- pi = points[i];
- px.shift();
- px.push(pi[0]);
- py.shift();
- py.push(pi[1]);
- d3_svg_lineBasisBezier(path, px, py);
- }
- points.pop();
- path.push("L", pi);
- return path.join("");
- }
- function d3_svg_lineBasisOpen(points) {
- if (points.length < 4) return d3_svg_lineLinear(points);
- var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ];
- while (++i < 3) {
- pi = points[i];
- px.push(pi[0]);
- py.push(pi[1]);
- }
- path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));
- --i;
- while (++i < n) {
- pi = points[i];
- px.shift();
- px.push(pi[0]);
- py.shift();
- py.push(pi[1]);
- d3_svg_lineBasisBezier(path, px, py);
- }
- return path.join("");
- }
- function d3_svg_lineBasisClosed(points) {
- var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];
- while (++i < 4) {
- pi = points[i % n];
- px.push(pi[0]);
- py.push(pi[1]);
- }
- path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];
- --i;
- while (++i < m) {
- pi = points[i % n];
- px.shift();
- px.push(pi[0]);
- py.shift();
- py.push(pi[1]);
- d3_svg_lineBasisBezier(path, px, py);
- }
- return path.join("");
- }
- function d3_svg_lineBundle(points, tension) {
- var n = points.length - 1;
- if (n) {
- var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;
- while (++i <= n) {
- p = points[i];
- t = i / n;
- p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
- p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
- }
- }
- return d3_svg_lineBasis(points);
- }
- function d3_svg_lineDot4(a, b) {
- return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
- }
- var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ];
- function d3_svg_lineBasisBezier(path, x, y) {
- path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));
- }
- function d3_svg_lineSlope(p0, p1) {
- return (p1[1] - p0[1]) / (p1[0] - p0[0]);
- }
- function d3_svg_lineFiniteDifferences(points) {
- var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);
- while (++i < j) {
- m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;
- }
- m[i] = d;
- return m;
- }
- function d3_svg_lineMonotoneTangents(points) {
- var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;
- while (++i < j) {
- d = d3_svg_lineSlope(points[i], points[i + 1]);
- if (abs(d) < ε) {
- m[i] = m[i + 1] = 0;
- } else {
- a = m[i] / d;
- b = m[i + 1] / d;
- s = a * a + b * b;
- if (s > 9) {
- s = d * 3 / Math.sqrt(s);
- m[i] = s * a;
- m[i + 1] = s * b;
- }
- }
- }
- i = -1;
- while (++i <= j) {
- s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));
- tangents.push([ s || 0, m[i] * s || 0 ]);
- }
- return tangents;
- }
- function d3_svg_lineMonotone(points) {
- return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
- }
- d3.svg.line.radial = function() {
- var line = d3_svg_line(d3_svg_lineRadial);
- line.radius = line.x, delete line.x;
- line.angle = line.y, delete line.y;
- return line;
- };
- function d3_svg_lineRadial(points) {
- var point, i = -1, n = points.length, r, a;
- while (++i < n) {
- point = points[i];
- r = point[0];
- a = point[1] + d3_svg_arcOffset;
- point[0] = r * Math.cos(a);
- point[1] = r * Math.sin(a);
- }
- return points;
- }
- function d3_svg_area(projection) {
- var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7;
- function area(data) {
- var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() {
- return x;
- } : d3_functor(x1), fy1 = y0 === y1 ? function() {
- return y;
- } : d3_functor(y1), x, y;
- function segment() {
- segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z");
- }
- while (++i < n) {
- if (defined.call(this, d = data[i], i)) {
- points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]);
- points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]);
- } else if (points0.length) {
- segment();
- points0 = [];
- points1 = [];
- }
- }
- if (points0.length) segment();
- return segments.length ? segments.join("") : null;
- }
- area.x = function(_) {
- if (!arguments.length) return x1;
- x0 = x1 = _;
- return area;
- };
- area.x0 = function(_) {
- if (!arguments.length) return x0;
- x0 = _;
- return area;
- };
- area.x1 = function(_) {
- if (!arguments.length) return x1;
- x1 = _;
- return area;
- };
- area.y = function(_) {
- if (!arguments.length) return y1;
- y0 = y1 = _;
- return area;
- };
- area.y0 = function(_) {
- if (!arguments.length) return y0;
- y0 = _;
- return area;
- };
- area.y1 = function(_) {
- if (!arguments.length) return y1;
- y1 = _;
- return area;
- };
- area.defined = function(_) {
- if (!arguments.length) return defined;
- defined = _;
- return area;
- };
- area.interpolate = function(_) {
- if (!arguments.length) return interpolateKey;
- if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;
- interpolateReverse = interpolate.reverse || interpolate;
- L = interpolate.closed ? "M" : "L";
- return area;
- };
- area.tension = function(_) {
- if (!arguments.length) return tension;
- tension = _;
- return area;
- };
- return area;
- }
- d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;
- d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;
- d3.svg.area = function() {
- return d3_svg_area(d3_identity);
- };
- d3.svg.area.radial = function() {
- var area = d3_svg_area(d3_svg_lineRadial);
- area.radius = area.x, delete area.x;
- area.innerRadius = area.x0, delete area.x0;
- area.outerRadius = area.x1, delete area.x1;
- area.angle = area.y, delete area.y;
- area.startAngle = area.y0, delete area.y0;
- area.endAngle = area.y1, delete area.y1;
- return area;
- };
- d3.svg.chord = function() {
- var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;
- function chord(d, i) {
- var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);
- return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z";
- }
- function subgroup(self, f, d, i) {
- var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset, a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset;
- return {
- r: r,
- a0: a0,
- a1: a1,
- p0: [ r * Math.cos(a0), r * Math.sin(a0) ],
- p1: [ r * Math.cos(a1), r * Math.sin(a1) ]
- };
- }
- function equals(a, b) {
- return a.a0 == b.a0 && a.a1 == b.a1;
- }
- function arc(r, p, a) {
- return "A" + r + "," + r + " 0 " + +(a > π) + ",1 " + p;
- }
- function curve(r0, p0, r1, p1) {
- return "Q 0,0 " + p1;
- }
- chord.radius = function(v) {
- if (!arguments.length) return radius;
- radius = d3_functor(v);
- return chord;
- };
- chord.source = function(v) {
- if (!arguments.length) return source;
- source = d3_functor(v);
- return chord;
- };
- chord.target = function(v) {
- if (!arguments.length) return target;
- target = d3_functor(v);
- return chord;
- };
- chord.startAngle = function(v) {
- if (!arguments.length) return startAngle;
- startAngle = d3_functor(v);
- return chord;
- };
- chord.endAngle = function(v) {
- if (!arguments.length) return endAngle;
- endAngle = d3_functor(v);
- return chord;
- };
- return chord;
- };
- function d3_svg_chordRadius(d) {
- return d.radius;
- }
- d3.svg.diagonal = function() {
- var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection;
- function diagonal(d, i) {
- var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, {
- x: p0.x,
- y: m
- }, {
- x: p3.x,
- y: m
- }, p3 ];
- p = p.map(projection);
- return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3];
- }
- diagonal.source = function(x) {
- if (!arguments.length) return source;
- source = d3_functor(x);
- return diagonal;
- };
- diagonal.target = function(x) {
- if (!arguments.length) return target;
- target = d3_functor(x);
- return diagonal;
- };
- diagonal.projection = function(x) {
- if (!arguments.length) return projection;
- projection = x;
- return diagonal;
- };
- return diagonal;
- };
- function d3_svg_diagonalProjection(d) {
- return [ d.x, d.y ];
- }
- d3.svg.diagonal.radial = function() {
- var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection;
- diagonal.projection = function(x) {
- return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection;
- };
- return diagonal;
- };
- function d3_svg_diagonalRadialProjection(projection) {
- return function() {
- var d = projection.apply(this, arguments), r = d[0], a = d[1] + d3_svg_arcOffset;
- return [ r * Math.cos(a), r * Math.sin(a) ];
- };
- }
- d3.svg.symbol = function() {
- var type = d3_svg_symbolType, size = d3_svg_symbolSize;
- function symbol(d, i) {
- return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i));
- }
- symbol.type = function(x) {
- if (!arguments.length) return type;
- type = d3_functor(x);
- return symbol;
- };
- symbol.size = function(x) {
- if (!arguments.length) return size;
- size = d3_functor(x);
- return symbol;
- };
- return symbol;
- };
- function d3_svg_symbolSize() {
- return 64;
- }
- function d3_svg_symbolType() {
- return "circle";
- }
- function d3_svg_symbolCircle(size) {
- var r = Math.sqrt(size / π);
- return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z";
- }
- var d3_svg_symbols = d3.map({
- circle: d3_svg_symbolCircle,
- cross: function(size) {
- var r = Math.sqrt(size / 5) / 2;
- return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z";
- },
- diamond: function(size) {
- var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30;
- return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z";
- },
- square: function(size) {
- var r = Math.sqrt(size) / 2;
- return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z";
- },
- "triangle-down": function(size) {
- var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;
- return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z";
- },
- "triangle-up": function(size) {
- var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;
- return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z";
- }
- });
- d3.svg.symbolTypes = d3_svg_symbols.keys();
- var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);
- function d3_transition(groups, id) {
- d3_subclass(groups, d3_transitionPrototype);
- groups.id = id;
- return groups;
- }
- var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit;
- d3_transitionPrototype.call = d3_selectionPrototype.call;
- d3_transitionPrototype.empty = d3_selectionPrototype.empty;
- d3_transitionPrototype.node = d3_selectionPrototype.node;
- d3_transitionPrototype.size = d3_selectionPrototype.size;
- d3.transition = function(selection) {
- return arguments.length ? d3_transitionInheritId ? selection.transition() : selection : d3_selectionRoot.transition();
- };
- d3.transition.prototype = d3_transitionPrototype;
- d3_transitionPrototype.select = function(selector) {
- var id = this.id, subgroups = [], subgroup, subnode, node;
- selector = d3_selection_selector(selector);
- for (var j = -1, m = this.length; ++j < m; ) {
- subgroups.push(subgroup = []);
- for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
- if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {
- if ("__data__" in node) subnode.__data__ = node.__data__;
- d3_transitionNode(subnode, i, id, node.__transition__[id]);
- subgroup.push(subnode);
- } else {
- subgroup.push(null);
- }
- }
- }
- return d3_transition(subgroups, id);
- };
- d3_transitionPrototype.selectAll = function(selector) {
- var id = this.id, subgroups = [], subgroup, subnodes, node, subnode, transition;
- selector = d3_selection_selectorAll(selector);
- for (var j = -1, m = this.length; ++j < m; ) {
- for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
- if (node = group[i]) {
- transition = node.__transition__[id];
- subnodes = selector.call(node, node.__data__, i, j);
- subgroups.push(subgroup = []);
- for (var k = -1, o = subnodes.length; ++k < o; ) {
- if (subnode = subnodes[k]) d3_transitionNode(subnode, k, id, transition);
- subgroup.push(subnode);
- }
- }
- }
- }
- return d3_transition(subgroups, id);
- };
- d3_transitionPrototype.filter = function(filter) {
- var subgroups = [], subgroup, group, node;
- if (typeof filter !== "function") filter = d3_selection_filter(filter);
- for (var j = 0, m = this.length; j < m; j++) {
- subgroups.push(subgroup = []);
- for (var group = this[j], i = 0, n = group.length; i < n; i++) {
- if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {
- subgroup.push(node);
- }
- }
- }
- return d3_transition(subgroups, this.id);
- };
- d3_transitionPrototype.tween = function(name, tween) {
- var id = this.id;
- if (arguments.length < 2) return this.node().__transition__[id].tween.get(name);
- return d3_selection_each(this, tween == null ? function(node) {
- node.__transition__[id].tween.remove(name);
- } : function(node) {
- node.__transition__[id].tween.set(name, tween);
- });
- };
- function d3_transition_tween(groups, name, value, tween) {
- var id = groups.id;
- return d3_selection_each(groups, typeof value === "function" ? function(node, i, j) {
- node.__transition__[id].tween.set(name, tween(value.call(node, node.__data__, i, j)));
- } : (value = tween(value), function(node) {
- node.__transition__[id].tween.set(name, value);
- }));
- }
- d3_transitionPrototype.attr = function(nameNS, value) {
- if (arguments.length < 2) {
- for (value in nameNS) this.attr(value, nameNS[value]);
- return this;
- }
- var interpolate = nameNS == "transform" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS);
- function attrNull() {
- this.removeAttribute(name);
- }
- function attrNullNS() {
- this.removeAttributeNS(name.space, name.local);
- }
- function attrTween(b) {
- return b == null ? attrNull : (b += "", function() {
- var a = this.getAttribute(name), i;
- return a !== b && (i = interpolate(a, b), function(t) {
- this.setAttribute(name, i(t));
- });
- });
- }
- function attrTweenNS(b) {
- return b == null ? attrNullNS : (b += "", function() {
- var a = this.getAttributeNS(name.space, name.local), i;
- return a !== b && (i = interpolate(a, b), function(t) {
- this.setAttributeNS(name.space, name.local, i(t));
- });
- });
- }
- return d3_transition_tween(this, "attr." + nameNS, value, name.local ? attrTweenNS : attrTween);
- };
- d3_transitionPrototype.attrTween = function(nameNS, tween) {
- var name = d3.ns.qualify(nameNS);
- function attrTween(d, i) {
- var f = tween.call(this, d, i, this.getAttribute(name));
- return f && function(t) {
- this.setAttribute(name, f(t));
- };
- }
- function attrTweenNS(d, i) {
- var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));
- return f && function(t) {
- this.setAttributeNS(name.space, name.local, f(t));
- };
- }
- return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween);
- };
- d3_transitionPrototype.style = function(name, value, priority) {
- var n = arguments.length;
- if (n < 3) {
- if (typeof name !== "string") {
- if (n < 2) value = "";
- for (priority in name) this.style(priority, name[priority], value);
- return this;
- }
- priority = "";
- }
- function styleNull() {
- this.style.removeProperty(name);
- }
- function styleString(b) {
- return b == null ? styleNull : (b += "", function() {
- var a = d3_window.getComputedStyle(this, null).getPropertyValue(name), i;
- return a !== b && (i = d3_interpolate(a, b), function(t) {
- this.style.setProperty(name, i(t), priority);
- });
- });
- }
- return d3_transition_tween(this, "style." + name, value, styleString);
- };
- d3_transitionPrototype.styleTween = function(name, tween, priority) {
- if (arguments.length < 3) priority = "";
- function styleTween(d, i) {
- var f = tween.call(this, d, i, d3_window.getComputedStyle(this, null).getPropertyValue(name));
- return f && function(t) {
- this.style.setProperty(name, f(t), priority);
- };
- }
- return this.tween("style." + name, styleTween);
- };
- d3_transitionPrototype.text = function(value) {
- return d3_transition_tween(this, "text", value, d3_transition_text);
- };
- function d3_transition_text(b) {
- if (b == null) b = "";
- return function() {
- this.textContent = b;
- };
- }
- d3_transitionPrototype.remove = function() {
- return this.each("end.transition", function() {
- var p;
- if (this.__transition__.count < 2 && (p = this.parentNode)) p.removeChild(this);
- });
- };
- d3_transitionPrototype.ease = function(value) {
- var id = this.id;
- if (arguments.length < 1) return this.node().__transition__[id].ease;
- if (typeof value !== "function") value = d3.ease.apply(d3, arguments);
- return d3_selection_each(this, function(node) {
- node.__transition__[id].ease = value;
- });
- };
- d3_transitionPrototype.delay = function(value) {
- var id = this.id;
- if (arguments.length < 1) return this.node().__transition__[id].delay;
- return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
- node.__transition__[id].delay = +value.call(node, node.__data__, i, j);
- } : (value = +value, function(node) {
- node.__transition__[id].delay = value;
- }));
- };
- d3_transitionPrototype.duration = function(value) {
- var id = this.id;
- if (arguments.length < 1) return this.node().__transition__[id].duration;
- return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
- node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j));
- } : (value = Math.max(1, value), function(node) {
- node.__transition__[id].duration = value;
- }));
- };
- d3_transitionPrototype.each = function(type, listener) {
- var id = this.id;
- if (arguments.length < 2) {
- var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;
- d3_transitionInheritId = id;
- d3_selection_each(this, function(node, i, j) {
- d3_transitionInherit = node.__transition__[id];
- type.call(node, node.__data__, i, j);
- });
- d3_transitionInherit = inherit;
- d3_transitionInheritId = inheritId;
- } else {
- d3_selection_each(this, function(node) {
- var transition = node.__transition__[id];
- (transition.event || (transition.event = d3.dispatch("start", "end"))).on(type, listener);
- });
- }
- return this;
- };
- d3_transitionPrototype.transition = function() {
- var id0 = this.id, id1 = ++d3_transitionId, subgroups = [], subgroup, group, node, transition;
- for (var j = 0, m = this.length; j < m; j++) {
- subgroups.push(subgroup = []);
- for (var group = this[j], i = 0, n = group.length; i < n; i++) {
- if (node = group[i]) {
- transition = Object.create(node.__transition__[id0]);
- transition.delay += transition.duration;
- d3_transitionNode(node, i, id1, transition);
- }
- subgroup.push(node);
- }
- }
- return d3_transition(subgroups, id1);
- };
- function d3_transitionNode(node, i, id, inherit) {
- var lock = node.__transition__ || (node.__transition__ = {
- active: 0,
- count: 0
- }), transition = lock[id];
- if (!transition) {
- var time = inherit.time;
- transition = lock[id] = {
- tween: new d3_Map(),
- time: time,
- ease: inherit.ease,
- delay: inherit.delay,
- duration: inherit.duration
- };
- ++lock.count;
- d3.timer(function(elapsed) {
- var d = node.__data__, ease = transition.ease, delay = transition.delay, duration = transition.duration, timer = d3_timer_active, tweened = [];
- timer.t = delay + time;
- if (delay <= elapsed) return start(elapsed - delay);
- timer.c = start;
- function start(elapsed) {
- if (lock.active > id) return stop();
- lock.active = id;
- transition.event && transition.event.start.call(node, d, i);
- transition.tween.forEach(function(key, value) {
- if (value = value.call(node, d, i)) {
- tweened.push(value);
- }
- });
- d3.timer(function() {
- timer.c = tick(elapsed || 1) ? d3_true : tick;
- return 1;
- }, 0, time);
- }
- function tick(elapsed) {
- if (lock.active !== id) return stop();
- var t = elapsed / duration, e = ease(t), n = tweened.length;
- while (n > 0) {
- tweened[--n].call(node, e);
- }
- if (t >= 1) {
- transition.event && transition.event.end.call(node, d, i);
- return stop();
- }
- }
- function stop() {
- if (--lock.count) delete lock[id]; else delete node.__transition__;
- return 1;
- }
- }, 0, time);
- }
- }
- d3.svg.axis = function() {
- var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_;
- function axis(g) {
- g.each(function() {
- var g = d3.select(this);
- var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();
- var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick.order()).style("opacity", 1), tickTransform;
- var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"),
- d3.transition(path));
- tickEnter.append("line");
- tickEnter.append("text");
- var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text");
- switch (orient) {
- case "bottom":
- {
- tickTransform = d3_svg_axisX;
- lineEnter.attr("y2", innerTickSize);
- textEnter.attr("y", Math.max(innerTickSize, 0) + tickPadding);
- lineUpdate.attr("x2", 0).attr("y2", innerTickSize);
- textUpdate.attr("x", 0).attr("y", Math.max(innerTickSize, 0) + tickPadding);
- text.attr("dy", ".71em").style("text-anchor", "middle");
- pathUpdate.attr("d", "M" + range[0] + "," + outerTickSize + "V0H" + range[1] + "V" + outerTickSize);
- break;
- }
-
- case "top":
- {
- tickTransform = d3_svg_axisX;
- lineEnter.attr("y2", -innerTickSize);
- textEnter.attr("y", -(Math.max(innerTickSize, 0) + tickPadding));
- lineUpdate.attr("x2", 0).attr("y2", -innerTickSize);
- textUpdate.attr("x", 0).attr("y", -(Math.max(innerTickSize, 0) + tickPadding));
- text.attr("dy", "0em").style("text-anchor", "middle");
- pathUpdate.attr("d", "M" + range[0] + "," + -outerTickSize + "V0H" + range[1] + "V" + -outerTickSize);
- break;
- }
-
- case "left":
- {
- tickTransform = d3_svg_axisY;
- lineEnter.attr("x2", -innerTickSize);
- textEnter.attr("x", -(Math.max(innerTickSize, 0) + tickPadding));
- lineUpdate.attr("x2", -innerTickSize).attr("y2", 0);
- textUpdate.attr("x", -(Math.max(innerTickSize, 0) + tickPadding)).attr("y", 0);
- text.attr("dy", ".32em").style("text-anchor", "end");
- pathUpdate.attr("d", "M" + -outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + -outerTickSize);
- break;
- }
-
- case "right":
- {
- tickTransform = d3_svg_axisY;
- lineEnter.attr("x2", innerTickSize);
- textEnter.attr("x", Math.max(innerTickSize, 0) + tickPadding);
- lineUpdate.attr("x2", innerTickSize).attr("y2", 0);
- textUpdate.attr("x", Math.max(innerTickSize, 0) + tickPadding).attr("y", 0);
- text.attr("dy", ".32em").style("text-anchor", "start");
- pathUpdate.attr("d", "M" + outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + outerTickSize);
- break;
- }
- }
- if (scale1.rangeBand) {
- var x = scale1, dx = x.rangeBand() / 2;
- scale0 = scale1 = function(d) {
- return x(d) + dx;
- };
- } else if (scale0.rangeBand) {
- scale0 = scale1;
- } else {
- tickExit.call(tickTransform, scale1);
- }
- tickEnter.call(tickTransform, scale0);
- tickUpdate.call(tickTransform, scale1);
- });
- }
- axis.scale = function(x) {
- if (!arguments.length) return scale;
- scale = x;
- return axis;
- };
- axis.orient = function(x) {
- if (!arguments.length) return orient;
- orient = x in d3_svg_axisOrients ? x + "" : d3_svg_axisDefaultOrient;
- return axis;
- };
- axis.ticks = function() {
- if (!arguments.length) return tickArguments_;
- tickArguments_ = arguments;
- return axis;
- };
- axis.tickValues = function(x) {
- if (!arguments.length) return tickValues;
- tickValues = x;
- return axis;
- };
- axis.tickFormat = function(x) {
- if (!arguments.length) return tickFormat_;
- tickFormat_ = x;
- return axis;
- };
- axis.tickSize = function(x) {
- var n = arguments.length;
- if (!n) return innerTickSize;
- innerTickSize = +x;
- outerTickSize = +arguments[n - 1];
- return axis;
- };
- axis.innerTickSize = function(x) {
- if (!arguments.length) return innerTickSize;
- innerTickSize = +x;
- return axis;
- };
- axis.outerTickSize = function(x) {
- if (!arguments.length) return outerTickSize;
- outerTickSize = +x;
- return axis;
- };
- axis.tickPadding = function(x) {
- if (!arguments.length) return tickPadding;
- tickPadding = +x;
- return axis;
- };
- axis.tickSubdivide = function() {
- return arguments.length && axis;
- };
- return axis;
- };
- var d3_svg_axisDefaultOrient = "bottom", d3_svg_axisOrients = {
- top: 1,
- right: 1,
- bottom: 1,
- left: 1
- };
- function d3_svg_axisX(selection, x) {
- selection.attr("transform", function(d) {
- return "translate(" + x(d) + ",0)";
- });
- }
- function d3_svg_axisY(selection, y) {
- selection.attr("transform", function(d) {
- return "translate(0," + y(d) + ")";
- });
- }
- d3.svg.brush = function() {
- var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0];
- function brush(g) {
- g.each(function() {
- var g = d3.select(this).style("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush", brushstart).on("touchstart.brush", brushstart);
- var background = g.selectAll(".background").data([ 0 ]);
- background.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair");
- g.selectAll(".extent").data([ 0 ]).enter().append("rect").attr("class", "extent").style("cursor", "move");
- var resize = g.selectAll(".resize").data(resizes, d3_identity);
- resize.exit().remove();
- resize.enter().append("g").attr("class", function(d) {
- return "resize " + d;
- }).style("cursor", function(d) {
- return d3_svg_brushCursor[d];
- }).append("rect").attr("x", function(d) {
- return /[ew]$/.test(d) ? -3 : null;
- }).attr("y", function(d) {
- return /^[ns]/.test(d) ? -3 : null;
- }).attr("width", 6).attr("height", 6).style("visibility", "hidden");
- resize.style("display", brush.empty() ? "none" : null);
- var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range;
- if (x) {
- range = d3_scaleRange(x);
- backgroundUpdate.attr("x", range[0]).attr("width", range[1] - range[0]);
- redrawX(gUpdate);
- }
- if (y) {
- range = d3_scaleRange(y);
- backgroundUpdate.attr("y", range[0]).attr("height", range[1] - range[0]);
- redrawY(gUpdate);
- }
- redraw(gUpdate);
- });
- }
- brush.event = function(g) {
- g.each(function() {
- var event_ = event.of(this, arguments), extent1 = {
- x: xExtent,
- y: yExtent,
- i: xExtentDomain,
- j: yExtentDomain
- }, extent0 = this.__chart__ || extent1;
- this.__chart__ = extent1;
- if (d3_transitionInheritId) {
- d3.select(this).transition().each("start.brush", function() {
- xExtentDomain = extent0.i;
- yExtentDomain = extent0.j;
- xExtent = extent0.x;
- yExtent = extent0.y;
- event_({
- type: "brushstart"
- });
- }).tween("brush:brush", function() {
- var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y);
- xExtentDomain = yExtentDomain = null;
- return function(t) {
- xExtent = extent1.x = xi(t);
- yExtent = extent1.y = yi(t);
- event_({
- type: "brush",
- mode: "resize"
- });
- };
- }).each("end.brush", function() {
- xExtentDomain = extent1.i;
- yExtentDomain = extent1.j;
- event_({
- type: "brush",
- mode: "resize"
- });
- event_({
- type: "brushend"
- });
- });
- } else {
- event_({
- type: "brushstart"
- });
- event_({
- type: "brush",
- mode: "resize"
- });
- event_({
- type: "brushend"
- });
- }
- });
- };
- function redraw(g) {
- g.selectAll(".resize").attr("transform", function(d) {
- return "translate(" + xExtent[+/e$/.test(d)] + "," + yExtent[+/^s/.test(d)] + ")";
- });
- }
- function redrawX(g) {
- g.select(".extent").attr("x", xExtent[0]);
- g.selectAll(".extent,.n>rect,.s>rect").attr("width", xExtent[1] - xExtent[0]);
- }
- function redrawY(g) {
- g.select(".extent").attr("y", yExtent[0]);
- g.selectAll(".extent,.e>rect,.w>rect").attr("height", yExtent[1] - yExtent[0]);
- }
- function brushstart() {
- var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), dragRestore = d3_event_dragSuppress(), center, origin = d3.mouse(target), offset;
- var w = d3.select(d3_window).on("keydown.brush", keydown).on("keyup.brush", keyup);
- if (d3.event.changedTouches) {
- w.on("touchmove.brush", brushmove).on("touchend.brush", brushend);
- } else {
- w.on("mousemove.brush", brushmove).on("mouseup.brush", brushend);
- }
- g.interrupt().selectAll("*").interrupt();
- if (dragging) {
- origin[0] = xExtent[0] - origin[0];
- origin[1] = yExtent[0] - origin[1];
- } else if (resizing) {
- var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing);
- offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ];
- origin[0] = xExtent[ex];
- origin[1] = yExtent[ey];
- } else if (d3.event.altKey) center = origin.slice();
- g.style("pointer-events", "none").selectAll(".resize").style("display", null);
- d3.select("body").style("cursor", eventTarget.style("cursor"));
- event_({
- type: "brushstart"
- });
- brushmove();
- function keydown() {
- if (d3.event.keyCode == 32) {
- if (!dragging) {
- center = null;
- origin[0] -= xExtent[1];
- origin[1] -= yExtent[1];
- dragging = 2;
- }
- d3_eventPreventDefault();
- }
- }
- function keyup() {
- if (d3.event.keyCode == 32 && dragging == 2) {
- origin[0] += xExtent[1];
- origin[1] += yExtent[1];
- dragging = 0;
- d3_eventPreventDefault();
- }
- }
- function brushmove() {
- var point = d3.mouse(target), moved = false;
- if (offset) {
- point[0] += offset[0];
- point[1] += offset[1];
- }
- if (!dragging) {
- if (d3.event.altKey) {
- if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ];
- origin[0] = xExtent[+(point[0] < center[0])];
- origin[1] = yExtent[+(point[1] < center[1])];
- } else center = null;
- }
- if (resizingX && move1(point, x, 0)) {
- redrawX(g);
- moved = true;
- }
- if (resizingY && move1(point, y, 1)) {
- redrawY(g);
- moved = true;
- }
- if (moved) {
- redraw(g);
- event_({
- type: "brush",
- mode: dragging ? "move" : "resize"
- });
- }
- }
- function move1(point, scale, i) {
- var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max;
- if (dragging) {
- r0 -= position;
- r1 -= size + position;
- }
- min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i];
- if (dragging) {
- max = (min += position) + size;
- } else {
- if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));
- if (position < min) {
- max = min;
- min = position;
- } else {
- max = position;
- }
- }
- if (extent[0] != min || extent[1] != max) {
- if (i) yExtentDomain = null; else xExtentDomain = null;
- extent[0] = min;
- extent[1] = max;
- return true;
- }
- }
- function brushend() {
- brushmove();
- g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null);
- d3.select("body").style("cursor", null);
- w.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null);
- dragRestore();
- event_({
- type: "brushend"
- });
- }
- }
- brush.x = function(z) {
- if (!arguments.length) return x;
- x = z;
- resizes = d3_svg_brushResizes[!x << 1 | !y];
- return brush;
- };
- brush.y = function(z) {
- if (!arguments.length) return y;
- y = z;
- resizes = d3_svg_brushResizes[!x << 1 | !y];
- return brush;
- };
- brush.clamp = function(z) {
- if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null;
- if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z;
- return brush;
- };
- brush.extent = function(z) {
- var x0, x1, y0, y1, t;
- if (!arguments.length) {
- if (x) {
- if (xExtentDomain) {
- x0 = xExtentDomain[0], x1 = xExtentDomain[1];
- } else {
- x0 = xExtent[0], x1 = xExtent[1];
- if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);
- if (x1 < x0) t = x0, x0 = x1, x1 = t;
- }
- }
- if (y) {
- if (yExtentDomain) {
- y0 = yExtentDomain[0], y1 = yExtentDomain[1];
- } else {
- y0 = yExtent[0], y1 = yExtent[1];
- if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);
- if (y1 < y0) t = y0, y0 = y1, y1 = t;
- }
- }
- return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ];
- }
- if (x) {
- x0 = z[0], x1 = z[1];
- if (y) x0 = x0[0], x1 = x1[0];
- xExtentDomain = [ x0, x1 ];
- if (x.invert) x0 = x(x0), x1 = x(x1);
- if (x1 < x0) t = x0, x0 = x1, x1 = t;
- if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ];
- }
- if (y) {
- y0 = z[0], y1 = z[1];
- if (x) y0 = y0[1], y1 = y1[1];
- yExtentDomain = [ y0, y1 ];
- if (y.invert) y0 = y(y0), y1 = y(y1);
- if (y1 < y0) t = y0, y0 = y1, y1 = t;
- if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ];
- }
- return brush;
- };
- brush.clear = function() {
- if (!brush.empty()) {
- xExtent = [ 0, 0 ], yExtent = [ 0, 0 ];
- xExtentDomain = yExtentDomain = null;
- }
- return brush;
- };
- brush.empty = function() {
- return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];
- };
- return d3.rebind(brush, event, "on");
- };
- var d3_svg_brushCursor = {
- n: "ns-resize",
- e: "ew-resize",
- s: "ns-resize",
- w: "ew-resize",
- nw: "nwse-resize",
- ne: "nesw-resize",
- se: "nwse-resize",
- sw: "nesw-resize"
- };
- var d3_svg_brushResizes = [ [ "n", "e", "s", "w", "nw", "ne", "se", "sw" ], [ "e", "w" ], [ "n", "s" ], [] ];
- var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat;
- var d3_time_formatUtc = d3_time_format.utc;
- var d3_time_formatIso = d3_time_formatUtc("%Y-%m-%dT%H:%M:%S.%LZ");
- d3_time_format.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? d3_time_formatIsoNative : d3_time_formatIso;
- function d3_time_formatIsoNative(date) {
- return date.toISOString();
- }
- d3_time_formatIsoNative.parse = function(string) {
- var date = new Date(string);
- return isNaN(date) ? null : date;
- };
- d3_time_formatIsoNative.toString = d3_time_formatIso.toString;
- d3_time.second = d3_time_interval(function(date) {
- return new d3_date(Math.floor(date / 1e3) * 1e3);
- }, function(date, offset) {
- date.setTime(date.getTime() + Math.floor(offset) * 1e3);
- }, function(date) {
- return date.getSeconds();
- });
- d3_time.seconds = d3_time.second.range;
- d3_time.seconds.utc = d3_time.second.utc.range;
- d3_time.minute = d3_time_interval(function(date) {
- return new d3_date(Math.floor(date / 6e4) * 6e4);
- }, function(date, offset) {
- date.setTime(date.getTime() + Math.floor(offset) * 6e4);
- }, function(date) {
- return date.getMinutes();
- });
- d3_time.minutes = d3_time.minute.range;
- d3_time.minutes.utc = d3_time.minute.utc.range;
- d3_time.hour = d3_time_interval(function(date) {
- var timezone = date.getTimezoneOffset() / 60;
- return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);
- }, function(date, offset) {
- date.setTime(date.getTime() + Math.floor(offset) * 36e5);
- }, function(date) {
- return date.getHours();
- });
- d3_time.hours = d3_time.hour.range;
- d3_time.hours.utc = d3_time.hour.utc.range;
- d3_time.month = d3_time_interval(function(date) {
- date = d3_time.day(date);
- date.setDate(1);
- return date;
- }, function(date, offset) {
- date.setMonth(date.getMonth() + offset);
- }, function(date) {
- return date.getMonth();
- });
- d3_time.months = d3_time.month.range;
- d3_time.months.utc = d3_time.month.utc.range;
- function d3_time_scale(linear, methods, format) {
- function scale(x) {
- return linear(x);
- }
- scale.invert = function(x) {
- return d3_time_scaleDate(linear.invert(x));
- };
- scale.domain = function(x) {
- if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
- linear.domain(x);
- return scale;
- };
- function tickMethod(extent, count) {
- var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target);
- return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) {
- return d / 31536e6;
- }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i];
- }
- scale.nice = function(interval, skip) {
- var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" && tickMethod(extent, interval);
- if (method) interval = method[0], skip = method[1];
- function skipped(date) {
- return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length;
- }
- return scale.domain(d3_scale_nice(domain, skip > 1 ? {
- floor: function(date) {
- while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1);
- return date;
- },
- ceil: function(date) {
- while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1);
- return date;
- }
- } : interval));
- };
- scale.ticks = function(interval, skip) {
- var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" ? tickMethod(extent, interval) : !interval.range && [ {
- range: interval
- }, skip ];
- if (method) interval = method[0], skip = method[1];
- return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip);
- };
- scale.tickFormat = function() {
- return format;
- };
- scale.copy = function() {
- return d3_time_scale(linear.copy(), methods, format);
- };
- return d3_scale_linearRebind(scale, linear);
- }
- function d3_time_scaleDate(t) {
- return new Date(t);
- }
- var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ];
- var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ];
- var d3_time_scaleLocalFormat = d3_time_format.multi([ [ ".%L", function(d) {
- return d.getMilliseconds();
- } ], [ ":%S", function(d) {
- return d.getSeconds();
- } ], [ "%I:%M", function(d) {
- return d.getMinutes();
- } ], [ "%I %p", function(d) {
- return d.getHours();
- } ], [ "%a %d", function(d) {
- return d.getDay() && d.getDate() != 1;
- } ], [ "%b %d", function(d) {
- return d.getDate() != 1;
- } ], [ "%B", function(d) {
- return d.getMonth();
- } ], [ "%Y", d3_true ] ]);
- var d3_time_scaleMilliseconds = {
- range: function(start, stop, step) {
- return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate);
- },
- floor: d3_identity,
- ceil: d3_identity
- };
- d3_time_scaleLocalMethods.year = d3_time.year;
- d3_time.scale = function() {
- return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
- };
- var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) {
- return [ m[0].utc, m[1] ];
- });
- var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ ".%L", function(d) {
- return d.getUTCMilliseconds();
- } ], [ ":%S", function(d) {
- return d.getUTCSeconds();
- } ], [ "%I:%M", function(d) {
- return d.getUTCMinutes();
- } ], [ "%I %p", function(d) {
- return d.getUTCHours();
- } ], [ "%a %d", function(d) {
- return d.getUTCDay() && d.getUTCDate() != 1;
- } ], [ "%b %d", function(d) {
- return d.getUTCDate() != 1;
- } ], [ "%B", function(d) {
- return d.getUTCMonth();
- } ], [ "%Y", d3_true ] ]);
- d3_time_scaleUtcMethods.year = d3_time.year.utc;
- d3_time.scale.utc = function() {
- return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat);
- };
- d3.text = d3_xhrType(function(request) {
- return request.responseText;
- });
- d3.json = function(url, callback) {
- return d3_xhr(url, "application/json", d3_json, callback);
- };
- function d3_json(request) {
- return JSON.parse(request.responseText);
- }
- d3.html = function(url, callback) {
- return d3_xhr(url, "text/html", d3_html, callback);
- };
- function d3_html(request) {
- var range = d3_document.createRange();
- range.selectNode(d3_document.body);
- return range.createContextualFragment(request.responseText);
- }
- d3.xml = d3_xhrType(function(request) {
- return request.responseXML;
- });
- if (typeof define === "function" && define.amd) define(d3); else if (typeof module === "object" && module.exports) module.exports = d3;
- this.d3 = d3;
-}(); \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/tp/d3.min.js b/framework/src/onos/web/gui/src/main/webapp/tp/d3.min.js
deleted file mode 100644
index b4943ee4..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tp/d3.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-!function(){function n(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function t(n){return null!=n&&!isNaN(n)}function e(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function r(n){return n.length}function u(n){for(var t=1;n*t%1;)t*=10;return t}function i(n,t){try{for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}catch(r){n.prototype=t}}function o(){}function a(n){return oa+n in this}function c(n){return n=oa+n,n in this&&delete this[n]}function l(){var n=[];return this.forEach(function(t){n.push(t)}),n}function s(){var n=0;for(var t in this)t.charCodeAt(0)===aa&&++n;return n}function f(){for(var n in this)if(n.charCodeAt(0)===aa)return!1;return!0}function h(){}function g(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function p(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=ca.length;r>e;++e){var u=ca[e]+t;if(u in n)return u}}function v(){}function d(){}function m(n){function t(){for(var t,r=e,u=-1,i=r.length;++u<i;)(t=r[u].on)&&t.apply(this,arguments);return n}var e=[],r=new o;return t.on=function(t,u){var i,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,i=e.indexOf(o)).concat(e.slice(i+1)),r.remove(t)),u&&e.push(r.set(t,{on:u})),n)},t}function y(){Vo.event.preventDefault()}function x(){for(var n,t=Vo.event;n=t.sourceEvent;)t=n;return t}function M(n){for(var t=new d,e=0,r=arguments.length;++e<r;)t[arguments[e]]=m(t);return t.of=function(e,r){return function(u){try{var i=u.sourceEvent=Vo.event;u.target=n,Vo.event=u,t[u.type].apply(e,r)}finally{Vo.event=i}}},t}function _(n){return sa(n,va),n}function b(n){return"function"==typeof n?n:function(){return fa(n,this)}}function w(n){return"function"==typeof n?n:function(){return ha(n,this)}}function S(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function u(){this.setAttribute(n,t)}function i(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=Vo.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?i:u}function k(n){return n.trim().replace(/\s+/g," ")}function E(n){return new RegExp("(?:^|\\s+)"+Vo.requote(n)+"(?:\\s+|$)","g")}function A(n){return(n+"").trim().split(/^|\s+/)}function C(n,t){function e(){for(var e=-1;++e<u;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<u;)n[e](this,r)}n=A(n).map(N);var u=n.length;return"function"==typeof t?r:e}function N(n){var t=E(n);return function(e,r){if(u=e.classList)return r?u.add(n):u.remove(n);var u=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(u)||e.setAttribute("class",k(u+" "+n))):e.setAttribute("class",k(u.replace(t," ")))}}function z(n,t,e){function r(){this.style.removeProperty(n)}function u(){this.style.setProperty(n,t,e)}function i(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?i:u}function L(n,t){function e(){delete this[n]}function r(){this[n]=t}function u(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?u:r}function T(n){return"function"==typeof n?n:(n=Vo.ns.qualify(n)).local?function(){return this.ownerDocument.createElementNS(n.space,n.local)}:function(){return this.ownerDocument.createElementNS(this.namespaceURI,n)}}function q(n){return{__data__:n}}function R(n){return function(){return pa(this,n)}}function D(t){return arguments.length||(t=n),function(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}}function P(n,t){for(var e=0,r=n.length;r>e;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function U(n){return sa(n,ma),n}function j(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t<c;);return o}}function H(){var n=this.__transition__;n&&++n.active}function F(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function u(){var u=c(t,$o(arguments));r.call(this),this.addEventListener(n,this[o]=u,u.$=e),u._=t}function i(){var t,e=new RegExp("^__on([^.]+)"+Vo.requote(n)+"$");for(var r in this)if(t=r.match(e)){var u=this[r];this.removeEventListener(t[1],u,u.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),c=O;a>0&&(n=n.slice(0,a));var l=xa.get(n);return l&&(n=l,c=Y),a?t?u:r:t?v:i}function O(n,t){return function(e){var r=Vo.event;Vo.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{Vo.event=r}}}function Y(n,t){var e=O(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function I(){var n=".dragsuppress-"+ ++_a,t="click"+n,e=Vo.select(Jo).on("touchmove"+n,y).on("dragstart"+n,y).on("selectstart"+n,y);if(Ma){var r=Wo.style,u=r[Ma];r[Ma]="none"}return function(i){function o(){e.on(t,null)}e.on(n,null),Ma&&(r[Ma]=u),i&&(e.on(t,function(){y(),o()},!0),setTimeout(o,0))}}function Z(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>ba&&(Jo.scrollX||Jo.scrollY)){e=Vo.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var u=e[0][0].getScreenCTM();ba=!(u.f||u.e),e.remove()}return ba?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var i=n.getBoundingClientRect();return[t.clientX-i.left-n.clientLeft,t.clientY-i.top-n.clientTop]}function V(){return Vo.event.changedTouches[0].identifier}function X(){return Vo.event.target}function $(){return Jo}function B(n){return n>0?1:0>n?-1:0}function W(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function J(n){return n>1?0:-1>n?wa:Math.acos(n)}function G(n){return n>1?ka:-1>n?-ka:Math.asin(n)}function K(n){return((n=Math.exp(n))-1/n)/2}function Q(n){return((n=Math.exp(n))+1/n)/2}function nt(n){return((n=Math.exp(2*n))-1)/(n+1)}function tt(n){return(n=Math.sin(n/2))*n}function et(){}function rt(n,t,e){return this instanceof rt?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof rt?new rt(n.h,n.s,n.l):mt(""+n,yt,rt):new rt(n,t,e)}function ut(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,new gt(u(n+120),u(n),u(n-120))}function it(n,t,e){return this instanceof it?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof it?new it(n.h,n.c,n.l):n instanceof at?lt(n.l,n.a,n.b):lt((n=xt((n=Vo.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new it(n,t,e)}function ot(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new at(e,Math.cos(n*=Ca)*t,Math.sin(n)*t)}function at(n,t,e){return this instanceof at?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof at?new at(n.l,n.a,n.b):n instanceof it?ot(n.l,n.c,n.h):xt((n=gt(n)).r,n.g,n.b):new at(n,t,e)}function ct(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=st(u)*Ha,r=st(r)*Fa,i=st(i)*Oa,new gt(ht(3.2404542*u-1.5371385*r-.4985314*i),ht(-.969266*u+1.8760108*r+.041556*i),ht(.0556434*u-.2040259*r+1.0572252*i))}function lt(n,t,e){return n>0?new it(Math.atan2(e,t)*Na,Math.sqrt(t*t+e*e),n):new it(0/0,0/0,n)}function st(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function ft(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function ht(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function gt(n,t,e){return this instanceof gt?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof gt?new gt(n.r,n.g,n.b):mt(""+n,gt,ut):new gt(n,t,e)}function pt(n){return new gt(n>>16,255&n>>8,255&n)}function vt(n){return pt(n)+""}function dt(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function mt(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(_t(u[0]),_t(u[1]),_t(u[2]))}return(i=Za.get(n))?t(i.r,i.g,i.b):(null==n||"#"!==n.charAt(0)||isNaN(i=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&i)>>4,o=o>>4|o,a=240&i,a=a>>4|a,c=15&i,c=c<<4|c):7===n.length&&(o=(16711680&i)>>16,a=(65280&i)>>8,c=255&i)),t(o,a,c))}function yt(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),new rt(r,u,c)}function xt(n,t,e){n=Mt(n),t=Mt(t),e=Mt(e);var r=ft((.4124564*n+.3575761*t+.1804375*e)/Ha),u=ft((.2126729*n+.7151522*t+.072175*e)/Fa),i=ft((.0193339*n+.119192*t+.9503041*e)/Oa);return at(116*u-16,500*(r-u),200*(u-i))}function Mt(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function _t(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function bt(n){return"function"==typeof n?n:function(){return n}}function wt(n){return n}function St(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),kt(t,e,n,r)}}function kt(n,t,e,r){function u(){var n,t=c.status;if(!t&&At(c)||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return o.error.call(i,r),void 0}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=Vo.dispatch("beforesend","progress","load","error"),a={},c=new XMLHttpRequest,l=null;return!Jo.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=Vo.event;Vo.event=n;try{o.progress.call(i,c)}finally{Vo.event=t}},i.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",i):t},i.responseType=function(n){return arguments.length?(l=n,i):l},i.response=function(n){return e=n,i},["get","post"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat($o(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&"function"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),c.setRequestHeader)for(var s in a)c.setRequestHeader(s,a[s]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=l&&(c.responseType=l),null!=u&&i.on("error",u).on("load",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},Vo.rebind(i,o,"on"),null==r?i:i.get(Et(r))}function Et(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function At(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function Ct(){var n=Nt(),t=zt()-n;t>24?(isFinite(t)&&(clearTimeout(Ba),Ba=setTimeout(Ct,t)),$a=0):($a=1,Ja(Ct))}function Nt(){var n=Date.now();for(Wa=Va;Wa;)n>=Wa.t&&(Wa.f=Wa.c(n-Wa.t)),Wa=Wa.n;return n}function zt(){for(var n,t=Va,e=1/0;t;)t.f?t=n?n.n=t.n:Va=t.n:(t.t<e&&(e=t.t),t=(n=t).n);return Xa=n,e}function Lt(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Tt(n,t){var e=Math.pow(10,3*ia(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function qt(n){var t=n.decimal,e=n.thousands,r=n.grouping,u=n.currency,i=r?function(n){for(var t=n.length,u=[],i=0,o=r[0];o>0&&t>0;)u.push(n.substring(t-=o,t+o)),o=r[i=(i+1)%r.length];return u.reverse().join(e)}:wt;return function(n){var e=Ka.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"",c=e[4]||"",l=e[5],s=+e[6],f=e[7],h=e[8],g=e[9],p=1,v="",d="",m=!1;switch(h&&(h=+h.substring(1)),(l||"0"===r&&"="===o)&&(l=r="0",o="=",f&&(s-=Math.floor((s-1)/4))),g){case"n":f=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+g.toLowerCase());case"c":case"d":m=!0,h=0;break;case"s":p=-1,g="r"}"$"===c&&(v=u[0],d=u[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):("e"==g||"f"==g)&&(h=Math.max(0,Math.min(20,h)))),g=Qa.get(g)||Rt;var y=l&&f;return function(n){var e=d;if(m&&n%1)return"";var u=0>n||0===n&&0>1/n?(n=-n,"-"):a;if(0>p){var c=Vo.formatPrefix(n,h);n=c.scale(n),e=c.symbol+d}else n*=p;n=g(n,h);var x=n.lastIndexOf("."),M=0>x?n:n.substring(0,x),_=0>x?"":t+n.substring(x+1);!l&&f&&(M=i(M));var b=v.length+M.length+_.length+(y?0:u.length),w=s>b?new Array(b=s-b+1).join(r):"";return y&&(M=i(w+M)),u+=v,n=M+_,("<"===o?u+n+w:">"===o?w+u+n:"^"===o?w.substring(0,b>>=1)+u+n+w.substring(b):u+(y?n:w+n))+e}}}function Rt(n){return n+""}function Dt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Pt(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new tc(e-1)),1),e}function i(n,e){return t(n=new tc(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{tc=Dt;var r=new Dt;return r._=n,o(r,t,e)}finally{tc=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Ut(n);return c.floor=c,c.round=Ut(r),c.ceil=Ut(u),c.offset=Ut(i),c.range=a,n}function Ut(n){return function(t,e){try{tc=Dt;var r=new Dt;return r._=t,n(r,e)._}finally{tc=Date}}}function jt(n){function t(n){function t(t){for(var e,u,i,o=[],a=-1,c=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(c,a)),null!=(u=rc[e=n.charAt(++a)])&&(e=n.charAt(++a)),(i=C[e])&&(e=i(t,null==u?"e"===e?" ":"0":u)),o.push(e),c=a+1);return o.push(n.slice(c,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},u=e(r,n,t,0);if(u!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var i=null!=r.Z&&tc!==Dt,o=new(i?Dt:tc);return"j"in r?o.setFullYear(r.y,0,r.j):"w"in r&&("W"in r||"U"in r)?(o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(0|r.Z/100),r.M+r.Z%100,r.S,r.L),i?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var u,i,o,a=0,c=t.length,l=e.length;c>a;){if(r>=l)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=N[o in rc?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){b.lastIndex=0;var r=b.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){M.lastIndex=0;var r=M.exec(t.slice(e));return r?(n.w=_.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){E.lastIndex=0;var r=E.exec(t.slice(e));return r?(n.m=A.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,C.c.toString(),t,r)}function c(n,t,r){return e(n,C.x.toString(),t,r)}function l(n,t,r){return e(n,C.X.toString(),t,r)}function s(n,t,e){var r=x.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var f=n.dateTime,h=n.date,g=n.time,p=n.periods,v=n.days,d=n.shortDays,m=n.months,y=n.shortMonths;t.utc=function(n){function e(n){try{tc=Dt;var t=new tc;return t._=n,r(t)}finally{tc=Date}}var r=t(n);return e.parse=function(n){try{tc=Dt;var t=r.parse(n);return t&&t._}finally{tc=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ue;var x=Vo.map(),M=Ft(v),_=Ot(v),b=Ft(d),w=Ot(d),S=Ft(m),k=Ot(m),E=Ft(y),A=Ot(y);p.forEach(function(n,t){x.set(n.toLowerCase(),t)});var C={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return y[n.getMonth()]},B:function(n){return m[n.getMonth()]},c:t(f),d:function(n,t){return Ht(n.getDate(),t,2)},e:function(n,t){return Ht(n.getDate(),t,2)},H:function(n,t){return Ht(n.getHours(),t,2)},I:function(n,t){return Ht(n.getHours()%12||12,t,2)},j:function(n,t){return Ht(1+nc.dayOfYear(n),t,3)},L:function(n,t){return Ht(n.getMilliseconds(),t,3)},m:function(n,t){return Ht(n.getMonth()+1,t,2)},M:function(n,t){return Ht(n.getMinutes(),t,2)},p:function(n){return p[+(n.getHours()>=12)]},S:function(n,t){return Ht(n.getSeconds(),t,2)},U:function(n,t){return Ht(nc.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Ht(nc.mondayOfYear(n),t,2)},x:t(h),X:t(g),y:function(n,t){return Ht(n.getFullYear()%100,t,2)},Y:function(n,t){return Ht(n.getFullYear()%1e4,t,4)},Z:ee,"%":function(){return"%"}},N={a:r,A:u,b:i,B:o,c:a,d:Jt,e:Jt,H:Kt,I:Kt,j:Gt,L:te,m:Wt,M:Qt,p:s,S:ne,U:It,w:Yt,W:Zt,x:c,X:l,y:Xt,Y:Vt,Z:$t,"%":re};return t}function Ht(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function Ft(n){return new RegExp("^(?:"+n.map(Vo.requote).join("|")+")","i")}function Ot(n){for(var t=new o,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function Yt(n,t,e){uc.lastIndex=0;var r=uc.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function It(n,t,e){uc.lastIndex=0;var r=uc.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Zt(n,t,e){uc.lastIndex=0;var r=uc.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Vt(n,t,e){uc.lastIndex=0;var r=uc.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Xt(n,t,e){uc.lastIndex=0;var r=uc.exec(t.slice(e,e+2));return r?(n.y=Bt(+r[0]),e+r[0].length):-1}function $t(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Bt(n){return n+(n>68?1900:2e3)}function Wt(n,t,e){uc.lastIndex=0;var r=uc.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Jt(n,t,e){uc.lastIndex=0;var r=uc.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function Gt(n,t,e){uc.lastIndex=0;var r=uc.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function Kt(n,t,e){uc.lastIndex=0;var r=uc.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function Qt(n,t,e){uc.lastIndex=0;var r=uc.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ne(n,t,e){uc.lastIndex=0;var r=uc.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function te(n,t,e){uc.lastIndex=0;var r=uc.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function ee(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=0|ia(t)/60,u=ia(t)%60;return e+Ht(r,"0",2)+Ht(u,"0",2)}function re(n,t,e){ic.lastIndex=0;var r=ic.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ue(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ie(){}function oe(n,t,e){var r=e.s=n+t,u=r-n,i=r-u;e.t=n-i+(t-u)}function ae(n,t){n&&lc.hasOwnProperty(n.type)&&lc[n.type](n,t)}function ce(n,t,e){var r,u=-1,i=n.length-e;for(t.lineStart();++u<i;)r=n[u],t.point(r[0],r[1],r[2]);t.lineEnd()}function le(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)ce(n[e],t,1);t.polygonEnd()}function se(){function n(n,t){n*=Ca,t=t*Ca/2+wa/4;var e=n-r,o=e>=0?1:-1,a=o*e,c=Math.cos(t),l=Math.sin(t),s=i*l,f=u*c+s*Math.cos(a),h=s*o*Math.sin(a);fc.add(Math.atan2(h,f)),r=n,u=c,i=l}var t,e,r,u,i;hc.point=function(o,a){hc.point=n,r=(t=o)*Ca,u=Math.cos(a=(e=a)*Ca/2+wa/4),i=Math.sin(a)},hc.lineEnd=function(){n(t,e)}}function fe(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function he(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function ge(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function pe(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function ve(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function de(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function me(n){return[Math.atan2(n[1],n[0]),G(n[2])]}function ye(n,t){return ia(n[0]-t[0])<Ea&&ia(n[1]-t[1])<Ea}function xe(n,t){n*=Ca;var e=Math.cos(t*=Ca);Me(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function Me(n,t,e){++gc,vc+=(n-vc)/gc,dc+=(t-dc)/gc,mc+=(e-mc)/gc}function _e(){function n(n,u){n*=Ca;var i=Math.cos(u*=Ca),o=i*Math.cos(n),a=i*Math.sin(n),c=Math.sin(u),l=Math.atan2(Math.sqrt((l=e*c-r*a)*l+(l=r*o-t*c)*l+(l=t*a-e*o)*l),t*o+e*a+r*c);pc+=l,yc+=l*(t+(t=o)),xc+=l*(e+(e=a)),Mc+=l*(r+(r=c)),Me(t,e,r)}var t,e,r;Sc.point=function(u,i){u*=Ca;var o=Math.cos(i*=Ca);t=o*Math.cos(u),e=o*Math.sin(u),r=Math.sin(i),Sc.point=n,Me(t,e,r)}}function be(){Sc.point=xe}function we(){function n(n,t){n*=Ca;var e=Math.cos(t*=Ca),o=e*Math.cos(n),a=e*Math.sin(n),c=Math.sin(t),l=u*c-i*a,s=i*o-r*c,f=r*a-u*o,h=Math.sqrt(l*l+s*s+f*f),g=r*o+u*a+i*c,p=h&&-J(g)/h,v=Math.atan2(h,g);_c+=p*l,bc+=p*s,wc+=p*f,pc+=v,yc+=v*(r+(r=o)),xc+=v*(u+(u=a)),Mc+=v*(i+(i=c)),Me(r,u,i)}var t,e,r,u,i;Sc.point=function(o,a){t=o,e=a,Sc.point=n,o*=Ca;var c=Math.cos(a*=Ca);r=c*Math.cos(o),u=c*Math.sin(o),i=Math.sin(a),Me(r,u,i)},Sc.lineEnd=function(){n(t,e),Sc.lineEnd=be,Sc.point=xe}}function Se(){return!0}function ke(n,t,e,r,u){var i=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(ye(e,r)){u.lineStart();for(var a=0;t>a;++a)u.point((e=n[a])[0],e[1]);return u.lineEnd(),void 0}var c=new Ae(e,n,null,!0),l=new Ae(e,null,c,!1);c.o=l,i.push(c),o.push(l),c=new Ae(r,n,null,!1),l=new Ae(r,null,c,!0),c.o=l,i.push(c),o.push(l)}}),o.sort(t),Ee(i),Ee(o),i.length){for(var a=0,c=e,l=o.length;l>a;++a)o[a].e=c=!c;for(var s,f,h=i[0];;){for(var g=h,p=!0;g.v;)if((g=g.n)===h)return;s=g.z,u.lineStart();do{if(g.v=g.o.v=!0,g.e){if(p)for(var a=0,l=s.length;l>a;++a)u.point((f=s[a])[0],f[1]);else r(g.x,g.n.x,1,u);g=g.n}else{if(p){s=g.p.z;for(var a=s.length-1;a>=0;--a)u.point((f=s[a])[0],f[1])}else r(g.x,g.p.x,-1,u);g=g.p}g=g.o,s=g.z,p=!p}while(!g.v);u.lineEnd()}}}function Ee(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r<t;)u.n=e=n[r],e.p=u,u=e;u.n=e=n[0],e.p=u}}function Ae(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Ce(n,t,e,r){return function(u,i){function o(t,e){var r=u(t,e);n(t=r[0],e=r[1])&&i.point(t,e)}function a(n,t){var e=u(n,t);d.point(e[0],e[1])}function c(){y.point=a,d.lineStart()}function l(){y.point=o,d.lineEnd()}function s(n,t){v.push([n,t]);var e=u(n,t);M.point(e[0],e[1])}function f(){M.lineStart(),v=[]}function h(){s(v[0][0],v[0][1]),M.lineEnd();var n,t=M.clean(),e=x.buffer(),r=e.length;if(v.pop(),p.push(v),v=null,r)if(1&t){n=e[0];var u,r=n.length-1,o=-1;if(r>0){for(_||(i.polygonStart(),_=!0),i.lineStart();++o<r;)i.point((u=n[o])[0],u[1]);i.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(Ne))}var g,p,v,d=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:l,polygonStart:function(){y.point=s,y.lineStart=f,y.lineEnd=h,g=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=l,g=Vo.merge(g);var n=De(m,p);g.length?(_||(i.polygonStart(),_=!0),ke(g,Le,n,e,i)):n&&(_||(i.polygonStart(),_=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),_&&(i.polygonEnd(),_=!1),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},x=ze(),M=t(x),_=!1;return y}}function Ne(n){return n.length>1}function ze(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:v,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Le(n,t){return((n=n.x)[0]<0?n[1]-ka-Ea:ka-n[1])-((t=t.x)[0]<0?t[1]-ka-Ea:ka-t[1])}function Te(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?wa:-wa,c=ia(i-e);ia(c-wa)<Ea?(n.point(e,r=(r+o)/2>0?ka:-ka),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=wa&&(ia(e-u)<Ea&&(e-=u*Ea),ia(i-a)<Ea&&(i-=a*Ea),r=qe(e,r,i,o),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=i,r=o),u=a},lineEnd:function(){n.lineEnd(),e=r=0/0},clean:function(){return 2-t}}}function qe(n,t,e,r){var u,i,o=Math.sin(n-e);return ia(o)>Ea?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function Re(n,t,e,r){var u;if(null==n)u=e*ka,r.point(-wa,u),r.point(0,u),r.point(wa,u),r.point(wa,0),r.point(wa,-u),r.point(0,-u),r.point(-wa,-u),r.point(-wa,0),r.point(-wa,u);else if(ia(n[0]-t[0])>Ea){var i=n[0]<t[0]?wa:-wa;u=e*i/2,r.point(-i,u),r.point(0,u),r.point(i,u)}else r.point(t[0],t[1])}function De(n,t){var e=n[0],r=n[1],u=[Math.sin(e),-Math.cos(e),0],i=0,o=0;fc.reset();for(var a=0,c=t.length;c>a;++a){var l=t[a],s=l.length;if(s)for(var f=l[0],h=f[0],g=f[1]/2+wa/4,p=Math.sin(g),v=Math.cos(g),d=1;;){d===s&&(d=0),n=l[d];var m=n[0],y=n[1]/2+wa/4,x=Math.sin(y),M=Math.cos(y),_=m-h,b=_>=0?1:-1,w=b*_,S=w>wa,k=p*x;if(fc.add(Math.atan2(k*b*Math.sin(w),v*M+k*Math.cos(w))),i+=S?_+b*Sa:_,S^h>=e^m>=e){var E=ge(fe(f),fe(n));de(E);var A=ge(u,E);de(A);var C=(S^_>=0?-1:1)*G(A[2]);(r>C||r===C&&(E[0]||E[1]))&&(o+=S^_>=0?1:-1)}if(!d++)break;h=m,p=x,v=M,f=n}}return(-Ea>i||Ea>i&&0>fc)^1&o}function Pe(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function e(n){var e,i,c,l,s;return{lineStart:function(){l=c=!1,s=1},point:function(f,h){var g,p=[f,h],v=t(f,h),d=o?v?0:u(f,h):v?u(f+(0>f?wa:-wa),h):0;if(!e&&(l=c=v)&&n.lineStart(),v!==c&&(g=r(e,p),(ye(e,g)||ye(p,g))&&(p[0]+=Ea,p[1]+=Ea,v=t(p[0],p[1]))),v!==c)s=0,v?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^v){var m;d&i||!(m=r(p,e,!0))||(s=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!v||e&&ye(e,p)||n.point(p[0],p[1]),e=p,c=v,i=d},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return s|(l&&c)<<1}}}function r(n,t,e){var r=fe(n),u=fe(t),o=[1,0,0],a=ge(r,u),c=he(a,a),l=a[0],s=c-l*l;if(!s)return!e&&n;var f=i*c/s,h=-i*l/s,g=ge(o,a),p=ve(o,f),v=ve(a,h);pe(p,v);var d=g,m=he(p,d),y=he(d,d),x=m*m-y*(he(p,p)-1);if(!(0>x)){var M=Math.sqrt(x),_=ve(d,(-m-M)/y);if(pe(_,p),_=me(_),!e)return _;var b,w=n[0],S=t[0],k=n[1],E=t[1];w>S&&(b=w,w=S,S=b);var A=S-w,C=ia(A-wa)<Ea,N=C||Ea>A;if(!C&&k>E&&(b=k,k=E,E=b),N?C?k+E>0^_[1]<(ia(_[0]-w)<Ea?k:E):k<=_[1]&&_[1]<=E:A>wa^(w<=_[0]&&_[0]<=S)){var z=ve(d,(-m+M)/y);return pe(z,p),[_,me(z)]}}}function u(t,e){var r=o?n:wa-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=ia(i)>Ea,c=sr(n,6*Ca);return Ce(t,e,c,o?[0,-n]:[-wa,n-wa])}function Ue(n,t,e,r){return function(u){var i,o=u.a,a=u.b,c=o.x,l=o.y,s=a.x,f=a.y,h=0,g=1,p=s-c,v=f-l;if(i=n-c,p||!(i>0)){if(i/=p,0>p){if(h>i)return;g>i&&(g=i)}else if(p>0){if(i>g)return;i>h&&(h=i)}if(i=e-c,p||!(0>i)){if(i/=p,0>p){if(i>g)return;i>h&&(h=i)}else if(p>0){if(h>i)return;g>i&&(g=i)}if(i=t-l,v||!(i>0)){if(i/=v,0>v){if(h>i)return;g>i&&(g=i)}else if(v>0){if(i>g)return;i>h&&(h=i)}if(i=r-l,v||!(0>i)){if(i/=v,0>v){if(i>g)return;i>h&&(h=i)}else if(v>0){if(h>i)return;g>i&&(g=i)}return h>0&&(u.a={x:c+h*p,y:l+h*v}),1>g&&(u.b={x:c+g*p,y:l+g*v}),u}}}}}}function je(n,t,e,r){function u(r,u){return ia(r[0]-n)<Ea?u>0?0:3:ia(r[0]-e)<Ea?u>0?2:1:ia(r[1]-t)<Ea?u>0?1:0:u>0?3:2}function i(n,t){return o(n.x,t.x)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function c(n){for(var t=0,e=d.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=d[u],c=a.length,l=a[0];c>o;++o)i=a[o],l[1]<=r?i[1]>r&&W(l,i,n)>0&&++t:i[1]<=r&&W(l,i,n)<0&&--t,l=i;return 0!==t}function l(i,a,c,l){var s=0,f=0;if(null==i||(s=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do l.point(0===s||3===s?n:e,s>1?r:t);while((s=(s+c+4)%4)!==f)}else l.point(a[0],a[1])}function s(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function f(n,t){s(n,t)&&a.point(n,t)}function h(){N.point=p,d&&d.push(m=[]),S=!0,w=!1,_=b=0/0}function g(){v&&(p(y,x),M&&w&&A.rejoin(),v.push(A.buffer())),N.point=f,w&&a.lineEnd()}function p(n,t){n=Math.max(-Ec,Math.min(Ec,n)),t=Math.max(-Ec,Math.min(Ec,t));var e=s(n,t);if(d&&m.push([n,t]),S)y=n,x=t,M=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:_,y:b},b:{x:n,y:t}};C(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}_=n,b=t,w=e}var v,d,m,y,x,M,_,b,w,S,k,E=a,A=ze(),C=Ue(n,t,e,r),N={point:f,lineStart:h,lineEnd:g,polygonStart:function(){a=A,v=[],d=[],k=!0},polygonEnd:function(){a=E,v=Vo.merge(v);var t=c([n,r]),e=k&&t,u=v.length;(e||u)&&(a.polygonStart(),e&&(a.lineStart(),l(null,null,1,a),a.lineEnd()),u&&ke(v,i,t,l,a),a.polygonEnd()),v=d=m=null}};return N}}function He(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function Fe(n){var t=0,e=wa/3,r=er(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*wa/180,e=n[1]*wa/180):[180*(t/wa),180*(e/wa)]},u}function Oe(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,G((i-(n*n+e*e)*u*u)/(2*u))]},e}function Ye(){function n(n,t){Cc+=u*n-r*t,r=n,u=t}var t,e,r,u;qc.point=function(i,o){qc.point=n,t=r=i,e=u=o},qc.lineEnd=function(){n(t,e)}}function Ie(n,t){Nc>n&&(Nc=n),n>Lc&&(Lc=n),zc>t&&(zc=t),t>Tc&&(Tc=t)}function Ze(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function u(){o.push("Z")}var i=Ve(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=Ve(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Ve(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Xe(n,t){vc+=n,dc+=t,++mc}function $e(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);yc+=o*(t+n)/2,xc+=o*(e+r)/2,Mc+=o,Xe(t=n,e=r)}var t,e;Dc.point=function(r,u){Dc.point=n,Xe(t=r,e=u)}}function Be(){Dc.point=Xe}function We(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);yc+=o*(r+n)/2,xc+=o*(u+t)/2,Mc+=o,o=u*n-r*t,_c+=o*(r+n),bc+=o*(u+t),wc+=3*o,Xe(r=n,u=t)}var t,e,r,u;Dc.point=function(i,o){Dc.point=n,Xe(t=r=i,e=u=o)},Dc.lineEnd=function(){n(t,e)}}function Je(n){function t(t,e){n.moveTo(t,e),n.arc(t,e,o,0,Sa)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:v};return a}function Ge(n){function t(n){return(a?r:e)(n)}function e(t){return nr(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){x=0/0,S.point=i,t.lineStart()}function i(e,r){var i=fe([e,r]),o=n(e,r);u(x,M,y,_,b,w,x=o[0],M=o[1],y=e,_=i[0],b=i[1],w=i[2],a,t),t.point(x,M)}function o(){S.point=e,t.lineEnd()}function c(){r(),S.point=l,S.lineEnd=s}function l(n,t){i(f=n,h=t),g=x,p=M,v=_,d=b,m=w,S.point=i}function s(){u(x,M,y,_,b,w,g,p,f,v,d,m,a,t),S.lineEnd=o,o()}var f,h,g,p,v,d,m,y,x,M,_,b,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,l,s,f,h,g,p,v,d,m){var y=s-t,x=f-e,M=y*y+x*x;if(M>4*i&&d--){var _=a+g,b=c+p,w=l+v,S=Math.sqrt(_*_+b*b+w*w),k=Math.asin(w/=S),E=ia(ia(w)-1)<Ea||ia(r-h)<Ea?(r+h)/2:Math.atan2(b,_),A=n(E,k),C=A[0],N=A[1],z=C-t,L=N-e,T=x*z-y*L;(T*T/M>i||ia((y*z+x*L)/M-.5)>.3||o>a*g+c*p+l*v)&&(u(t,e,r,a,c,l,C,N,E,_/=S,b/=S,w,d,m),m.point(C,N),u(C,N,E,_,b,w,s,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*Ca),a=16;return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)
-},t}function Ke(n){var t=Ge(function(t,e){return n([t*Na,e*Na])});return function(n){return rr(t(n))}}function Qe(n){this.stream=n}function nr(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function tr(n){return er(function(){return n})()}function er(n){function t(n){return n=a(n[0]*Ca,n[1]*Ca),[n[0]*h+c,l-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(l-n[1])/h),n&&[n[0]*Na,n[1]*Na]}function r(){a=He(o=or(m,y,x),i);var n=i(v,d);return c=g-n[0]*h,l=p+n[1]*h,u()}function u(){return s&&(s.valid=!1,s=null),t}var i,o,a,c,l,s,f=Ge(function(n,t){return n=i(n,t),[n[0]*h+c,l-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,y=0,x=0,M=kc,_=wt,b=null,w=null;return t.stream=function(n){return s&&(s.valid=!1),s=rr(M(o,f(_(n)))),s.valid=!0,s},t.clipAngle=function(n){return arguments.length?(M=null==n?(b=n,kc):Pe((b=+n)*Ca),u()):b},t.clipExtent=function(n){return arguments.length?(w=n,_=n?je(n[0][0],n[0][1],n[1][0],n[1][1]):wt,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*Ca,d=n[1]%360*Ca,r()):[v*Na,d*Na]},t.rotate=function(n){return arguments.length?(m=n[0]%360*Ca,y=n[1]%360*Ca,x=n.length>2?n[2]%360*Ca:0,r()):[m*Na,y*Na,x*Na]},Vo.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function rr(n){return nr(n,function(t,e){n.point(t*Ca,e*Ca)})}function ur(n,t){return[n,t]}function ir(n,t){return[n>wa?n-Sa:-wa>n?n+Sa:n,t]}function or(n,t,e){return n?t||e?He(cr(n),lr(t,e)):cr(n):t||e?lr(t,e):ir}function ar(n){return function(t,e){return t+=n,[t>wa?t-Sa:-wa>t?t+Sa:t,e]}}function cr(n){var t=ar(n);return t.invert=ar(-n),t}function lr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*r+a*u;return[Math.atan2(c*i-s*o,a*r-l*u),G(s*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*i-c*o;return[Math.atan2(c*i+l*o,a*r+s*u),G(s*r-a*u)]},e}function sr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=fr(e,u),i=fr(e,i),(o>0?i>u:u>i)&&(u+=o*Sa)):(u=n+o*Sa,i=n-.5*c);for(var l,s=u;o>0?s>i:i>s;s-=c)a.point((l=me([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],l[1])}}function fr(n,t){var e=fe(t);e[0]-=n,de(e);var r=J(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Ea)%(2*Math.PI)}function hr(n,t,e){var r=Vo.range(n,t-Ea,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function gr(n,t,e){var r=Vo.range(n,t-Ea,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function pr(n){return n.source}function vr(n){return n.target}function dr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),l=u*Math.sin(n),s=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(tt(r-t)+u*o*tt(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*s,u=e*l+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Na,Math.atan2(o,Math.sqrt(r*r+u*u))*Na]}:function(){return[n*Na,t*Na]};return p.distance=h,p}function mr(){function n(n,u){var i=Math.sin(u*=Ca),o=Math.cos(u),a=ia((n*=Ca)-t),c=Math.cos(a);Pc+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Uc.point=function(u,i){t=u*Ca,e=Math.sin(i*=Ca),r=Math.cos(i),Uc.point=n},Uc.lineEnd=function(){Uc.point=Uc.lineEnd=v}}function yr(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function xr(n,t){function e(n,t){o>0?-ka+Ea>t&&(t=-ka+Ea):t>ka-Ea&&(t=ka-Ea);var e=o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(wa/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=B(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-ka]},e):_r}function Mr(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return ia(u)<Ea?ur:(e.invert=function(n,t){var e=i-t;return[Math.atan2(n,e)/u,i-B(u)*Math.sqrt(n*n+e*e)]},e)}function _r(n,t){return[n,Math.log(Math.tan(wa/4+t/2))]}function br(n){var t,e=tr(n),r=e.scale,u=e.translate,i=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=u.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=i.apply(e,arguments);if(o===e){if(t=null==n){var a=wa*r(),c=u();i([[c[0]-a,c[1]-a],[c[0]+a,c[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function wr(n,t){return[Math.log(Math.tan(wa/4+t/2)),-n]}function Sr(n){return n[0]}function kr(n){return n[1]}function Er(n){for(var t=n.length,e=[0,1],r=2,u=2;t>u;u++){for(;r>1&&W(n[e[r-2]],n[e[r-1]],n[u])<=0;)--r;e[r++]=u}return e.slice(0,r)}function Ar(n,t){return n[0]-t[0]||n[1]-t[1]}function Cr(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Nr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],l=e[1],s=t[1]-c,f=r[1]-l,h=(a*(c-l)-f*(u-i))/(f*o-a*s);return[u+h*o,c+h*s]}function zr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Lr(){Kr(this),this.edge=this.site=this.circle=null}function Tr(n){var t=Wc.pop()||new Lr;return t.site=n,t}function qr(n){Ir(n),Xc.remove(n),Wc.push(n),Kr(n)}function Rr(n){var t=n.circle,e=t.x,r=t.cy,u={x:e,y:r},i=n.P,o=n.N,a=[n];qr(n);for(var c=i;c.circle&&ia(e-c.circle.x)<Ea&&ia(r-c.circle.cy)<Ea;)i=c.P,a.unshift(c),qr(c),c=i;a.unshift(c),Ir(c);for(var l=o;l.circle&&ia(e-l.circle.x)<Ea&&ia(r-l.circle.cy)<Ea;)o=l.N,a.push(l),qr(l),l=o;a.push(l),Ir(l);var s,f=a.length;for(s=1;f>s;++s)l=a[s],c=a[s-1],Wr(l.edge,c.site,l.site,u);c=a[0],l=a[f-1],l.edge=$r(c.site,l.site,null,u),Yr(c),Yr(l)}function Dr(n){for(var t,e,r,u,i=n.x,o=n.y,a=Xc._;a;)if(r=Pr(a,o)-i,r>Ea)a=a.L;else{if(u=i-Ur(a,o),!(u>Ea)){r>-Ea?(t=a.P,e=a):u>-Ea?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var c=Tr(n);if(Xc.insert(t,c),t||e){if(t===e)return Ir(t),e=Tr(t.site),Xc.insert(c,e),c.edge=e.edge=$r(t.site,c.site),Yr(t),Yr(e),void 0;if(!e)return c.edge=$r(t.site,c.site),void 0;Ir(t),Ir(e);var l=t.site,s=l.x,f=l.y,h=n.x-s,g=n.y-f,p=e.site,v=p.x-s,d=p.y-f,m=2*(h*d-g*v),y=h*h+g*g,x=v*v+d*d,M={x:(d*y-g*x)/m+s,y:(h*x-v*y)/m+f};Wr(e.edge,l,p,M),c.edge=$r(l,n,null,M),e.edge=$r(n,p,null,M),Yr(t),Yr(e)}}function Pr(n,t){var e=n.site,r=e.x,u=e.y,i=u-t;if(!i)return r;var o=n.P;if(!o)return-1/0;e=o.site;var a=e.x,c=e.y,l=c-t;if(!l)return a;var s=a-r,f=1/i-1/l,h=s/l;return f?(-h+Math.sqrt(h*h-2*f*(s*s/(-2*l)-c+l/2+u-i/2)))/f+r:(r+a)/2}function Ur(n,t){var e=n.N;if(e)return Pr(e,t);var r=n.site;return r.y===t?r.x:1/0}function jr(n){this.site=n,this.edges=[]}function Hr(n){for(var t,e,r,u,i,o,a,c,l,s,f=n[0][0],h=n[1][0],g=n[0][1],p=n[1][1],v=Vc,d=v.length;d--;)if(i=v[d],i&&i.prepare())for(a=i.edges,c=a.length,o=0;c>o;)s=a[o].end(),r=s.x,u=s.y,l=a[++o%c].start(),t=l.x,e=l.y,(ia(r-t)>Ea||ia(u-e)>Ea)&&(a.splice(o,0,new Jr(Br(i.site,s,ia(r-f)<Ea&&p-u>Ea?{x:f,y:ia(t-f)<Ea?e:p}:ia(u-p)<Ea&&h-r>Ea?{x:ia(e-p)<Ea?t:h,y:p}:ia(r-h)<Ea&&u-g>Ea?{x:h,y:ia(t-h)<Ea?e:g}:ia(u-g)<Ea&&r-f>Ea?{x:ia(e-g)<Ea?t:f,y:g}:null),i.site,null)),++c)}function Fr(n,t){return t.angle-n.angle}function Or(){Kr(this),this.x=this.y=this.arc=this.site=this.cy=null}function Yr(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,u=n.site,i=e.site;if(r!==i){var o=u.x,a=u.y,c=r.x-o,l=r.y-a,s=i.x-o,f=i.y-a,h=2*(c*f-l*s);if(!(h>=-Aa)){var g=c*c+l*l,p=s*s+f*f,v=(f*g-l*p)/h,d=(c*p-s*g)/h,f=d+a,m=Jc.pop()||new Or;m.arc=n,m.site=u,m.x=v+o,m.y=f+Math.sqrt(v*v+d*d),m.cy=f,n.circle=m;for(var y=null,x=Bc._;x;)if(m.y<x.y||m.y===x.y&&m.x<=x.x){if(!x.L){y=x.P;break}x=x.L}else{if(!x.R){y=x;break}x=x.R}Bc.insert(y,m),y||($c=m)}}}}function Ir(n){var t=n.circle;t&&(t.P||($c=t.N),Bc.remove(t),Jc.push(t),Kr(t),n.circle=null)}function Zr(n){for(var t,e=Zc,r=Ue(n[0][0],n[0][1],n[1][0],n[1][1]),u=e.length;u--;)t=e[u],(!Vr(t,n)||!r(t)||ia(t.a.x-t.b.x)<Ea&&ia(t.a.y-t.b.y)<Ea)&&(t.a=t.b=null,e.splice(u,1))}function Vr(n,t){var e=n.b;if(e)return!0;var r,u,i=n.a,o=t[0][0],a=t[1][0],c=t[0][1],l=t[1][1],s=n.l,f=n.r,h=s.x,g=s.y,p=f.x,v=f.y,d=(h+p)/2,m=(g+v)/2;if(v===g){if(o>d||d>=a)return;if(h>p){if(i){if(i.y>=l)return}else i={x:d,y:c};e={x:d,y:l}}else{if(i){if(i.y<c)return}else i={x:d,y:l};e={x:d,y:c}}}else if(r=(h-p)/(v-g),u=m-r*d,-1>r||r>1)if(h>p){if(i){if(i.y>=l)return}else i={x:(c-u)/r,y:c};e={x:(l-u)/r,y:l}}else{if(i){if(i.y<c)return}else i={x:(l-u)/r,y:l};e={x:(c-u)/r,y:c}}else if(v>g){if(i){if(i.x>=a)return}else i={x:o,y:r*o+u};e={x:a,y:r*a+u}}else{if(i){if(i.x<o)return}else i={x:a,y:r*a+u};e={x:o,y:r*o+u}}return n.a=i,n.b=e,!0}function Xr(n,t){this.l=n,this.r=t,this.a=this.b=null}function $r(n,t,e,r){var u=new Xr(n,t);return Zc.push(u),e&&Wr(u,n,t,e),r&&Wr(u,t,n,r),Vc[n.i].edges.push(new Jr(u,n,t)),Vc[t.i].edges.push(new Jr(u,t,n)),u}function Br(n,t,e){var r=new Xr(n,null);return r.a=t,r.b=e,Zc.push(r),r}function Wr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function Jr(n,t,e){var r=n.a,u=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(u.x-r.x,r.y-u.y):Math.atan2(r.x-u.x,u.y-r.y)}function Gr(){this._=null}function Kr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function Qr(n,t){var e=t,r=t.R,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function nu(n,t){var e=t,r=t.L,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function tu(n){for(;n.L;)n=n.L;return n}function eu(n,t){var e,r,u,i=n.sort(ru).pop();for(Zc=[],Vc=new Array(n.length),Xc=new Gr,Bc=new Gr;;)if(u=$c,i&&(!u||i.y<u.y||i.y===u.y&&i.x<u.x))(i.x!==e||i.y!==r)&&(Vc[i.i]=new jr(i),Dr(i),e=i.x,r=i.y),i=n.pop();else{if(!u)break;Rr(u.arc)}t&&(Zr(t),Hr(t));var o={cells:Vc,edges:Zc};return Xc=Bc=Zc=Vc=null,o}function ru(n,t){return t.y-n.y||t.x-n.x}function uu(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function iu(n){return n.x}function ou(n){return n.y}function au(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function cu(n,t,e,r,u,i){if(!n(t,e,r,u,i)){var o=.5*(e+u),a=.5*(r+i),c=t.nodes;c[0]&&cu(n,c[0],e,r,o,a),c[1]&&cu(n,c[1],o,r,u,a),c[2]&&cu(n,c[2],e,a,o,i),c[3]&&cu(n,c[3],o,a,u,i)}}function lu(n,t){n=Vo.rgb(n),t=Vo.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o=t.g-r,a=t.b-u;return function(n){return"#"+dt(Math.round(e+i*n))+dt(Math.round(r+o*n))+dt(Math.round(u+a*n))}}function su(n,t){var e,r={},u={};for(e in n)e in t?r[e]=gu(n[e],t[e]):u[e]=n[e];for(e in t)e in n||(u[e]=t[e]);return function(n){for(e in r)u[e]=r[e](n);return u}}function fu(n,t){return t-=n=+n,function(e){return n+t*e}}function hu(n,t){var e,r,u,i=Kc.lastIndex=Qc.lastIndex=0,o=-1,a=[],c=[];for(n+="",t+="";(e=Kc.exec(n))&&(r=Qc.exec(t));)(u=r.index)>i&&(u=t.slice(i,u),a[o]?a[o]+=u:a[++o]=u),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,c.push({i:o,x:fu(e,r)})),i=Qc.lastIndex;return i<t.length&&(u=t.slice(i),a[o]?a[o]+=u:a[++o]=u),a.length<2?c[0]?(t=c[0].x,function(n){return t(n)+""}):function(){return t}:(t=c.length,function(n){for(var e,r=0;t>r;++r)a[(e=c[r]).i]=e.x(n);return a.join("")})}function gu(n,t){for(var e,r=Vo.interpolators.length;--r>=0&&!(e=Vo.interpolators[r](n,t)););return e}function pu(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(gu(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function vu(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function du(n){return function(t){return 1-n(1-t)}}function mu(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function yu(n){return n*n}function xu(n){return n*n*n}function Mu(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function _u(n){return function(t){return Math.pow(t,n)}}function bu(n){return 1-Math.cos(n*ka)}function wu(n){return Math.pow(2,10*(n-1))}function Su(n){return 1-Math.sqrt(1-n*n)}function ku(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Sa*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Sa/t)}}function Eu(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Au(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Cu(n,t){n=Vo.hcl(n),t=Vo.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return ot(e+i*n,r+o*n,u+a*n)+""}}function Nu(n,t){n=Vo.hsl(n),t=Vo.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return ut(e+i*n,r+o*n,u+a*n)+""}}function zu(n,t){n=Vo.lab(n),t=Vo.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return ct(e+i*n,r+o*n,u+a*n)+""}}function Lu(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Tu(n){var t=[n.a,n.b],e=[n.c,n.d],r=Ru(t),u=qu(t,e),i=Ru(Du(e,t,-u))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,u*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Na,this.translate=[n.e,n.f],this.scale=[r,i],this.skew=i?Math.atan2(u,i)*Na:0}function qu(n,t){return n[0]*t[0]+n[1]*t[1]}function Ru(n){var t=Math.sqrt(qu(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Du(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Pu(n,t){var e,r=[],u=[],i=Vo.transform(n),o=Vo.transform(t),a=i.translate,c=o.translate,l=i.rotate,s=o.rotate,f=i.skew,h=o.skew,g=i.scale,p=o.scale;return a[0]!=c[0]||a[1]!=c[1]?(r.push("translate(",null,",",null,")"),u.push({i:1,x:fu(a[0],c[0])},{i:3,x:fu(a[1],c[1])})):c[0]||c[1]?r.push("translate("+c+")"):r.push(""),l!=s?(l-s>180?s+=360:s-l>180&&(l+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:fu(l,s)})):s&&r.push(r.pop()+"rotate("+s+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:fu(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:fu(g[0],p[0])},{i:e-2,x:fu(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(n){for(var t,i=-1;++i<e;)r[(t=u[i]).i]=t.x(n);return r.join("")}}function Uu(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return(e-n)*t}}function ju(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return Math.max(0,Math.min(1,(e-n)*t))}}function Hu(n){for(var t=n.source,e=n.target,r=Ou(t,e),u=[t];t!==r;)t=t.parent,u.push(t);for(var i=u.length;e!==r;)u.splice(i,0,e),e=e.parent;return u}function Fu(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Ou(n,t){if(n===t)return n;for(var e=Fu(n),r=Fu(t),u=e.pop(),i=r.pop(),o=null;u===i;)o=u,u=e.pop(),i=r.pop();return o}function Yu(n){n.fixed|=2}function Iu(n){n.fixed&=-7}function Zu(n){n.fixed|=4,n.px=n.x,n.py=n.y}function Vu(n){n.fixed&=-5}function Xu(n,t,e){var r=0,u=0;if(n.charge=0,!n.leaf)for(var i,o=n.nodes,a=o.length,c=-1;++c<a;)i=o[c],null!=i&&(Xu(i,t,e),n.charge+=i.charge,r+=i.charge*i.cx,u+=i.charge*i.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var l=t*e[n.point.index];n.charge+=n.pointCharge=l,r+=l*n.point.x,u+=l*n.point.y}n.cx=r/n.charge,n.cy=u/n.charge}function $u(n,t){return Vo.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=Qu,n}function Bu(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(u=n.children)&&(r=u.length))for(var r,u;--r>=0;)e.push(u[r])}function Wu(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(i=n.children)&&(u=i.length))for(var u,i,o=-1;++o<u;)e.push(i[o]);for(;null!=(n=r.pop());)t(n)}function Ju(n){return n.children}function Gu(n){return n.value}function Ku(n,t){return t.value-n.value}function Qu(n){return Vo.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function ni(n){return n.x}function ti(n){return n.y}function ei(n,t,e){n.y0=t,n.y=e}function ri(n){return Vo.range(n.length)}function ui(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function ii(n){for(var t,e=1,r=0,u=n[0][1],i=n.length;i>e;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function oi(n){return n.reduce(ai,0)}function ai(n,t){return n+t[1]}function ci(n,t){return li(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function li(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function si(n){return[Vo.min(n),Vo.max(n)]}function fi(n,t){return n.value-t.value}function hi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function gi(n,t){n._pack_next=t,t._pack_prev=n}function pi(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function vi(n){function t(n){s=Math.min(n.x-n.r,s),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(l=e.length)){var e,r,u,i,o,a,c,l,s=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(di),r=e[0],r.x=-r.r,r.y=0,t(r),l>1&&(u=e[1],u.x=u.r,u.y=0,t(u),l>2))for(i=e[2],xi(r,u,i),t(i),hi(r,i),r._pack_prev=i,hi(i,u),u=r._pack_next,o=3;l>o;o++){xi(r,u,i=e[o]);var p=0,v=1,d=1;for(a=u._pack_next;a!==u;a=a._pack_next,v++)if(pi(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!pi(c,i);c=c._pack_prev,d++);p?(d>v||v==d&&u.r<r.r?gi(r,u=a):gi(r=c,u),o--):(hi(r,i),u=i,t(i))}var m=(s+f)/2,y=(h+g)/2,x=0;for(o=0;l>o;o++)i=e[o],i.x-=m,i.y-=y,x=Math.max(x,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=x,e.forEach(mi)}}function di(n){n._pack_next=n._pack_prev=n}function mi(n){delete n._pack_next,delete n._pack_prev}function yi(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i<o;)yi(u[i],t,e,r)}function xi(n,t,e){var r=n.r+e.r,u=t.x-n.x,i=t.y-n.y;if(r&&(u||i)){var o=t.r+e.r,a=u*u+i*i;o*=o,r*=r;var c=.5+(r-o)/(2*a),l=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+c*u+l*i,e.y=n.y+c*i-l*u}else e.x=n.x+r,e.y=n.y}function Mi(n,t){return n.parent==t.parent?1:2}function _i(n){var t=n.children;return t.length?t[0]:n.t}function bi(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function wi(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Si(n){for(var t,e=0,r=0,u=n.children,i=u.length;--i>=0;)t=u[i],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function ki(n,t,e){return n.a.parent===t.parent?n.a:e}function Ei(n){return 1+Vo.max(n,function(n){return n.y})}function Ai(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Ci(n){var t=n.children;return t&&t.length?Ci(t[0]):n}function Ni(n){var t,e=n.children;return e&&(t=e.length)?Ni(e[t-1]):n}function zi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Li(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function Ti(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function qi(n){return n.rangeExtent?n.rangeExtent():Ti(n.range())}function Ri(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function Di(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Pi(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:sl}function Ui(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)u.push(e(n[o-1],n[o])),i.push(r(t[o-1],t[o]));return function(t){var e=Vo.bisect(n,t,1,a)-1;return i[e](u[e](t))}}function ji(n,t,e,r){function u(){var u=Math.min(n.length,t.length)>2?Ui:Ri,c=r?ju:Uu;return o=u(n,t,c,e),a=u(t,n,c,gu),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(Lu)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return Yi(n,t)},i.tickFormat=function(t,e){return Ii(n,t,e)},i.nice=function(t){return Fi(n,t),u()},i.copy=function(){return ji(n,t,e,r)},u()}function Hi(n,t){return Vo.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Fi(n,t){return Di(n,Pi(Oi(n,t)[2]))}function Oi(n,t){null==t&&(t=10);var e=Ti(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Yi(n,t){return Vo.range.apply(Vo,Oi(n,t))}function Ii(n,t,e){var r=Oi(n,t);if(e){var u=Ka.exec(e);if(u.shift(),"s"===u[8]){var i=Vo.formatPrefix(Math.max(ia(r[0]),ia(r[1])));return u[7]||(u[7]="."+Zi(i.scale(r[2]))),u[8]="f",e=Vo.format(u.join("")),function(n){return e(i.scale(n))+i.symbol}}u[7]||(u[7]="."+Vi(u[8],r)),e=u.join("")}else e=",."+Zi(r[2])+"f";return Vo.format(e)}function Zi(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Vi(n,t){var e=Zi(t[2]);return n in fl?Math.abs(e-Zi(Math.max(ia(t[0]),ia(t[1]))))+ +("e"!==n):e-2*("%"===n)}function Xi(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=Di(r.map(u),e?Math:gl);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=Ti(r),o=[],a=n[0],c=n[1],l=Math.floor(u(a)),s=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(s-l)){if(e){for(;s>l;l++)for(var h=1;f>h;h++)o.push(i(l)*h);o.push(i(l))}else for(o.push(i(l));l++<s;)for(var h=f-1;h>0;h--)o.push(i(l)*h);for(l=0;o[l]<a;l++);for(s=o.length;o[s-1]>c;s--);o=o.slice(l,s)}return o},o.tickFormat=function(n,t){if(!arguments.length)return hl;arguments.length<2?t=hl:"function"!=typeof t&&(t=Vo.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return Xi(n.copy(),t,e,r)},Hi(o,n)}function $i(n,t,e){function r(t){return n(u(t))}var u=Bi(t),i=Bi(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return Yi(e,n)},r.tickFormat=function(n,t){return Ii(e,n,t)},r.nice=function(n){return r.domain(Fi(e,n))},r.exponent=function(o){return arguments.length?(u=Bi(t=o),i=Bi(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return $i(n.copy(),t,e)},Hi(r,n)}function Bi(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function Wi(n,t){function e(e){return i[((u.get(e)||("range"===t.t?u.set(e,n.push(e)):0/0))-1)%i.length]}function r(t,e){return Vo.range(n.length).map(function(n){return t+e*n})}var u,i,a;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new o;for(var i,a=-1,c=r.length;++a<c;)u.has(i=r[a])||u.set(i,n.push(i));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(i=n,a=0,t={t:"range",a:arguments},e):i},e.rangePoints=function(u,o){arguments.length<2&&(o=0);var c=u[0],l=u[1],s=(l-c)/(Math.max(1,n.length-1)+o);return i=r(n.length<2?(c+l)/2:c+s*o/2,s),a=0,t={t:"rangePoints",a:arguments},e},e.rangeBands=function(u,o,c){arguments.length<2&&(o=0),arguments.length<3&&(c=o);var l=u[1]<u[0],s=u[l-0],f=u[1-l],h=(f-s)/(n.length-o+2*c);return i=r(s+h*c,h),l&&i.reverse(),a=h*(1-o),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(u,o,c){arguments.length<2&&(o=0),arguments.length<3&&(c=o);var l=u[1]<u[0],s=u[l-0],f=u[1-l],h=Math.floor((f-s)/(n.length-o+2*c)),g=f-s-(n.length-o)*h;return i=r(s+Math.round(g/2),h),l&&i.reverse(),a=Math.round(h*(1-o)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return a},e.rangeExtent=function(){return Ti(t.a[0])},e.copy=function(){return Wi(n,t)},e.domain(n)}function Ji(e,r){function u(){var n=0,t=r.length;for(o=[];++n<t;)o[n-1]=Vo.quantile(e,n/t);return i}function i(n){return isNaN(n=+n)?void 0:r[Vo.bisect(o,n)]}var o;return i.domain=function(r){return arguments.length?(e=r.filter(t).sort(n),u()):e},i.range=function(n){return arguments.length?(r=n,u()):r},i.quantiles=function(){return o},i.invertExtent=function(n){return n=r.indexOf(n),0>n?[0/0,0/0]:[n>0?o[n-1]:e[0],n<o.length?o[n]:e[e.length-1]]},i.copy=function(){return Ji(e,r)},u()}function Gi(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(i*(t-n))))]}function u(){return i=e.length/(t-n),o=e.length-1,r}var i,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],u()):[n,t]},r.range=function(n){return arguments.length?(e=n,u()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return Gi(n,t,e)},u()}function Ki(n,t){function e(e){return e>=e?t[Vo.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return Ki(n,t)},e}function Qi(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Yi(n,t)},t.tickFormat=function(t,e){return Ii(n,t,e)},t.copy=function(){return Qi(n)},t}function no(n){return n.innerRadius}function to(n){return n.outerRadius}function eo(n){return n.startAngle}function ro(n){return n.endAngle}function uo(n){function t(t){function o(){l.push("M",i(n(s),a))}for(var c,l=[],s=[],f=-1,h=t.length,g=bt(e),p=bt(r);++f<h;)u.call(this,c=t[f],f)?s.push([+g.call(this,c,f),+p.call(this,c,f)]):s.length&&(o(),s=[]);return s.length&&o(),l.length?l.join(""):null}var e=Sr,r=kr,u=Se,i=io,o=i.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(u=n,t):u},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?i=n:(i=Ml.get(n)||io).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function io(n){return n.join("L")}function oo(n){return io(n)+"Z"}function ao(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&u.push("H",r[0]),u.join("")}function co(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("V",(r=n[t])[1],"H",r[0]);return u.join("")}function lo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r=n[t])[0],"V",r[1]);return u.join("")}function so(n,t){return n.length<4?io(n):n[1]+go(n.slice(1,n.length-1),po(n,t))}function fo(n,t){return n.length<3?io(n):n[0]+go((n.push(n[0]),n),po([n[n.length-2]].concat(n,[n[1]]),t))}function ho(n,t){return n.length<3?io(n):n[0]+go(n,po(n,t))}function go(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return io(n);var e=n.length!=t.length,r="",u=n[0],i=n[1],o=t[0],a=o,c=1;if(e&&(r+="Q"+(i[0]-2*o[0]/3)+","+(i[1]-2*o[1]/3)+","+i[0]+","+i[1],u=n[1],c=2),t.length>1){a=t[1],i=n[c],c++,r+="C"+(u[0]+o[0])+","+(u[1]+o[1])+","+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1];for(var l=2;l<t.length;l++,c++)i=n[c],a=t[l],r+="S"+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1]}if(e){var s=n[c];r+="Q"+(i[0]+2*a[0]/3)+","+(i[1]+2*a[1]/3)+","+s[0]+","+s[1]}return r}function po(n,t){for(var e,r=[],u=(1-t)/2,i=n[0],o=n[1],a=1,c=n.length;++a<c;)e=i,i=o,o=n[a],r.push([u*(o[0]-e[0]),u*(o[1]-e[1])]);return r}function vo(n){if(n.length<3)return io(n);var t=1,e=n.length,r=n[0],u=r[0],i=r[1],o=[u,u,u,(r=n[1])[0]],a=[i,i,i,r[1]],c=[u,",",i,"L",Mo(wl,o),",",Mo(wl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),_o(c,o,a);return n.pop(),c.push("L",r),c.join("")}function mo(n){if(n.length<4)return io(n);for(var t,e=[],r=-1,u=n.length,i=[0],o=[0];++r<3;)t=n[r],i.push(t[0]),o.push(t[1]);for(e.push(Mo(wl,i)+","+Mo(wl,o)),--r;++r<u;)t=n[r],i.shift(),i.push(t[0]),o.shift(),o.push(t[1]),_o(e,i,o);return e.join("")}function yo(n){for(var t,e,r=-1,u=n.length,i=u+4,o=[],a=[];++r<4;)e=n[r%u],o.push(e[0]),a.push(e[1]);for(t=[Mo(wl,o),",",Mo(wl,a)],--r;++r<i;)e=n[r%u],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),_o(t,o,a);return t.join("")}function xo(n,t){var e=n.length-1;if(e)for(var r,u,i=n[0][0],o=n[0][1],a=n[e][0]-i,c=n[e][1]-o,l=-1;++l<=e;)r=n[l],u=l/e,r[0]=t*r[0]+(1-t)*(i+u*a),r[1]=t*r[1]+(1-t)*(o+u*c);return vo(n)}function Mo(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function _o(n,t,e){n.push("C",Mo(_l,t),",",Mo(_l,e),",",Mo(bl,t),",",Mo(bl,e),",",Mo(wl,t),",",Mo(wl,e))}function bo(n,t){return(t[1]-n[1])/(t[0]-n[0])}function wo(n){for(var t=0,e=n.length-1,r=[],u=n[0],i=n[1],o=r[0]=bo(u,i);++t<e;)r[t]=(o+(o=bo(u=i,i=n[t+1])))/2;return r[t]=o,r}function So(n){for(var t,e,r,u,i=[],o=wo(n),a=-1,c=n.length-1;++a<c;)t=bo(n[a],n[a+1]),ia(t)<Ea?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,u=e*e+r*r,u>9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function ko(n){return n.length<3?io(n):n[0]+go(n,So(n))}function Eo(n){for(var t,e,r,u=-1,i=n.length;++u<i;)t=n[u],e=t[0],r=t[1]+yl,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ao(n){function t(t){function c(){v.push("M",a(n(m),f),s,l(n(d.reverse()),f),"Z")}for(var h,g,p,v=[],d=[],m=[],y=-1,x=t.length,M=bt(e),_=bt(u),b=e===r?function(){return g}:bt(r),w=u===i?function(){return p}:bt(i);++y<x;)o.call(this,h=t[y],y)?(d.push([g=+M.call(this,h,y),p=+_.call(this,h,y)]),m.push([+b.call(this,h,y),+w.call(this,h,y)])):d.length&&(c(),d=[],m=[]);return d.length&&c(),v.length?v.join(""):null}var e=Sr,r=Sr,u=0,i=kr,o=Se,a=io,c=a.key,l=a,s="L",f=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(u=i=n,t):i},t.y0=function(n){return arguments.length?(u=n,t):u},t.y1=function(n){return arguments.length?(i=n,t):i},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(c="function"==typeof n?a=n:(a=Ml.get(n)||io).key,l=a.reverse||a,s=a.closed?"M":"L",t):c},t.tension=function(n){return arguments.length?(f=n,t):f},t}function Co(n){return n.radius}function No(n){return[n.x,n.y]}function zo(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]+yl;return[e*Math.cos(r),e*Math.sin(r)]}}function Lo(){return 64}function To(){return"circle"}function qo(n){var t=Math.sqrt(n/wa);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Ro(n,t){return sa(n,Nl),n.id=t,n}function Do(n,t,e,r){var u=n.id;return P(n,"function"==typeof e?function(n,i,o){n.__transition__[u].tween.set(t,r(e.call(n,n.__data__,i,o)))}:(e=r(e),function(n){n.__transition__[u].tween.set(t,e)}))}function Po(n){return null==n&&(n=""),function(){this.textContent=n}}function Uo(n,t,e,r){var u=n.__transition__||(n.__transition__={active:0,count:0}),i=u[e];if(!i){var a=r.time;i=u[e]={tween:new o,time:a,ease:r.ease,delay:r.delay,duration:r.duration},++u.count,Vo.timer(function(r){function o(r){return u.active>e?l():(u.active=e,i.event&&i.event.start.call(n,s,t),i.tween.forEach(function(e,r){(r=r.call(n,s,t))&&v.push(r)}),Vo.timer(function(){return p.c=c(r||1)?Se:c,1},0,a),void 0)}function c(r){if(u.active!==e)return l();for(var o=r/g,a=f(o),c=v.length;c>0;)v[--c].call(n,a);return o>=1?(i.event&&i.event.end.call(n,s,t),l()):void 0
-}function l(){return--u.count?delete u[e]:delete n.__transition__,1}var s=n.__data__,f=i.ease,h=i.delay,g=i.duration,p=Wa,v=[];return p.t=h+a,r>=h?o(r-h):(p.c=o,void 0)},0,a)}}function jo(n,t){n.attr("transform",function(n){return"translate("+t(n)+",0)"})}function Ho(n,t){n.attr("transform",function(n){return"translate(0,"+t(n)+")"})}function Fo(n){return n.toISOString()}function Oo(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=Vo.bisect(jl,u);return i==jl.length?[t.year,Oi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/jl[i-1]<jl[i]/u?i-1:i]:[Ol,Oi(n,e)[2]]}return r.invert=function(t){return Yo(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(Yo)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,Yo(+e+1),t).length}var i=r.domain(),o=Ti(i),a=null==n?u(o,10):"number"==typeof n&&u(o,n);return a&&(n=a[0],t=a[1]),r.domain(Di(i,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=Yo(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Yo(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Ti(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Yo(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Oo(n.copy(),t,e)},Hi(r,n)}function Yo(n){return new Date(n)}function Io(n){return JSON.parse(n.responseText)}function Zo(n){var t=Bo.createRange();return t.selectNode(Bo.body),t.createContextualFragment(n.responseText)}var Vo={version:"3.4.12"};Date.now||(Date.now=function(){return+new Date});var Xo=[].slice,$o=function(n){return Xo.call(n)},Bo=document,Wo=Bo.documentElement,Jo=window;try{$o(Wo.childNodes)[0].nodeType}catch(Go){$o=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{Bo.createElement("div").style.setProperty("opacity",0,"")}catch(Ko){var Qo=Jo.Element.prototype,na=Qo.setAttribute,ta=Qo.setAttributeNS,ea=Jo.CSSStyleDeclaration.prototype,ra=ea.setProperty;Qo.setAttribute=function(n,t){na.call(this,n,t+"")},Qo.setAttributeNS=function(n,t,e){ta.call(this,n,t,e+"")},ea.setProperty=function(n,t,e){ra.call(this,n,t+"",e)}}Vo.ascending=n,Vo.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},Vo.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&e>r&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&e>r&&(e=r)}return e},Vo.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&r>e&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&r>e&&(e=r)}return e},Vo.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i<o&&!(null!=(e=u=n[i])&&e>=e);)e=u=void 0;for(;++i<o;)null!=(r=n[i])&&(e>r&&(e=r),r>u&&(u=r))}else{for(;++i<o&&!(null!=(e=u=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i<o;)null!=(r=t.call(n,n[i],i))&&(e>r&&(e=r),r>u&&(u=r))}return[e,u]},Vo.sum=function(n,t){var e,r=0,u=n.length,i=-1;if(1===arguments.length)for(;++i<u;)isNaN(e=+n[i])||(r+=e);else for(;++i<u;)isNaN(e=+t.call(n,n[i],i))||(r+=e);return r},Vo.mean=function(n,e){var r,u=0,i=n.length,o=-1,a=i;if(1===arguments.length)for(;++o<i;)t(r=n[o])?u+=r:--a;else for(;++o<i;)t(r=e.call(n,n[o],o))?u+=r:--a;return a?u/a:void 0},Vo.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),u=+n[r-1],i=e-r;return i?u+i*(n[r]-u):u},Vo.median=function(e,r){return arguments.length>1&&(e=e.map(r)),e=e.filter(t),e.length?Vo.quantile(e.sort(n),.5):void 0};var ua=e(n);Vo.bisectLeft=ua.left,Vo.bisect=Vo.bisectRight=ua.right,Vo.bisector=function(t){return e(1===t.length?function(e,r){return n(t(e),r)}:t)},Vo.shuffle=function(n){for(var t,e,r=n.length;r;)e=0|Math.random()*r--,t=n[r],n[r]=n[e],n[e]=t;return n},Vo.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},Vo.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},Vo.zip=function(){if(!(u=arguments.length))return[];for(var n=-1,t=Vo.min(arguments,r),e=new Array(t);++n<t;)for(var u,i=-1,o=e[n]=new Array(u);++i<u;)o[i]=arguments[i][n];return e},Vo.transpose=function(n){return Vo.zip.apply(Vo,n)},Vo.keys=function(n){var t=[];for(var e in n)t.push(e);return t},Vo.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},Vo.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},Vo.merge=function(n){for(var t,e,r,u=n.length,i=-1,o=0;++i<u;)o+=n[i].length;for(e=new Array(o);--u>=0;)for(r=n[u],t=r.length;--t>=0;)e[--o]=r[t];return e};var ia=Math.abs;Vo.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/e)throw new Error("infinite range");var r,i=[],o=u(ia(e)),a=-1;if(n*=o,t*=o,e*=o,0>e)for(;(r=n+e*++a)>t;)i.push(r/o);else for(;(r=n+e*++a)<t;)i.push(r/o);return i},Vo.map=function(n){var t=new o;if(n instanceof o)n.forEach(function(n,e){t.set(n,e)});else for(var e in n)t.set(e,n[e]);return t},i(o,{has:a,get:function(n){return this[oa+n]},set:function(n,t){return this[oa+n]=t},remove:c,keys:l,values:function(){var n=[];return this.forEach(function(t,e){n.push(e)}),n},entries:function(){var n=[];return this.forEach(function(t,e){n.push({key:t,value:e})}),n},size:s,empty:f,forEach:function(n){for(var t in this)t.charCodeAt(0)===aa&&n.call(this,t.slice(1),this[t])}});var oa="\x00",aa=oa.charCodeAt(0);Vo.nest=function(){function n(t,a,c){if(c>=i.length)return r?r.call(u,a):e?a.sort(e):a;for(var l,s,f,h,g=-1,p=a.length,v=i[c++],d=new o;++g<p;)(h=d.get(l=v(s=a[g])))?h.push(s):d.set(l,[s]);return t?(s=t(),f=function(e,r){s.set(e,n(t,r,c))}):(s={},f=function(e,r){s[e]=n(t,r,c)}),d.forEach(f),s}function t(n,e){if(e>=i.length)return n;var r=[],u=a[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],a=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(Vo.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return a[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},Vo.set=function(n){var t=new h;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},i(h,{has:a,add:function(n){return this[oa+n]=!0,n},remove:function(n){return n=oa+n,n in this&&delete this[n]},values:l,size:s,empty:f,forEach:function(n){for(var t in this)t.charCodeAt(0)===aa&&n.call(this,t.slice(1))}}),Vo.behavior={},Vo.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r<u;)n[e=arguments[r]]=g(n,t,t[e]);return n};var ca=["webkit","ms","moz","Moz","o","O"];Vo.dispatch=function(){for(var n=new d,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=m(n);return n},d.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},Vo.event=null,Vo.requote=function(n){return n.replace(la,"\\$&")};var la=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,sa={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},fa=function(n,t){return t.querySelector(n)},ha=function(n,t){return t.querySelectorAll(n)},ga=Wo.matches||Wo[p(Wo,"matchesSelector")],pa=function(n,t){return ga.call(n,t)};"function"==typeof Sizzle&&(fa=function(n,t){return Sizzle(n,t)[0]||null},ha=Sizzle,pa=Sizzle.matchesSelector),Vo.selection=function(){return ya};var va=Vo.selection.prototype=[];va.select=function(n){var t,e,r,u,i=[];n=b(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var c=-1,l=r.length;++c<l;)(u=r[c])?(t.push(e=n.call(u,u.__data__,c,o)),e&&"__data__"in u&&(e.__data__=u.__data__)):t.push(null)}return _(i)},va.selectAll=function(n){var t,e,r=[];n=w(n);for(var u=-1,i=this.length;++u<i;)for(var o=this[u],a=-1,c=o.length;++a<c;)(e=o[a])&&(r.push(t=$o(n.call(e,e.__data__,a,u))),t.parentNode=e);return _(r)};var da={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};Vo.ns={prefix:da,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&(e=n.slice(0,t),n=n.slice(t+1)),da.hasOwnProperty(e)?{space:da[e],local:n}:n}},va.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=Vo.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(S(t,n[t]));return this}return this.each(S(n,t))},va.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=A(n)).length,u=-1;if(t=e.classList){for(;++u<r;)if(!t.contains(n[u]))return!1}else for(t=e.getAttribute("class");++u<r;)if(!E(n[u]).test(t))return!1;return!0}for(t in n)this.each(C(t,n[t]));return this}return this.each(C(n,t))},va.style=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(z(e,n[e],t));return this}if(2>r)return Jo.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(z(n,t,e))},va.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(L(t,n[t]));return this}return this.each(L(n,t))},va.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},va.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},va.append=function(n){return n=T(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},va.insert=function(n,t){return n=T(n),t=b(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},va.remove=function(){return this.each(function(){var n=this.parentNode;n&&n.removeChild(this)})},va.data=function(n,t){function e(n,e){var r,u,i,a=n.length,f=e.length,h=Math.min(a,f),g=new Array(f),p=new Array(f),v=new Array(a);if(t){var d,m=new o,y=new o,x=[];for(r=-1;++r<a;)d=t.call(u=n[r],u.__data__,r),m.has(d)?v[r]=u:m.set(d,u),x.push(d);for(r=-1;++r<f;)d=t.call(e,i=e[r],r),(u=m.get(d))?(g[r]=u,u.__data__=i):y.has(d)||(p[r]=q(i)),y.set(d,i),m.remove(d);for(r=-1;++r<a;)m.has(x[r])&&(v[r]=n[r])}else{for(r=-1;++r<h;)u=n[r],i=e[r],u?(u.__data__=i,g[r]=u):p[r]=q(i);for(;f>r;++r)p[r]=q(e[r]);for(;a>r;++r)v[r]=n[r]}p.update=g,p.parentNode=g.parentNode=v.parentNode=n.parentNode,c.push(p),l.push(g),s.push(v)}var r,u,i=-1,a=this.length;if(!arguments.length){for(n=new Array(a=(r=this[0]).length);++i<a;)(u=r[i])&&(n[i]=u.__data__);return n}var c=U([]),l=_([]),s=_([]);if("function"==typeof n)for(;++i<a;)e(r=this[i],n.call(r,r.parentNode.__data__,i));else for(;++i<a;)e(r=this[i],n);return l.enter=function(){return c},l.exit=function(){return s},l},va.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},va.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=R(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return _(u)},va.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],u=r.length-1,i=r[u];--u>=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},va.sort=function(n){n=D.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},va.each=function(n){return P(this,function(t,e,r){n.call(t,t.__data__,e,r)})},va.call=function(n){var t=$o(arguments);return n.apply(t[0]=this,t),this},va.empty=function(){return!this.node()},va.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},va.size=function(){var n=0;return P(this,function(){++n}),n};var ma=[];Vo.selection.enter=U,Vo.selection.enter.prototype=ma,ma.append=va.append,ma.empty=va.empty,ma.node=va.node,ma.call=va.call,ma.size=va.size,ma.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++a<c;){r=(u=this[a]).update,o.push(t=[]),t.parentNode=u.parentNode;for(var l=-1,s=u.length;++l<s;)(i=u[l])?(t.push(r[l]=e=n.call(u.parentNode,i.__data__,l,a)),e.__data__=i.__data__):t.push(null)}return _(o)},ma.insert=function(n,t){return arguments.length<2&&(t=j(this)),va.insert.call(this,n,t)},va.transition=function(){for(var n,t,e=kl||++zl,r=[],u=El||{time:Date.now(),ease:Mu,delay:0,duration:250},i=-1,o=this.length;++i<o;){r.push(n=[]);for(var a=this[i],c=-1,l=a.length;++c<l;)(t=a[c])&&Uo(t,c,e,u),n.push(t)}return Ro(r,e)},va.interrupt=function(){return this.each(H)},Vo.select=function(n){var t=["string"==typeof n?fa(n,Bo):n];return t.parentNode=Wo,_([t])},Vo.selectAll=function(n){var t=$o("string"==typeof n?ha(n,Bo):n);return t.parentNode=Wo,_([t])};var ya=Vo.select(Wo);va.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(F(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(F(n,t,e))};var xa=Vo.map({mouseenter:"mouseover",mouseleave:"mouseout"});xa.forEach(function(n){"on"+n in Bo&&xa.remove(n)});var Ma="onselectstart"in Bo?null:p(Wo.style,"userSelect"),_a=0;Vo.mouse=function(n){return Z(n,x())};var ba=/WebKit/.test(Jo.navigator.userAgent)?-1:0;Vo.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=x().changedTouches),t)for(var r,u=0,i=t.length;i>u;++u)if((r=t[u]).identifier===e)return Z(n,r)},Vo.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",i)}function t(n,t,u,i,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-x[0],e=r[1]-x[1],p|=n|e,x=r,g({type:"drag",x:r[0]+l[0],y:r[1]+l[1],dx:n,dy:e}))}function c(){t(h,v)&&(m.on(i+d,null).on(o+d,null),y(p&&Vo.event.target===f),g({type:"dragend"}))}var l,s=this,f=Vo.event.target,h=s.parentNode,g=e.of(s,arguments),p=0,v=n(),d=".drag"+(null==v?"":"-"+v),m=Vo.select(u()).on(i+d,a).on(o+d,c),y=I(),x=t(h,v);r?(l=r.apply(s,arguments),l=[l.x-x[0],l.y-x[1]]):l=[0,0],g({type:"dragstart"})}}var e=M(n,"drag","dragstart","dragend"),r=null,u=t(v,Vo.mouse,$,"mousemove","mouseup"),i=t(V,Vo.touch,X,"touchmove","touchend");return n.origin=function(t){return arguments.length?(r=t,n):r},Vo.rebind(n,e,"on")},Vo.touches=function(n,t){return arguments.length<2&&(t=x().touches),t?$o(t).map(function(t){var e=Z(n,t);return e.identifier=t.identifier,e}):[]};var wa=Math.PI,Sa=2*wa,ka=wa/2,Ea=1e-6,Aa=Ea*Ea,Ca=wa/180,Na=180/wa,za=Math.SQRT2,La=2,Ta=4;Vo.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=Q(v),o=i/(La*h)*(e*nt(za*t+v)-K(v));return[r+o*l,u+o*s,i*e/Q(za*t+v)]}return[r+n*l,u+n*s,i*Math.exp(za*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],l=o-r,s=a-u,f=l*l+s*s,h=Math.sqrt(f),g=(c*c-i*i+Ta*f)/(2*i*La*h),p=(c*c-i*i-Ta*f)/(2*c*La*h),v=Math.log(Math.sqrt(g*g+1)-g),d=Math.log(Math.sqrt(p*p+1)-p),m=d-v,y=(m||Math.log(c/i))/za;return e.duration=1e3*y,e},Vo.behavior.zoom=function(){function n(n){n.on(A,l).on(Da+".zoom",f).on("dblclick.zoom",h).on(z,s)}function t(n){return[(n[0]-S.x)/S.k,(n[1]-S.y)/S.k]}function e(n){return[n[0]*S.k+S.x,n[1]*S.k+S.y]}function r(n){S.k=Math.max(E[0],Math.min(E[1],n))}function u(n,t){t=e(t),S.x+=n[0]-t[0],S.y+=n[1]-t[1]}function i(){_&&_.domain(x.range().map(function(n){return(n-S.x)/S.k}).map(x.invert)),w&&w.domain(b.range().map(function(n){return(n-S.y)/S.k}).map(b.invert))}function o(n){n({type:"zoomstart"})}function a(n){i(),n({type:"zoom",scale:S.k,translate:[S.x,S.y]})}function c(n){n({type:"zoomend"})}function l(){function n(){s=1,u(Vo.mouse(r),h),a(l)}function e(){f.on(C,null).on(N,null),g(s&&Vo.event.target===i),c(l)}var r=this,i=Vo.event.target,l=L.of(r,arguments),s=0,f=Vo.select(Jo).on(C,n).on(N,e),h=t(Vo.mouse(r)),g=I();H.call(r),o(l)}function s(){function n(){var n=Vo.touches(g);return h=S.k,n.forEach(function(n){n.identifier in v&&(v[n.identifier]=t(n))}),n}function e(){var t=Vo.event.target;Vo.select(t).on(M,i).on(_,f),b.push(t);for(var e=Vo.event.changedTouches,o=0,c=e.length;c>o;++o)v[e[o].identifier]=null;var l=n(),s=Date.now();if(1===l.length){if(500>s-m){var h=l[0],g=v[h.identifier];r(2*S.k),u(h,g),y(),a(p)}m=s}else if(l.length>1){var h=l[0],x=l[1],w=h[0]-x[0],k=h[1]-x[1];d=w*w+k*k}}function i(){for(var n,t,e,i,o=Vo.touches(g),c=0,l=o.length;l>c;++c,i=null)if(e=o[c],i=v[e.identifier]){if(t)break;n=e,t=i}if(i){var s=(s=e[0]-n[0])*s+(s=e[1]-n[1])*s,f=d&&Math.sqrt(s/d);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+i[0])/2,(t[1]+i[1])/2],r(f*h)}m=null,u(n,t),a(p)}function f(){if(Vo.event.touches.length){for(var t=Vo.event.changedTouches,e=0,r=t.length;r>e;++e)delete v[t[e].identifier];for(var u in v)return void n()}Vo.selectAll(b).on(x,null),w.on(A,l).on(z,s),k(),c(p)}var h,g=this,p=L.of(g,arguments),v={},d=0,x=".zoom-"+Vo.event.changedTouches[0].identifier,M="touchmove"+x,_="touchend"+x,b=[],w=Vo.select(g),k=I();H.call(g),e(),o(p),w.on(A,null).on(z,e)}function f(){var n=L.of(this,arguments);d?clearTimeout(d):(g=t(p=v||Vo.mouse(this)),H.call(this),o(n)),d=setTimeout(function(){d=null,c(n)},50),y(),r(Math.pow(2,.002*qa())*S.k),u(p,g),a(n)}function h(){var n=L.of(this,arguments),e=Vo.mouse(this),i=t(e),l=Math.log(S.k)/Math.LN2;o(n),r(Math.pow(2,Vo.event.shiftKey?Math.ceil(l)-1:Math.floor(l)+1)),u(e,i),a(n),c(n)}var g,p,v,d,m,x,_,b,w,S={x:0,y:0,k:1},k=[960,500],E=Ra,A="mousedown.zoom",C="mousemove.zoom",N="mouseup.zoom",z="touchstart.zoom",L=M(n,"zoomstart","zoom","zoomend");return n.event=function(n){n.each(function(){var n=L.of(this,arguments),t=S;kl?Vo.select(this).transition().each("start.zoom",function(){S=this.__chart__||{x:0,y:0,k:1},o(n)}).tween("zoom:zoom",function(){var e=k[0],r=k[1],u=e/2,i=r/2,o=Vo.interpolateZoom([(u-S.x)/S.k,(i-S.y)/S.k,e/S.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),c=e/r[2];this.__chart__=S={x:u-r[0]*c,y:i-r[1]*c,k:c},a(n)}}).each("end.zoom",function(){c(n)}):(this.__chart__=S,o(n),a(n),c(n))})},n.translate=function(t){return arguments.length?(S={x:+t[0],y:+t[1],k:S.k},i(),n):[S.x,S.y]},n.scale=function(t){return arguments.length?(S={x:S.x,y:S.y,k:+t},i(),n):S.k},n.scaleExtent=function(t){return arguments.length?(E=null==t?Ra:[+t[0],+t[1]],n):E},n.center=function(t){return arguments.length?(v=t&&[+t[0],+t[1]],n):v},n.size=function(t){return arguments.length?(k=t&&[+t[0],+t[1]],n):k},n.x=function(t){return arguments.length?(_=t,x=t.copy(),S={x:0,y:0,k:1},n):_},n.y=function(t){return arguments.length?(w=t,b=t.copy(),S={x:0,y:0,k:1},n):w},Vo.rebind(n,L,"on")};var qa,Ra=[0,1/0],Da="onwheel"in Bo?(qa=function(){return-Vo.event.deltaY*(Vo.event.deltaMode?120:1)},"wheel"):"onmousewheel"in Bo?(qa=function(){return Vo.event.wheelDelta},"mousewheel"):(qa=function(){return-Vo.event.detail},"MozMousePixelScroll");Vo.color=et,et.prototype.toString=function(){return this.rgb()+""},Vo.hsl=rt;var Pa=rt.prototype=new et;Pa.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new rt(this.h,this.s,this.l/n)},Pa.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new rt(this.h,this.s,n*this.l)},Pa.rgb=function(){return ut(this.h,this.s,this.l)},Vo.hcl=it;var Ua=it.prototype=new et;Ua.brighter=function(n){return new it(this.h,this.c,Math.min(100,this.l+ja*(arguments.length?n:1)))},Ua.darker=function(n){return new it(this.h,this.c,Math.max(0,this.l-ja*(arguments.length?n:1)))},Ua.rgb=function(){return ot(this.h,this.c,this.l).rgb()},Vo.lab=at;var ja=18,Ha=.95047,Fa=1,Oa=1.08883,Ya=at.prototype=new et;Ya.brighter=function(n){return new at(Math.min(100,this.l+ja*(arguments.length?n:1)),this.a,this.b)},Ya.darker=function(n){return new at(Math.max(0,this.l-ja*(arguments.length?n:1)),this.a,this.b)},Ya.rgb=function(){return ct(this.l,this.a,this.b)},Vo.rgb=gt;var Ia=gt.prototype=new et;Ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),new gt(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new gt(u,u,u)},Ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new gt(n*this.r,n*this.g,n*this.b)},Ia.hsl=function(){return yt(this.r,this.g,this.b)},Ia.toString=function(){return"#"+dt(this.r)+dt(this.g)+dt(this.b)};var Za=Vo.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});Za.forEach(function(n,t){Za.set(n,pt(t))}),Vo.functor=bt,Vo.xhr=St(wt),Vo.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=kt(n,t,null==e?r:u(e),i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),c=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(s>=l)return o;if(u)return u=!1,i;var t=s;if(34===n.charCodeAt(t)){for(var e=t;e++<l;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}s=e+2;var r=n.charCodeAt(e+1);return 13===r?(u=!0,10===n.charCodeAt(e+2)&&++s):10===r&&(u=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;l>s;){var r=n.charCodeAt(s++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(s)&&(++s,++a);else if(r!==c)continue;return n.slice(t,s-a)}return n.slice(t)}for(var r,u,i={},o={},a=[],l=n.length,s=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();(!t||(h=t(h,f++)))&&a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new h,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(o).join(n)].concat(t.map(function(t){return u.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(i).join("\n")},e},Vo.csv=Vo.dsv(",","text/csv"),Vo.tsv=Vo.dsv(" ","text/tab-separated-values");var Va,Xa,$a,Ba,Wa,Ja=Jo[p(Jo,"requestAnimationFrame")]||function(n){setTimeout(n,17)};Vo.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={c:n,t:u,f:!1,n:null};Xa?Xa.n=i:Va=i,Xa=i,$a||(Ba=clearTimeout(Ba),$a=1,Ja(Ct))},Vo.timer.flush=function(){Nt(),zt()},Vo.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var Ga=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Tt);Vo.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=Vo.round(n,Lt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),Ga[8+e/3]};var Ka=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,Qa=Vo.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=Vo.round(n,Lt(n,t))).toFixed(Math.max(0,Math.min(20,Lt(n*(1+1e-15),t))))}}),nc=Vo.time={},tc=Date;Dt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){ec.setUTCDate.apply(this._,arguments)},setDay:function(){ec.setUTCDay.apply(this._,arguments)},setFullYear:function(){ec.setUTCFullYear.apply(this._,arguments)},setHours:function(){ec.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){ec.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){ec.setUTCMinutes.apply(this._,arguments)},setMonth:function(){ec.setUTCMonth.apply(this._,arguments)},setSeconds:function(){ec.setUTCSeconds.apply(this._,arguments)},setTime:function(){ec.setTime.apply(this._,arguments)}};var ec=Date.prototype;nc.year=Pt(function(n){return n=nc.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),nc.years=nc.year.range,nc.years.utc=nc.year.utc.range,nc.day=Pt(function(n){var t=new tc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),nc.days=nc.day.range,nc.days.utc=nc.day.utc.range,nc.dayOfYear=function(n){var t=nc.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=nc[n]=Pt(function(n){return(n=nc.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=nc.year(n).getDay();return Math.floor((nc.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});nc[n+"s"]=e.range,nc[n+"s"].utc=e.utc.range,nc[n+"OfYear"]=function(n){var e=nc.year(n).getDay();return Math.floor((nc.dayOfYear(n)+(e+t)%7)/7)}}),nc.week=nc.sunday,nc.weeks=nc.sunday.range,nc.weeks.utc=nc.sunday.utc.range,nc.weekOfYear=nc.sundayOfYear;var rc={"-":"",_:" ",0:"0"},uc=/^\s*\d+/,ic=/^%/;Vo.locale=function(n){return{numberFormat:qt(n),timeFormat:jt(n)}};var oc=Vo.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Vo.format=oc.numberFormat,Vo.geo={},ie.prototype={s:0,t:0,add:function(n){oe(n,this.t,ac),oe(ac.s,this.s,this),this.s?this.t+=ac.t:this.s=ac.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ac=new ie;Vo.geo.stream=function(n,t){n&&cc.hasOwnProperty(n.type)?cc[n.type](n,t):ae(n,t)};var cc={Feature:function(n,t){ae(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++r<u;)ae(e[r].geometry,t)}},lc={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){ce(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)ce(e[r],t,0)},Polygon:function(n,t){le(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)le(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,u=e.length;++r<u;)ae(e[r],t)}};Vo.geo.area=function(n){return sc=0,Vo.geo.stream(n,hc),sc};var sc,fc=new ie,hc={sphere:function(){sc+=4*wa},point:v,lineStart:v,lineEnd:v,polygonStart:function(){fc.reset(),hc.lineStart=se},polygonEnd:function(){var n=2*fc;sc+=0>n?4*wa+n:n,hc.lineStart=hc.lineEnd=hc.point=v}};Vo.geo.bounds=function(){function n(n,t){x.push(M=[s=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=fe([t*Ca,e*Ca]);if(m){var u=ge(m,r),i=[u[1],-u[0],0],o=ge(i,u);de(o),o=me(o);var c=t-p,l=c>0?1:-1,v=o[0]*Na*l,d=ia(c)>180;if(d^(v>l*p&&l*t>v)){var y=o[1]*Na;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>l*p&&l*t>v)){var y=-o[1]*Na;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t):h>=s?(s>t&&(s=t),t>h&&(h=t)):t>p?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t)}else n(t,e);m=r,p=t}function e(){_.point=t}function r(){M[0]=s,M[1]=h,_.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=ia(r)>180?r+(r>0?360:-360):r}else v=n,d=e;hc.point(n,e),t(n,e)}function i(){hc.lineStart()}function o(){u(v,d),hc.lineEnd(),ia(y)>Ea&&(s=-(h=180)),M[0]=s,M[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function l(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var s,f,h,g,p,v,d,m,y,x,M,_={point:n,lineStart:e,lineEnd:r,polygonStart:function(){_.point=u,_.lineStart=i,_.lineEnd=o,y=0,hc.polygonStart()},polygonEnd:function(){hc.polygonEnd(),_.point=n,_.lineStart=e,_.lineEnd=r,0>fc?(s=-(h=180),f=-(g=90)):y>Ea?g=90:-Ea>y&&(f=-90),M[0]=s,M[1]=h}};return function(n){g=h=-(s=f=1/0),x=[],Vo.geo.stream(n,_);var t=x.length;if(t){x.sort(c);for(var e,r=1,u=x[0],i=[u];t>r;++r)e=x[r],l(e[0],u)||l(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e);for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,s=e[0],h=u[1])
-}return x=M=null,1/0===s||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[s,f],[h,g]]}}(),Vo.geo.centroid=function(n){gc=pc=vc=dc=mc=yc=xc=Mc=_c=bc=wc=0,Vo.geo.stream(n,Sc);var t=_c,e=bc,r=wc,u=t*t+e*e+r*r;return Aa>u&&(t=yc,e=xc,r=Mc,Ea>pc&&(t=vc,e=dc,r=mc),u=t*t+e*e+r*r,Aa>u)?[0/0,0/0]:[Math.atan2(e,t)*Na,G(r/Math.sqrt(u))*Na]};var gc,pc,vc,dc,mc,yc,xc,Mc,_c,bc,wc,Sc={sphere:v,point:xe,lineStart:_e,lineEnd:be,polygonStart:function(){Sc.lineStart=we},polygonEnd:function(){Sc.lineStart=_e}},kc=Ce(Se,Te,Re,[-wa,-wa/2]),Ec=1e9;Vo.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=je(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(Vo.geo.conicEqualArea=function(){return Fe(Oe)}).raw=Oe,Vo.geo.albers=function(){return Vo.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},Vo.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=Vo.geo.albers(),o=Vo.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=Vo.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var l=i.scale(),s=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[s-.455*l,f-.238*l],[s+.455*l,f+.238*l]]).stream(c).point,r=o.translate([s-.307*l,f+.201*l]).clipExtent([[s-.425*l+Ea,f+.12*l+Ea],[s-.214*l-Ea,f+.234*l-Ea]]).stream(c).point,u=a.translate([s-.205*l,f+.212*l]).clipExtent([[s-.214*l+Ea,f+.166*l+Ea],[s-.115*l-Ea,f+.234*l-Ea]]).stream(c).point,n},n.scale(1070)};var Ac,Cc,Nc,zc,Lc,Tc,qc={point:v,lineStart:v,lineEnd:v,polygonStart:function(){Cc=0,qc.lineStart=Ye},polygonEnd:function(){qc.lineStart=qc.lineEnd=qc.point=v,Ac+=ia(Cc/2)}},Rc={point:Ie,lineStart:v,lineEnd:v,polygonStart:v,polygonEnd:v},Dc={point:Xe,lineStart:$e,lineEnd:Be,polygonStart:function(){Dc.lineStart=We},polygonEnd:function(){Dc.point=Xe,Dc.lineStart=$e,Dc.lineEnd=Be}};Vo.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),Vo.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return Ac=0,Vo.geo.stream(n,u(qc)),Ac},n.centroid=function(n){return vc=dc=mc=yc=xc=Mc=_c=bc=wc=0,Vo.geo.stream(n,u(Dc)),wc?[_c/wc,bc/wc]:Mc?[yc/Mc,xc/Mc]:mc?[vc/mc,dc/mc]:[0/0,0/0]},n.bounds=function(n){return Lc=Tc=-(Nc=zc=1/0),Vo.geo.stream(n,u(Rc)),[[Nc,zc],[Lc,Tc]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||Ke(n):wt,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new Ze:new Je(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(Vo.geo.albersUsa()).context(null)},Vo.geo.transform=function(n){return{stream:function(t){var e=new Qe(t);for(var r in n)e[r]=n[r];return e}}},Qe.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},Vo.geo.projection=tr,Vo.geo.projectionMutator=er,(Vo.geo.equirectangular=function(){return tr(ur)}).raw=ur.invert=ur,Vo.geo.rotation=function(n){function t(t){return t=n(t[0]*Ca,t[1]*Ca),t[0]*=Na,t[1]*=Na,t}return n=or(n[0]%360*Ca,n[1]*Ca,n.length>2?n[2]*Ca:0),t.invert=function(t){return t=n.invert(t[0]*Ca,t[1]*Ca),t[0]*=Na,t[1]*=Na,t},t},ir.invert=ur,Vo.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=or(-n[0]*Ca,-n[1]*Ca,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=Na,n[1]*=Na}}),{type:"Polygon",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=sr((t=+r)*Ca,u*Ca),n):t},n.precision=function(r){return arguments.length?(e=sr(t*Ca,(u=+r)*Ca),n):u},n.angle(90)},Vo.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Ca,u=n[1]*Ca,i=t[1]*Ca,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),l=Math.cos(u),s=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=l*s-c*f*a)*e),c*s+l*f*a)},Vo.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return Vo.range(Math.ceil(i/d)*d,u,d).map(h).concat(Vo.range(Math.ceil(l/m)*m,c,m).map(g)).concat(Vo.range(Math.ceil(r/p)*p,e,p).filter(function(n){return ia(n%d)>Ea}).map(s)).concat(Vo.range(Math.ceil(a/v)*v,o,v).filter(function(n){return ia(n%m)>Ea}).map(f))}var e,r,u,i,o,a,c,l,s,f,h,g,p=10,v=p,d=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(l).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],l=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),l>c&&(t=l,l=c,c=t),n.precision(y)):[[i,l],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],m=+t[1],n):[d,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],v=+t[1],n):[p,v]},n.precision=function(t){return arguments.length?(y=+t,s=hr(a,o,90),f=gr(r,e,y),h=hr(l,c,90),g=gr(i,u,y),n):y},n.majorExtent([[-180,-90+Ea],[180,90-Ea]]).minorExtent([[-180,-80-Ea],[180,80+Ea]])},Vo.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=pr,u=vr;return n.distance=function(){return Vo.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e="function"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},Vo.geo.interpolate=function(n,t){return dr(n[0]*Ca,n[1]*Ca,t[0]*Ca,t[1]*Ca)},Vo.geo.length=function(n){return Pc=0,Vo.geo.stream(n,Uc),Pc};var Pc,Uc={sphere:v,point:v,lineStart:mr,lineEnd:v,polygonStart:v,polygonEnd:v},jc=yr(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(Vo.geo.azimuthalEqualArea=function(){return tr(jc)}).raw=jc;var Hc=yr(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},wt);(Vo.geo.azimuthalEquidistant=function(){return tr(Hc)}).raw=Hc,(Vo.geo.conicConformal=function(){return Fe(xr)}).raw=xr,(Vo.geo.conicEquidistant=function(){return Fe(Mr)}).raw=Mr;var Fc=yr(function(n){return 1/n},Math.atan);(Vo.geo.gnomonic=function(){return tr(Fc)}).raw=Fc,_r.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-ka]},(Vo.geo.mercator=function(){return br(_r)}).raw=_r;var Oc=yr(function(){return 1},Math.asin);(Vo.geo.orthographic=function(){return tr(Oc)}).raw=Oc;var Yc=yr(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(Vo.geo.stereographic=function(){return tr(Yc)}).raw=Yc,wr.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-ka]},(Vo.geo.transverseMercator=function(){var n=br(wr),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=wr,Vo.geom={},Vo.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u=bt(e),i=bt(r),o=n.length,a=[],c=[];for(t=0;o>t;t++)a.push([+u.call(this,n[t],t),+i.call(this,n[t],t),t]);for(a.sort(Ar),t=0;o>t;t++)c.push([a[t][0],-a[t][1]]);var l=Er(a),s=Er(c),f=s[0]===l[0],h=s[s.length-1]===l[l.length-1],g=[];for(t=l.length-1;t>=0;--t)g.push(n[a[l[t]][2]]);for(t=+f;t<s.length-h;++t)g.push(n[a[s[t]][2]]);return g}var e=Sr,r=kr;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},Vo.geom.polygon=function(n){return sa(n,Ic),n};var Ic=Vo.geom.polygon.prototype=[];Ic.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],u=0;++t<e;)n=r,r=this[t],u+=n[1]*r[0]-n[0]*r[1];return.5*u},Ic.centroid=function(n){var t,e,r=-1,u=this.length,i=0,o=0,a=this[u-1];for(arguments.length||(n=-1/(6*this.area()));++r<u;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],i+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[i*n,o*n]},Ic.clip=function(n){for(var t,e,r,u,i,o,a=zr(n),c=-1,l=this.length-zr(this),s=this[l-1];++c<l;){for(t=n.slice(),n.length=0,u=this[c],i=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Cr(o,s,u)?(Cr(i,s,u)||n.push(Nr(i,o,s,u)),n.push(o)):Cr(i,s,u)&&n.push(Nr(i,o,s,u)),i=o;a&&n.push(n[0]),s=u}return n};var Zc,Vc,Xc,$c,Bc,Wc=[],Jc=[];jr.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Fr),t.length},Jr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},Gr.prototype={insert:function(n,t){var e,r,u;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=tu(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(u=r.R,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.R&&(Qr(this,e),n=e,e=n.U),e.C=!1,r.C=!0,nu(this,r))):(u=r.L,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.L&&(nu(this,e),n=e,e=n.U),e.C=!1,r.C=!0,Qr(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,u=n.U,i=n.L,o=n.R;if(e=i?o?tu(o):i:o,u?u.L===n?u.L=e:u.R=e:this._=e,i&&o?(r=e.C,e.C=n.C,e.L=i,i.U=e,e!==o?(u=e.U,e.U=n.U,n=e.R,u.L=n,e.R=o,o.U=e):(e.U=u,u=e,n=e.R)):(r=n.C,n=e),n&&(n.U=u),!r){if(n&&n.C)return n.C=!1,void 0;do{if(n===this._)break;if(n===u.L){if(t=u.R,t.C&&(t.C=!1,u.C=!0,Qr(this,u),t=u.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,nu(this,t),t=u.R),t.C=u.C,u.C=t.R.C=!1,Qr(this,u),n=this._;break}}else if(t=u.L,t.C&&(t.C=!1,u.C=!0,nu(this,u),t=u.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,Qr(this,t),t=u.L),t.C=u.C,u.C=t.L.C=!1,nu(this,u),n=this._;break}t.C=!0,n=u,u=u.U}while(!n.C);n&&(n.C=!1)}}},Vo.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],u=a[0][1],i=a[1][0],o=a[1][1];return eu(e(n),a).cells.forEach(function(e,a){var c=e.edges,l=e.site,s=t[a]=c.length?c.map(function(n){var t=n.start();return[t.x,t.y]}):l.x>=r&&l.x<=i&&l.y>=u&&l.y<=o?[[r,o],[i,o],[i,u],[r,u]]:[];s.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(i(n,t)/Ea)*Ea,y:Math.round(o(n,t)/Ea)*Ea,i:t}})}var r=Sr,u=kr,i=r,o=u,a=Gc;return n?t(n):(t.links=function(n){return eu(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return eu(e(n)).cells.forEach(function(e,r){for(var u,i,o=e.site,a=e.edges.sort(Fr),c=-1,l=a.length,s=a[l-1].edge,f=s.l===o?s.r:s.l;++c<l;)u=s,i=f,s=a[c].edge,f=s.l===o?s.r:s.l,r<i.i&&r<f.i&&uu(o,i,f)<0&&t.push([n[r],n[i.i],n[f.i]])}),t},t.x=function(n){return arguments.length?(i=bt(r=n),t):r},t.y=function(n){return arguments.length?(o=bt(u=n),t):u},t.clipExtent=function(n){return arguments.length?(a=null==n?Gc:n,t):a===Gc?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===Gc?null:a&&a[1]},t)};var Gc=[[-1e6,-1e6],[1e6,1e6]];Vo.geom.delaunay=function(n){return Vo.geom.voronoi().triangles(n)},Vo.geom.quadtree=function(n,t,e,r,u){function i(n){function i(n,t,e,r,u,i,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var c=n.x,s=n.y;if(null!=c)if(ia(c-e)+ia(s-r)<.01)l(n,t,e,r,u,i,o,a);else{var f=n.point;n.x=n.y=n.point=null,l(n,f,c,s,u,i,o,a),l(n,t,e,r,u,i,o,a)}else n.x=e,n.y=r,n.point=t}else l(n,t,e,r,u,i,o,a)}function l(n,t,e,r,u,o,a,c){var l=.5*(u+a),s=.5*(o+c),f=e>=l,h=r>=s,g=(h<<1)+f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=au()),f?u=l:a=l,h?o=s:c=s,i(n,t,e,r,u,o,a,c)}var s,f,h,g,p,v,d,m,y,x=bt(a),M=bt(c);if(null!=t)v=t,d=e,m=r,y=u;else if(m=y=-(v=d=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)s=n[g],s.x<v&&(v=s.x),s.y<d&&(d=s.y),s.x>m&&(m=s.x),s.y>y&&(y=s.y),f.push(s.x),h.push(s.y);else for(g=0;p>g;++g){var _=+x(s=n[g],g),b=+M(s,g);v>_&&(v=_),d>b&&(d=b),_>m&&(m=_),b>y&&(y=b),f.push(_),h.push(b)}var w=m-v,S=y-d;w>S?y=d+w:m=v+S;var k=au();if(k.add=function(n){i(k,n,+x(n,++g),+M(n,g),v,d,m,y)},k.visit=function(n){cu(n,k,v,d,m,y)},g=-1,null==t){for(;++g<p;)i(k,n[g],f[g],h[g],v,d,m,y);--g}else n.forEach(k.add);return f=h=n=s=null,k}var o,a=Sr,c=kr;return(o=arguments.length)?(a=iu,c=ou,3===o&&(u=e,r=t,e=t=0),i(n)):(i.x=function(n){return arguments.length?(a=n,i):a},i.y=function(n){return arguments.length?(c=n,i):c},i.extent=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],u=+n[1][1]),i):null==t?null:[[t,e],[r,u]]},i.size=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=e=0,r=+n[0],u=+n[1]),i):null==t?null:[r-t,u-e]},i)},Vo.interpolateRgb=lu,Vo.interpolateObject=su,Vo.interpolateNumber=fu,Vo.interpolateString=hu;var Kc=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Qc=new RegExp(Kc.source,"g");Vo.interpolate=gu,Vo.interpolators=[function(n,t){var e=typeof t;return("string"===e?Za.has(t)||/^(#|rgb\(|hsl\()/.test(t)?lu:hu:t instanceof et?lu:Array.isArray(t)?pu:"object"===e&&isNaN(t)?su:fu)(n,t)}],Vo.interpolateArray=pu;var nl=function(){return wt},tl=Vo.map({linear:nl,poly:_u,quad:function(){return yu},cubic:function(){return xu},sin:function(){return bu},exp:function(){return wu},circle:function(){return Su},elastic:ku,back:Eu,bounce:function(){return Au}}),el=Vo.map({"in":wt,out:du,"in-out":mu,"out-in":function(n){return mu(du(n))}});Vo.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=tl.get(e)||nl,r=el.get(r)||wt,vu(r(e.apply(null,Xo.call(arguments,1))))},Vo.interpolateHcl=Cu,Vo.interpolateHsl=Nu,Vo.interpolateLab=zu,Vo.interpolateRound=Lu,Vo.transform=function(n){var t=Bo.createElementNS(Vo.ns.prefix.svg,"g");return(Vo.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Tu(e?e.matrix:rl)})(n)},Tu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var rl={a:1,b:0,c:0,d:1,e:0,f:0};Vo.interpolateTransform=Pu,Vo.layout={},Vo.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Hu(n[e]));return t}},Vo.layout.chord=function(){function n(){var n,l,f,h,g,p={},v=[],d=Vo.range(i),m=[];for(e=[],r=[],n=0,h=-1;++h<i;){for(l=0,g=-1;++g<i;)l+=u[h][g];v.push(l),m.push(Vo.range(i)),n+=l}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&m.forEach(function(n,t){n.sort(function(n,e){return a(u[t][n],u[t][e])})}),n=(Sa-s*i)/n,l=0,h=-1;++h<i;){for(f=l,g=-1;++g<i;){var y=d[h],x=m[y][g],M=u[y][x],_=l,b=l+=M*n;p[y+"-"+x]={index:y,subindex:x,startAngle:_,endAngle:b,value:M}}r[y]={index:y,startAngle:f,endAngle:l,value:(l-f)/n},l+=s}for(h=-1;++h<i;)for(g=h-1;++g<i;){var w=p[h+"-"+g],S=p[g+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}c&&t()}function t(){e.sort(function(n,t){return c((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,u,i,o,a,c,l={},s=0;return l.matrix=function(n){return arguments.length?(i=(u=n)&&u.length,e=r=null,l):u},l.padding=function(n){return arguments.length?(s=n,e=r=null,l):s},l.sortGroups=function(n){return arguments.length?(o=n,e=r=null,l):o},l.sortSubgroups=function(n){return arguments.length?(a=n,e=null,l):a},l.sortChords=function(n){return arguments.length?(c=n,e&&t(),l):c},l.chords=function(){return e||n(),e},l.groups=function(){return r||n(),r},l},Vo.layout.force=function(){function n(n){return function(t,e,r,u){if(t.point!==n){var i=t.cx-n.x,o=t.cy-n.y,a=u-e,c=i*i+o*o;if(c>a*a/d){if(p>c){var l=t.charge/c;n.px-=i*l,n.py-=o*l}return!0}if(t.point&&c&&p>c){var l=t.pointCharge/c;n.px-=i*l,n.py-=o*l}}return!t.charge}}function t(n){n.px=Vo.event.x,n.py=Vo.event.y,a.resume()}var e,r,u,i,o,a={},c=Vo.dispatch("start","tick","end"),l=[1,1],s=.9,f=ul,h=il,g=-30,p=ol,v=.1,d=.64,m=[],y=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,a,f,h,p,d,x,M,_=m.length,b=y.length;for(e=0;b>e;++e)a=y[e],f=a.source,h=a.target,x=h.x-f.x,M=h.y-f.y,(p=x*x+M*M)&&(p=r*i[e]*((p=Math.sqrt(p))-u[e])/p,x*=p,M*=p,h.x-=x*(d=f.weight/(h.weight+f.weight)),h.y-=M*d,f.x+=x*(d=1-d),f.y+=M*d);if((d=r*v)&&(x=l[0]/2,M=l[1]/2,e=-1,d))for(;++e<_;)a=m[e],a.x+=(x-a.x)*d,a.y+=(M-a.y)*d;if(g)for(Xu(t=Vo.geom.quadtree(m),r,o),e=-1;++e<_;)(a=m[e]).fixed||t.visit(n(a));for(e=-1;++e<_;)a=m[e],a.fixed?(a.x=a.px,a.y=a.py):(a.x-=(a.px-(a.px=a.x))*s,a.y-=(a.py-(a.py=a.y))*s);c.tick({type:"tick",alpha:r})},a.nodes=function(n){return arguments.length?(m=n,a):m},a.links=function(n){return arguments.length?(y=n,a):y},a.size=function(n){return arguments.length?(l=n,a):l},a.linkDistance=function(n){return arguments.length?(f="function"==typeof n?n:+n,a):f},a.distance=a.linkDistance,a.linkStrength=function(n){return arguments.length?(h="function"==typeof n?n:+n,a):h},a.friction=function(n){return arguments.length?(s=+n,a):s},a.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,a):g},a.chargeDistance=function(n){return arguments.length?(p=n*n,a):Math.sqrt(p)},a.gravity=function(n){return arguments.length?(v=+n,a):v},a.theta=function(n){return arguments.length?(d=n*n,a):Math.sqrt(d)},a.alpha=function(n){return arguments.length?(n=+n,r?r=n>0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),Vo.timer(a.tick)),a):r},a.start=function(){function n(n,r){if(!e){for(e=new Array(c),a=0;c>a;++a)e[a]=[];for(a=0;l>a;++a){var u=y[a];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var i,o=e[t],a=-1,l=o.length;++a<l;)if(!isNaN(i=o[a][n]))return i;return Math.random()*r}var t,e,r,c=m.length,s=y.length,p=l[0],v=l[1];for(t=0;c>t;++t)(r=m[t]).index=t,r.weight=0;for(t=0;s>t;++t)r=y[t],"number"==typeof r.source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;c>t;++t)r=m[t],isNaN(r.x)&&(r.x=n("x",p)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof f)for(t=0;s>t;++t)u[t]=+f.call(this,y[t],t);else for(t=0;s>t;++t)u[t]=f;if(i=[],"function"==typeof h)for(t=0;s>t;++t)i[t]=+h.call(this,y[t],t);else for(t=0;s>t;++t)i[t]=h;if(o=[],"function"==typeof g)for(t=0;c>t;++t)o[t]=+g.call(this,m[t],t);else for(t=0;c>t;++t)o[t]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=Vo.behavior.drag().origin(wt).on("dragstart.force",Yu).on("drag.force",t).on("dragend.force",Iu)),arguments.length?(this.on("mouseover.force",Zu).on("mouseout.force",Vu).call(e),void 0):e},Vo.rebind(a,c,"on")};var ul=20,il=1,ol=1/0;Vo.layout.hierarchy=function(){function n(u){var i,o=[u],a=[];for(u.depth=0;null!=(i=o.pop());)if(a.push(i),(l=e.call(n,i,i.depth))&&(c=l.length)){for(var c,l,s;--c>=0;)o.push(s=l[c]),s.parent=i,s.depth=i.depth+1;r&&(i.value=0),i.children=l}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return Wu(u,function(n){var e,u;t&&(e=n.children)&&e.sort(t),r&&(u=n.parent)&&(u.value+=n.value)}),a}var t=Ku,e=Ju,r=Gu;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(Bu(t,function(n){n.children&&(n.value=0)}),Wu(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},Vo.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,l=-1;for(r=t.value?r/t.value:0;++l<o;)n(a=i[l],e,c=a.value*r,u),e+=c}}function t(n){var e=n.children,r=0;if(e&&(u=e.length))for(var u,i=-1;++i<u;)r=Math.max(r,t(e[i]));return 1+r}function e(e,i){var o=r.call(this,e,i);return n(o[0],0,u[0],u[1]/t(o[0])),o}var r=Vo.layout.hierarchy(),u=[1,1];return e.size=function(n){return arguments.length?(u=n,e):u},$u(e,r)},Vo.layout.pie=function(){function n(i){var o=i.map(function(e,r){return+t.call(n,e,r)}),a=+("function"==typeof r?r.apply(this,arguments):r),c=(("function"==typeof u?u.apply(this,arguments):u)-a)/Vo.sum(o),l=Vo.range(i.length);null!=e&&l.sort(e===al?function(n,t){return o[t]-o[n]}:function(n,t){return e(i[n],i[t])});var s=[];return l.forEach(function(n){var t;s[n]={data:i[n],value:t=o[n],startAngle:a,endAngle:a+=t*c}}),s}var t=Number,e=al,r=0,u=Sa;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n};var al={};Vo.layout.stack=function(){function n(a,c){var l=a.map(function(e,r){return t.call(n,e,r)}),s=l.map(function(t){return t.map(function(t,e){return[i.call(n,t,e),o.call(n,t,e)]})}),f=e.call(n,s,c);l=Vo.permute(l,f),s=Vo.permute(s,f);var h,g,p,v=r.call(n,s,c),d=l.length,m=l[0].length;for(g=0;m>g;++g)for(u.call(n,l[0][g],p=v[g],s[0][g][1]),h=1;d>h;++h)u.call(n,l[h][g],p+=s[h-1][g][1],s[h][g][1]);return a}var t=wt,e=ri,r=ui,u=ei,i=ni,o=ti;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:cl.get(t)||ri,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:ll.get(t)||ui,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var cl=Vo.map({"inside-out":function(n){var t,e,r=n.length,u=n.map(ii),i=n.map(oi),o=Vo.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,l=[],s=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],l.push(e)):(c+=i[e],s.push(e));return s.reverse().concat(l)},reverse:function(n){return Vo.range(n.length).reverse()},"default":ri}),ll=Vo.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,l,s=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=l=0,e=1;h>e;++e){for(t=0,u=0;s>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];s>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,l>c&&(l=c)}for(e=0;h>e;++e)g[e]-=l;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:ui});Vo.layout.histogram=function(){function n(n,i){for(var o,a,c=[],l=n.map(e,this),s=r.call(this,l,i),f=u.call(this,s,l,i),i=-1,h=l.length,g=f.length-1,p=t?1:1/h;++i<g;)o=c[i]=[],o.dx=f[i+1]-(o.x=f[i]),o.y=0;if(g>0)for(i=-1;++i<h;)a=l[i],a>=s[0]&&a<=s[1]&&(o=c[Vo.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=si,u=ci;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=bt(t),n):r},n.bins=function(t){return arguments.length?(u="number"==typeof t?function(n){return li(n,t)}:bt(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},Vo.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],l=u[1],s=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,Wu(a,function(n){n.r=+s(n.value)}),Wu(a,vi),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/l))/2;Wu(a,function(n){n.r+=f}),Wu(a,vi),Wu(a,function(n){n.r-=f})}return yi(a,c/2,l/2,t?1:1/Math.max(2*a.r/c,2*a.r/l)),o}var t,e=Vo.layout.hierarchy().sort(fi),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},$u(n,e)},Vo.layout.tree=function(){function n(n,u){var s=o.call(this,n,u),f=s[0],h=t(f);if(Wu(h,e),h.parent.m=-h.z,Bu(h,r),l)Bu(f,i);else{var g=f,p=f,v=f;Bu(f,function(n){n.x<g.x&&(g=n),n.x>p.x&&(p=n),n.depth>v.depth&&(v=n)});var d=a(g,p)/2-g.x,m=c[0]/(p.x+a(p,g)/2+d),y=c[1]/(v.depth||1);Bu(f,function(n){n.x=(n.x+d)*m,n.y=n.depth*y})}return s}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var u,i=t.children,o=0,a=i.length;a>o;++o)r.push((i[o]=u={_:i[o],parent:t,children:(u=i[o].children)&&u.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=u);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Si(n);var i=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-i):n.z=i}else r&&(n.z=r.z+a(n._,r._));n.parent.A=u(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function u(n,t,e){if(t){for(var r,u=n,i=n,o=t,c=u.parent.children[0],l=u.m,s=i.m,f=o.m,h=c.m;o=bi(o),u=_i(u),o&&u;)c=_i(c),i=bi(i),i.a=n,r=o.z+f-u.z-l+a(o._,u._),r>0&&(wi(ki(o,n,e),n,r),l+=r,s+=r),f+=o.m,l+=u.m,h+=c.m,s+=i.m;o&&!bi(i)&&(i.t=o,i.m+=f-s),u&&!_i(c)&&(c.t=u,c.m+=l-h,e=n)}return e}function i(n){n.x*=c[0],n.y=n.depth*c[1]}var o=Vo.layout.hierarchy().sort(null).value(null),a=Mi,c=[1,1],l=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(l=null==(c=t)?i:null,n):l?null:c},n.nodeSize=function(t){return arguments.length?(l=null==(c=t)?null:i,n):l?c:null},$u(n,o)},Vo.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],l=0;Wu(c,function(n){var t=n.children;t&&t.length?(n.x=Ai(t),n.y=Ei(t)):(n.x=o?l+=e(n,o):0,n.y=0,o=n)});var s=Ci(c),f=Ni(c),h=s.x-e(s,f)/2,g=f.x+e(f,s)/2;return Wu(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=Vo.layout.hierarchy().sort(null).value(null),e=Mi,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},$u(n,t)},Vo.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++u<i;)r=(e=n[u]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,l=f(e),s=[],h=i.slice(),p=1/0,v="slice"===g?l.dx:"dice"===g?l.dy:"slice-dice"===g?1&e.depth?l.dy:l.dx:Math.min(l.dx,l.dy);for(n(h,l.dx*l.dy/e.value),s.area=0;(c=h.length)>0;)s.push(o=h[c-1]),s.area+=o.area,"squarify"!==g||(a=r(s,v))<=p?(h.pop(),p=a):(s.area-=s.pop().area,u(s,v,l,!1),v=Math.min(l.dx,l.dy),s.length=s.area=0,p=1/0);s.length&&(u(s,v,l,!0),s.length=s.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(i>e&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,l=e.y,s=t?c(n.area/t):0;if(t==e.dx){for((r||s>e.dy)&&(s=e.dy);++i<o;)u=n[i],u.x=a,u.y=l,u.dy=s,a+=u.dx=Math.min(e.x+e.dx-a,s?c(u.area/s):0);u.z=!0,u.dx+=e.x+e.dx-a,e.y+=s,e.dy-=s}else{for((r||s>e.dx)&&(s=e.dx);++i<o;)u=n[i],u.x=a,u.y=l,u.dx=s,l+=u.dy=Math.min(e.y+e.dy-l,s?c(u.area/s):0);u.z=!1,u.dy+=e.y+e.dy-l,e.x+=s,e.dx-=s}}function i(r){var u=o||a(r),i=u[0];return i.x=0,i.y=0,i.dx=l[0],i.dy=l[1],o&&a.revalue(i),n([i],i.dx*i.dy/i.value),(o?e:t)(i),h&&(o=u),u}var o,a=Vo.layout.hierarchy(),c=Math.round,l=[1,1],s=null,f=zi,h=!1,g="squarify",p=.5*(1+Math.sqrt(5));return i.size=function(n){return arguments.length?(l=n,i):l},i.padding=function(n){function t(t){var e=n.call(i,t,t.depth);return null==e?zi(t):Li(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Li(t,n)}if(!arguments.length)return s;var r;return f=null==(s=n)?zi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,i},i.round=function(n){return arguments.length?(c=n?Math.round:Number,i):c!=Number},i.sticky=function(n){return arguments.length?(h=n,o=null,i):h},i.ratio=function(n){return arguments.length?(p=n,i):p},i.mode=function(n){return arguments.length?(g=n+"",i):g},$u(i,a)},Vo.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=Vo.random.normal.apply(Vo,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=Vo.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},Vo.scale={};var sl={floor:wt,ceil:wt};Vo.scale.linear=function(){return ji([0,1],[0,1],gu,!1)};var fl={s:1,g:1,p:1,r:1,e:1};Vo.scale.log=function(){return Xi(Vo.scale.linear().domain([0,1]),10,!0,[1,10])};var hl=Vo.format(".0e"),gl={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};Vo.scale.pow=function(){return $i(Vo.scale.linear(),1,[0,1])},Vo.scale.sqrt=function(){return Vo.scale.pow().exponent(.5)},Vo.scale.ordinal=function(){return Wi([],{t:"range",a:[[]]})},Vo.scale.category10=function(){return Vo.scale.ordinal().range(pl)},Vo.scale.category20=function(){return Vo.scale.ordinal().range(vl)},Vo.scale.category20b=function(){return Vo.scale.ordinal().range(dl)},Vo.scale.category20c=function(){return Vo.scale.ordinal().range(ml)};var pl=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(vt),vl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(vt),dl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(vt),ml=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(vt);Vo.scale.quantile=function(){return Ji([],[])},Vo.scale.quantize=function(){return Gi(0,1,[0,1])},Vo.scale.threshold=function(){return Ki([.5],[0,1])},Vo.scale.identity=function(){return Qi([0,1])},Vo.svg={},Vo.svg.arc=function(){function n(){var n=t.apply(this,arguments),i=e.apply(this,arguments),o=r.apply(this,arguments)+yl,a=u.apply(this,arguments)+yl,c=(o>a&&(c=o,o=a,a=c),a-o),l=wa>c?"0":"1",s=Math.cos(o),f=Math.sin(o),h=Math.cos(a),g=Math.sin(a);
-return c>=xl?n?"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"M0,"+n+"A"+n+","+n+" 0 1,0 0,"+-n+"A"+n+","+n+" 0 1,0 0,"+n+"Z":"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"Z":n?"M"+i*s+","+i*f+"A"+i+","+i+" 0 "+l+",1 "+i*h+","+i*g+"L"+n*h+","+n*g+"A"+n+","+n+" 0 "+l+",0 "+n*s+","+n*f+"Z":"M"+i*s+","+i*f+"A"+i+","+i+" 0 "+l+",1 "+i*h+","+i*g+"L0,0"+"Z"}var t=no,e=to,r=eo,u=ro;return n.innerRadius=function(e){return arguments.length?(t=bt(e),n):t},n.outerRadius=function(t){return arguments.length?(e=bt(t),n):e},n.startAngle=function(t){return arguments.length?(r=bt(t),n):r},n.endAngle=function(t){return arguments.length?(u=bt(t),n):u},n.centroid=function(){var n=(t.apply(this,arguments)+e.apply(this,arguments))/2,i=(r.apply(this,arguments)+u.apply(this,arguments))/2+yl;return[Math.cos(i)*n,Math.sin(i)*n]},n};var yl=-ka,xl=Sa-Ea;Vo.svg.line=function(){return uo(wt)};var Ml=Vo.map({linear:io,"linear-closed":oo,step:ao,"step-before":co,"step-after":lo,basis:vo,"basis-open":mo,"basis-closed":yo,bundle:xo,cardinal:ho,"cardinal-open":so,"cardinal-closed":fo,monotone:ko});Ml.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var _l=[0,2/3,1/3,0],bl=[0,1/3,2/3,0],wl=[0,1/6,2/3,1/6];Vo.svg.line.radial=function(){var n=uo(Eo);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},co.reverse=lo,lo.reverse=co,Vo.svg.area=function(){return Ao(wt)},Vo.svg.area.radial=function(){var n=Ao(Eo);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},Vo.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),l=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,l)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,l.r,l.p0)+r(l.r,l.p1,l.a1-l.a0)+u(l.r,l.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)+yl,s=l.call(n,u,r)+yl;return{r:i,a0:o,a1:s,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(s),i*Math.sin(s)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>wa)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=pr,o=vr,a=Co,c=eo,l=ro;return n.radius=function(t){return arguments.length?(a=bt(t),n):a},n.source=function(t){return arguments.length?(i=bt(t),n):i},n.target=function(t){return arguments.length?(o=bt(t),n):o},n.startAngle=function(t){return arguments.length?(c=bt(t),n):c},n.endAngle=function(t){return arguments.length?(l=bt(t),n):l},n},Vo.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=pr,e=vr,r=No;return n.source=function(e){return arguments.length?(t=bt(e),n):t},n.target=function(t){return arguments.length?(e=bt(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},Vo.svg.diagonal.radial=function(){var n=Vo.svg.diagonal(),t=No,e=n.projection;return n.projection=function(n){return arguments.length?e(zo(t=n)):t},n},Vo.svg.symbol=function(){function n(n,r){return(Sl.get(t.call(this,n,r))||qo)(e.call(this,n,r))}var t=To,e=Lo;return n.type=function(e){return arguments.length?(t=bt(e),n):t},n.size=function(t){return arguments.length?(e=bt(t),n):e},n};var Sl=Vo.map({circle:qo,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Cl)),e=t*Cl;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/Al),e=t*Al/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/Al),e=t*Al/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});Vo.svg.symbolTypes=Sl.keys();var kl,El,Al=Math.sqrt(3),Cl=Math.tan(30*Ca),Nl=[],zl=0;Nl.call=va.call,Nl.empty=va.empty,Nl.node=va.node,Nl.size=va.size,Vo.transition=function(n){return arguments.length?kl?n.transition():n:ya.transition()},Vo.transition.prototype=Nl,Nl.select=function(n){var t,e,r,u=this.id,i=[];n=b(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]);for(var c=this[o],l=-1,s=c.length;++l<s;)(r=c[l])&&(e=n.call(r,r.__data__,l,o))?("__data__"in r&&(e.__data__=r.__data__),Uo(e,l,u,r.__transition__[u]),t.push(e)):t.push(null)}return Ro(i,u)},Nl.selectAll=function(n){var t,e,r,u,i,o=this.id,a=[];n=w(n);for(var c=-1,l=this.length;++c<l;)for(var s=this[c],f=-1,h=s.length;++f<h;)if(r=s[f]){i=r.__transition__[o],e=n.call(r,r.__data__,f,c),a.push(t=[]);for(var g=-1,p=e.length;++g<p;)(u=e[g])&&Uo(u,g,o,i),t.push(u)}return Ro(a,o)},Nl.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=R(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return Ro(u,this.id)},Nl.tween=function(n,t){var e=this.id;return arguments.length<2?this.node().__transition__[e].tween.get(n):P(this,null==t?function(t){t.__transition__[e].tween.remove(n)}:function(r){r.__transition__[e].tween.set(n,t)})},Nl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?Pu:gu,a=Vo.ns.qualify(n);return Do(this,"attr."+n,t,a.local?i:u)},Nl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=Vo.ns.qualify(n);return this.tween("attr."+n,u.local?r:e)},Nl.style=function(n,t,e){function r(){this.style.removeProperty(n)}function u(t){return null==t?r:(t+="",function(){var r,u=Jo.getComputedStyle(this,null).getPropertyValue(n);return u!==t&&(r=gu(u,t),function(t){this.style.setProperty(n,r(t),e)})})}var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return Do(this,"style."+n,t,u)},Nl.styleTween=function(n,t,e){function r(r,u){var i=t.call(this,r,u,Jo.getComputedStyle(this,null).getPropertyValue(n));return i&&function(t){this.style.setProperty(n,i(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},Nl.text=function(n){return Do(this,"text",n,Po)},Nl.remove=function(){return this.each("end.transition",function(){var n;this.__transition__.count<2&&(n=this.parentNode)&&n.removeChild(this)})},Nl.ease=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].ease:("function"!=typeof n&&(n=Vo.ease.apply(Vo,arguments)),P(this,function(e){e.__transition__[t].ease=n}))},Nl.delay=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].delay:P(this,"function"==typeof n?function(e,r,u){e.__transition__[t].delay=+n.call(e,e.__data__,r,u)}:(n=+n,function(e){e.__transition__[t].delay=n}))},Nl.duration=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].duration:P(this,"function"==typeof n?function(e,r,u){e.__transition__[t].duration=Math.max(1,n.call(e,e.__data__,r,u))}:(n=Math.max(1,n),function(e){e.__transition__[t].duration=n}))},Nl.each=function(n,t){var e=this.id;if(arguments.length<2){var r=El,u=kl;kl=e,P(this,function(t,r,u){El=t.__transition__[e],n.call(t,t.__data__,r,u)}),El=r,kl=u}else P(this,function(r){var u=r.__transition__[e];(u.event||(u.event=Vo.dispatch("start","end"))).on(n,t)});return this},Nl.transition=function(){for(var n,t,e,r,u=this.id,i=++zl,o=[],a=0,c=this.length;c>a;a++){o.push(n=[]);for(var t=this[a],l=0,s=t.length;s>l;l++)(e=t[l])&&(r=Object.create(e.__transition__[u]),r.delay+=r.duration,Uo(e,l,i,r)),n.push(e)}return Ro(o,i)},Vo.svg.axis=function(){function n(n){n.each(function(){var n,l=Vo.select(this),s=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):wt:t,p=l.selectAll(".tick").data(h,f),v=p.enter().insert("g",".domain").attr("class","tick").style("opacity",Ea),d=Vo.transition(p.exit()).style("opacity",Ea).remove(),m=Vo.transition(p.order()).style("opacity",1),y=qi(f),x=l.selectAll(".domain").data([0]),M=(x.enter().append("path").attr("class","domain"),Vo.transition(x));v.append("line"),v.append("text");var _=v.select("line"),b=m.select("line"),w=p.select("text").text(g),S=v.select("text"),k=m.select("text");switch(r){case"bottom":n=jo,_.attr("y2",u),S.attr("y",Math.max(u,0)+o),b.attr("x2",0).attr("y2",u),k.attr("x",0).attr("y",Math.max(u,0)+o),w.attr("dy",".71em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+i+"V0H"+y[1]+"V"+i);break;case"top":n=jo,_.attr("y2",-u),S.attr("y",-(Math.max(u,0)+o)),b.attr("x2",0).attr("y2",-u),k.attr("x",0).attr("y",-(Math.max(u,0)+o)),w.attr("dy","0em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+-i+"V0H"+y[1]+"V"+-i);break;case"left":n=Ho,_.attr("x2",-u),S.attr("x",-(Math.max(u,0)+o)),b.attr("x2",-u).attr("y2",0),k.attr("x",-(Math.max(u,0)+o)).attr("y",0),w.attr("dy",".32em").style("text-anchor","end"),M.attr("d","M"+-i+","+y[0]+"H0V"+y[1]+"H"+-i);break;case"right":n=Ho,_.attr("x2",u),S.attr("x",Math.max(u,0)+o),b.attr("x2",u).attr("y2",0),k.attr("x",Math.max(u,0)+o).attr("y",0),w.attr("dy",".32em").style("text-anchor","start"),M.attr("d","M"+i+","+y[0]+"H0V"+y[1]+"H"+i)}if(f.rangeBand){var E=f,A=E.rangeBand()/2;s=f=function(n){return E(n)+A}}else s.rangeBand?s=f:d.call(n,f);v.call(n,s),m.call(n,f)})}var t,e=Vo.scale.linear(),r=Ll,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Tl?t+"":Ll,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Ll="bottom",Tl={top:1,right:1,bottom:1,left:1};Vo.svg.brush=function(){function n(i){i.each(function(){var i=Vo.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=i.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=i.selectAll(".resize").data(p,wt);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return ql[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var s,f=Vo.transition(i),h=Vo.transition(o);c&&(s=qi(c),h.attr("x",s[0]).attr("width",s[1]-s[0]),e(f)),l&&(s=qi(l),h.attr("y",s[0]).attr("height",s[1]-s[0]),r(f)),t(f)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+f[+/^s/.test(n)]+")"})}function e(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function r(n){n.select(".extent").attr("y",f[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function u(){function u(){32==Vo.event.keyCode&&(C||(x=null,z[0]-=s[1],z[1]-=f[1],C=2),y())}function p(){32==Vo.event.keyCode&&2==C&&(z[0]+=s[1],z[1]+=f[1],C=0,y())}function v(){var n=Vo.mouse(_),u=!1;M&&(n[0]+=M[0],n[1]+=M[1]),C||(Vo.event.altKey?(x||(x=[(s[0]+s[1])/2,(f[0]+f[1])/2]),z[0]=s[+(n[0]<x[0])],z[1]=f[+(n[1]<x[1])]):x=null),E&&d(n,c,0)&&(e(S),u=!0),A&&d(n,l,1)&&(r(S),u=!0),u&&(t(S),w({type:"brush",mode:C?"move":"resize"}))}function d(n,t,e){var r,u,a=qi(t),c=a[0],l=a[1],p=z[e],v=e?f:s,d=v[1]-v[0];return C&&(c-=p,l-=d+p),r=(e?g:h)?Math.max(c,Math.min(l,n[e])):n[e],C?u=(r+=p)+d:(x&&(p=Math.max(c,Math.min(l,2*x[e]-r))),r>p?(u=r,r=p):u=p),v[0]!=r||v[1]!=u?(e?o=null:i=null,v[0]=r,v[1]=u,!0):void 0}function m(){v(),S.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),Vo.select("body").style("cursor",null),L.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),N(),w({type:"brushend"})}var x,M,_=this,b=Vo.select(Vo.event.target),w=a.of(_,arguments),S=Vo.select(_),k=b.datum(),E=!/^(n|s)$/.test(k)&&c,A=!/^(e|w)$/.test(k)&&l,C=b.classed("extent"),N=I(),z=Vo.mouse(_),L=Vo.select(Jo).on("keydown.brush",u).on("keyup.brush",p);if(Vo.event.changedTouches?L.on("touchmove.brush",v).on("touchend.brush",m):L.on("mousemove.brush",v).on("mouseup.brush",m),S.interrupt().selectAll("*").interrupt(),C)z[0]=s[0]-z[0],z[1]=f[0]-z[1];else if(k){var T=+/w$/.test(k),q=+/^n/.test(k);M=[s[1-T]-z[0],f[1-q]-z[1]],z[0]=s[T],z[1]=f[q]}else Vo.event.altKey&&(x=z.slice());S.style("pointer-events","none").selectAll(".resize").style("display",null),Vo.select("body").style("cursor",b.style("cursor")),w({type:"brushstart"}),v()}var i,o,a=M(n,"brushstart","brush","brushend"),c=null,l=null,s=[0,0],f=[0,0],h=!0,g=!0,p=Rl[0];return n.event=function(n){n.each(function(){var n=a.of(this,arguments),t={x:s,y:f,i:i,j:o},e=this.__chart__||t;this.__chart__=t,kl?Vo.select(this).transition().each("start.brush",function(){i=e.i,o=e.j,s=e.x,f=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=pu(s,t.x),r=pu(f,t.y);return i=o=null,function(u){s=t.x=e(u),f=t.y=r(u),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){i=t.i,o=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,p=Rl[!c<<1|!l],n):c},n.y=function(t){return arguments.length?(l=t,p=Rl[!c<<1|!l],n):l},n.clamp=function(t){return arguments.length?(c&&l?(h=!!t[0],g=!!t[1]):c?h=!!t:l&&(g=!!t),n):c&&l?[h,g]:c?h:l?g:null},n.extent=function(t){var e,r,u,a,h;return arguments.length?(c&&(e=t[0],r=t[1],l&&(e=e[0],r=r[0]),i=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(h=e,e=r,r=h),(e!=s[0]||r!=s[1])&&(s=[e,r])),l&&(u=t[0],a=t[1],c&&(u=u[1],a=a[1]),o=[u,a],l.invert&&(u=l(u),a=l(a)),u>a&&(h=u,u=a,a=h),(u!=f[0]||a!=f[1])&&(f=[u,a])),n):(c&&(i?(e=i[0],r=i[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(h=e,e=r,r=h))),l&&(o?(u=o[0],a=o[1]):(u=f[0],a=f[1],l.invert&&(u=l.invert(u),a=l.invert(a)),u>a&&(h=u,u=a,a=h))),c&&l?[[e,u],[r,a]]:c?[e,r]:l&&[u,a])},n.clear=function(){return n.empty()||(s=[0,0],f=[0,0],i=o=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!l&&f[0]==f[1]},Vo.rebind(n,a,"on")};var ql={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Rl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Dl=nc.format=oc.timeFormat,Pl=Dl.utc,Ul=Pl("%Y-%m-%dT%H:%M:%S.%LZ");Dl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Fo:Ul,Fo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},Fo.toString=Ul.toString,nc.second=Pt(function(n){return new tc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),nc.seconds=nc.second.range,nc.seconds.utc=nc.second.utc.range,nc.minute=Pt(function(n){return new tc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),nc.minutes=nc.minute.range,nc.minutes.utc=nc.minute.utc.range,nc.hour=Pt(function(n){var t=n.getTimezoneOffset()/60;return new tc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),nc.hours=nc.hour.range,nc.hours.utc=nc.hour.utc.range,nc.month=Pt(function(n){return n=nc.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),nc.months=nc.month.range,nc.months.utc=nc.month.utc.range;var jl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Hl=[[nc.second,1],[nc.second,5],[nc.second,15],[nc.second,30],[nc.minute,1],[nc.minute,5],[nc.minute,15],[nc.minute,30],[nc.hour,1],[nc.hour,3],[nc.hour,6],[nc.hour,12],[nc.day,1],[nc.day,2],[nc.week,1],[nc.month,1],[nc.month,3],[nc.year,1]],Fl=Dl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",Se]]),Ol={range:function(n,t,e){return Vo.range(Math.ceil(n/e)*e,+t,e).map(Yo)},floor:wt,ceil:wt};Hl.year=nc.year,nc.scale=function(){return Oo(Vo.scale.linear(),Hl,Fl)};var Yl=Hl.map(function(n){return[n[0].utc,n[1]]}),Il=Pl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",Se]]);Yl.year=nc.year.utc,nc.scale.utc=function(){return Oo(Vo.scale.linear(),Yl,Il)},Vo.text=St(function(n){return n.responseText}),Vo.json=function(n,t){return kt(n,"application/json",Io,t)},Vo.html=function(n,t){return kt(n,"text/html",Zo,t)},Vo.xml=St(function(n){return n.responseXML}),"function"==typeof define&&define.amd?define(Vo):"object"==typeof module&&module.exports&&(module.exports=Vo),this.d3=Vo}(); \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/main/webapp/tp/jquery-2.1.1.js b/framework/src/onos/web/gui/src/main/webapp/tp/jquery-2.1.1.js
deleted file mode 100644
index 04263688..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tp/jquery-2.1.1.js
+++ /dev/null
@@ -1,9176 +0,0 @@
-(function( global, factory ) {
-
- if ( typeof module === "object" && typeof module.exports === "object" ) {
- // For CommonJS and CommonJS-like environments where a proper window is present,
- // execute the factory and get jQuery
- // For environments that do not inherently posses a window with a document
- // (such as Node.js), expose a jQuery-making factory as module.exports
- // This accentuates the need for the creation of a real window
- // e.g. var jQuery = require("jquery")(window);
- // See ticket #14549 for more info
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
- } else {
- factory( global );
- }
-
-// Pass this if window is not defined yet
-}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Can't do this because several apps including ASP.NET trace
-// the stack via arguments.caller.callee and Firefox dies if
-// you try to trace through "use strict" call chains. (#13335)
-// Support: Firefox 18+
-//
-
-var arr = [];
-
-var slice = arr.slice;
-
-var concat = arr.concat;
-
-var push = arr.push;
-
-var indexOf = arr.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var support = {};
-
-
-
-var
- // Use the correct document accordingly with window argument (sandbox)
- document = window.document,
-
- version = "2.1.1",
-
- // Define a local copy of jQuery
- jQuery = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- // Need init if jQuery is called (just allow error to be thrown if not included)
- return new jQuery.fn.init( selector, context );
- },
-
- // Support: Android<4.1
- // Make sure we trim BOM and NBSP
- rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
- // Matches dashed string for camelizing
- rmsPrefix = /^-ms-/,
- rdashAlpha = /-([\da-z])/gi,
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function( all, letter ) {
- return letter.toUpperCase();
- };
-
-jQuery.fn = jQuery.prototype = {
- // The current version of jQuery being used
- jquery: version,
-
- constructor: jQuery,
-
- // Start with an empty selector
- selector: "",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- toArray: function() {
- return slice.call( this );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num != null ?
-
- // Return just the one element from the set
- ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
-
- // Return all the elements in a clean array
- slice.call( this );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems ) {
-
- // Build a new jQuery matched element set
- var ret = jQuery.merge( this.constructor(), elems );
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
- ret.context = this.context;
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- // (You can seed the arguments with an array of args, but this is
- // only used internally.)
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ) );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- eq: function( i ) {
- var len = this.length,
- j = +i + ( i < 0 ? len : 0 );
- return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
- },
-
- end: function() {
- return this.prevObject || this.constructor(null);
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: arr.sort,
- splice: arr.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
- var options, name, src, copy, copyIsArray, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
-
- // skip the boolean and the target
- target = arguments[ i ] || {};
- i++;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- // extend jQuery itself if only one argument is passed
- if ( i === length ) {
- target = this;
- i--;
- }
-
- for ( ; i < length; i++ ) {
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend({
- // Unique for each copy of jQuery on the page
- expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
- // Assume jQuery is ready without the ready module
- isReady: true,
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- noop: function() {},
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return jQuery.type(obj) === "function";
- },
-
- isArray: Array.isArray,
-
- isWindow: function( obj ) {
- return obj != null && obj === obj.window;
- },
-
- isNumeric: function( obj ) {
- // parseFloat NaNs numeric-cast false positives (null|true|false|"")
- // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
- // subtraction forces infinities to NaN
- return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
- },
-
- isPlainObject: function( obj ) {
- // Not plain objects:
- // - Any object or value whose internal [[Class]] property is not "[object Object]"
- // - DOM nodes
- // - window
- if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- if ( obj.constructor &&
- !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
- return false;
- }
-
- // If the function hasn't returned already, we're confident that
- // |obj| is a plain object, created by {} or constructed with new Object
- return true;
- },
-
- isEmptyObject: function( obj ) {
- var name;
- for ( name in obj ) {
- return false;
- }
- return true;
- },
-
- type: function( obj ) {
- if ( obj == null ) {
- return obj + "";
- }
- // Support: Android < 4.0, iOS < 6 (functionish RegExp)
- return typeof obj === "object" || typeof obj === "function" ?
- class2type[ toString.call(obj) ] || "object" :
- typeof obj;
- },
-
- // Evaluates a script in a global context
- globalEval: function( code ) {
- var script,
- indirect = eval;
-
- code = jQuery.trim( code );
-
- if ( code ) {
- // If the code includes a valid, prologue position
- // strict mode pragma, execute code by injecting a
- // script tag into the document.
- if ( code.indexOf("use strict") === 1 ) {
- script = document.createElement("script");
- script.text = code;
- document.head.appendChild( script ).parentNode.removeChild( script );
- } else {
- // Otherwise, avoid the DOM node creation, insertion
- // and removal by using an indirect global eval
- indirect( code );
- }
- }
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
- },
-
- // args is for internal usage only
- each: function( obj, callback, args ) {
- var value,
- i = 0,
- length = obj.length,
- isArray = isArraylike( obj );
-
- if ( args ) {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.apply( obj[ i ], args );
-
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.apply( obj[ i ], args );
-
- if ( value === false ) {
- break;
- }
- }
- }
-
- // A special, fast, case for the most common use of each
- } else {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
-
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
-
- if ( value === false ) {
- break;
- }
- }
- }
- }
-
- return obj;
- },
-
- // Support: Android<4.1
- trim: function( text ) {
- return text == null ?
- "" :
- ( text + "" ).replace( rtrim, "" );
- },
-
- // results is for internal usage only
- makeArray: function( arr, results ) {
- var ret = results || [];
-
- if ( arr != null ) {
- if ( isArraylike( Object(arr) ) ) {
- jQuery.merge( ret,
- typeof arr === "string" ?
- [ arr ] : arr
- );
- } else {
- push.call( ret, arr );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, arr, i ) {
- return arr == null ? -1 : indexOf.call( arr, elem, i );
- },
-
- merge: function( first, second ) {
- var len = +second.length,
- j = 0,
- i = first.length;
-
- for ( ; j < len; j++ ) {
- first[ i++ ] = second[ j ];
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, invert ) {
- var callbackInverse,
- matches = [],
- i = 0,
- length = elems.length,
- callbackExpect = !invert;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( ; i < length; i++ ) {
- callbackInverse = !callback( elems[ i ], i );
- if ( callbackInverse !== callbackExpect ) {
- matches.push( elems[ i ] );
- }
- }
-
- return matches;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var value,
- i = 0,
- length = elems.length,
- isArray = isArraylike( elems ),
- ret = [];
-
- // Go through the array, translating each of the items to their new values
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( i in elems ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
- }
-
- // Flatten any nested arrays
- return concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- var tmp, args, proxy;
-
- if ( typeof context === "string" ) {
- tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- args = slice.call( arguments, 2 );
- proxy = function() {
- return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
- return proxy;
- },
-
- now: Date.now,
-
- // jQuery.support is not used in Core but other projects attach their
- // properties to it so it needs to exist.
- support: support
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-function isArraylike( obj ) {
- var length = obj.length,
- type = jQuery.type( obj );
-
- if ( type === "function" || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- if ( obj.nodeType === 1 && length ) {
- return true;
- }
-
- return type === "array" || length === 0 ||
- typeof length === "number" && length > 0 && ( length - 1 ) in obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v1.10.19
- * http://sizzlejs.com/
- *
- * Copyright 2013 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-04-18
- */
-(function( window ) {
-
-var i,
- support,
- Expr,
- getText,
- isXML,
- tokenize,
- compile,
- select,
- outermostContext,
- sortInput,
- hasDuplicate,
-
- // Local document vars
- setDocument,
- document,
- docElem,
- documentIsHTML,
- rbuggyQSA,
- rbuggyMatches,
- matches,
- contains,
-
- // Instance-specific data
- expando = "sizzle" + -(new Date()),
- preferredDoc = window.document,
- dirruns = 0,
- done = 0,
- classCache = createCache(),
- tokenCache = createCache(),
- compilerCache = createCache(),
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- }
- return 0;
- },
-
- // General-purpose constants
- strundefined = typeof undefined,
- MAX_NEGATIVE = 1 << 31,
-
- // Instance methods
- hasOwn = ({}).hasOwnProperty,
- arr = [],
- pop = arr.pop,
- push_native = arr.push,
- push = arr.push,
- slice = arr.slice,
- // Use a stripped-down indexOf if we can't use a native one
- indexOf = arr.indexOf || function( elem ) {
- var i = 0,
- len = this.length;
- for ( ; i < len; i++ ) {
- if ( this[i] === elem ) {
- return i;
- }
- }
- return -1;
- },
-
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
- // Regular expressions
-
- // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
- whitespace = "[\\x20\\t\\r\\n\\f]",
- // http://www.w3.org/TR/css3-syntax/#characters
- characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
-
- // Loosely modeled on CSS identifier characters
- // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
- // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
- identifier = characterEncoding.replace( "w", "w#" ),
-
- // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
- attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
- // Operator (capture 2)
- "*([*^$|!~]?=)" + whitespace +
- // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
- "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
- "*\\]",
-
- pseudos = ":(" + characterEncoding + ")(?:\\((" +
- // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
- // 1. quoted (capture 3; capture 4 or capture 5)
- "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
- // 2. simple (capture 6)
- "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
- // 3. anything else (capture 2)
- ".*" +
- ")\\)|)",
-
- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
- rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
- rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
-
- rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
-
- rpseudo = new RegExp( pseudos ),
- ridentifier = new RegExp( "^" + identifier + "$" ),
-
- matchExpr = {
- "ID": new RegExp( "^#(" + characterEncoding + ")" ),
- "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
- "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
- "ATTR": new RegExp( "^" + attributes ),
- "PSEUDO": new RegExp( "^" + pseudos ),
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
- "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
- "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
- "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
- // For use in libraries implementing .is()
- // We use this for POS matching in `select`
- "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
- whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
- },
-
- rinputs = /^(?:input|select|textarea|button)$/i,
- rheader = /^h\d$/i,
-
- rnative = /^[^{]+\{\s*\[native \w/,
-
- // Easily-parseable/retrievable ID or TAG or CLASS selectors
- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
- rsibling = /[+~]/,
- rescape = /'|\\/g,
-
- // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
- runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
- funescape = function( _, escaped, escapedWhitespace ) {
- var high = "0x" + escaped - 0x10000;
- // NaN means non-codepoint
- // Support: Firefox<24
- // Workaround erroneous numeric interpretation of +"0x"
- return high !== high || escapedWhitespace ?
- escaped :
- high < 0 ?
- // BMP codepoint
- String.fromCharCode( high + 0x10000 ) :
- // Supplemental Plane codepoint (surrogate pair)
- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
- };
-
-// Optimize for push.apply( _, NodeList )
-try {
- push.apply(
- (arr = slice.call( preferredDoc.childNodes )),
- preferredDoc.childNodes
- );
- // Support: Android<4.0
- // Detect silently failing push.apply
- arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
- push = { apply: arr.length ?
-
- // Leverage slice if possible
- function( target, els ) {
- push_native.apply( target, slice.call(els) );
- } :
-
- // Support: IE<9
- // Otherwise append directly
- function( target, els ) {
- var j = target.length,
- i = 0;
- // Can't trust NodeList.length
- while ( (target[j++] = els[i++]) ) {}
- target.length = j - 1;
- }
- };
-}
-
-function Sizzle( selector, context, results, seed ) {
- var match, elem, m, nodeType,
- // QSA vars
- i, groups, old, nid, newContext, newSelector;
-
- if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
- setDocument( context );
- }
-
- context = context || document;
- results = results || [];
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
- return [];
- }
-
- if ( documentIsHTML && !seed ) {
-
- // Shortcuts
- if ( (match = rquickExpr.exec( selector )) ) {
- // Speed-up: Sizzle("#ID")
- if ( (m = match[1]) ) {
- if ( nodeType === 9 ) {
- elem = context.getElementById( m );
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document (jQuery #6963)
- if ( elem && elem.parentNode ) {
- // Handle the case where IE, Opera, and Webkit return items
- // by name instead of ID
- if ( elem.id === m ) {
- results.push( elem );
- return results;
- }
- } else {
- return results;
- }
- } else {
- // Context is not a document
- if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
- contains( context, elem ) && elem.id === m ) {
- results.push( elem );
- return results;
- }
- }
-
- // Speed-up: Sizzle("TAG")
- } else if ( match[2] ) {
- push.apply( results, context.getElementsByTagName( selector ) );
- return results;
-
- // Speed-up: Sizzle(".CLASS")
- } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
- push.apply( results, context.getElementsByClassName( m ) );
- return results;
- }
- }
-
- // QSA path
- if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
- nid = old = expando;
- newContext = context;
- newSelector = nodeType === 9 && selector;
-
- // qSA works strangely on Element-rooted queries
- // We can work around this by specifying an extra ID on the root
- // and working up from there (Thanks to Andrew Dupont for the technique)
- // IE 8 doesn't work on object elements
- if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- groups = tokenize( selector );
-
- if ( (old = context.getAttribute("id")) ) {
- nid = old.replace( rescape, "\\$&" );
- } else {
- context.setAttribute( "id", nid );
- }
- nid = "[id='" + nid + "'] ";
-
- i = groups.length;
- while ( i-- ) {
- groups[i] = nid + toSelector( groups[i] );
- }
- newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
- newSelector = groups.join(",");
- }
-
- if ( newSelector ) {
- try {
- push.apply( results,
- newContext.querySelectorAll( newSelector )
- );
- return results;
- } catch(qsaError) {
- } finally {
- if ( !old ) {
- context.removeAttribute("id");
- }
- }
- }
- }
- }
-
- // All others
- return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- * deleting the oldest entry
- */
-function createCache() {
- var keys = [];
-
- function cache( key, value ) {
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
- if ( keys.push( key + " " ) > Expr.cacheLength ) {
- // Only keep the most recent entries
- delete cache[ keys.shift() ];
- }
- return (cache[ key + " " ] = value);
- }
- return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
- fn[ expando ] = true;
- return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
-function assert( fn ) {
- var div = document.createElement("div");
-
- try {
- return !!fn( div );
- } catch (e) {
- return false;
- } finally {
- // Remove from its parent by default
- if ( div.parentNode ) {
- div.parentNode.removeChild( div );
- }
- // release memory in IE
- div = null;
- }
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
- var arr = attrs.split("|"),
- i = attrs.length;
-
- while ( i-- ) {
- Expr.attrHandle[ arr[i] ] = handler;
- }
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
-function siblingCheck( a, b ) {
- var cur = b && a,
- diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
- ( ~b.sourceIndex || MAX_NEGATIVE ) -
- ( ~a.sourceIndex || MAX_NEGATIVE );
-
- // Use IE sourceIndex if available on both nodes
- if ( diff ) {
- return diff;
- }
-
- // Check if b follows a
- if ( cur ) {
- while ( (cur = cur.nextSibling) ) {
- if ( cur === b ) {
- return -1;
- }
- }
- }
-
- return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
- return markFunction(function( argument ) {
- argument = +argument;
- return markFunction(function( seed, matches ) {
- var j,
- matchIndexes = fn( [], seed.length, argument ),
- i = matchIndexes.length;
-
- // Match elements found at the specified indexes
- while ( i-- ) {
- if ( seed[ (j = matchIndexes[i]) ] ) {
- seed[j] = !(matches[j] = seed[j]);
- }
- }
- });
- });
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
-function testContext( context ) {
- return context && typeof context.getElementsByTagName !== strundefined && context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-isXML = Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = elem && (elem.ownerDocument || elem).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
- var hasCompare,
- doc = node ? node.ownerDocument || node : preferredDoc,
- parent = doc.defaultView;
-
- // If no document and documentElement is available, return
- if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
- return document;
- }
-
- // Set our document
- document = doc;
- docElem = doc.documentElement;
-
- // Support tests
- documentIsHTML = !isXML( doc );
-
- // Support: IE>8
- // If iframe document is assigned to "document" variable and if iframe has been reloaded,
- // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
- // IE6-8 do not support the defaultView property so parent will be undefined
- if ( parent && parent !== parent.top ) {
- // IE11 does not have attachEvent, so all must suffer
- if ( parent.addEventListener ) {
- parent.addEventListener( "unload", function() {
- setDocument();
- }, false );
- } else if ( parent.attachEvent ) {
- parent.attachEvent( "onunload", function() {
- setDocument();
- });
- }
- }
-
- /* Attributes
- ---------------------------------------------------------------------- */
-
- // Support: IE<8
- // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
- support.attributes = assert(function( div ) {
- div.className = "i";
- return !div.getAttribute("className");
- });
-
- /* getElement(s)By*
- ---------------------------------------------------------------------- */
-
- // Check if getElementsByTagName("*") returns only elements
- support.getElementsByTagName = assert(function( div ) {
- div.appendChild( doc.createComment("") );
- return !div.getElementsByTagName("*").length;
- });
-
- // Check if getElementsByClassName can be trusted
- support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
- div.innerHTML = "<div class='a'></div><div class='a i'></div>";
-
- // Support: Safari<4
- // Catch class over-caching
- div.firstChild.className = "i";
- // Support: Opera<10
- // Catch gEBCN failure to find non-leading classes
- return div.getElementsByClassName("i").length === 2;
- });
-
- // Support: IE<10
- // Check if getElementById returns elements by name
- // The broken getElementById methods don't pick up programatically-set names,
- // so use a roundabout getElementsByName test
- support.getById = assert(function( div ) {
- docElem.appendChild( div ).id = expando;
- return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
- });
-
- // ID find and filter
- if ( support.getById ) {
- Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
- var m = context.getElementById( id );
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- return m && m.parentNode ? [ m ] : [];
- }
- };
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- return elem.getAttribute("id") === attrId;
- };
- };
- } else {
- // Support: IE6/7
- // getElementById is not reliable as a find shortcut
- delete Expr.find["ID"];
-
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
- return node && node.value === attrId;
- };
- };
- }
-
- // Tag
- Expr.find["TAG"] = support.getElementsByTagName ?
- function( tag, context ) {
- if ( typeof context.getElementsByTagName !== strundefined ) {
- return context.getElementsByTagName( tag );
- }
- } :
- function( tag, context ) {
- var elem,
- tmp = [],
- i = 0,
- results = context.getElementsByTagName( tag );
-
- // Filter out possible comments
- if ( tag === "*" ) {
- while ( (elem = results[i++]) ) {
- if ( elem.nodeType === 1 ) {
- tmp.push( elem );
- }
- }
-
- return tmp;
- }
- return results;
- };
-
- // Class
- Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
- if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
- return context.getElementsByClassName( className );
- }
- };
-
- /* QSA/matchesSelector
- ---------------------------------------------------------------------- */
-
- // QSA and matchesSelector support
-
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
- rbuggyMatches = [];
-
- // qSa(:focus) reports false when true (Chrome 21)
- // We allow this because of a bug in IE8/9 that throws an error
- // whenever `document.activeElement` is accessed on an iframe
- // So, we allow :focus to pass through QSA all the time to avoid the IE error
- // See http://bugs.jquery.com/ticket/13378
- rbuggyQSA = [];
-
- if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
- // Build QSA regex
- // Regex strategy adopted from Diego Perini
- assert(function( div ) {
- // Select is set to empty string on purpose
- // This is to test IE's treatment of not explicitly
- // setting a boolean content attribute,
- // since its presence should be enough
- // http://bugs.jquery.com/ticket/12359
- div.innerHTML = "<select msallowclip=''><option selected=''></option></select>";
-
- // Support: IE8, Opera 11-12.16
- // Nothing should be selected when empty strings follow ^= or $= or *=
- // The test attribute must be unknown in Opera but "safe" for WinRT
- // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
- if ( div.querySelectorAll("[msallowclip^='']").length ) {
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
- }
-
- // Support: IE8
- // Boolean attributes and "value" are not treated correctly
- if ( !div.querySelectorAll("[selected]").length ) {
- rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
- }
-
- // Webkit/Opera - :checked should return selected option elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":checked").length ) {
- rbuggyQSA.push(":checked");
- }
- });
-
- assert(function( div ) {
- // Support: Windows 8 Native Apps
- // The type and name attributes are restricted during .innerHTML assignment
- var input = doc.createElement("input");
- input.setAttribute( "type", "hidden" );
- div.appendChild( input ).setAttribute( "name", "D" );
-
- // Support: IE8
- // Enforce case-sensitivity of name attribute
- if ( div.querySelectorAll("[name=d]").length ) {
- rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
- }
-
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":enabled").length ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Opera 10-11 does not throw on post-comma invalid pseudos
- div.querySelectorAll("*,:x");
- rbuggyQSA.push(",.*:");
- });
- }
-
- if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
- docElem.webkitMatchesSelector ||
- docElem.mozMatchesSelector ||
- docElem.oMatchesSelector ||
- docElem.msMatchesSelector) )) ) {
-
- assert(function( div ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9)
- support.disconnectedMatch = matches.call( div, "div" );
-
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( div, "[s!='']:x" );
- rbuggyMatches.push( "!=", pseudos );
- });
- }
-
- rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
- rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
- /* Contains
- ---------------------------------------------------------------------- */
- hasCompare = rnative.test( docElem.compareDocumentPosition );
-
- // Element contains another
- // Purposefully does not implement inclusive descendent
- // As in, an element does not contain itself
- contains = hasCompare || rnative.test( docElem.contains ) ?
- function( a, b ) {
- var adown = a.nodeType === 9 ? a.documentElement : a,
- bup = b && b.parentNode;
- return a === bup || !!( bup && bup.nodeType === 1 && (
- adown.contains ?
- adown.contains( bup ) :
- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
- ));
- } :
- function( a, b ) {
- if ( b ) {
- while ( (b = b.parentNode) ) {
- if ( b === a ) {
- return true;
- }
- }
- }
- return false;
- };
-
- /* Sorting
- ---------------------------------------------------------------------- */
-
- // Document order sorting
- sortOrder = hasCompare ?
- function( a, b ) {
-
- // Flag for duplicate removal
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- // Sort on method existence if only one input has compareDocumentPosition
- var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
- if ( compare ) {
- return compare;
- }
-
- // Calculate position if both inputs belong to the same document
- compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
- a.compareDocumentPosition( b ) :
-
- // Otherwise we know they are disconnected
- 1;
-
- // Disconnected nodes
- if ( compare & 1 ||
- (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
- // Choose the first element that is related to our preferred document
- if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
- return -1;
- }
- if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
- return 1;
- }
-
- // Maintain original order
- return sortInput ?
- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
- 0;
- }
-
- return compare & 4 ? -1 : 1;
- } :
- function( a, b ) {
- // Exit early if the nodes are identical
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- var cur,
- i = 0,
- aup = a.parentNode,
- bup = b.parentNode,
- ap = [ a ],
- bp = [ b ];
-
- // Parentless nodes are either documents or disconnected
- if ( !aup || !bup ) {
- return a === doc ? -1 :
- b === doc ? 1 :
- aup ? -1 :
- bup ? 1 :
- sortInput ?
- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
- 0;
-
- // If the nodes are siblings, we can do a quick check
- } else if ( aup === bup ) {
- return siblingCheck( a, b );
- }
-
- // Otherwise we need full lists of their ancestors for comparison
- cur = a;
- while ( (cur = cur.parentNode) ) {
- ap.unshift( cur );
- }
- cur = b;
- while ( (cur = cur.parentNode) ) {
- bp.unshift( cur );
- }
-
- // Walk down the tree looking for a discrepancy
- while ( ap[i] === bp[i] ) {
- i++;
- }
-
- return i ?
- // Do a sibling check if the nodes have a common ancestor
- siblingCheck( ap[i], bp[i] ) :
-
- // Otherwise nodes in our document sort first
- ap[i] === preferredDoc ? -1 :
- bp[i] === preferredDoc ? 1 :
- 0;
- };
-
- return doc;
-};
-
-Sizzle.matches = function( expr, elements ) {
- return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- // Make sure that attribute selectors are quoted
- expr = expr.replace( rattributeQuotes, "='$1']" );
-
- if ( support.matchesSelector && documentIsHTML &&
- ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
-
- try {
- var ret = matches.call( elem, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || support.disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9
- elem.document && elem.document.nodeType !== 11 ) {
- return ret;
- }
- } catch(e) {}
- }
-
- return Sizzle( expr, document, null, [ elem ] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
- // Set document vars if needed
- if ( ( context.ownerDocument || context ) !== document ) {
- setDocument( context );
- }
- return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- var fn = Expr.attrHandle[ name.toLowerCase() ],
- // Don't get fooled by Object.prototype properties (jQuery #13807)
- val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
- fn( elem, name, !documentIsHTML ) :
- undefined;
-
- return val !== undefined ?
- val :
- support.attributes || !documentIsHTML ?
- elem.getAttribute( name ) :
- (val = elem.getAttributeNode(name)) && val.specified ?
- val.value :
- null;
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
- var elem,
- duplicates = [],
- j = 0,
- i = 0;
-
- // Unless we *know* we can detect duplicates, assume their presence
- hasDuplicate = !support.detectDuplicates;
- sortInput = !support.sortStable && results.slice( 0 );
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- while ( (elem = results[i++]) ) {
- if ( elem === results[ i ] ) {
- j = duplicates.push( i );
- }
- }
- while ( j-- ) {
- results.splice( duplicates[ j ], 1 );
- }
- }
-
- // Clear input after sorting to release objects
- // See https://github.com/jquery/sizzle/pull/225
- sortInput = null;
-
- return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
- var node,
- ret = "",
- i = 0,
- nodeType = elem.nodeType;
-
- if ( !nodeType ) {
- // If no nodeType, this is expected to be an array
- while ( (node = elem[i++]) ) {
- // Do not traverse comment nodes
- ret += getText( node );
- }
- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
- // Use textContent for elements
- // innerText usage removed for consistency of new lines (jQuery #11153)
- if ( typeof elem.textContent === "string" ) {
- return elem.textContent;
- } else {
- // Traverse its children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- // Do not include comment or processing instruction nodes
-
- return ret;
-};
-
-Expr = Sizzle.selectors = {
-
- // Can be adjusted by the user
- cacheLength: 50,
-
- createPseudo: markFunction,
-
- match: matchExpr,
-
- attrHandle: {},
-
- find: {},
-
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
-
- preFilter: {
- "ATTR": function( match ) {
- match[1] = match[1].replace( runescape, funescape );
-
- // Move the given value to match[3] whether quoted or unquoted
- match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
-
- if ( match[2] === "~=" ) {
- match[3] = " " + match[3] + " ";
- }
-
- return match.slice( 0, 4 );
- },
-
- "CHILD": function( match ) {
- /* matches from matchExpr["CHILD"]
- 1 type (only|nth|...)
- 2 what (child|of-type)
- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
- 4 xn-component of xn+y argument ([+-]?\d*n|)
- 5 sign of xn-component
- 6 x of xn-component
- 7 sign of y-component
- 8 y of y-component
- */
- match[1] = match[1].toLowerCase();
-
- if ( match[1].slice( 0, 3 ) === "nth" ) {
- // nth-* requires argument
- if ( !match[3] ) {
- Sizzle.error( match[0] );
- }
-
- // numeric x and y parameters for Expr.filter.CHILD
- // remember that false/true cast respectively to 0/1
- match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
- match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
- // other types prohibit arguments
- } else if ( match[3] ) {
- Sizzle.error( match[0] );
- }
-
- return match;
- },
-
- "PSEUDO": function( match ) {
- var excess,
- unquoted = !match[6] && match[2];
-
- if ( matchExpr["CHILD"].test( match[0] ) ) {
- return null;
- }
-
- // Accept quoted arguments as-is
- if ( match[3] ) {
- match[2] = match[4] || match[5] || "";
-
- // Strip excess characters from unquoted arguments
- } else if ( unquoted && rpseudo.test( unquoted ) &&
- // Get excess from tokenize (recursively)
- (excess = tokenize( unquoted, true )) &&
- // advance to the next closing parenthesis
- (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
- // excess is a negative index
- match[0] = match[0].slice( 0, excess );
- match[2] = unquoted.slice( 0, excess );
- }
-
- // Return only captures needed by the pseudo filter method (type and argument)
- return match.slice( 0, 3 );
- }
- },
-
- filter: {
-
- "TAG": function( nodeNameSelector ) {
- var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
- return nodeNameSelector === "*" ?
- function() { return true; } :
- function( elem ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
- };
- },
-
- "CLASS": function( className ) {
- var pattern = classCache[ className + " " ];
-
- return pattern ||
- (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
- classCache( className, function( elem ) {
- return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
- });
- },
-
- "ATTR": function( name, operator, check ) {
- return function( elem ) {
- var result = Sizzle.attr( elem, name );
-
- if ( result == null ) {
- return operator === "!=";
- }
- if ( !operator ) {
- return true;
- }
-
- result += "";
-
- return operator === "=" ? result === check :
- operator === "!=" ? result !== check :
- operator === "^=" ? check && result.indexOf( check ) === 0 :
- operator === "*=" ? check && result.indexOf( check ) > -1 :
- operator === "$=" ? check && result.slice( -check.length ) === check :
- operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
- false;
- };
- },
-
- "CHILD": function( type, what, argument, first, last ) {
- var simple = type.slice( 0, 3 ) !== "nth",
- forward = type.slice( -4 ) !== "last",
- ofType = what === "of-type";
-
- return first === 1 && last === 0 ?
-
- // Shortcut for :nth-*(n)
- function( elem ) {
- return !!elem.parentNode;
- } :
-
- function( elem, context, xml ) {
- var cache, outerCache, node, diff, nodeIndex, start,
- dir = simple !== forward ? "nextSibling" : "previousSibling",
- parent = elem.parentNode,
- name = ofType && elem.nodeName.toLowerCase(),
- useCache = !xml && !ofType;
-
- if ( parent ) {
-
- // :(first|last|only)-(child|of-type)
- if ( simple ) {
- while ( dir ) {
- node = elem;
- while ( (node = node[ dir ]) ) {
- if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
- return false;
- }
- }
- // Reverse direction for :only-* (if we haven't yet done so)
- start = dir = type === "only" && !start && "nextSibling";
- }
- return true;
- }
-
- start = [ forward ? parent.firstChild : parent.lastChild ];
-
- // non-xml :nth-child(...) stores cache data on `parent`
- if ( forward && useCache ) {
- // Seek `elem` from a previously-cached index
- outerCache = parent[ expando ] || (parent[ expando ] = {});
- cache = outerCache[ type ] || [];
- nodeIndex = cache[0] === dirruns && cache[1];
- diff = cache[0] === dirruns && cache[2];
- node = nodeIndex && parent.childNodes[ nodeIndex ];
-
- while ( (node = ++nodeIndex && node && node[ dir ] ||
-
- // Fallback to seeking `elem` from the start
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- // When found, cache indexes on `parent` and break
- if ( node.nodeType === 1 && ++diff && node === elem ) {
- outerCache[ type ] = [ dirruns, nodeIndex, diff ];
- break;
- }
- }
-
- // Use previously-cached element index if available
- } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
- diff = cache[1];
-
- // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
- } else {
- // Use the same loop as above to seek `elem` from the start
- while ( (node = ++nodeIndex && node && node[ dir ] ||
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
- // Cache the index of each encountered element
- if ( useCache ) {
- (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
- }
-
- if ( node === elem ) {
- break;
- }
- }
- }
- }
-
- // Incorporate the offset, then check against cycle size
- diff -= last;
- return diff === first || ( diff % first === 0 && diff / first >= 0 );
- }
- };
- },
-
- "PSEUDO": function( pseudo, argument ) {
- // pseudo-class names are case-insensitive
- // http://www.w3.org/TR/selectors/#pseudo-classes
- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
- // Remember that setFilters inherits from pseudos
- var args,
- fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
- Sizzle.error( "unsupported pseudo: " + pseudo );
-
- // The user may use createPseudo to indicate that
- // arguments are needed to create the filter function
- // just as Sizzle does
- if ( fn[ expando ] ) {
- return fn( argument );
- }
-
- // But maintain support for old signatures
- if ( fn.length > 1 ) {
- args = [ pseudo, pseudo, "", argument ];
- return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
- markFunction(function( seed, matches ) {
- var idx,
- matched = fn( seed, argument ),
- i = matched.length;
- while ( i-- ) {
- idx = indexOf.call( seed, matched[i] );
- seed[ idx ] = !( matches[ idx ] = matched[i] );
- }
- }) :
- function( elem ) {
- return fn( elem, 0, args );
- };
- }
-
- return fn;
- }
- },
-
- pseudos: {
- // Potentially complex pseudos
- "not": markFunction(function( selector ) {
- // Trim the selector passed to compile
- // to avoid treating leading and trailing
- // spaces as combinators
- var input = [],
- results = [],
- matcher = compile( selector.replace( rtrim, "$1" ) );
-
- return matcher[ expando ] ?
- markFunction(function( seed, matches, context, xml ) {
- var elem,
- unmatched = matcher( seed, null, xml, [] ),
- i = seed.length;
-
- // Match elements unmatched by `matcher`
- while ( i-- ) {
- if ( (elem = unmatched[i]) ) {
- seed[i] = !(matches[i] = elem);
- }
- }
- }) :
- function( elem, context, xml ) {
- input[0] = elem;
- matcher( input, null, xml, results );
- return !results.pop();
- };
- }),
-
- "has": markFunction(function( selector ) {
- return function( elem ) {
- return Sizzle( selector, elem ).length > 0;
- };
- }),
-
- "contains": markFunction(function( text ) {
- return function( elem ) {
- return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
- };
- }),
-
- // "Whether an element is represented by a :lang() selector
- // is based solely on the element's language value
- // being equal to the identifier C,
- // or beginning with the identifier C immediately followed by "-".
- // The matching of C against the element's language value is performed case-insensitively.
- // The identifier C does not have to be a valid language name."
- // http://www.w3.org/TR/selectors/#lang-pseudo
- "lang": markFunction( function( lang ) {
- // lang value must be a valid identifier
- if ( !ridentifier.test(lang || "") ) {
- Sizzle.error( "unsupported lang: " + lang );
- }
- lang = lang.replace( runescape, funescape ).toLowerCase();
- return function( elem ) {
- var elemLang;
- do {
- if ( (elemLang = documentIsHTML ?
- elem.lang :
- elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
- elemLang = elemLang.toLowerCase();
- return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
- }
- } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
- return false;
- };
- }),
-
- // Miscellaneous
- "target": function( elem ) {
- var hash = window.location && window.location.hash;
- return hash && hash.slice( 1 ) === elem.id;
- },
-
- "root": function( elem ) {
- return elem === docElem;
- },
-
- "focus": function( elem ) {
- return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
- },
-
- // Boolean properties
- "enabled": function( elem ) {
- return elem.disabled === false;
- },
-
- "disabled": function( elem ) {
- return elem.disabled === true;
- },
-
- "checked": function( elem ) {
- // In CSS3, :checked should return both checked and selected elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- var nodeName = elem.nodeName.toLowerCase();
- return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
- },
-
- "selected": function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- // Contents
- "empty": function( elem ) {
- // http://www.w3.org/TR/selectors/#empty-pseudo
- // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
- // but not by others (comment: 8; processing instruction: 7; etc.)
- // nodeType < 6 works because attributes (2) do not appear as children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- if ( elem.nodeType < 6 ) {
- return false;
- }
- }
- return true;
- },
-
- "parent": function( elem ) {
- return !Expr.pseudos["empty"]( elem );
- },
-
- // Element/input types
- "header": function( elem ) {
- return rheader.test( elem.nodeName );
- },
-
- "input": function( elem ) {
- return rinputs.test( elem.nodeName );
- },
-
- "button": function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === "button" || name === "button";
- },
-
- "text": function( elem ) {
- var attr;
- return elem.nodeName.toLowerCase() === "input" &&
- elem.type === "text" &&
-
- // Support: IE<8
- // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
- ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
- },
-
- // Position-in-collection
- "first": createPositionalPseudo(function() {
- return [ 0 ];
- }),
-
- "last": createPositionalPseudo(function( matchIndexes, length ) {
- return [ length - 1 ];
- }),
-
- "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
- return [ argument < 0 ? argument + length : argument ];
- }),
-
- "even": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 0;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "odd": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 1;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; --i >= 0; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; ++i < length; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- })
- }
-};
-
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
- Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
- Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
- var matched, match, tokens, type,
- soFar, groups, preFilters,
- cached = tokenCache[ selector + " " ];
-
- if ( cached ) {
- return parseOnly ? 0 : cached.slice( 0 );
- }
-
- soFar = selector;
- groups = [];
- preFilters = Expr.preFilter;
-
- while ( soFar ) {
-
- // Comma and first run
- if ( !matched || (match = rcomma.exec( soFar )) ) {
- if ( match ) {
- // Don't consume trailing commas as valid
- soFar = soFar.slice( match[0].length ) || soFar;
- }
- groups.push( (tokens = []) );
- }
-
- matched = false;
-
- // Combinators
- if ( (match = rcombinators.exec( soFar )) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- // Cast descendant combinators to space
- type: match[0].replace( rtrim, " " )
- });
- soFar = soFar.slice( matched.length );
- }
-
- // Filters
- for ( type in Expr.filter ) {
- if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
- (match = preFilters[ type ]( match ))) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- type: type,
- matches: match
- });
- soFar = soFar.slice( matched.length );
- }
- }
-
- if ( !matched ) {
- break;
- }
- }
-
- // Return the length of the invalid excess
- // if we're just parsing
- // Otherwise, throw an error or return tokens
- return parseOnly ?
- soFar.length :
- soFar ?
- Sizzle.error( selector ) :
- // Cache the tokens
- tokenCache( selector, groups ).slice( 0 );
-};
-
-function toSelector( tokens ) {
- var i = 0,
- len = tokens.length,
- selector = "";
- for ( ; i < len; i++ ) {
- selector += tokens[i].value;
- }
- return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
- var dir = combinator.dir,
- checkNonElements = base && dir === "parentNode",
- doneName = done++;
-
- return combinator.first ?
- // Check against closest ancestor/preceding element
- function( elem, context, xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- return matcher( elem, context, xml );
- }
- }
- } :
-
- // Check against all ancestor/preceding elements
- function( elem, context, xml ) {
- var oldCache, outerCache,
- newCache = [ dirruns, doneName ];
-
- // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
- if ( xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- if ( matcher( elem, context, xml ) ) {
- return true;
- }
- }
- }
- } else {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- outerCache = elem[ expando ] || (elem[ expando ] = {});
- if ( (oldCache = outerCache[ dir ]) &&
- oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
- // Assign to newCache so results back-propagate to previous elements
- return (newCache[ 2 ] = oldCache[ 2 ]);
- } else {
- // Reuse newcache so results back-propagate to previous elements
- outerCache[ dir ] = newCache;
-
- // A match means we're done; a fail means we have to keep checking
- if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
- return true;
- }
- }
- }
- }
- }
- };
-}
-
-function elementMatcher( matchers ) {
- return matchers.length > 1 ?
- function( elem, context, xml ) {
- var i = matchers.length;
- while ( i-- ) {
- if ( !matchers[i]( elem, context, xml ) ) {
- return false;
- }
- }
- return true;
- } :
- matchers[0];
-}
-
-function multipleContexts( selector, contexts, results ) {
- var i = 0,
- len = contexts.length;
- for ( ; i < len; i++ ) {
- Sizzle( selector, contexts[i], results );
- }
- return results;
-}
-
-function condense( unmatched, map, filter, context, xml ) {
- var elem,
- newUnmatched = [],
- i = 0,
- len = unmatched.length,
- mapped = map != null;
-
- for ( ; i < len; i++ ) {
- if ( (elem = unmatched[i]) ) {
- if ( !filter || filter( elem, context, xml ) ) {
- newUnmatched.push( elem );
- if ( mapped ) {
- map.push( i );
- }
- }
- }
- }
-
- return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
- if ( postFilter && !postFilter[ expando ] ) {
- postFilter = setMatcher( postFilter );
- }
- if ( postFinder && !postFinder[ expando ] ) {
- postFinder = setMatcher( postFinder, postSelector );
- }
- return markFunction(function( seed, results, context, xml ) {
- var temp, i, elem,
- preMap = [],
- postMap = [],
- preexisting = results.length,
-
- // Get initial elements from seed or context
- elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
- // Prefilter to get matcher input, preserving a map for seed-results synchronization
- matcherIn = preFilter && ( seed || !selector ) ?
- condense( elems, preMap, preFilter, context, xml ) :
- elems,
-
- matcherOut = matcher ?
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
- // ...intermediate processing is necessary
- [] :
-
- // ...otherwise use results directly
- results :
- matcherIn;
-
- // Find primary matches
- if ( matcher ) {
- matcher( matcherIn, matcherOut, context, xml );
- }
-
- // Apply postFilter
- if ( postFilter ) {
- temp = condense( matcherOut, postMap );
- postFilter( temp, [], context, xml );
-
- // Un-match failing elements by moving them back to matcherIn
- i = temp.length;
- while ( i-- ) {
- if ( (elem = temp[i]) ) {
- matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
- }
- }
- }
-
- if ( seed ) {
- if ( postFinder || preFilter ) {
- if ( postFinder ) {
- // Get the final matcherOut by condensing this intermediate into postFinder contexts
- temp = [];
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) ) {
- // Restore matcherIn since elem is not yet a final match
- temp.push( (matcherIn[i] = elem) );
- }
- }
- postFinder( null, (matcherOut = []), temp, xml );
- }
-
- // Move matched elements from seed to results to keep them synchronized
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) &&
- (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
-
- seed[temp] = !(results[temp] = elem);
- }
- }
- }
-
- // Add elements to results, through postFinder if defined
- } else {
- matcherOut = condense(
- matcherOut === results ?
- matcherOut.splice( preexisting, matcherOut.length ) :
- matcherOut
- );
- if ( postFinder ) {
- postFinder( null, results, matcherOut, xml );
- } else {
- push.apply( results, matcherOut );
- }
- }
- });
-}
-
-function matcherFromTokens( tokens ) {
- var checkContext, matcher, j,
- len = tokens.length,
- leadingRelative = Expr.relative[ tokens[0].type ],
- implicitRelative = leadingRelative || Expr.relative[" "],
- i = leadingRelative ? 1 : 0,
-
- // The foundational matcher ensures that elements are reachable from top-level context(s)
- matchContext = addCombinator( function( elem ) {
- return elem === checkContext;
- }, implicitRelative, true ),
- matchAnyContext = addCombinator( function( elem ) {
- return indexOf.call( checkContext, elem ) > -1;
- }, implicitRelative, true ),
- matchers = [ function( elem, context, xml ) {
- return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
- (checkContext = context).nodeType ?
- matchContext( elem, context, xml ) :
- matchAnyContext( elem, context, xml ) );
- } ];
-
- for ( ; i < len; i++ ) {
- if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
- matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
- } else {
- matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
- // Return special upon seeing a positional matcher
- if ( matcher[ expando ] ) {
- // Find the next relative operator (if any) for proper handling
- j = ++i;
- for ( ; j < len; j++ ) {
- if ( Expr.relative[ tokens[j].type ] ) {
- break;
- }
- }
- return setMatcher(
- i > 1 && elementMatcher( matchers ),
- i > 1 && toSelector(
- // If the preceding token was a descendant combinator, insert an implicit any-element `*`
- tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
- ).replace( rtrim, "$1" ),
- matcher,
- i < j && matcherFromTokens( tokens.slice( i, j ) ),
- j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
- j < len && toSelector( tokens )
- );
- }
- matchers.push( matcher );
- }
- }
-
- return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
- var bySet = setMatchers.length > 0,
- byElement = elementMatchers.length > 0,
- superMatcher = function( seed, context, xml, results, outermost ) {
- var elem, j, matcher,
- matchedCount = 0,
- i = "0",
- unmatched = seed && [],
- setMatched = [],
- contextBackup = outermostContext,
- // We must always have either seed elements or outermost context
- elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
- // Use integer dirruns iff this is the outermost matcher
- dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
- len = elems.length;
-
- if ( outermost ) {
- outermostContext = context !== document && context;
- }
-
- // Add elements passing elementMatchers directly to results
- // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
- // Support: IE<9, Safari
- // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
- for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
- if ( byElement && elem ) {
- j = 0;
- while ( (matcher = elementMatchers[j++]) ) {
- if ( matcher( elem, context, xml ) ) {
- results.push( elem );
- break;
- }
- }
- if ( outermost ) {
- dirruns = dirrunsUnique;
- }
- }
-
- // Track unmatched elements for set filters
- if ( bySet ) {
- // They will have gone through all possible matchers
- if ( (elem = !matcher && elem) ) {
- matchedCount--;
- }
-
- // Lengthen the array for every element, matched or not
- if ( seed ) {
- unmatched.push( elem );
- }
- }
- }
-
- // Apply set filters to unmatched elements
- matchedCount += i;
- if ( bySet && i !== matchedCount ) {
- j = 0;
- while ( (matcher = setMatchers[j++]) ) {
- matcher( unmatched, setMatched, context, xml );
- }
-
- if ( seed ) {
- // Reintegrate element matches to eliminate the need for sorting
- if ( matchedCount > 0 ) {
- while ( i-- ) {
- if ( !(unmatched[i] || setMatched[i]) ) {
- setMatched[i] = pop.call( results );
- }
- }
- }
-
- // Discard index placeholder values to get only actual matches
- setMatched = condense( setMatched );
- }
-
- // Add matches to results
- push.apply( results, setMatched );
-
- // Seedless set matches succeeding multiple successful matchers stipulate sorting
- if ( outermost && !seed && setMatched.length > 0 &&
- ( matchedCount + setMatchers.length ) > 1 ) {
-
- Sizzle.uniqueSort( results );
- }
- }
-
- // Override manipulation of globals by nested matchers
- if ( outermost ) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
-
- return unmatched;
- };
-
- return bySet ?
- markFunction( superMatcher ) :
- superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
- var i,
- setMatchers = [],
- elementMatchers = [],
- cached = compilerCache[ selector + " " ];
-
- if ( !cached ) {
- // Generate a function of recursive functions that can be used to check each element
- if ( !match ) {
- match = tokenize( selector );
- }
- i = match.length;
- while ( i-- ) {
- cached = matcherFromTokens( match[i] );
- if ( cached[ expando ] ) {
- setMatchers.push( cached );
- } else {
- elementMatchers.push( cached );
- }
- }
-
- // Cache the compiled function
- cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-
- // Save selector and tokenization
- cached.selector = selector;
- }
- return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- * selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- * selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
- var i, tokens, token, type, find,
- compiled = typeof selector === "function" && selector,
- match = !seed && tokenize( (selector = compiled.selector || selector) );
-
- results = results || [];
-
- // Try to minimize operations if there is no seed and only one group
- if ( match.length === 1 ) {
-
- // Take a shortcut and set the context if the root selector is an ID
- tokens = match[0] = match[0].slice( 0 );
- if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
- support.getById && context.nodeType === 9 && documentIsHTML &&
- Expr.relative[ tokens[1].type ] ) {
-
- context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
- if ( !context ) {
- return results;
-
- // Precompiled matchers will still verify ancestry, so step up a level
- } else if ( compiled ) {
- context = context.parentNode;
- }
-
- selector = selector.slice( tokens.shift().value.length );
- }
-
- // Fetch a seed set for right-to-left matching
- i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
- while ( i-- ) {
- token = tokens[i];
-
- // Abort if we hit a combinator
- if ( Expr.relative[ (type = token.type) ] ) {
- break;
- }
- if ( (find = Expr.find[ type ]) ) {
- // Search, expanding context for leading sibling combinators
- if ( (seed = find(
- token.matches[0].replace( runescape, funescape ),
- rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
- )) ) {
-
- // If seed is empty or no tokens remain, we can return early
- tokens.splice( i, 1 );
- selector = seed.length && toSelector( tokens );
- if ( !selector ) {
- push.apply( results, seed );
- return results;
- }
-
- break;
- }
- }
- }
- }
-
- // Compile and execute a filtering function if one is not provided
- // Provide `match` to avoid retokenization if we modified the selector above
- ( compiled || compile( selector, match ) )(
- seed,
- context,
- !documentIsHTML,
- results,
- rsibling.test( selector ) && testContext( context.parentNode ) || context
- );
- return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome<14
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = !!hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( div1 ) {
- // Should return 1, but returns 4 (following)
- return div1.compareDocumentPosition( document.createElement("div") ) & 1;
-});
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( div ) {
- div.innerHTML = "<a href='#'></a>";
- return div.firstChild.getAttribute("href") === "#" ;
-}) ) {
- addHandle( "type|href|height|width", function( elem, name, isXML ) {
- if ( !isXML ) {
- return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
- }
- });
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( div ) {
- div.innerHTML = "<input/>";
- div.firstChild.setAttribute( "value", "" );
- return div.firstChild.getAttribute( "value" ) === "";
-}) ) {
- addHandle( "value", function( elem, name, isXML ) {
- if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
- return elem.defaultValue;
- }
- });
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( div ) {
- return div.getAttribute("disabled") == null;
-}) ) {
- addHandle( booleans, function( elem, name, isXML ) {
- var val;
- if ( !isXML ) {
- return elem[ name ] === true ? name.toLowerCase() :
- (val = elem.getAttributeNode( name )) && val.specified ?
- val.value :
- null;
- }
- });
-}
-
-return Sizzle;
-
-})( window );
-
-
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.pseudos;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
-
-
-
-var risSimple = /^.[^:#\[\.,]*$/;
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep( elements, function( elem, i ) {
- /* jshint -W018 */
- return !!qualifier.call( elem, i, elem ) !== not;
- });
-
- }
-
- if ( qualifier.nodeType ) {
- return jQuery.grep( elements, function( elem ) {
- return ( elem === qualifier ) !== not;
- });
-
- }
-
- if ( typeof qualifier === "string" ) {
- if ( risSimple.test( qualifier ) ) {
- return jQuery.filter( qualifier, elements, not );
- }
-
- qualifier = jQuery.filter( qualifier, elements );
- }
-
- return jQuery.grep( elements, function( elem ) {
- return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;
- });
-}
-
-jQuery.filter = function( expr, elems, not ) {
- var elem = elems[ 0 ];
-
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 && elem.nodeType === 1 ?
- jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
- jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
- return elem.nodeType === 1;
- }));
-};
-
-jQuery.fn.extend({
- find: function( selector ) {
- var i,
- len = this.length,
- ret = [],
- self = this;
-
- if ( typeof selector !== "string" ) {
- return this.pushStack( jQuery( selector ).filter(function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- }) );
- }
-
- for ( i = 0; i < len; i++ ) {
- jQuery.find( selector, self[ i ], ret );
- }
-
- // Needed because $( selector, context ) becomes $( context ).find( selector )
- ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
- ret.selector = this.selector ? this.selector + " " + selector : selector;
- return ret;
- },
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector || [], false) );
- },
- not: function( selector ) {
- return this.pushStack( winnow(this, selector || [], true) );
- },
- is: function( selector ) {
- return !!winnow(
- this,
-
- // If this is a positional/relative selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- typeof selector === "string" && rneedsContext.test( selector ) ?
- jQuery( selector ) :
- selector || [],
- false
- ).length;
- }
-});
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
- // A simple way to check for HTML strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- // Strict HTML recognition (#11290: must start with <)
- rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
-
- init = jQuery.fn.init = function( selector, context ) {
- var match, elem;
-
- // HANDLE: $(""), $(null), $(undefined), $(false)
- if ( !selector ) {
- return this;
- }
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) {
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = rquickExpr.exec( selector );
- }
-
- // Match html or make sure no context is specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] ) {
- context = context instanceof jQuery ? context[0] : context;
-
- // scripts is true for back-compat
- // Intentionally let the error be thrown if parseHTML is not present
- jQuery.merge( this, jQuery.parseHTML(
- match[1],
- context && context.nodeType ? context.ownerDocument || context : document,
- true
- ) );
-
- // HANDLE: $(html, props)
- if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
- for ( match in context ) {
- // Properties of context are called as methods if possible
- if ( jQuery.isFunction( this[ match ] ) ) {
- this[ match ]( context[ match ] );
-
- // ...and otherwise set as attributes
- } else {
- this.attr( match, context[ match ] );
- }
- }
- }
-
- return this;
-
- // HANDLE: $(#id)
- } else {
- elem = document.getElementById( match[2] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Inject the element directly into the jQuery object
- this.length = 1;
- this[0] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return ( context || rootjQuery ).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(DOMElement)
- } else if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return typeof rootjQuery.ready !== "undefined" ?
- rootjQuery.ready( selector ) :
- // Execute immediately if ready is not present
- selector( jQuery );
- }
-
- if ( selector.selector !== undefined ) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- };
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
- // methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.extend({
- dir: function( elem, dir, until ) {
- var matched = [],
- truncate = until !== undefined;
-
- while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
- if ( elem.nodeType === 1 ) {
- if ( truncate && jQuery( elem ).is( until ) ) {
- break;
- }
- matched.push( elem );
- }
- }
- return matched;
- },
-
- sibling: function( n, elem ) {
- var matched = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- matched.push( n );
- }
- }
-
- return matched;
- }
-});
-
-jQuery.fn.extend({
- has: function( target ) {
- var targets = jQuery( target, this ),
- l = targets.length;
-
- return this.filter(function() {
- var i = 0;
- for ( ; i < l; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- closest: function( selectors, context ) {
- var cur,
- i = 0,
- l = this.length,
- matched = [],
- pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
-
- for ( ; i < l; i++ ) {
- for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
- // Always skip document fragments
- if ( cur.nodeType < 11 && (pos ?
- pos.index(cur) > -1 :
-
- // Don't pass non-elements to Sizzle
- cur.nodeType === 1 &&
- jQuery.find.matchesSelector(cur, selectors)) ) {
-
- matched.push( cur );
- break;
- }
- }
- }
-
- return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
- }
-
- // index in selector
- if ( typeof elem === "string" ) {
- return indexOf.call( jQuery( elem ), this[ 0 ] );
- }
-
- // Locate the position of the desired element
- return indexOf.call( this,
-
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[ 0 ] : elem
- );
- },
-
- add: function( selector, context ) {
- return this.pushStack(
- jQuery.unique(
- jQuery.merge( this.get(), jQuery( selector, context ) )
- )
- );
- },
-
- addBack: function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter(selector)
- );
- }
-});
-
-function sibling( cur, dir ) {
- while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}
- return cur;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return sibling( elem, "nextSibling" );
- },
- prev: function( elem ) {
- return sibling( elem, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return elem.contentDocument || jQuery.merge( [], elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var matched = jQuery.map( this, fn, until );
-
- if ( name.slice( -5 ) !== "Until" ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- matched = jQuery.filter( selector, matched );
- }
-
- if ( this.length > 1 ) {
- // Remove duplicates
- if ( !guaranteedUnique[ name ] ) {
- jQuery.unique( matched );
- }
-
- // Reverse order for parents* and prev-derivatives
- if ( rparentsprev.test( name ) ) {
- matched.reverse();
- }
- }
-
- return this.pushStack( matched );
- };
-});
-var rnotwhite = (/\S+/g);
-
-
-
-// String to Object options format cache
-var optionsCache = {};
-
-// Convert String-formatted options into Object-formatted ones and store in cache
-function createOptions( options ) {
- var object = optionsCache[ options ] = {};
- jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
- object[ flag ] = true;
- });
- return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- * options: an optional list of space-separated options that will change how
- * the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
- // Convert options from String-formatted to Object-formatted if needed
- // (we check in cache first)
- options = typeof options === "string" ?
- ( optionsCache[ options ] || createOptions( options ) ) :
- jQuery.extend( {}, options );
-
- var // Last fire value (for non-forgettable lists)
- memory,
- // Flag to know if list was already fired
- fired,
- // Flag to know if list is currently firing
- firing,
- // First callback to fire (used internally by add and fireWith)
- firingStart,
- // End of the loop when firing
- firingLength,
- // Index of currently firing callback (modified by remove if needed)
- firingIndex,
- // Actual callback list
- list = [],
- // Stack of fire calls for repeatable lists
- stack = !options.once && [],
- // Fire callbacks
- fire = function( data ) {
- memory = options.memory && data;
- fired = true;
- firingIndex = firingStart || 0;
- firingStart = 0;
- firingLength = list.length;
- firing = true;
- for ( ; list && firingIndex < firingLength; firingIndex++ ) {
- if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
- memory = false; // To prevent further calls using add
- break;
- }
- }
- firing = false;
- if ( list ) {
- if ( stack ) {
- if ( stack.length ) {
- fire( stack.shift() );
- }
- } else if ( memory ) {
- list = [];
- } else {
- self.disable();
- }
- }
- },
- // Actual Callbacks object
- self = {
- // Add a callback or a collection of callbacks to the list
- add: function() {
- if ( list ) {
- // First, we save the current length
- var start = list.length;
- (function add( args ) {
- jQuery.each( args, function( _, arg ) {
- var type = jQuery.type( arg );
- if ( type === "function" ) {
- if ( !options.unique || !self.has( arg ) ) {
- list.push( arg );
- }
- } else if ( arg && arg.length && type !== "string" ) {
- // Inspect recursively
- add( arg );
- }
- });
- })( arguments );
- // Do we need to add the callbacks to the
- // current firing batch?
- if ( firing ) {
- firingLength = list.length;
- // With memory, if we're not firing then
- // we should call right away
- } else if ( memory ) {
- firingStart = start;
- fire( memory );
- }
- }
- return this;
- },
- // Remove a callback from the list
- remove: function() {
- if ( list ) {
- jQuery.each( arguments, function( _, arg ) {
- var index;
- while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
- list.splice( index, 1 );
- // Handle firing indexes
- if ( firing ) {
- if ( index <= firingLength ) {
- firingLength--;
- }
- if ( index <= firingIndex ) {
- firingIndex--;
- }
- }
- }
- });
- }
- return this;
- },
- // Check if a given callback is in the list.
- // If no argument is given, return whether or not list has callbacks attached.
- has: function( fn ) {
- return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
- },
- // Remove all callbacks from the list
- empty: function() {
- list = [];
- firingLength = 0;
- return this;
- },
- // Have the list do nothing anymore
- disable: function() {
- list = stack = memory = undefined;
- return this;
- },
- // Is it disabled?
- disabled: function() {
- return !list;
- },
- // Lock the list in its current state
- lock: function() {
- stack = undefined;
- if ( !memory ) {
- self.disable();
- }
- return this;
- },
- // Is it locked?
- locked: function() {
- return !stack;
- },
- // Call all callbacks with the given context and arguments
- fireWith: function( context, args ) {
- if ( list && ( !fired || stack ) ) {
- args = args || [];
- args = [ context, args.slice ? args.slice() : args ];
- if ( firing ) {
- stack.push( args );
- } else {
- fire( args );
- }
- }
- return this;
- },
- // Call all the callbacks with the given arguments
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
- // To know if the callbacks have already been called at least once
- fired: function() {
- return !!fired;
- }
- };
-
- return self;
-};
-
-
-jQuery.extend({
-
- Deferred: function( func ) {
- var tuples = [
- // action, add listener, listener list, final state
- [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
- [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
- [ "notify", "progress", jQuery.Callbacks("memory") ]
- ],
- state = "pending",
- promise = {
- state: function() {
- return state;
- },
- always: function() {
- deferred.done( arguments ).fail( arguments );
- return this;
- },
- then: function( /* fnDone, fnFail, fnProgress */ ) {
- var fns = arguments;
- return jQuery.Deferred(function( newDefer ) {
- jQuery.each( tuples, function( i, tuple ) {
- var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
- // deferred[ done | fail | progress ] for forwarding actions to newDefer
- deferred[ tuple[1] ](function() {
- var returned = fn && fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise()
- .done( newDefer.resolve )
- .fail( newDefer.reject )
- .progress( newDefer.notify );
- } else {
- newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
- }
- });
- });
- fns = null;
- }).promise();
- },
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- return obj != null ? jQuery.extend( obj, promise ) : promise;
- }
- },
- deferred = {};
-
- // Keep pipe for back-compat
- promise.pipe = promise.then;
-
- // Add list-specific methods
- jQuery.each( tuples, function( i, tuple ) {
- var list = tuple[ 2 ],
- stateString = tuple[ 3 ];
-
- // promise[ done | fail | progress ] = list.add
- promise[ tuple[1] ] = list.add;
-
- // Handle state
- if ( stateString ) {
- list.add(function() {
- // state = [ resolved | rejected ]
- state = stateString;
-
- // [ reject_list | resolve_list ].disable; progress_list.lock
- }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
- }
-
- // deferred[ resolve | reject | notify ]
- deferred[ tuple[0] ] = function() {
- deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
- return this;
- };
- deferred[ tuple[0] + "With" ] = list.fireWith;
- });
-
- // Make the deferred a promise
- promise.promise( deferred );
-
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function( subordinate /* , ..., subordinateN */ ) {
- var i = 0,
- resolveValues = slice.call( arguments ),
- length = resolveValues.length,
-
- // the count of uncompleted subordinates
- remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
-
- // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
- deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
-
- // Update function for both resolve and progress values
- updateFunc = function( i, contexts, values ) {
- return function( value ) {
- contexts[ i ] = this;
- values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
- if ( values === progressValues ) {
- deferred.notifyWith( contexts, values );
- } else if ( !( --remaining ) ) {
- deferred.resolveWith( contexts, values );
- }
- };
- },
-
- progressValues, progressContexts, resolveContexts;
-
- // add listeners to Deferred subordinates; treat others as resolved
- if ( length > 1 ) {
- progressValues = new Array( length );
- progressContexts = new Array( length );
- resolveContexts = new Array( length );
- for ( ; i < length; i++ ) {
- if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
- resolveValues[ i ].promise()
- .done( updateFunc( i, resolveContexts, resolveValues ) )
- .fail( deferred.reject )
- .progress( updateFunc( i, progressContexts, progressValues ) );
- } else {
- --remaining;
- }
- }
- }
-
- // if we're not waiting on anything, resolve the master
- if ( !remaining ) {
- deferred.resolveWith( resolveContexts, resolveValues );
- }
-
- return deferred.promise();
- }
-});
-
-
-// The deferred used on DOM ready
-var readyList;
-
-jQuery.fn.ready = function( fn ) {
- // Add the callback
- jQuery.ready.promise().done( fn );
-
- return this;
-};
-
-jQuery.extend({
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
-
- // Abort if there are pending holds or we're already ready
- if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
- return;
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
-
- // Trigger any bound ready events
- if ( jQuery.fn.triggerHandler ) {
- jQuery( document ).triggerHandler( "ready" );
- jQuery( document ).off( "ready" );
- }
- }
-});
-
-/**
- * The ready event handler and self cleanup method
- */
-function completed() {
- document.removeEventListener( "DOMContentLoaded", completed, false );
- window.removeEventListener( "load", completed, false );
- jQuery.ready();
-}
-
-jQuery.ready.promise = function( obj ) {
- if ( !readyList ) {
-
- readyList = jQuery.Deferred();
-
- // Catch cases where $(document).ready() is called after the browser event has already occurred.
- // we once tried to use readyState "interactive" here, but it caused issues like the one
- // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
- if ( document.readyState === "complete" ) {
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- setTimeout( jQuery.ready );
-
- } else {
-
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", completed, false );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", completed, false );
- }
- }
- return readyList.promise( obj );
-};
-
-// Kick off the DOM ready check even if the user does not
-jQuery.ready.promise();
-
-
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
- var i = 0,
- len = elems.length,
- bulk = key == null;
-
- // Sets many values
- if ( jQuery.type( key ) === "object" ) {
- chainable = true;
- for ( i in key ) {
- jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
- }
-
- // Sets one value
- } else if ( value !== undefined ) {
- chainable = true;
-
- if ( !jQuery.isFunction( value ) ) {
- raw = true;
- }
-
- if ( bulk ) {
- // Bulk operations run against the entire set
- if ( raw ) {
- fn.call( elems, value );
- fn = null;
-
- // ...except when executing function values
- } else {
- bulk = fn;
- fn = function( elem, key, value ) {
- return bulk.call( jQuery( elem ), value );
- };
- }
- }
-
- if ( fn ) {
- for ( ; i < len; i++ ) {
- fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
- }
- }
- }
-
- return chainable ?
- elems :
-
- // Gets
- bulk ?
- fn.call( elems ) :
- len ? fn( elems[0], key ) : emptyGet;
-};
-
-
-/**
- * Determines whether an object can have data
- */
-jQuery.acceptData = function( owner ) {
- // Accepts only:
- // - Node
- // - Node.ELEMENT_NODE
- // - Node.DOCUMENT_NODE
- // - Object
- // - Any
- /* jshint -W018 */
- return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
-};
-
-
-function Data() {
- // Support: Android < 4,
- // Old WebKit does not have Object.preventExtensions/freeze method,
- // return new empty object instead with no [[set]] accessor
- Object.defineProperty( this.cache = {}, 0, {
- get: function() {
- return {};
- }
- });
-
- this.expando = jQuery.expando + Math.random();
-}
-
-Data.uid = 1;
-Data.accepts = jQuery.acceptData;
-
-Data.prototype = {
- key: function( owner ) {
- // We can accept data for non-element nodes in modern browsers,
- // but we should not, see #8335.
- // Always return the key for a frozen object.
- if ( !Data.accepts( owner ) ) {
- return 0;
- }
-
- var descriptor = {},
- // Check if the owner object already has a cache key
- unlock = owner[ this.expando ];
-
- // If not, create one
- if ( !unlock ) {
- unlock = Data.uid++;
-
- // Secure it in a non-enumerable, non-writable property
- try {
- descriptor[ this.expando ] = { value: unlock };
- Object.defineProperties( owner, descriptor );
-
- // Support: Android < 4
- // Fallback to a less secure definition
- } catch ( e ) {
- descriptor[ this.expando ] = unlock;
- jQuery.extend( owner, descriptor );
- }
- }
-
- // Ensure the cache object
- if ( !this.cache[ unlock ] ) {
- this.cache[ unlock ] = {};
- }
-
- return unlock;
- },
- set: function( owner, data, value ) {
- var prop,
- // There may be an unlock assigned to this node,
- // if there is no entry for this "owner", create one inline
- // and set the unlock as though an owner entry had always existed
- unlock = this.key( owner ),
- cache = this.cache[ unlock ];
-
- // Handle: [ owner, key, value ] args
- if ( typeof data === "string" ) {
- cache[ data ] = value;
-
- // Handle: [ owner, { properties } ] args
- } else {
- // Fresh assignments by object are shallow copied
- if ( jQuery.isEmptyObject( cache ) ) {
- jQuery.extend( this.cache[ unlock ], data );
- // Otherwise, copy the properties one-by-one to the cache object
- } else {
- for ( prop in data ) {
- cache[ prop ] = data[ prop ];
- }
- }
- }
- return cache;
- },
- get: function( owner, key ) {
- // Either a valid cache is found, or will be created.
- // New caches will be created and the unlock returned,
- // allowing direct access to the newly created
- // empty data object. A valid owner object must be provided.
- var cache = this.cache[ this.key( owner ) ];
-
- return key === undefined ?
- cache : cache[ key ];
- },
- access: function( owner, key, value ) {
- var stored;
- // In cases where either:
- //
- // 1. No key was specified
- // 2. A string key was specified, but no value provided
- //
- // Take the "read" path and allow the get method to determine
- // which value to return, respectively either:
- //
- // 1. The entire cache object
- // 2. The data stored at the key
- //
- if ( key === undefined ||
- ((key && typeof key === "string") && value === undefined) ) {
-
- stored = this.get( owner, key );
-
- return stored !== undefined ?
- stored : this.get( owner, jQuery.camelCase(key) );
- }
-
- // [*]When the key is not a string, or both a key and value
- // are specified, set or extend (existing objects) with either:
- //
- // 1. An object of properties
- // 2. A key and value
- //
- this.set( owner, key, value );
-
- // Since the "set" path can have two possible entry points
- // return the expected data based on which path was taken[*]
- return value !== undefined ? value : key;
- },
- remove: function( owner, key ) {
- var i, name, camel,
- unlock = this.key( owner ),
- cache = this.cache[ unlock ];
-
- if ( key === undefined ) {
- this.cache[ unlock ] = {};
-
- } else {
- // Support array or space separated string of keys
- if ( jQuery.isArray( key ) ) {
- // If "name" is an array of keys...
- // When data is initially created, via ("key", "val") signature,
- // keys will be converted to camelCase.
- // Since there is no way to tell _how_ a key was added, remove
- // both plain key and camelCase key. #12786
- // This will only penalize the array argument path.
- name = key.concat( key.map( jQuery.camelCase ) );
- } else {
- camel = jQuery.camelCase( key );
- // Try the string as a key before any manipulation
- if ( key in cache ) {
- name = [ key, camel ];
- } else {
- // If a key with the spaces exists, use it.
- // Otherwise, create an array by matching non-whitespace
- name = camel;
- name = name in cache ?
- [ name ] : ( name.match( rnotwhite ) || [] );
- }
- }
-
- i = name.length;
- while ( i-- ) {
- delete cache[ name[ i ] ];
- }
- }
- },
- hasData: function( owner ) {
- return !jQuery.isEmptyObject(
- this.cache[ owner[ this.expando ] ] || {}
- );
- },
- discard: function( owner ) {
- if ( owner[ this.expando ] ) {
- delete this.cache[ owner[ this.expando ] ];
- }
- }
-};
-var data_priv = new Data();
-
-var data_user = new Data();
-
-
-
-/*
- Implementation Summary
-
- 1. Enforce API surface and semantic compatibility with 1.9.x branch
- 2. Improve the module's maintainability by reducing the storage
- paths to a single mechanism.
- 3. Use the same single mechanism to support "private" and "user" data.
- 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
- 5. Avoid exposing implementation details on user objects (eg. expando properties)
- 6. Provide a clear path for implementation upgrade to WeakMap in 2014
-*/
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
- rmultiDash = /([A-Z])/g;
-
-function dataAttr( elem, key, data ) {
- var name;
-
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
- name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
- // Only convert to a number if it doesn't change the string
- +data + "" === data ? +data :
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
- data;
- } catch( e ) {}
-
- // Make sure we set the data so it isn't changed later
- data_user.set( elem, key, data );
- } else {
- data = undefined;
- }
- }
- return data;
-}
-
-jQuery.extend({
- hasData: function( elem ) {
- return data_user.hasData( elem ) || data_priv.hasData( elem );
- },
-
- data: function( elem, name, data ) {
- return data_user.access( elem, name, data );
- },
-
- removeData: function( elem, name ) {
- data_user.remove( elem, name );
- },
-
- // TODO: Now that all calls to _data and _removeData have been replaced
- // with direct calls to data_priv methods, these can be deprecated.
- _data: function( elem, name, data ) {
- return data_priv.access( elem, name, data );
- },
-
- _removeData: function( elem, name ) {
- data_priv.remove( elem, name );
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- var i, name, data,
- elem = this[ 0 ],
- attrs = elem && elem.attributes;
-
- // Gets all values
- if ( key === undefined ) {
- if ( this.length ) {
- data = data_user.get( elem );
-
- if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) {
- i = attrs.length;
- while ( i-- ) {
-
- // Support: IE11+
- // The attrs elements can be null (#14894)
- if ( attrs[ i ] ) {
- name = attrs[ i ].name;
- if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.slice(5) );
- dataAttr( elem, name, data[ name ] );
- }
- }
- }
- data_priv.set( elem, "hasDataAttrs", true );
- }
- }
-
- return data;
- }
-
- // Sets multiple values
- if ( typeof key === "object" ) {
- return this.each(function() {
- data_user.set( this, key );
- });
- }
-
- return access( this, function( value ) {
- var data,
- camelKey = jQuery.camelCase( key );
-
- // The calling jQuery object (element matches) is not empty
- // (and therefore has an element appears at this[ 0 ]) and the
- // `value` parameter was not undefined. An empty jQuery object
- // will result in `undefined` for elem = this[ 0 ] which will
- // throw an exception if an attempt to read a data cache is made.
- if ( elem && value === undefined ) {
- // Attempt to get data from the cache
- // with the key as-is
- data = data_user.get( elem, key );
- if ( data !== undefined ) {
- return data;
- }
-
- // Attempt to get data from the cache
- // with the key camelized
- data = data_user.get( elem, camelKey );
- if ( data !== undefined ) {
- return data;
- }
-
- // Attempt to "discover" the data in
- // HTML5 custom data-* attrs
- data = dataAttr( elem, camelKey, undefined );
- if ( data !== undefined ) {
- return data;
- }
-
- // We tried really hard, but the data doesn't exist.
- return;
- }
-
- // Set the data...
- this.each(function() {
- // First, attempt to store a copy or reference of any
- // data that might've been store with a camelCased key.
- var data = data_user.get( this, camelKey );
-
- // For HTML5 data-* attribute interop, we have to
- // store property names with dashes in a camelCase form.
- // This might not apply to all properties...*
- data_user.set( this, camelKey, value );
-
- // *... In the case of properties that might _actually_
- // have dashes, we need to also store a copy of that
- // unchanged property.
- if ( key.indexOf("-") !== -1 && data !== undefined ) {
- data_user.set( this, key, value );
- }
- });
- }, null, value, arguments.length > 1, null, true );
- },
-
- removeData: function( key ) {
- return this.each(function() {
- data_user.remove( this, key );
- });
- }
-});
-
-
-jQuery.extend({
- queue: function( elem, type, data ) {
- var queue;
-
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- queue = data_priv.get( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !queue || jQuery.isArray( data ) ) {
- queue = data_priv.access( elem, type, jQuery.makeArray(data) );
- } else {
- queue.push( data );
- }
- }
- return queue || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- startLength = queue.length,
- fn = queue.shift(),
- hooks = jQuery._queueHooks( elem, type ),
- next = function() {
- jQuery.dequeue( elem, type );
- };
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- startLength--;
- }
-
- if ( fn ) {
-
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- // clear up the last queue stop function
- delete hooks.stop;
- fn.call( elem, next, hooks );
- }
-
- if ( !startLength && hooks ) {
- hooks.empty.fire();
- }
- },
-
- // not intended for public consumption - generates a queueHooks object, or returns the current one
- _queueHooks: function( elem, type ) {
- var key = type + "queueHooks";
- return data_priv.get( elem, key ) || data_priv.access( elem, key, {
- empty: jQuery.Callbacks("once memory").add(function() {
- data_priv.remove( elem, [ type + "queue", key ] );
- })
- });
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- var setter = 2;
-
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- setter--;
- }
-
- if ( arguments.length < setter ) {
- return jQuery.queue( this[0], type );
- }
-
- return data === undefined ?
- this :
- this.each(function() {
- var queue = jQuery.queue( this, type, data );
-
- // ensure a hooks for this queue
- jQuery._queueHooks( this, type );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, obj ) {
- var tmp,
- count = 1,
- defer = jQuery.Deferred(),
- elements = this,
- i = this.length,
- resolve = function() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- };
-
- if ( typeof type !== "string" ) {
- obj = type;
- type = undefined;
- }
- type = type || "fx";
-
- while ( i-- ) {
- tmp = data_priv.get( elements[ i ], type + "queueHooks" );
- if ( tmp && tmp.empty ) {
- count++;
- tmp.empty.add( resolve );
- }
- }
- resolve();
- return defer.promise( obj );
- }
-});
-var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
-
-var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-
-var isHidden = function( elem, el ) {
- // isHidden might be called from jQuery#filter function;
- // in that case, element will be second argument
- elem = el || elem;
- return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
- };
-
-var rcheckableType = (/^(?:checkbox|radio)$/i);
-
-
-
-(function() {
- var fragment = document.createDocumentFragment(),
- div = fragment.appendChild( document.createElement( "div" ) ),
- input = document.createElement( "input" );
-
- // #11217 - WebKit loses check when the name is after the checked attribute
- // Support: Windows Web Apps (WWA)
- // `name` and `type` need .setAttribute for WWA
- input.setAttribute( "type", "radio" );
- input.setAttribute( "checked", "checked" );
- input.setAttribute( "name", "t" );
-
- div.appendChild( input );
-
- // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
- // old WebKit doesn't clone checked state correctly in fragments
- support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Make sure textarea (and checkbox) defaultValue is properly cloned
- // Support: IE9-IE11+
- div.innerHTML = "<textarea>x</textarea>";
- support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-})();
-var strundefined = typeof undefined;
-
-
-
-support.focusinBubbles = "onfocusin" in window;
-
-
-var
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
- rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
-
-function returnTrue() {
- return true;
-}
-
-function returnFalse() {
- return false;
-}
-
-function safeActiveElement() {
- try {
- return document.activeElement;
- } catch ( err ) { }
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- global: {},
-
- add: function( elem, types, handler, data, selector ) {
-
- var handleObjIn, eventHandle, tmp,
- events, t, handleObj,
- special, handlers, type, namespaces, origType,
- elemData = data_priv.get( elem );
-
- // Don't attach events to noData or text/comment nodes (but allow plain objects)
- if ( !elemData ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- if ( !(events = elemData.events) ) {
- events = elemData.events = {};
- }
- if ( !(eventHandle = elemData.handle) ) {
- eventHandle = elemData.handle = function( e ) {
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?
- jQuery.event.dispatch.apply( elem, arguments ) : undefined;
- };
- }
-
- // Handle multiple events separated by a space
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- // There *must* be a type, no attaching namespace-only handlers
- if ( !type ) {
- continue;
- }
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend({
- type: type,
- origType: origType,
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
- namespace: namespaces.join(".")
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- if ( !(handlers = events[ type ]) ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener if the special events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- },
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
-
- var j, origCount, tmp,
- events, t, handleObj,
- special, handlers, type, namespaces, origType,
- elemData = data_priv.hasData( elem ) && data_priv.get( elem );
-
- if ( !elemData || !(events = elemData.events) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector ? special.delegateType : special.bindType ) || type;
- handlers = events[ type ] || [];
- tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
-
- // Remove matching events
- origCount = j = handlers.length;
- while ( j-- ) {
- handleObj = handlers[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !tmp || tmp.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
- handlers.splice( j, 1 );
-
- if ( handleObj.selector ) {
- handlers.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( origCount && !handlers.length ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- delete elemData.handle;
- data_priv.remove( elem, "events" );
- }
- },
-
- trigger: function( event, data, elem, onlyHandlers ) {
-
- var i, cur, tmp, bubbleType, ontype, handle, special,
- eventPath = [ elem || document ],
- type = hasOwn.call( event, "type" ) ? event.type : event,
- namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
-
- cur = tmp = elem = elem || document;
-
- // Don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf(".") >= 0 ) {
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
- ontype = type.indexOf(":") < 0 && "on" + type;
-
- // Caller can pass in a jQuery.Event object, Object, or just an event type string
- event = event[ jQuery.expando ] ?
- event :
- new jQuery.Event( type, typeof event === "object" && event );
-
- // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
- event.isTrigger = onlyHandlers ? 2 : 3;
- event.namespace = namespaces.join(".");
- event.namespace_re = event.namespace ?
- new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
- null;
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data == null ?
- [ event ] :
- jQuery.makeArray( data, [ event ] );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- if ( !rfocusMorph.test( bubbleType + type ) ) {
- cur = cur.parentNode;
- }
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push( cur );
- tmp = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( tmp === (elem.ownerDocument || document) ) {
- eventPath.push( tmp.defaultView || tmp.parentWindow || window );
- }
- }
-
- // Fire handlers on the event path
- i = 0;
- while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
-
- event.type = i > 1 ?
- bubbleType :
- special.bindType || type;
-
- // jQuery handler
- handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- // Native handler
- handle = ontype && cur[ ontype ];
- if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
- event.result = handle.apply( cur, data );
- if ( event.result === false ) {
- event.preventDefault();
- }
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
- jQuery.acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Don't do default actions on window, that's where global variables be (#6170)
- if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- tmp = elem[ ontype ];
-
- if ( tmp ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
- elem[ type ]();
- jQuery.event.triggered = undefined;
-
- if ( tmp ) {
- elem[ ontype ] = tmp;
- }
- }
- }
- }
-
- return event.result;
- },
-
- dispatch: function( event ) {
-
- // Make a writable jQuery.Event from the native event object
- event = jQuery.event.fix( event );
-
- var i, j, ret, matched, handleObj,
- handlerQueue = [],
- args = slice.call( arguments ),
- handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [],
- special = jQuery.event.special[ event.type ] || {};
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[0] = event;
- event.delegateTarget = this;
-
- // Call the preDispatch hook for the mapped type, and let it bail if desired
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
- return;
- }
-
- // Determine handlers
- handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
- // Run delegates first; they may want to stop propagation beneath us
- i = 0;
- while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
- event.currentTarget = matched.elem;
-
- j = 0;
- while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
-
- // Triggered event must either 1) have no namespace, or
- // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
- if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
-
- event.handleObj = handleObj;
- event.data = handleObj.data;
-
- ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
- .apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- if ( (event.result = ret) === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- // Call the postDispatch hook for the mapped type
- if ( special.postDispatch ) {
- special.postDispatch.call( this, event );
- }
-
- return event.result;
- },
-
- handlers: function( event, handlers ) {
- var i, matches, sel, handleObj,
- handlerQueue = [],
- delegateCount = handlers.delegateCount,
- cur = event.target;
-
- // Find delegate handlers
- // Black-hole SVG <use> instance trees (#13180)
- // Avoid non-left-click bubbling in Firefox (#3861)
- if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
-
- for ( ; cur !== this; cur = cur.parentNode || this ) {
-
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
- if ( cur.disabled !== true || event.type !== "click" ) {
- matches = [];
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
-
- // Don't conflict with Object.prototype properties (#13203)
- sel = handleObj.selector + " ";
-
- if ( matches[ sel ] === undefined ) {
- matches[ sel ] = handleObj.needsContext ?
- jQuery( sel, this ).index( cur ) >= 0 :
- jQuery.find( sel, this, null, [ cur ] ).length;
- }
- if ( matches[ sel ] ) {
- matches.push( handleObj );
- }
- }
- if ( matches.length ) {
- handlerQueue.push({ elem: cur, handlers: matches });
- }
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- if ( delegateCount < handlers.length ) {
- handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
- }
-
- return handlerQueue;
- },
-
- // Includes some event props shared by KeyEvent and MouseEvent
- props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
- fixHooks: {},
-
- keyHooks: {
- props: "char charCode key keyCode".split(" "),
- filter: function( event, original ) {
-
- // Add which for key events
- if ( event.which == null ) {
- event.which = original.charCode != null ? original.charCode : original.keyCode;
- }
-
- return event;
- }
- },
-
- mouseHooks: {
- props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
- filter: function( event, original ) {
- var eventDoc, doc, body,
- button = original.button;
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && original.clientX != null ) {
- eventDoc = event.target.ownerDocument || document;
- doc = eventDoc.documentElement;
- body = eventDoc.body;
-
- event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
- event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && button !== undefined ) {
- event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
- }
-
- return event;
- }
- },
-
- fix: function( event ) {
- if ( event[ jQuery.expando ] ) {
- return event;
- }
-
- // Create a writable copy of the event object and normalize some properties
- var i, prop, copy,
- type = event.type,
- originalEvent = event,
- fixHook = this.fixHooks[ type ];
-
- if ( !fixHook ) {
- this.fixHooks[ type ] = fixHook =
- rmouseEvent.test( type ) ? this.mouseHooks :
- rkeyEvent.test( type ) ? this.keyHooks :
- {};
- }
- copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
- event = new jQuery.Event( originalEvent );
-
- i = copy.length;
- while ( i-- ) {
- prop = copy[ i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Support: Cordova 2.5 (WebKit) (#13255)
- // All events should have a target; Cordova deviceready doesn't
- if ( !event.target ) {
- event.target = document;
- }
-
- // Support: Safari 6.0+, Chrome < 28
- // Target should not be a text node (#504, #13143)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
- },
-
- special: {
- load: {
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
- focus: {
- // Fire native event if possible so blur/focus sequence is correct
- trigger: function() {
- if ( this !== safeActiveElement() && this.focus ) {
- this.focus();
- return false;
- }
- },
- delegateType: "focusin"
- },
- blur: {
- trigger: function() {
- if ( this === safeActiveElement() && this.blur ) {
- this.blur();
- return false;
- }
- },
- delegateType: "focusout"
- },
- click: {
- // For checkbox, fire native event so checked state will be right
- trigger: function() {
- if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
- this.click();
- return false;
- }
- },
-
- // For cross-browser consistency, don't fire native .click() on links
- _default: function( event ) {
- return jQuery.nodeName( event.target, "a" );
- }
- },
-
- beforeunload: {
- postDispatch: function( event ) {
-
- // Support: Firefox 20+
- // Firefox doesn't alert if the returnValue field is not set.
- if ( event.result !== undefined && event.originalEvent ) {
- event.originalEvent.returnValue = event.result;
- }
- }
- }
- },
-
- simulate: function( type, elem, event, bubble ) {
- // Piggyback on a donor event to simulate a different one.
- // Fake originalEvent to avoid donor's stopPropagation, but if the
- // simulated event prevents default then we do the same on the donor.
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- {
- type: type,
- isSimulated: true,
- originalEvent: {}
- }
- );
- if ( bubble ) {
- jQuery.event.trigger( e, null, elem );
- } else {
- jQuery.event.dispatch.call( elem, e );
- }
- if ( e.isDefaultPrevented() ) {
- event.preventDefault();
- }
- }
-};
-
-jQuery.removeEvent = function( elem, type, handle ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle, false );
- }
-};
-
-jQuery.Event = function( src, props ) {
- // Allow instantiation without the 'new' keyword
- if ( !(this instanceof jQuery.Event) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = src.defaultPrevented ||
- src.defaultPrevented === undefined &&
- // Support: Android < 4.0
- src.returnValue === false ?
- returnTrue :
- returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse,
-
- preventDefault: function() {
- var e = this.originalEvent;
-
- this.isDefaultPrevented = returnTrue;
-
- if ( e && e.preventDefault ) {
- e.preventDefault();
- }
- },
- stopPropagation: function() {
- var e = this.originalEvent;
-
- this.isPropagationStopped = returnTrue;
-
- if ( e && e.stopPropagation ) {
- e.stopPropagation();
- }
- },
- stopImmediatePropagation: function() {
- var e = this.originalEvent;
-
- this.isImmediatePropagationStopped = returnTrue;
-
- if ( e && e.stopImmediatePropagation ) {
- e.stopImmediatePropagation();
- }
-
- this.stopPropagation();
- }
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-// Support: Chrome 15+
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout",
- pointerenter: "pointerover",
- pointerleave: "pointerout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var ret,
- target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj;
-
- // For mousenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
-});
-
-// Create "bubbling" focus and blur events
-// Support: Firefox, Chrome, Safari
-if ( !support.focusinBubbles ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler on the document while someone wants focusin/focusout
- var handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- var doc = this.ownerDocument || this,
- attaches = data_priv.access( doc, fix );
-
- if ( !attaches ) {
- doc.addEventListener( orig, handler, true );
- }
- data_priv.access( doc, fix, ( attaches || 0 ) + 1 );
- },
- teardown: function() {
- var doc = this.ownerDocument || this,
- attaches = data_priv.access( doc, fix ) - 1;
-
- if ( !attaches ) {
- doc.removeEventListener( orig, handler, true );
- data_priv.remove( doc, fix );
-
- } else {
- data_priv.access( doc, fix, attaches );
- }
- }
- };
- });
-}
-
-jQuery.fn.extend({
-
- on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
- var origFn, type;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) {
- // ( types-Object, data )
- data = data || selector;
- selector = undefined;
- }
- for ( type in types ) {
- this.on( type, selector, data, types[ type ], one );
- }
- return this;
- }
-
- if ( data == null && fn == null ) {
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return this;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return this.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- });
- },
- one: function( types, selector, data, fn ) {
- return this.on( types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- var handleObj, type;
- if ( types && types.preventDefault && types.handleObj ) {
- // ( event ) dispatched jQuery.Event
- handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
- // ( types-object [, selector] )
- for ( type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each(function() {
- jQuery.event.remove( this, types, fn, selector );
- });
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
- triggerHandler: function( type, data ) {
- var elem = this[0];
- if ( elem ) {
- return jQuery.event.trigger( type, data, elem, true );
- }
- }
-});
-
-
-var
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
- rtagName = /<([\w:]+)/,
- rhtml = /<|&#?\w+;/,
- rnoInnerhtml = /<(?:script|style|link)/i,
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptType = /^$|\/(?:java|ecma)script/i,
- rscriptTypeMasked = /^true\/(.*)/,
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
-
- // We have to close these tags to support XHTML (#13200)
- wrapMap = {
-
- // Support: IE 9
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
-
- thead: [ 1, "<table>", "</table>" ],
- col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
- _default: [ 0, "", "" ]
- };
-
-// Support: IE 9
-wrapMap.optgroup = wrapMap.option;
-
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// Support: 1.x compatibility
-// Manipulating tables requires a tbody
-function manipulationTarget( elem, content ) {
- return jQuery.nodeName( elem, "table" ) &&
- jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
-
- elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
- elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
- elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
- return elem;
-}
-function restoreScript( elem ) {
- var match = rscriptTypeMasked.exec( elem.type );
-
- if ( match ) {
- elem.type = match[ 1 ];
- } else {
- elem.removeAttribute("type");
- }
-
- return elem;
-}
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
- var i = 0,
- l = elems.length;
-
- for ( ; i < l; i++ ) {
- data_priv.set(
- elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" )
- );
- }
-}
-
-function cloneCopyEvent( src, dest ) {
- var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
-
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- // 1. Copy private data: events, handlers, etc.
- if ( data_priv.hasData( src ) ) {
- pdataOld = data_priv.access( src );
- pdataCur = data_priv.set( dest, pdataOld );
- events = pdataOld.events;
-
- if ( events ) {
- delete pdataCur.handle;
- pdataCur.events = {};
-
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type, events[ type ][ i ] );
- }
- }
- }
- }
-
- // 2. Copy user data
- if ( data_user.hasData( src ) ) {
- udataOld = data_user.access( src );
- udataCur = jQuery.extend( {}, udataOld );
-
- data_user.set( dest, udataCur );
- }
-}
-
-function getAll( context, tag ) {
- var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) :
- context.querySelectorAll ? context.querySelectorAll( tag || "*" ) :
- [];
-
- return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
- jQuery.merge( [ context ], ret ) :
- ret;
-}
-
-// Support: IE >= 9
-function fixInput( src, dest ) {
- var nodeName = dest.nodeName.toLowerCase();
-
- // Fails to persist the checked state of a cloned checkbox or radio button.
- if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
- dest.checked = src.checked;
-
- // Fails to return the selected option to the default selected state when cloning options
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-}
-
-jQuery.extend({
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var i, l, srcElements, destElements,
- clone = elem.cloneNode( true ),
- inPage = jQuery.contains( elem.ownerDocument, elem );
-
- // Support: IE >= 9
- // Fix Cloning issues
- if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
- !jQuery.isXMLDoc( elem ) ) {
-
- // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
- destElements = getAll( clone );
- srcElements = getAll( elem );
-
- for ( i = 0, l = srcElements.length; i < l; i++ ) {
- fixInput( srcElements[ i ], destElements[ i ] );
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- if ( deepDataAndEvents ) {
- srcElements = srcElements || getAll( elem );
- destElements = destElements || getAll( clone );
-
- for ( i = 0, l = srcElements.length; i < l; i++ ) {
- cloneCopyEvent( srcElements[ i ], destElements[ i ] );
- }
- } else {
- cloneCopyEvent( elem, clone );
- }
- }
-
- // Preserve script evaluation history
- destElements = getAll( clone, "script" );
- if ( destElements.length > 0 ) {
- setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
- }
-
- // Return the cloned set
- return clone;
- },
-
- buildFragment: function( elems, context, scripts, selection ) {
- var elem, tmp, tag, wrap, contains, j,
- fragment = context.createDocumentFragment(),
- nodes = [],
- i = 0,
- l = elems.length;
-
- for ( ; i < l; i++ ) {
- elem = elems[ i ];
-
- if ( elem || elem === 0 ) {
-
- // Add nodes directly
- if ( jQuery.type( elem ) === "object" ) {
- // Support: QtWebKit
- // jQuery.merge because push.apply(_, arraylike) throws
- jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
- // Convert non-html into a text node
- } else if ( !rhtml.test( elem ) ) {
- nodes.push( context.createTextNode( elem ) );
-
- // Convert html into DOM nodes
- } else {
- tmp = tmp || fragment.appendChild( context.createElement("div") );
-
- // Deserialize a standard representation
- tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
- wrap = wrapMap[ tag ] || wrapMap._default;
- tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ];
-
- // Descend through wrappers to the right content
- j = wrap[ 0 ];
- while ( j-- ) {
- tmp = tmp.lastChild;
- }
-
- // Support: QtWebKit
- // jQuery.merge because push.apply(_, arraylike) throws
- jQuery.merge( nodes, tmp.childNodes );
-
- // Remember the top-level container
- tmp = fragment.firstChild;
-
- // Fixes #12346
- // Support: Webkit, IE
- tmp.textContent = "";
- }
- }
- }
-
- // Remove wrapper from fragment
- fragment.textContent = "";
-
- i = 0;
- while ( (elem = nodes[ i++ ]) ) {
-
- // #4087 - If origin and destination elements are the same, and this is
- // that element, do not do anything
- if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
- continue;
- }
-
- contains = jQuery.contains( elem.ownerDocument, elem );
-
- // Append to fragment
- tmp = getAll( fragment.appendChild( elem ), "script" );
-
- // Preserve script evaluation history
- if ( contains ) {
- setGlobalEval( tmp );
- }
-
- // Capture executables
- if ( scripts ) {
- j = 0;
- while ( (elem = tmp[ j++ ]) ) {
- if ( rscriptType.test( elem.type || "" ) ) {
- scripts.push( elem );
- }
- }
- }
- }
-
- return fragment;
- },
-
- cleanData: function( elems ) {
- var data, elem, type, key,
- special = jQuery.event.special,
- i = 0;
-
- for ( ; (elem = elems[ i ]) !== undefined; i++ ) {
- if ( jQuery.acceptData( elem ) ) {
- key = elem[ data_priv.expando ];
-
- if ( key && (data = data_priv.cache[ key ]) ) {
- if ( data.events ) {
- for ( type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
- }
- if ( data_priv.cache[ key ] ) {
- // Discard any remaining `private` data
- delete data_priv.cache[ key ];
- }
- }
- }
- // Discard any remaining `user` data
- delete data_user.cache[ elem[ data_user.expando ] ];
- }
- }
-});
-
-jQuery.fn.extend({
- text: function( value ) {
- return access( this, function( value ) {
- return value === undefined ?
- jQuery.text( this ) :
- this.empty().each(function() {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- this.textContent = value;
- }
- });
- }, null, value, arguments.length );
- },
-
- append: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.appendChild( elem );
- }
- });
- },
-
- prepend: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.insertBefore( elem, target.firstChild );
- }
- });
- },
-
- before: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this );
- }
- });
- },
-
- after: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- }
- });
- },
-
- remove: function( selector, keepData /* Internal Use Only */ ) {
- var elem,
- elems = selector ? jQuery.filter( selector, this ) : this,
- i = 0;
-
- for ( ; (elem = elems[i]) != null; i++ ) {
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem ) );
- }
-
- if ( elem.parentNode ) {
- if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
- setGlobalEval( getAll( elem, "script" ) );
- }
- elem.parentNode.removeChild( elem );
- }
- }
-
- return this;
- },
-
- empty: function() {
- var elem,
- i = 0;
-
- for ( ; (elem = this[i]) != null; i++ ) {
- if ( elem.nodeType === 1 ) {
-
- // Prevent memory leaks
- jQuery.cleanData( getAll( elem, false ) );
-
- // Remove any remaining nodes
- elem.textContent = "";
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map(function() {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- });
- },
-
- html: function( value ) {
- return access( this, function( value ) {
- var elem = this[ 0 ] || {},
- i = 0,
- l = this.length;
-
- if ( value === undefined && elem.nodeType === 1 ) {
- return elem.innerHTML;
- }
-
- // See if we can take a shortcut and just use innerHTML
- if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
-
- value = value.replace( rxhtmlTag, "<$1></$2>" );
-
- try {
- for ( ; i < l; i++ ) {
- elem = this[ i ] || {};
-
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- elem.innerHTML = value;
- }
- }
-
- elem = 0;
-
- // If using innerHTML throws an exception, use the fallback method
- } catch( e ) {}
- }
-
- if ( elem ) {
- this.empty().append( value );
- }
- }, null, value, arguments.length );
- },
-
- replaceWith: function() {
- var arg = arguments[ 0 ];
-
- // Make the changes, replacing each context element with the new content
- this.domManip( arguments, function( elem ) {
- arg = this.parentNode;
-
- jQuery.cleanData( getAll( this ) );
-
- if ( arg ) {
- arg.replaceChild( elem, this );
- }
- });
-
- // Force removal if there was no new content (e.g., from empty arguments)
- return arg && (arg.length || arg.nodeType) ? this : this.remove();
- },
-
- detach: function( selector ) {
- return this.remove( selector, true );
- },
-
- domManip: function( args, callback ) {
-
- // Flatten any nested arrays
- args = concat.apply( [], args );
-
- var fragment, first, scripts, hasScripts, node, doc,
- i = 0,
- l = this.length,
- set = this,
- iNoClone = l - 1,
- value = args[ 0 ],
- isFunction = jQuery.isFunction( value );
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( isFunction ||
- ( l > 1 && typeof value === "string" &&
- !support.checkClone && rchecked.test( value ) ) ) {
- return this.each(function( index ) {
- var self = set.eq( index );
- if ( isFunction ) {
- args[ 0 ] = value.call( this, index, self.html() );
- }
- self.domManip( args, callback );
- });
- }
-
- if ( l ) {
- fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
- first = fragment.firstChild;
-
- if ( fragment.childNodes.length === 1 ) {
- fragment = first;
- }
-
- if ( first ) {
- scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
- hasScripts = scripts.length;
-
- // Use the original fragment for the last item instead of the first because it can end up
- // being emptied incorrectly in certain situations (#8070).
- for ( ; i < l; i++ ) {
- node = fragment;
-
- if ( i !== iNoClone ) {
- node = jQuery.clone( node, true, true );
-
- // Keep references to cloned scripts for later restoration
- if ( hasScripts ) {
- // Support: QtWebKit
- // jQuery.merge because push.apply(_, arraylike) throws
- jQuery.merge( scripts, getAll( node, "script" ) );
- }
- }
-
- callback.call( this[ i ], node, i );
- }
-
- if ( hasScripts ) {
- doc = scripts[ scripts.length - 1 ].ownerDocument;
-
- // Reenable scripts
- jQuery.map( scripts, restoreScript );
-
- // Evaluate executable scripts on first document insertion
- for ( i = 0; i < hasScripts; i++ ) {
- node = scripts[ i ];
- if ( rscriptType.test( node.type || "" ) &&
- !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
-
- if ( node.src ) {
- // Optional AJAX dependency, but won't run scripts if not present
- if ( jQuery._evalUrl ) {
- jQuery._evalUrl( node.src );
- }
- } else {
- jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
- }
- }
- }
- }
- }
- }
-
- return this;
- }
-});
-
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var elems,
- ret = [],
- insert = jQuery( selector ),
- last = insert.length - 1,
- i = 0;
-
- for ( ; i <= last; i++ ) {
- elems = i === last ? this : this.clone( true );
- jQuery( insert[ i ] )[ original ]( elems );
-
- // Support: QtWebKit
- // .get() because push.apply(_, arraylike) throws
- push.apply( ret, elems.get() );
- }
-
- return this.pushStack( ret );
- };
-});
-
-
-var iframe,
- elemdisplay = {};
-
-/**
- * Retrieve the actual display of a element
- * @param {String} name nodeName of the element
- * @param {Object} doc Document object
- */
-// Called only from within defaultDisplay
-function actualDisplay( name, doc ) {
- var style,
- elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
-
- // getDefaultComputedStyle might be reliably used only on attached element
- display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
-
- // Use of this method is a temporary fix (more like optmization) until something better comes along,
- // since it was removed from specification and supported only in FF
- style.display : jQuery.css( elem[ 0 ], "display" );
-
- // We don't have any data stored on the element,
- // so use "detach" method as fast way to get rid of the element
- elem.detach();
-
- return display;
-}
-
-/**
- * Try to determine the default display value of an element
- * @param {String} nodeName
- */
-function defaultDisplay( nodeName ) {
- var doc = document,
- display = elemdisplay[ nodeName ];
-
- if ( !display ) {
- display = actualDisplay( nodeName, doc );
-
- // If the simple way fails, read from inside an iframe
- if ( display === "none" || !display ) {
-
- // Use the already-created iframe if possible
- iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
-
- // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
- doc = iframe[ 0 ].contentDocument;
-
- // Support: IE
- doc.write();
- doc.close();
-
- display = actualDisplay( nodeName, doc );
- iframe.detach();
- }
-
- // Store the correct default display
- elemdisplay[ nodeName ] = display;
- }
-
- return display;
-}
-var rmargin = (/^margin/);
-
-var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
-
-var getStyles = function( elem ) {
- return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
- };
-
-
-
-function curCSS( elem, name, computed ) {
- var width, minWidth, maxWidth, ret,
- style = elem.style;
-
- computed = computed || getStyles( elem );
-
- // Support: IE9
- // getPropertyValue is only needed for .css('filter') in IE9, see #12537
- if ( computed ) {
- ret = computed.getPropertyValue( name ) || computed[ name ];
- }
-
- if ( computed ) {
-
- if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
- ret = jQuery.style( elem, name );
- }
-
- // Support: iOS < 6
- // A tribute to the "awesome hack by Dean Edwards"
- // iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
- // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
- if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
-
- // Remember the original values
- width = style.width;
- minWidth = style.minWidth;
- maxWidth = style.maxWidth;
-
- // Put in the new values to get a computed value out
- style.minWidth = style.maxWidth = style.width = ret;
- ret = computed.width;
-
- // Revert the changed values
- style.width = width;
- style.minWidth = minWidth;
- style.maxWidth = maxWidth;
- }
- }
-
- return ret !== undefined ?
- // Support: IE
- // IE returns zIndex value as an integer.
- ret + "" :
- ret;
-}
-
-
-function addGetHookIf( conditionFn, hookFn ) {
- // Define the hook, we'll check on the first run if it's really needed.
- return {
- get: function() {
- if ( conditionFn() ) {
- // Hook not needed (or it's not possible to use it due to missing dependency),
- // remove it.
- // Since there are no other hooks for marginRight, remove the whole object.
- delete this.get;
- return;
- }
-
- // Hook needed; redefine it so that the support test is not executed again.
-
- return (this.get = hookFn).apply( this, arguments );
- }
- };
-}
-
-
-(function() {
- var pixelPositionVal, boxSizingReliableVal,
- docElem = document.documentElement,
- container = document.createElement( "div" ),
- div = document.createElement( "div" );
-
- if ( !div.style ) {
- return;
- }
-
- div.style.backgroundClip = "content-box";
- div.cloneNode( true ).style.backgroundClip = "";
- support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
- container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" +
- "position:absolute";
- container.appendChild( div );
-
- // Executing both pixelPosition & boxSizingReliable tests require only one layout
- // so they're executed at the same time to save the second computation.
- function computePixelPositionAndBoxSizingReliable() {
- div.style.cssText =
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
- "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
- "border:1px;padding:1px;width:4px;position:absolute";
- div.innerHTML = "";
- docElem.appendChild( container );
-
- var divStyle = window.getComputedStyle( div, null );
- pixelPositionVal = divStyle.top !== "1%";
- boxSizingReliableVal = divStyle.width === "4px";
-
- docElem.removeChild( container );
- }
-
- // Support: node.js jsdom
- // Don't assume that getComputedStyle is a property of the global object
- if ( window.getComputedStyle ) {
- jQuery.extend( support, {
- pixelPosition: function() {
- // This test is executed only once but we still do memoizing
- // since we can use the boxSizingReliable pre-computing.
- // No need to check if the test was already performed, though.
- computePixelPositionAndBoxSizingReliable();
- return pixelPositionVal;
- },
- boxSizingReliable: function() {
- if ( boxSizingReliableVal == null ) {
- computePixelPositionAndBoxSizingReliable();
- }
- return boxSizingReliableVal;
- },
- reliableMarginRight: function() {
- // Support: Android 2.3
- // Check if div with explicit width and no margin-right incorrectly
- // gets computed margin-right based on width of container. (#3333)
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // This support function is only executed once so no memoizing is needed.
- var ret,
- marginDiv = div.appendChild( document.createElement( "div" ) );
-
- // Reset CSS: box-sizing; display; margin; border; padding
- marginDiv.style.cssText = div.style.cssText =
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
- "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
- marginDiv.style.marginRight = marginDiv.style.width = "0";
- div.style.width = "1px";
- docElem.appendChild( container );
-
- ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );
-
- docElem.removeChild( container );
-
- return ret;
- }
- });
- }
-})();
-
-
-// A method for quickly swapping in/out CSS properties to get correct calculations.
-jQuery.swap = function( elem, options, callback, args ) {
- var ret, name,
- old = {};
-
- // Remember the old values, and insert the new ones
- for ( name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- ret = callback.apply( elem, args || [] );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
-
- return ret;
-};
-
-
-var
- // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
- // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
- rdisplayswap = /^(none|table(?!-c[ea]).+)/,
- rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
- rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
-
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssNormalTransform = {
- letterSpacing: "0",
- fontWeight: "400"
- },
-
- cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
-
-// return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( style, name ) {
-
- // shortcut for names that are not vendor prefixed
- if ( name in style ) {
- return name;
- }
-
- // check for vendor prefixed names
- var capName = name[0].toUpperCase() + name.slice(1),
- origName = name,
- i = cssPrefixes.length;
-
- while ( i-- ) {
- name = cssPrefixes[ i ] + capName;
- if ( name in style ) {
- return name;
- }
- }
-
- return origName;
-}
-
-function setPositiveNumber( elem, value, subtract ) {
- var matches = rnumsplit.exec( value );
- return matches ?
- // Guard against undefined "subtract", e.g., when used as in cssHooks
- Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
- value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
- var i = extra === ( isBorderBox ? "border" : "content" ) ?
- // If we already have the right measurement, avoid augmentation
- 4 :
- // Otherwise initialize for horizontal or vertical properties
- name === "width" ? 1 : 0,
-
- val = 0;
-
- for ( ; i < 4; i += 2 ) {
- // both box models exclude margin, so add it if we want it
- if ( extra === "margin" ) {
- val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
- }
-
- if ( isBorderBox ) {
- // border-box includes padding, so remove it if we want content
- if ( extra === "content" ) {
- val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
- }
-
- // at this point, extra isn't border nor margin, so remove border
- if ( extra !== "margin" ) {
- val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- } else {
- // at this point, extra isn't content, so add padding
- val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
- // at this point, extra isn't content nor padding, so add border
- if ( extra !== "padding" ) {
- val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- }
- }
-
- return val;
-}
-
-function getWidthOrHeight( elem, name, extra ) {
-
- // Start with offset property, which is equivalent to the border-box value
- var valueIsBorderBox = true,
- val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
- styles = getStyles( elem ),
- isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
- // some non-html elements return undefined for offsetWidth, so check for null/undefined
- // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
- // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
- if ( val <= 0 || val == null ) {
- // Fall back to computed then uncomputed css if necessary
- val = curCSS( elem, name, styles );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ];
- }
-
- // Computed unit is not pixels. Stop here and return.
- if ( rnumnonpx.test(val) ) {
- return val;
- }
-
- // we need the check for style in case a browser which returns unreliable values
- // for getComputedStyle silently falls back to the reliable elem.style
- valueIsBorderBox = isBorderBox &&
- ( support.boxSizingReliable() || val === elem.style[ name ] );
-
- // Normalize "", auto, and prepare for extra
- val = parseFloat( val ) || 0;
- }
-
- // use the active box-sizing model to add/subtract irrelevant styles
- return ( val +
- augmentWidthOrHeight(
- elem,
- name,
- extra || ( isBorderBox ? "border" : "content" ),
- valueIsBorderBox,
- styles
- )
- ) + "px";
-}
-
-function showHide( elements, show ) {
- var display, elem, hidden,
- values = [],
- index = 0,
- length = elements.length;
-
- for ( ; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
-
- values[ index ] = data_priv.get( elem, "olddisplay" );
- display = elem.style.display;
- if ( show ) {
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if ( !values[ index ] && display === "none" ) {
- elem.style.display = "";
- }
-
- // Set elements which have been overridden with display: none
- // in a stylesheet to whatever the default browser style is
- // for such an element
- if ( elem.style.display === "" && isHidden( elem ) ) {
- values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) );
- }
- } else {
- hidden = isHidden( elem );
-
- if ( display !== "none" || !hidden ) {
- data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
- }
- }
- }
-
- // Set the display of most of the elements in a second loop
- // to avoid the constant reflow
- for ( index = 0; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
- if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
- elem.style.display = show ? values[ index ] || "" : "none";
- }
- }
-
- return elements;
-}
-
-jQuery.extend({
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity" );
- return ret === "" ? "1" : ret;
- }
- }
- }
- },
-
- // Don't automatically add "px" to these possibly-unitless properties
- cssNumber: {
- "columnCount": true,
- "fillOpacity": true,
- "flexGrow": true,
- "flexShrink": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "order": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- // normalize float css property
- "float": "cssFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, hooks,
- origName = jQuery.camelCase( name ),
- style = elem.style;
-
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
-
- // gets hook for the prefixed version
- // followed by the unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // convert relative number strings (+= or -=) to relative numbers. #7345
- if ( type === "string" && (ret = rrelNum.exec( value )) ) {
- value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that null and NaN values aren't set. See: #7116
- if ( value == null || value !== value ) {
- return;
- }
-
- // If a number was passed in, add 'px' to the (except for certain CSS properties)
- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
- value += "px";
- }
-
- // Fixes #8908, it can be done more correctly by specifying setters in cssHooks,
- // but it would mean to define eight (for every problematic property) identical functions
- if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
- style[ name ] = "inherit";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
- style[ name ] = value;
- }
-
- } else {
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra, styles ) {
- var val, num, hooks,
- origName = jQuery.camelCase( name );
-
- // Make sure that we're working with the right name
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
-
- // gets hook for the prefixed version
- // followed by the unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks ) {
- val = hooks.get( elem, true, extra );
- }
-
- // Otherwise, if a way to get the computed value exists, use that
- if ( val === undefined ) {
- val = curCSS( elem, name, styles );
- }
-
- //convert "normal" to computed value
- if ( val === "normal" && name in cssNormalTransform ) {
- val = cssNormalTransform[ name ];
- }
-
- // Return, converting to number if forced or a qualifier was provided and val looks numeric
- if ( extra === "" || extra ) {
- num = parseFloat( val );
- return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
- }
- return val;
- }
-});
-
-jQuery.each([ "height", "width" ], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- if ( computed ) {
- // certain elements can have dimension info if we invisibly show them
- // however, it must have a current display style that would benefit from this
- return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
- jQuery.swap( elem, cssShow, function() {
- return getWidthOrHeight( elem, name, extra );
- }) :
- getWidthOrHeight( elem, name, extra );
- }
- },
-
- set: function( elem, value, extra ) {
- var styles = extra && getStyles( elem );
- return setPositiveNumber( elem, value, extra ?
- augmentWidthOrHeight(
- elem,
- name,
- extra,
- jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
- styles
- ) : 0
- );
- }
- };
-});
-
-// Support: Android 2.3
-jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
- function( elem, computed ) {
- if ( computed ) {
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // Work around by temporarily setting element display to inline-block
- return jQuery.swap( elem, { "display": "inline-block" },
- curCSS, [ elem, "marginRight" ] );
- }
- }
-);
-
-// These hooks are used by animate to expand properties
-jQuery.each({
- margin: "",
- padding: "",
- border: "Width"
-}, function( prefix, suffix ) {
- jQuery.cssHooks[ prefix + suffix ] = {
- expand: function( value ) {
- var i = 0,
- expanded = {},
-
- // assumes a single number if not a string
- parts = typeof value === "string" ? value.split(" ") : [ value ];
-
- for ( ; i < 4; i++ ) {
- expanded[ prefix + cssExpand[ i ] + suffix ] =
- parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
- }
-
- return expanded;
- }
- };
-
- if ( !rmargin.test( prefix ) ) {
- jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
- }
-});
-
-jQuery.fn.extend({
- css: function( name, value ) {
- return access( this, function( elem, name, value ) {
- var styles, len,
- map = {},
- i = 0;
-
- if ( jQuery.isArray( name ) ) {
- styles = getStyles( elem );
- len = name.length;
-
- for ( ; i < len; i++ ) {
- map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
- }
-
- return map;
- }
-
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- }, name, value, arguments.length > 1 );
- },
- show: function() {
- return showHide( this, true );
- },
- hide: function() {
- return showHide( this );
- },
- toggle: function( state ) {
- if ( typeof state === "boolean" ) {
- return state ? this.show() : this.hide();
- }
-
- return this.each(function() {
- if ( isHidden( this ) ) {
- jQuery( this ).show();
- } else {
- jQuery( this ).hide();
- }
- });
- }
-});
-
-
-function Tween( elem, options, prop, end, easing ) {
- return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
- constructor: Tween,
- init: function( elem, options, prop, end, easing, unit ) {
- this.elem = elem;
- this.prop = prop;
- this.easing = easing || "swing";
- this.options = options;
- this.start = this.now = this.cur();
- this.end = end;
- this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
- },
- cur: function() {
- var hooks = Tween.propHooks[ this.prop ];
-
- return hooks && hooks.get ?
- hooks.get( this ) :
- Tween.propHooks._default.get( this );
- },
- run: function( percent ) {
- var eased,
- hooks = Tween.propHooks[ this.prop ];
-
- if ( this.options.duration ) {
- this.pos = eased = jQuery.easing[ this.easing ](
- percent, this.options.duration * percent, 0, 1, this.options.duration
- );
- } else {
- this.pos = eased = percent;
- }
- this.now = ( this.end - this.start ) * eased + this.start;
-
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- if ( hooks && hooks.set ) {
- hooks.set( this );
- } else {
- Tween.propHooks._default.set( this );
- }
- return this;
- }
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
- _default: {
- get: function( tween ) {
- var result;
-
- if ( tween.elem[ tween.prop ] != null &&
- (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
- return tween.elem[ tween.prop ];
- }
-
- // passing an empty string as a 3rd parameter to .css will automatically
- // attempt a parseFloat and fallback to a string if the parse fails
- // so, simple values such as "10px" are parsed to Float.
- // complex values such as "rotate(1rad)" are returned as is.
- result = jQuery.css( tween.elem, tween.prop, "" );
- // Empty strings, null, undefined and "auto" are converted to 0.
- return !result || result === "auto" ? 0 : result;
- },
- set: function( tween ) {
- // use step hook for back compat - use cssHook if its there - use .style if its
- // available and use plain properties where available
- if ( jQuery.fx.step[ tween.prop ] ) {
- jQuery.fx.step[ tween.prop ]( tween );
- } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
- jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
- } else {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
- }
-};
-
-// Support: IE9
-// Panic based approach to setting things on disconnected nodes
-
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
- set: function( tween ) {
- if ( tween.elem.nodeType && tween.elem.parentNode ) {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
-};
-
-jQuery.easing = {
- linear: function( p ) {
- return p;
- },
- swing: function( p ) {
- return 0.5 - Math.cos( p * Math.PI ) / 2;
- }
-};
-
-jQuery.fx = Tween.prototype.init;
-
-// Back Compat <1.8 extension point
-jQuery.fx.step = {};
-
-
-
-
-var
- fxNow, timerId,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
- rrun = /queueHooks$/,
- animationPrefilters = [ defaultPrefilter ],
- tweeners = {
- "*": [ function( prop, value ) {
- var tween = this.createTween( prop, value ),
- target = tween.cur(),
- parts = rfxnum.exec( value ),
- unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
- // Starting value computation is required for potential unit mismatches
- start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
- rfxnum.exec( jQuery.css( tween.elem, prop ) ),
- scale = 1,
- maxIterations = 20;
-
- if ( start && start[ 3 ] !== unit ) {
- // Trust units reported by jQuery.css
- unit = unit || start[ 3 ];
-
- // Make sure we update the tween properties later on
- parts = parts || [];
-
- // Iteratively approximate from a nonzero starting point
- start = +target || 1;
-
- do {
- // If previous iteration zeroed out, double until we get *something*
- // Use a string for doubling factor so we don't accidentally see scale as unchanged below
- scale = scale || ".5";
-
- // Adjust and apply
- start = start / scale;
- jQuery.style( tween.elem, prop, start + unit );
-
- // Update scale, tolerating zero or NaN from tween.cur()
- // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
- } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
- }
-
- // Update tween properties
- if ( parts ) {
- start = tween.start = +start || +target || 0;
- tween.unit = unit;
- // If a +=/-= token was provided, we're doing a relative animation
- tween.end = parts[ 1 ] ?
- start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
- +parts[ 2 ];
- }
-
- return tween;
- } ]
- };
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- setTimeout(function() {
- fxNow = undefined;
- });
- return ( fxNow = jQuery.now() );
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
- var which,
- i = 0,
- attrs = { height: type };
-
- // if we include width, step value is 1 to do all cssExpand values,
- // if we don't include width, step value is 2 to skip over Left and Right
- includeWidth = includeWidth ? 1 : 0;
- for ( ; i < 4 ; i += 2 - includeWidth ) {
- which = cssExpand[ i ];
- attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
- }
-
- if ( includeWidth ) {
- attrs.opacity = attrs.width = type;
- }
-
- return attrs;
-}
-
-function createTween( value, prop, animation ) {
- var tween,
- collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
- index = 0,
- length = collection.length;
- for ( ; index < length; index++ ) {
- if ( (tween = collection[ index ].call( animation, prop, value )) ) {
-
- // we're done with this property
- return tween;
- }
- }
-}
-
-function defaultPrefilter( elem, props, opts ) {
- /* jshint validthis: true */
- var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
- anim = this,
- orig = {},
- style = elem.style,
- hidden = elem.nodeType && isHidden( elem ),
- dataShow = data_priv.get( elem, "fxshow" );
-
- // handle queue: false promises
- if ( !opts.queue ) {
- hooks = jQuery._queueHooks( elem, "fx" );
- if ( hooks.unqueued == null ) {
- hooks.unqueued = 0;
- oldfire = hooks.empty.fire;
- hooks.empty.fire = function() {
- if ( !hooks.unqueued ) {
- oldfire();
- }
- };
- }
- hooks.unqueued++;
-
- anim.always(function() {
- // doing this makes sure that the complete handler will be called
- // before this completes
- anim.always(function() {
- hooks.unqueued--;
- if ( !jQuery.queue( elem, "fx" ).length ) {
- hooks.empty.fire();
- }
- });
- });
- }
-
- // height/width overflow pass
- if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
- // Make sure that nothing sneaks out
- // Record all 3 overflow attributes because IE9-10 do not
- // change the overflow attribute when overflowX and
- // overflowY are set to the same value
- opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
- // Set display property to inline-block for height/width
- // animations on inline elements that are having width/height animated
- display = jQuery.css( elem, "display" );
-
- // Test default display if display is currently "none"
- checkDisplay = display === "none" ?
- data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
-
- if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
- style.display = "inline-block";
- }
- }
-
- if ( opts.overflow ) {
- style.overflow = "hidden";
- anim.always(function() {
- style.overflow = opts.overflow[ 0 ];
- style.overflowX = opts.overflow[ 1 ];
- style.overflowY = opts.overflow[ 2 ];
- });
- }
-
- // show/hide pass
- for ( prop in props ) {
- value = props[ prop ];
- if ( rfxtypes.exec( value ) ) {
- delete props[ prop ];
- toggle = toggle || value === "toggle";
- if ( value === ( hidden ? "hide" : "show" ) ) {
-
- // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
- if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
- hidden = true;
- } else {
- continue;
- }
- }
- orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
-
- // Any non-fx value stops us from restoring the original display value
- } else {
- display = undefined;
- }
- }
-
- if ( !jQuery.isEmptyObject( orig ) ) {
- if ( dataShow ) {
- if ( "hidden" in dataShow ) {
- hidden = dataShow.hidden;
- }
- } else {
- dataShow = data_priv.access( elem, "fxshow", {} );
- }
-
- // store state if its toggle - enables .stop().toggle() to "reverse"
- if ( toggle ) {
- dataShow.hidden = !hidden;
- }
- if ( hidden ) {
- jQuery( elem ).show();
- } else {
- anim.done(function() {
- jQuery( elem ).hide();
- });
- }
- anim.done(function() {
- var prop;
-
- data_priv.remove( elem, "fxshow" );
- for ( prop in orig ) {
- jQuery.style( elem, prop, orig[ prop ] );
- }
- });
- for ( prop in orig ) {
- tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
-
- if ( !( prop in dataShow ) ) {
- dataShow[ prop ] = tween.start;
- if ( hidden ) {
- tween.end = tween.start;
- tween.start = prop === "width" || prop === "height" ? 1 : 0;
- }
- }
- }
-
- // If this is a noop like .hide().hide(), restore an overwritten display value
- } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
- style.display = display;
- }
-}
-
-function propFilter( props, specialEasing ) {
- var index, name, easing, value, hooks;
-
- // camelCase, specialEasing and expand cssHook pass
- for ( index in props ) {
- name = jQuery.camelCase( index );
- easing = specialEasing[ name ];
- value = props[ index ];
- if ( jQuery.isArray( value ) ) {
- easing = value[ 1 ];
- value = props[ index ] = value[ 0 ];
- }
-
- if ( index !== name ) {
- props[ name ] = value;
- delete props[ index ];
- }
-
- hooks = jQuery.cssHooks[ name ];
- if ( hooks && "expand" in hooks ) {
- value = hooks.expand( value );
- delete props[ name ];
-
- // not quite $.extend, this wont overwrite keys already present.
- // also - reusing 'index' from above because we have the correct "name"
- for ( index in value ) {
- if ( !( index in props ) ) {
- props[ index ] = value[ index ];
- specialEasing[ index ] = easing;
- }
- }
- } else {
- specialEasing[ name ] = easing;
- }
- }
-}
-
-function Animation( elem, properties, options ) {
- var result,
- stopped,
- index = 0,
- length = animationPrefilters.length,
- deferred = jQuery.Deferred().always( function() {
- // don't match elem in the :animated selector
- delete tick.elem;
- }),
- tick = function() {
- if ( stopped ) {
- return false;
- }
- var currentTime = fxNow || createFxNow(),
- remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
- // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
- temp = remaining / animation.duration || 0,
- percent = 1 - temp,
- index = 0,
- length = animation.tweens.length;
-
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( percent );
- }
-
- deferred.notifyWith( elem, [ animation, percent, remaining ]);
-
- if ( percent < 1 && length ) {
- return remaining;
- } else {
- deferred.resolveWith( elem, [ animation ] );
- return false;
- }
- },
- animation = deferred.promise({
- elem: elem,
- props: jQuery.extend( {}, properties ),
- opts: jQuery.extend( true, { specialEasing: {} }, options ),
- originalProperties: properties,
- originalOptions: options,
- startTime: fxNow || createFxNow(),
- duration: options.duration,
- tweens: [],
- createTween: function( prop, end ) {
- var tween = jQuery.Tween( elem, animation.opts, prop, end,
- animation.opts.specialEasing[ prop ] || animation.opts.easing );
- animation.tweens.push( tween );
- return tween;
- },
- stop: function( gotoEnd ) {
- var index = 0,
- // if we are going to the end, we want to run all the tweens
- // otherwise we skip this part
- length = gotoEnd ? animation.tweens.length : 0;
- if ( stopped ) {
- return this;
- }
- stopped = true;
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( 1 );
- }
-
- // resolve when we played the last frame
- // otherwise, reject
- if ( gotoEnd ) {
- deferred.resolveWith( elem, [ animation, gotoEnd ] );
- } else {
- deferred.rejectWith( elem, [ animation, gotoEnd ] );
- }
- return this;
- }
- }),
- props = animation.props;
-
- propFilter( props, animation.opts.specialEasing );
-
- for ( ; index < length ; index++ ) {
- result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
- if ( result ) {
- return result;
- }
- }
-
- jQuery.map( props, createTween, animation );
-
- if ( jQuery.isFunction( animation.opts.start ) ) {
- animation.opts.start.call( elem, animation );
- }
-
- jQuery.fx.timer(
- jQuery.extend( tick, {
- elem: elem,
- anim: animation,
- queue: animation.opts.queue
- })
- );
-
- // attach callbacks from options
- return animation.progress( animation.opts.progress )
- .done( animation.opts.done, animation.opts.complete )
- .fail( animation.opts.fail )
- .always( animation.opts.always );
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
-
- tweener: function( props, callback ) {
- if ( jQuery.isFunction( props ) ) {
- callback = props;
- props = [ "*" ];
- } else {
- props = props.split(" ");
- }
-
- var prop,
- index = 0,
- length = props.length;
-
- for ( ; index < length ; index++ ) {
- prop = props[ index ];
- tweeners[ prop ] = tweeners[ prop ] || [];
- tweeners[ prop ].unshift( callback );
- }
- },
-
- prefilter: function( callback, prepend ) {
- if ( prepend ) {
- animationPrefilters.unshift( callback );
- } else {
- animationPrefilters.push( callback );
- }
- }
-});
-
-jQuery.speed = function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
- // normalize opt.queue - true/undefined/null -> "fx"
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function() {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- }
- };
-
- return opt;
-};
-
-jQuery.fn.extend({
- fadeTo: function( speed, to, easing, callback ) {
-
- // show any hidden elements after setting opacity to 0
- return this.filter( isHidden ).css( "opacity", 0 ).show()
-
- // animate to the value specified
- .end().animate({ opacity: to }, speed, easing, callback );
- },
- animate: function( prop, speed, easing, callback ) {
- var empty = jQuery.isEmptyObject( prop ),
- optall = jQuery.speed( speed, easing, callback ),
- doAnimation = function() {
- // Operate on a copy of prop so per-property easing won't be lost
- var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
- // Empty animations, or finishing resolves immediately
- if ( empty || data_priv.get( this, "finish" ) ) {
- anim.stop( true );
- }
- };
- doAnimation.finish = doAnimation;
-
- return empty || optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
- stop: function( type, clearQueue, gotoEnd ) {
- var stopQueue = function( hooks ) {
- var stop = hooks.stop;
- delete hooks.stop;
- stop( gotoEnd );
- };
-
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue && type !== false ) {
- this.queue( type || "fx", [] );
- }
-
- return this.each(function() {
- var dequeue = true,
- index = type != null && type + "queueHooks",
- timers = jQuery.timers,
- data = data_priv.get( this );
-
- if ( index ) {
- if ( data[ index ] && data[ index ].stop ) {
- stopQueue( data[ index ] );
- }
- } else {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
- stopQueue( data[ index ] );
- }
- }
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
- timers[ index ].anim.stop( gotoEnd );
- dequeue = false;
- timers.splice( index, 1 );
- }
- }
-
- // start the next in the queue if the last step wasn't forced
- // timers currently will call their complete callbacks, which will dequeue
- // but only if they were gotoEnd
- if ( dequeue || !gotoEnd ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- finish: function( type ) {
- if ( type !== false ) {
- type = type || "fx";
- }
- return this.each(function() {
- var index,
- data = data_priv.get( this ),
- queue = data[ type + "queue" ],
- hooks = data[ type + "queueHooks" ],
- timers = jQuery.timers,
- length = queue ? queue.length : 0;
-
- // enable finishing flag on private data
- data.finish = true;
-
- // empty the queue first
- jQuery.queue( this, type, [] );
-
- if ( hooks && hooks.stop ) {
- hooks.stop.call( this, true );
- }
-
- // look for any active animations, and finish them
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
- timers[ index ].anim.stop( true );
- timers.splice( index, 1 );
- }
- }
-
- // look for any animations in the old queue and finish them
- for ( index = 0; index < length; index++ ) {
- if ( queue[ index ] && queue[ index ].finish ) {
- queue[ index ].finish.call( this );
- }
- }
-
- // turn off finishing flag
- delete data.finish;
- });
- }
-});
-
-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
- var cssFn = jQuery.fn[ name ];
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return speed == null || typeof speed === "boolean" ?
- cssFn.apply( this, arguments ) :
- this.animate( genFx( name, true ), speed, easing, callback );
- };
-});
-
-// Generate shortcuts for custom animations
-jQuery.each({
- slideDown: genFx("show"),
- slideUp: genFx("hide"),
- slideToggle: genFx("toggle"),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-});
-
-jQuery.timers = [];
-jQuery.fx.tick = function() {
- var timer,
- i = 0,
- timers = jQuery.timers;
-
- fxNow = jQuery.now();
-
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
- // Checks the timer has not already been removed
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
- jQuery.timers.push( timer );
- if ( timer() ) {
- jQuery.fx.start();
- } else {
- jQuery.timers.pop();
- }
-};
-
-jQuery.fx.interval = 13;
-
-jQuery.fx.start = function() {
- if ( !timerId ) {
- timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
- }
-};
-
-jQuery.fx.stop = function() {
- clearInterval( timerId );
- timerId = null;
-};
-
-jQuery.fx.speeds = {
- slow: 600,
- fast: 200,
- // Default speed
- _default: 400
-};
-
-
-// Based off of the plugin by Clint Helfers, with permission.
-// http://blindsignals.com/index.php/2009/07/jquery-delay/
-jQuery.fn.delay = function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
-
- return this.queue( type, function( next, hooks ) {
- var timeout = setTimeout( next, time );
- hooks.stop = function() {
- clearTimeout( timeout );
- };
- });
-};
-
-
-(function() {
- var input = document.createElement( "input" ),
- select = document.createElement( "select" ),
- opt = select.appendChild( document.createElement( "option" ) );
-
- input.type = "checkbox";
-
- // Support: iOS 5.1, Android 4.x, Android 2.3
- // Check the default checkbox/radio value ("" on old WebKit; "on" elsewhere)
- support.checkOn = input.value !== "";
-
- // Must access the parent to make an option select properly
- // Support: IE9, IE10
- support.optSelected = opt.selected;
-
- // Make sure that the options inside disabled selects aren't marked as disabled
- // (WebKit marks them as disabled)
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
- // Check if an input maintains its value after becoming a radio
- // Support: IE9, IE10
- input = document.createElement( "input" );
- input.value = "t";
- input.type = "radio";
- support.radioValue = input.value === "t";
-})();
-
-
-var nodeHook, boolHook,
- attrHandle = jQuery.expr.attrHandle;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return access( this, jQuery.attr, name, value, arguments.length > 1 );
- },
-
- removeAttr: function( name ) {
- return this.each(function() {
- jQuery.removeAttr( this, name );
- });
- }
-});
-
-jQuery.extend({
- attr: function( elem, name, value ) {
- var hooks, ret,
- nType = elem.nodeType;
-
- // don't get/set attributes on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- // Fallback to prop when attributes are not supported
- if ( typeof elem.getAttribute === strundefined ) {
- return jQuery.prop( elem, name, value );
- }
-
- // All attributes are lowercase
- // Grab necessary hook if one is defined
- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
- name = name.toLowerCase();
- hooks = jQuery.attrHooks[ name ] ||
- ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
- }
-
- if ( value !== undefined ) {
-
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
-
- } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- elem.setAttribute( name, value + "" );
- return value;
- }
-
- } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
- ret = jQuery.find.attr( elem, name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret == null ?
- undefined :
- ret;
- }
- },
-
- removeAttr: function( elem, value ) {
- var name, propName,
- i = 0,
- attrNames = value && value.match( rnotwhite );
-
- if ( attrNames && elem.nodeType === 1 ) {
- while ( (name = attrNames[i++]) ) {
- propName = jQuery.propFix[ name ] || name;
-
- // Boolean attributes get special treatment (#10870)
- if ( jQuery.expr.match.bool.test( name ) ) {
- // Set corresponding property to false
- elem[ propName ] = false;
- }
-
- elem.removeAttribute( name );
- }
- }
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- if ( !support.radioValue && value === "radio" &&
- jQuery.nodeName( elem, "input" ) ) {
- // Setting the type on a radio button after the value resets the value in IE6-9
- // Reset value to default in case type is set after value during creation
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- }
- }
-});
-
-// Hooks for boolean attributes
-boolHook = {
- set: function( elem, value, name ) {
- if ( value === false ) {
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else {
- elem.setAttribute( name, name );
- }
- return name;
- }
-};
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
- var getter = attrHandle[ name ] || jQuery.find.attr;
-
- attrHandle[ name ] = function( elem, name, isXML ) {
- var ret, handle;
- if ( !isXML ) {
- // Avoid an infinite loop by temporarily removing this function from the getter
- handle = attrHandle[ name ];
- attrHandle[ name ] = ret;
- ret = getter( elem, name, isXML ) != null ?
- name.toLowerCase() :
- null;
- attrHandle[ name ] = handle;
- }
- return ret;
- };
-});
-
-
-
-
-var rfocusable = /^(?:input|select|textarea|button)$/i;
-
-jQuery.fn.extend({
- prop: function( name, value ) {
- return access( this, jQuery.prop, name, value, arguments.length > 1 );
- },
-
- removeProp: function( name ) {
- return this.each(function() {
- delete this[ jQuery.propFix[ name ] || name ];
- });
- }
-});
-
-jQuery.extend({
- propFix: {
- "for": "htmlFor",
- "class": "className"
- },
-
- prop: function( elem, name, value ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- // don't get/set properties on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- if ( notxml ) {
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
- ret :
- ( elem[ name ] = value );
-
- } else {
- return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
- ret :
- elem[ name ];
- }
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
- return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
- elem.tabIndex :
- -1;
- }
- }
- }
-});
-
-// Support: IE9+
-// Selectedness for an option in an optgroup can be inaccurate
-if ( !support.optSelected ) {
- jQuery.propHooks.selected = {
- get: function( elem ) {
- var parent = elem.parentNode;
- if ( parent && parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- return null;
- }
- };
-}
-
-jQuery.each([
- "tabIndex",
- "readOnly",
- "maxLength",
- "cellSpacing",
- "cellPadding",
- "rowSpan",
- "colSpan",
- "useMap",
- "frameBorder",
- "contentEditable"
-], function() {
- jQuery.propFix[ this.toLowerCase() ] = this;
-});
-
-
-
-
-var rclass = /[\t\r\n\f]/g;
-
-jQuery.fn.extend({
- addClass: function( value ) {
- var classes, elem, cur, clazz, j, finalValue,
- proceed = typeof value === "string" && value,
- i = 0,
- len = this.length;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).addClass( value.call( this, j, this.className ) );
- });
- }
-
- if ( proceed ) {
- // The disjunction here is for better compressibility (see removeClass)
- classes = ( value || "" ).match( rnotwhite ) || [];
-
- for ( ; i < len; i++ ) {
- elem = this[ i ];
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- " "
- );
-
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
- cur += clazz + " ";
- }
- }
-
- // only assign if different to avoid unneeded rendering.
- finalValue = jQuery.trim( cur );
- if ( elem.className !== finalValue ) {
- elem.className = finalValue;
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classes, elem, cur, clazz, j, finalValue,
- proceed = arguments.length === 0 || typeof value === "string" && value,
- i = 0,
- len = this.length;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).removeClass( value.call( this, j, this.className ) );
- });
- }
- if ( proceed ) {
- classes = ( value || "" ).match( rnotwhite ) || [];
-
- for ( ; i < len; i++ ) {
- elem = this[ i ];
- // This expression is here for better compressibility (see addClass)
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- ""
- );
-
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
- // Remove *all* instances
- while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
- cur = cur.replace( " " + clazz + " ", " " );
- }
- }
-
- // only assign if different to avoid unneeded rendering.
- finalValue = value ? jQuery.trim( cur ) : "";
- if ( elem.className !== finalValue ) {
- elem.className = finalValue;
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value;
-
- if ( typeof stateVal === "boolean" && type === "string" ) {
- return stateVal ? this.addClass( value ) : this.removeClass( value );
- }
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( i ) {
- jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // toggle individual class names
- var className,
- i = 0,
- self = jQuery( this ),
- classNames = value.match( rnotwhite ) || [];
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space separated list
- if ( self.hasClass( className ) ) {
- self.removeClass( className );
- } else {
- self.addClass( className );
- }
- }
-
- // Toggle whole class name
- } else if ( type === strundefined || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- data_priv.set( this, "__className__", this.className );
- }
-
- // If the element has a class name or if we're passed "false",
- // then remove the whole classname (if there was one, the above saved it).
- // Otherwise bring back whatever was previously saved (if anything),
- // falling back to the empty string if nothing was stored.
- this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || "";
- }
- });
- },
-
- hasClass: function( selector ) {
- var className = " " + selector + " ",
- i = 0,
- l = this.length;
- for ( ; i < l; i++ ) {
- if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
- return true;
- }
- }
-
- return false;
- }
-});
-
-
-
-
-var rreturn = /\r/g;
-
-jQuery.fn.extend({
- val: function( value ) {
- var hooks, ret, isFunction,
- elem = this[0];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
- return ret;
- }
-
- ret = elem.value;
-
- return typeof ret === "string" ?
- // handle most common string cases
- ret.replace(rreturn, "") :
- // handle cases where value is null/undef or number
- ret == null ? "" : ret;
- }
-
- return;
- }
-
- isFunction = jQuery.isFunction( value );
-
- return this.each(function( i ) {
- var val;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, jQuery( this ).val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
-
- } else if ( typeof val === "number" ) {
- val += "";
-
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map( val, function( value ) {
- return value == null ? "" : value + "";
- });
- }
-
- hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- valHooks: {
- option: {
- get: function( elem ) {
- var val = jQuery.find.attr( elem, "value" );
- return val != null ?
- val :
- // Support: IE10-11+
- // option.text throws exceptions (#14686, #14858)
- jQuery.trim( jQuery.text( elem ) );
- }
- },
- select: {
- get: function( elem ) {
- var value, option,
- options = elem.options,
- index = elem.selectedIndex,
- one = elem.type === "select-one" || index < 0,
- values = one ? null : [],
- max = one ? index + 1 : options.length,
- i = index < 0 ?
- max :
- one ? index : 0;
-
- // Loop through all the selected options
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- // IE6-9 doesn't update selected after form reset (#2551)
- if ( ( option.selected || i === index ) &&
- // Don't return options that are disabled or in a disabled optgroup
- ( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) &&
- ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var optionSet, option,
- options = elem.options,
- values = jQuery.makeArray( value ),
- i = options.length;
-
- while ( i-- ) {
- option = options[ i ];
- if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {
- optionSet = true;
- }
- }
-
- // force browsers to behave consistently when non-matching value is set
- if ( !optionSet ) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- }
-});
-
-// Radios and checkboxes getter/setter
-jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
- }
- }
- };
- if ( !support.checkOn ) {
- jQuery.valHooks[ this ].get = function( elem ) {
- // Support: Webkit
- // "" is returned instead of "on" if a value isn't specified
- return elem.getAttribute("value") === null ? "on" : elem.value;
- };
- }
-});
-
-
-
-
-// Return jQuery for attributes-only inclusion
-
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
-});
-
-jQuery.fn.extend({
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- },
-
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.on( types, selector, data, fn );
- },
- undelegate: function( selector, types, fn ) {
- // ( namespace ) or ( selector, types [, fn] )
- return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
- }
-});
-
-
-var nonce = jQuery.now();
-
-var rquery = (/\?/);
-
-
-
-// Support: Android 2.3
-// Workaround failure to string-cast null input
-jQuery.parseJSON = function( data ) {
- return JSON.parse( data + "" );
-};
-
-
-// Cross-browser xml parsing
-jQuery.parseXML = function( data ) {
- var xml, tmp;
- if ( !data || typeof data !== "string" ) {
- return null;
- }
-
- // Support: IE9
- try {
- tmp = new DOMParser();
- xml = tmp.parseFromString( data, "text/xml" );
- } catch ( e ) {
- xml = undefined;
- }
-
- if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
-};
-
-
-var
- // Document location
- ajaxLocParts,
- ajaxLocation,
-
- rhash = /#.*$/,
- rts = /([?&])_=[^&]*/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
- rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = "*/".concat("*");
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
- ajaxLocation = location.href;
-} catch( e ) {
- // Use the href attribute of an A element
- // since IE will modify it given document.location
- ajaxLocation = document.createElement( "a" );
- ajaxLocation.href = "";
- ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- var dataType,
- i = 0,
- dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
-
- if ( jQuery.isFunction( func ) ) {
- // For each dataType in the dataTypeExpression
- while ( (dataType = dataTypes[i++]) ) {
- // Prepend if requested
- if ( dataType[0] === "+" ) {
- dataType = dataType.slice( 1 ) || "*";
- (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
-
- // Otherwise append
- } else {
- (structure[ dataType ] = structure[ dataType ] || []).push( func );
- }
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
- var inspected = {},
- seekingTransport = ( structure === transports );
-
- function inspect( dataType ) {
- var selected;
- inspected[ dataType ] = true;
- jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
- var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
- if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
- options.dataTypes.unshift( dataTypeOrTransport );
- inspect( dataTypeOrTransport );
- return false;
- } else if ( seekingTransport ) {
- return !( selected = dataTypeOrTransport );
- }
- });
- return selected;
- }
-
- return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var key, deep,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-
- return target;
-}
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
- var ct, type, finalDataType, firstDataType,
- contents = s.contents,
- dataTypes = s.dataTypes;
-
- // Remove auto dataType and get content-type in the process
- while ( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
- var conv2, current, conv, tmp, prev,
- converters = {},
- // Work with a copy of dataTypes in case we need to modify it for conversion
- dataTypes = s.dataTypes.slice();
-
- // Create converters map with lowercased keys
- if ( dataTypes[ 1 ] ) {
- for ( conv in s.converters ) {
- converters[ conv.toLowerCase() ] = s.converters[ conv ];
- }
- }
-
- current = dataTypes.shift();
-
- // Convert to each sequential dataType
- while ( current ) {
-
- if ( s.responseFields[ current ] ) {
- jqXHR[ s.responseFields[ current ] ] = response;
- }
-
- // Apply the dataFilter if provided
- if ( !prev && isSuccess && s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- prev = current;
- current = dataTypes.shift();
-
- if ( current ) {
-
- // There's only work to do if current dataType is non-auto
- if ( current === "*" ) {
-
- current = prev;
-
- // Convert response if prev dataType is non-auto and differs from current
- } else if ( prev !== "*" && prev !== current ) {
-
- // Seek a direct converter
- conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
- // If none found, seek a pair
- if ( !conv ) {
- for ( conv2 in converters ) {
-
- // If conv2 outputs current
- tmp = conv2.split( " " );
- if ( tmp[ 1 ] === current ) {
-
- // If prev can be converted to accepted input
- conv = converters[ prev + " " + tmp[ 0 ] ] ||
- converters[ "* " + tmp[ 0 ] ];
- if ( conv ) {
- // Condense equivalence converters
- if ( conv === true ) {
- conv = converters[ conv2 ];
-
- // Otherwise, insert the intermediate dataType
- } else if ( converters[ conv2 ] !== true ) {
- current = tmp[ 0 ];
- dataTypes.unshift( tmp[ 1 ] );
- }
- break;
- }
- }
- }
- }
-
- // Apply converter (if not an equivalence)
- if ( conv !== true ) {
-
- // Unless errors are allowed to bubble, catch and return them
- if ( conv && s[ "throws" ] ) {
- response = conv( response );
- } else {
- try {
- response = conv( response );
- } catch ( e ) {
- return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
- }
- }
- }
- }
- }
- }
-
- return { state: "success", data: response };
-}
-
-jQuery.extend({
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {},
-
- ajaxSettings: {
- url: ajaxLocation,
- type: "GET",
- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
- global: true,
- processData: true,
- async: true,
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- throws: false,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- "*": allTypes,
- text: "text/plain",
- html: "text/html",
- xml: "application/xml, text/xml",
- json: "application/json, text/javascript"
- },
-
- contents: {
- xml: /xml/,
- html: /html/,
- json: /json/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText",
- json: "responseJSON"
- },
-
- // Data converters
- // Keys separate source (or catchall "*") and destination types with a single space
- converters: {
-
- // Convert anything to text
- "* text": String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": jQuery.parseJSON,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- url: true,
- context: true
- }
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- return settings ?
-
- // Building a settings object
- ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
- // Extending ajaxSettings
- ajaxExtend( jQuery.ajaxSettings, target );
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var transport,
- // URL without anti-cache param
- cacheURL,
- // Response headers
- responseHeadersString,
- responseHeaders,
- // timeout handle
- timeoutTimer,
- // Cross-domain detection vars
- parts,
- // To know if global events are to be dispatched
- fireGlobals,
- // Loop variable
- i,
- // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
- // Callbacks context
- callbackContext = s.context || s,
- // Context for global events is callbackContext if it is a DOM node or jQuery collection
- globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
- jQuery( callbackContext ) :
- jQuery.event,
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks("once memory"),
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
- // The jqXHR state
- state = 0,
- // Default abort message
- strAbort = "canceled",
- // Fake xhr
- jqXHR = {
- readyState: 0,
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( state === 2 ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while ( (match = rheaders.exec( responseHeadersString )) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match == null ? null : match;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return state === 2 ? responseHeadersString : null;
- },
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- var lname = name.toLowerCase();
- if ( !state ) {
- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( !state ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Status-dependent callbacks
- statusCode: function( map ) {
- var code;
- if ( map ) {
- if ( state < 2 ) {
- for ( code in map ) {
- // Lazy-add the new callback in a way that preserves old ones
- statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
- }
- } else {
- // Execute the appropriate callbacks
- jqXHR.always( map[ jqXHR.status ] );
- }
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- var finalText = statusText || strAbort;
- if ( transport ) {
- transport.abort( finalText );
- }
- done( 0, finalText );
- return this;
- }
- };
-
- // Attach deferreds
- deferred.promise( jqXHR ).complete = completeDeferred.add;
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
-
- // Remove hash character (#7531: and string promotion)
- // Add protocol if not provided (prefilters might expect it)
- // Handle falsy url in the settings object (#10093: consistency with old signature)
- // We also use the url parameter if available
- s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" )
- .replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
- // Alias method option to type as per ticket #12004
- s.type = options.method || options.type || s.method || s.type;
-
- // Extract dataTypes list
- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
-
- // A cross-domain request is in order when we have a protocol:host:port mismatch
- if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
- );
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefilter, stop there
- if ( state === 2 ) {
- return jqXHR;
- }
-
- // We can fire global events as of now if asked to
- fireGlobals = s.global;
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger("ajaxStart");
- }
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Save the URL in case we're toying with the If-Modified-Since
- // and/or If-None-Match header later on
- cacheURL = s.url;
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // If data is available, append data to url
- if ( s.data ) {
- cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Add anti-cache in url if needed
- if ( s.cache === false ) {
- s.url = rts.test( cacheURL ) ?
-
- // If there is already a '_' parameter, set its value
- cacheURL.replace( rts, "$1_=" + nonce++ ) :
-
- // Otherwise add one to the end
- cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
- }
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- if ( jQuery.lastModified[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
- }
- if ( jQuery.etag[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
- // Abort if not done already and return
- return jqXHR.abort();
- }
-
- // aborting is no longer a cancellation
- strAbort = "abort";
-
- // Install callbacks on deferreds
- for ( i in { success: 1, error: 1, complete: 1 } ) {
- jqXHR[ i ]( s[ i ] );
- }
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
-
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = setTimeout(function() {
- jqXHR.abort("timeout");
- }, s.timeout );
- }
-
- try {
- state = 1;
- transport.send( requestHeaders, done );
- } catch ( e ) {
- // Propagate exception as error if not done
- if ( state < 2 ) {
- done( -1, e );
- // Simply rethrow otherwise
- } else {
- throw e;
- }
- }
- }
-
- // Callback for when everything is done
- function done( status, nativeStatusText, responses, headers ) {
- var isSuccess, success, error, response, modified,
- statusText = nativeStatusText;
-
- // Called once
- if ( state === 2 ) {
- return;
- }
-
- // State is "done" now
- state = 2;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- // Determine if successful
- isSuccess = status >= 200 && status < 300 || status === 304;
-
- // Get response data
- if ( responses ) {
- response = ajaxHandleResponses( s, jqXHR, responses );
- }
-
- // Convert no matter what (that way responseXXX fields are always set)
- response = ajaxConvert( s, response, jqXHR, isSuccess );
-
- // If successful, handle type chaining
- if ( isSuccess ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- modified = jqXHR.getResponseHeader("Last-Modified");
- if ( modified ) {
- jQuery.lastModified[ cacheURL ] = modified;
- }
- modified = jqXHR.getResponseHeader("etag");
- if ( modified ) {
- jQuery.etag[ cacheURL ] = modified;
- }
- }
-
- // if no content
- if ( status === 204 || s.type === "HEAD" ) {
- statusText = "nocontent";
-
- // if not modified
- } else if ( status === 304 ) {
- statusText = "notmodified";
-
- // If we have data, let's convert it
- } else {
- statusText = response.state;
- success = response.data;
- error = response.error;
- isSuccess = !error;
- }
- } else {
- // We extract error from statusText
- // then normalize statusText and status for non-aborts
- error = statusText;
- if ( status || !statusText ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger("ajaxStop");
- }
- }
- }
-
- return jqXHR;
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- }
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
- // shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- return jQuery.ajax({
- url: url,
- type: method,
- dataType: type,
- data: data,
- success: callback
- });
- };
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
- jQuery.fn[ type ] = function( fn ) {
- return this.on( type, fn );
- };
-});
-
-
-jQuery._evalUrl = function( url ) {
- return jQuery.ajax({
- url: url,
- type: "GET",
- dataType: "script",
- async: false,
- global: false,
- "throws": true
- });
-};
-
-
-jQuery.fn.extend({
- wrapAll: function( html ) {
- var wrap;
-
- if ( jQuery.isFunction( html ) ) {
- return this.each(function( i ) {
- jQuery( this ).wrapAll( html.call(this, i) );
- });
- }
-
- if ( this[ 0 ] ) {
-
- // The elements to wrap the target around
- wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
-
- if ( this[ 0 ].parentNode ) {
- wrap.insertBefore( this[ 0 ] );
- }
-
- wrap.map(function() {
- var elem = this;
-
- while ( elem.firstElementChild ) {
- elem = elem.firstElementChild;
- }
-
- return elem;
- }).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function( i ) {
- jQuery( this ).wrapInner( html.call(this, i) );
- });
- }
-
- return this.each(function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- });
- },
-
- wrap: function( html ) {
- var isFunction = jQuery.isFunction( html );
-
- return this.each(function( i ) {
- jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
- });
- },
-
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- }
-});
-
-
-jQuery.expr.filters.hidden = function( elem ) {
- // Support: Opera <= 12.12
- // Opera reports offsetWidths and offsetHeights less than zero on some elements
- return elem.offsetWidth <= 0 && elem.offsetHeight <= 0;
-};
-jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
-};
-
-
-
-
-var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
- rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-function buildParams( prefix, obj, traditional, add ) {
- var name;
-
- if ( jQuery.isArray( obj ) ) {
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
- // Item is non-scalar (array or object), encode its numeric index.
- buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
- }
- });
-
- } else if ( !traditional && jQuery.type( obj ) === "object" ) {
- // Serialize object item.
- for ( name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-
-// Serialize an array of form elements or a set of
-// key/values into a query string
-jQuery.param = function( a, traditional ) {
- var prefix,
- s = [],
- add = function( key, value ) {
- // If value is a function, invoke it and return its value
- value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
- s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
- };
-
- // Set traditional to true for jQuery <= 1.3.2 behavior.
- if ( traditional === undefined ) {
- traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- });
-
- } else {
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" ).replace( r20, "+" );
-};
-
-jQuery.fn.extend({
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
- serializeArray: function() {
- return this.map(function() {
- // Can add propHook for "elements" to filter or add form elements
- var elements = jQuery.prop( this, "elements" );
- return elements ? jQuery.makeArray( elements ) : this;
- })
- .filter(function() {
- var type = this.type;
-
- // Use .is( ":disabled" ) so that fieldset[disabled] works
- return this.name && !jQuery( this ).is( ":disabled" ) &&
- rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
- ( this.checked || !rcheckableType.test( type ) );
- })
- .map(function( i, elem ) {
- var val = jQuery( this ).val();
-
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val ) {
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }).get();
- }
-});
-
-
-jQuery.ajaxSettings.xhr = function() {
- try {
- return new XMLHttpRequest();
- } catch( e ) {}
-};
-
-var xhrId = 0,
- xhrCallbacks = {},
- xhrSuccessStatus = {
- // file protocol always yields status code 0, assume 200
- 0: 200,
- // Support: IE9
- // #1450: sometimes IE returns 1223 when it should be 204
- 1223: 204
- },
- xhrSupported = jQuery.ajaxSettings.xhr();
-
-// Support: IE9
-// Open requests must be manually aborted on unload (#5280)
-if ( window.ActiveXObject ) {
- jQuery( window ).on( "unload", function() {
- for ( var key in xhrCallbacks ) {
- xhrCallbacks[ key ]();
- }
- });
-}
-
-support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-support.ajax = xhrSupported = !!xhrSupported;
-
-jQuery.ajaxTransport(function( options ) {
- var callback;
-
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( support.cors || xhrSupported && !options.crossDomain ) {
- return {
- send: function( headers, complete ) {
- var i,
- xhr = options.xhr(),
- id = ++xhrId;
-
- xhr.open( options.type, options.url, options.async, options.username, options.password );
-
- // Apply custom fields if provided
- if ( options.xhrFields ) {
- for ( i in options.xhrFields ) {
- xhr[ i ] = options.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( options.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( options.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !options.crossDomain && !headers["X-Requested-With"] ) {
- headers["X-Requested-With"] = "XMLHttpRequest";
- }
-
- // Set headers
- for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
- }
-
- // Callback
- callback = function( type ) {
- return function() {
- if ( callback ) {
- delete xhrCallbacks[ id ];
- callback = xhr.onload = xhr.onerror = null;
-
- if ( type === "abort" ) {
- xhr.abort();
- } else if ( type === "error" ) {
- complete(
- // file: protocol always yields status 0; see #8605, #14207
- xhr.status,
- xhr.statusText
- );
- } else {
- complete(
- xhrSuccessStatus[ xhr.status ] || xhr.status,
- xhr.statusText,
- // Support: IE9
- // Accessing binary-data responseText throws an exception
- // (#11426)
- typeof xhr.responseText === "string" ? {
- text: xhr.responseText
- } : undefined,
- xhr.getAllResponseHeaders()
- );
- }
- }
- };
- };
-
- // Listen to events
- xhr.onload = callback();
- xhr.onerror = callback("error");
-
- // Create the abort callback
- callback = xhrCallbacks[ id ] = callback("abort");
-
- try {
- // Do send the request (this may raise an exception)
- xhr.send( options.hasContent && options.data || null );
- } catch ( e ) {
- // #14683: Only rethrow if this hasn't been notified as an error yet
- if ( callback ) {
- throw e;
- }
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback();
- }
- }
- };
- }
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /(?:java|ecma)script/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-});
-
-// Handle cache's special case and crossDomain
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function( s ) {
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
- var script, callback;
- return {
- send: function( _, complete ) {
- script = jQuery("<script>").prop({
- async: true,
- charset: s.scriptCharset,
- src: s.url
- }).on(
- "load error",
- callback = function( evt ) {
- script.remove();
- callback = null;
- if ( evt ) {
- complete( evt.type === "error" ? 404 : 200, evt.type );
- }
- }
- );
- document.head.appendChild( script[ 0 ] );
- },
- abort: function() {
- if ( callback ) {
- callback();
- }
- }
- };
- }
-});
-
-
-
-
-var oldCallbacks = [],
- rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
- jsonp: "callback",
- jsonpCallback: function() {
- var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
- this[ callback ] = true;
- return callback;
- }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var callbackName, overwritten, responseContainer,
- jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
- "url" :
- typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
- );
-
- // Handle iff the expected data type is "jsonp" or we have a parameter to set
- if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
- // Get callback name, remembering preexisting value associated with it
- callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
- s.jsonpCallback() :
- s.jsonpCallback;
-
- // Insert callback into url or form data
- if ( jsonProp ) {
- s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
- } else if ( s.jsonp !== false ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
- }
-
- // Use data converter to retrieve json after script execution
- s.converters["script json"] = function() {
- if ( !responseContainer ) {
- jQuery.error( callbackName + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Install callback
- overwritten = window[ callbackName ];
- window[ callbackName ] = function() {
- responseContainer = arguments;
- };
-
- // Clean-up function (fires after converters)
- jqXHR.always(function() {
- // Restore preexisting value
- window[ callbackName ] = overwritten;
-
- // Save back as free
- if ( s[ callbackName ] ) {
- // make sure that re-using the options doesn't screw things around
- s.jsonpCallback = originalSettings.jsonpCallback;
-
- // save the callback name for future use
- oldCallbacks.push( callbackName );
- }
-
- // Call if it was a function and we have a response
- if ( responseContainer && jQuery.isFunction( overwritten ) ) {
- overwritten( responseContainer[ 0 ] );
- }
-
- responseContainer = overwritten = undefined;
- });
-
- // Delegate to script
- return "script";
- }
-});
-
-
-
-
-// data: string of html
-// context (optional): If specified, the fragment will be created in this context, defaults to document
-// keepScripts (optional): If true, will include scripts passed in the html string
-jQuery.parseHTML = function( data, context, keepScripts ) {
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- if ( typeof context === "boolean" ) {
- keepScripts = context;
- context = false;
- }
- context = context || document;
-
- var parsed = rsingleTag.exec( data ),
- scripts = !keepScripts && [];
-
- // Single tag
- if ( parsed ) {
- return [ context.createElement( parsed[1] ) ];
- }
-
- parsed = jQuery.buildFragment( [ data ], context, scripts );
-
- if ( scripts && scripts.length ) {
- jQuery( scripts ).remove();
- }
-
- return jQuery.merge( [], parsed.childNodes );
-};
-
-
-// Keep a copy of the old load method
-var _load = jQuery.fn.load;
-
-/**
- * Load a url into a page
- */
-jQuery.fn.load = function( url, params, callback ) {
- if ( typeof url !== "string" && _load ) {
- return _load.apply( this, arguments );
- }
-
- var selector, type, response,
- self = this,
- off = url.indexOf(" ");
-
- if ( off >= 0 ) {
- selector = jQuery.trim( url.slice( off ) );
- url = url.slice( 0, off );
- }
-
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
-
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( params && typeof params === "object" ) {
- type = "POST";
- }
-
- // If we have elements to modify, make the request
- if ( self.length > 0 ) {
- jQuery.ajax({
- url: url,
-
- // if "type" variable is undefined, then "GET" method will be used
- type: type,
- dataType: "html",
- data: params
- }).done(function( responseText ) {
-
- // Save response for use in complete callback
- response = arguments;
-
- self.html( selector ?
-
- // If a selector was specified, locate the right elements in a dummy div
- // Exclude scripts to avoid IE 'Permission Denied' errors
- jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
- // Otherwise use the full result
- responseText );
-
- }).complete( callback && function( jqXHR, status ) {
- self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
- });
- }
-
- return this;
-};
-
-
-
-
-jQuery.expr.filters.animated = function( elem ) {
- return jQuery.grep(jQuery.timers, function( fn ) {
- return elem === fn.elem;
- }).length;
-};
-
-
-
-
-var docElem = window.document.documentElement;
-
-/**
- * Gets a window from an element
- */
-function getWindow( elem ) {
- return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
-}
-
-jQuery.offset = {
- setOffset: function( elem, options, i ) {
- var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
- position = jQuery.css( elem, "position" ),
- curElem = jQuery( elem ),
- props = {};
-
- // Set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- curOffset = curElem.offset();
- curCSSTop = jQuery.css( elem, "top" );
- curCSSLeft = jQuery.css( elem, "left" );
- calculatePosition = ( position === "absolute" || position === "fixed" ) &&
- ( curCSSTop + curCSSLeft ).indexOf("auto") > -1;
-
- // Need to be able to calculate position if either top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
-
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( jQuery.isFunction( options ) ) {
- options = options.call( elem, i, curOffset );
- }
-
- if ( options.top != null ) {
- props.top = ( options.top - curOffset.top ) + curTop;
- }
- if ( options.left != null ) {
- props.left = ( options.left - curOffset.left ) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
-
- } else {
- curElem.css( props );
- }
- }
-};
-
-jQuery.fn.extend({
- offset: function( options ) {
- if ( arguments.length ) {
- return options === undefined ?
- this :
- this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- var docElem, win,
- elem = this[ 0 ],
- box = { top: 0, left: 0 },
- doc = elem && elem.ownerDocument;
-
- if ( !doc ) {
- return;
- }
-
- docElem = doc.documentElement;
-
- // Make sure it's not a disconnected DOM node
- if ( !jQuery.contains( docElem, elem ) ) {
- return box;
- }
-
- // If we don't have gBCR, just use 0,0 rather than error
- // BlackBerry 5, iOS 3 (original iPhone)
- if ( typeof elem.getBoundingClientRect !== strundefined ) {
- box = elem.getBoundingClientRect();
- }
- win = getWindow( doc );
- return {
- top: box.top + win.pageYOffset - docElem.clientTop,
- left: box.left + win.pageXOffset - docElem.clientLeft
- };
- },
-
- position: function() {
- if ( !this[ 0 ] ) {
- return;
- }
-
- var offsetParent, offset,
- elem = this[ 0 ],
- parentOffset = { top: 0, left: 0 };
-
- // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
- if ( jQuery.css( elem, "position" ) === "fixed" ) {
- // We assume that getBoundingClientRect is available when computed position is fixed
- offset = elem.getBoundingClientRect();
-
- } else {
- // Get *real* offsetParent
- offsetParent = this.offsetParent();
-
- // Get correct offsets
- offset = this.offset();
- if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
- parentOffset = offsetParent.offset();
- }
-
- // Add offsetParent borders
- parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
- parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
- }
-
- // Subtract parent offsets and element margins
- return {
- top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
- left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
- };
- },
-
- offsetParent: function() {
- return this.map(function() {
- var offsetParent = this.offsetParent || docElem;
-
- while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
- offsetParent = offsetParent.offsetParent;
- }
-
- return offsetParent || docElem;
- });
- }
-});
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
- var top = "pageYOffset" === prop;
-
- jQuery.fn[ method ] = function( val ) {
- return access( this, function( elem, method, val ) {
- var win = getWindow( elem );
-
- if ( val === undefined ) {
- return win ? win[ prop ] : elem[ method ];
- }
-
- if ( win ) {
- win.scrollTo(
- !top ? val : window.pageXOffset,
- top ? val : window.pageYOffset
- );
-
- } else {
- elem[ method ] = val;
- }
- }, method, val, arguments.length, null );
- };
-});
-
-// Add the top/left cssHooks using jQuery.fn.position
-// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-// getComputedStyle returns percent when specified for top/left/bottom/right
-// rather than make the css module depend on the offset module, we just check for it here
-jQuery.each( [ "top", "left" ], function( i, prop ) {
- jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
- function( elem, computed ) {
- if ( computed ) {
- computed = curCSS( elem, prop );
- // if curCSS returns percentage, fallback to offset
- return rnumnonpx.test( computed ) ?
- jQuery( elem ).position()[ prop ] + "px" :
- computed;
- }
- }
- );
-});
-
-
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
- jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
- // margin is only for outerHeight, outerWidth
- jQuery.fn[ funcName ] = function( margin, value ) {
- var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
- extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
- return access( this, function( elem, type, value ) {
- var doc;
-
- if ( jQuery.isWindow( elem ) ) {
- // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
- // isn't a whole lot we can do. See pull request at this URL for discussion:
- // https://github.com/jquery/jquery/pull/764
- return elem.document.documentElement[ "client" + name ];
- }
-
- // Get document width or height
- if ( elem.nodeType === 9 ) {
- doc = elem.documentElement;
-
- // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
- // whichever is greatest
- return Math.max(
- elem.body[ "scroll" + name ], doc[ "scroll" + name ],
- elem.body[ "offset" + name ], doc[ "offset" + name ],
- doc[ "client" + name ]
- );
- }
-
- return value === undefined ?
- // Get width or height on the element, requesting but not forcing parseFloat
- jQuery.css( elem, type, extra ) :
-
- // Set width or height on the element
- jQuery.style( elem, type, value, extra );
- }, type, chainable ? margin : undefined, chainable, null );
- };
- });
-});
-
-
-// The number of elements contained in the matched element set
-jQuery.fn.size = function() {
- return this.length;
-};
-
-jQuery.fn.andSelf = jQuery.fn.addBack;
-
-
-
-
-// Register as a named AMD module, since jQuery can be concatenated with other
-// files that may use define, but not via a proper concatenation script that
-// understands anonymous AMD modules. A named AMD is safest and most robust
-// way to register. Lowercase jquery is used because AMD module names are
-// derived from file names, and jQuery is normally delivered in a lowercase
-// file name. Do this after creating the global so that if an AMD module wants
-// to call noConflict to hide this version of jQuery, it will work.
-
-// Note that for maximum portability, libraries that are not jQuery should
-// declare themselves as anonymous modules, and avoid setting a global if an
-// AMD loader is present. jQuery is a special case. For more information, see
-// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
-
-if ( typeof define === "function" && define.amd ) {
- define( "jquery", [], function() {
- return jQuery;
- });
-}
-
-
-
-
-var
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$;
-
-jQuery.noConflict = function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
-};
-
-// Expose jQuery and $ identifiers, even in
-// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
-// and CommonJS for browser emulators (#13566)
-if ( typeof noGlobal === strundefined ) {
- window.jQuery = window.$ = jQuery;
-}
-
-
-
-
-return jQuery;
-
-}));
diff --git a/framework/src/onos/web/gui/src/main/webapp/tp/jquery-2.1.1.min.js b/framework/src/onos/web/gui/src/main/webapp/tp/jquery-2.1.1.min.js
deleted file mode 100644
index e5ace116..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tp/jquery-2.1.1.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
-},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
-},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
diff --git a/framework/src/onos/web/gui/src/main/webapp/tp/topojson.v1.min.js b/framework/src/onos/web/gui/src/main/webapp/tp/topojson.v1.min.js
deleted file mode 100644
index 865f8d3b..00000000
--- a/framework/src/onos/web/gui/src/main/webapp/tp/topojson.v1.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(){function t(n,t){function r(t){var r,e=n.arcs[0>t?~t:t],o=e[0];return n.transform?(r=[0,0],e.forEach(function(n){r[0]+=n[0],r[1]+=n[1]})):r=e[e.length-1],0>t?[r,o]:[o,r]}function e(n,t){for(var r in n){var e=n[r];delete t[e.start],delete e.start,delete e.end,e.forEach(function(n){o[0>n?~n:n]=1}),f.push(e)}}var o={},i={},u={},f=[],c=-1;return t.forEach(function(r,e){var o,i=n.arcs[0>r?~r:r];i.length<3&&!i[1][0]&&!i[1][1]&&(o=t[++c],t[c]=r,t[e]=o)}),t.forEach(function(n){var t,e,o=r(n),f=o[0],c=o[1];if(t=u[f])if(delete u[t.end],t.push(n),t.end=c,e=i[c]){delete i[e.start];var a=e===t?t:t.concat(e);i[a.start=t.start]=u[a.end=e.end]=a}else i[t.start]=u[t.end]=t;else if(t=i[c])if(delete i[t.start],t.unshift(n),t.start=f,e=u[f]){delete u[e.end];var s=e===t?t:e.concat(t);i[s.start=e.start]=u[s.end=t.end]=s}else i[t.start]=u[t.end]=t;else t=[n],i[t.start=f]=u[t.end=c]=t}),e(u,i),e(i,u),t.forEach(function(n){o[0>n?~n:n]||f.push([n])}),f}function r(n,r,e){function o(n){var t=0>n?~n:n;(s[t]||(s[t]=[])).push({i:n,g:a})}function i(n){n.forEach(o)}function u(n){n.forEach(i)}function f(n){"GeometryCollection"===n.type?n.geometries.forEach(f):n.type in l&&(a=n,l[n.type](n.arcs))}var c=[];if(arguments.length>1){var a,s=[],l={LineString:i,MultiLineString:u,Polygon:u,MultiPolygon:function(n){n.forEach(u)}};f(r),s.forEach(arguments.length<3?function(n){c.push(n[0].i)}:function(n){e(n[0].g,n[n.length-1].g)&&c.push(n[0].i)})}else for(var h=0,p=n.arcs.length;p>h;++h)c.push(h);return{type:"MultiLineString",arcs:t(n,c)}}function e(r,e){function o(n){n.forEach(function(t){t.forEach(function(t){(f[t=0>t?~t:t]||(f[t]=[])).push(n)})}),c.push(n)}function i(n){return l(u(r,{type:"Polygon",arcs:[n]}).coordinates[0])>0}var f={},c=[],a=[];return e.forEach(function(n){"Polygon"===n.type?o(n.arcs):"MultiPolygon"===n.type&&n.arcs.forEach(o)}),c.forEach(function(n){if(!n._){var t=[],r=[n];for(n._=1,a.push(t);n=r.pop();)t.push(n),n.forEach(function(n){n.forEach(function(n){f[0>n?~n:n].forEach(function(n){n._||(n._=1,r.push(n))})})})}}),c.forEach(function(n){delete n._}),{type:"MultiPolygon",arcs:a.map(function(e){var o=[];if(e.forEach(function(n){n.forEach(function(n){n.forEach(function(n){f[0>n?~n:n].length<2&&o.push(n)})})}),o=t(r,o),(n=o.length)>1)for(var u,c=i(e[0][0]),a=0;n>a;++a)if(c===i(o[a])){u=o[0],o[0]=o[a],o[a]=u;break}return o})}}function o(n,t){return"GeometryCollection"===t.type?{type:"FeatureCollection",features:t.geometries.map(function(t){return i(n,t)})}:i(n,t)}function i(n,t){var r={type:"Feature",id:t.id,properties:t.properties||{},geometry:u(n,t)};return null==t.id&&delete r.id,r}function u(n,t){function r(n,t){t.length&&t.pop();for(var r,e=s[0>n?~n:n],o=0,i=e.length;i>o;++o)t.push(r=e[o].slice()),a(r,o);0>n&&f(t,i)}function e(n){return n=n.slice(),a(n,0),n}function o(n){for(var t=[],e=0,o=n.length;o>e;++e)r(n[e],t);return t.length<2&&t.push(t[0].slice()),t}function i(n){for(var t=o(n);t.length<4;)t.push(t[0].slice());return t}function u(n){return n.map(i)}function c(n){var t=n.type;return"GeometryCollection"===t?{type:t,geometries:n.geometries.map(c)}:t in l?{type:t,coordinates:l[t](n)}:null}var a=v(n.transform),s=n.arcs,l={Point:function(n){return e(n.coordinates)},MultiPoint:function(n){return n.coordinates.map(e)},LineString:function(n){return o(n.arcs)},MultiLineString:function(n){return n.arcs.map(o)},Polygon:function(n){return u(n.arcs)},MultiPolygon:function(n){return n.arcs.map(u)}};return c(t)}function f(n,t){for(var r,e=n.length,o=e-t;o<--e;)r=n[o],n[o++]=n[e],n[e]=r}function c(n,t){for(var r=0,e=n.length;e>r;){var o=r+e>>>1;n[o]<t?r=o+1:e=o}return r}function a(n){function t(n,t){n.forEach(function(n){0>n&&(n=~n);var r=o[n];r?r.push(t):o[n]=[t]})}function r(n,r){n.forEach(function(n){t(n,r)})}function e(n,t){"GeometryCollection"===n.type?n.geometries.forEach(function(n){e(n,t)}):n.type in u&&u[n.type](n.arcs,t)}var o={},i=n.map(function(){return[]}),u={LineString:t,MultiLineString:r,Polygon:r,MultiPolygon:function(n,t){n.forEach(function(n){r(n,t)})}};n.forEach(e);for(var f in o)for(var a=o[f],s=a.length,l=0;s>l;++l)for(var h=l+1;s>h;++h){var p,g=a[l],v=a[h];(p=i[g])[f=c(p,v)]!==v&&p.splice(f,0,v),(p=i[v])[f=c(p,g)]!==g&&p.splice(f,0,g)}return i}function s(n,t){function r(n){i.remove(n),n[1][2]=t(n),i.push(n)}var e=v(n.transform),o=m(n.transform),i=g();return t||(t=h),n.arcs.forEach(function(n){for(var u,f,c=[],a=0,s=0,l=n.length;l>s;++s)f=n[s],e(n[s]=[f[0],f[1],1/0],s);for(var s=1,l=n.length-1;l>s;++s)u=n.slice(s-1,s+2),u[1][2]=t(u),c.push(u),i.push(u);for(var s=0,l=c.length;l>s;++s)u=c[s],u.previous=c[s-1],u.next=c[s+1];for(;u=i.pop();){var h=u.previous,p=u.next;u[1][2]<a?u[1][2]=a:a=u[1][2],h&&(h.next=p,h[2]=u[2],r(h)),p&&(p.previous=h,p[0]=u[0],r(p))}n.forEach(o)}),n}function l(n){for(var t,r=-1,e=n.length,o=n[e-1],i=0;++r<e;)t=o,o=n[r],i+=t[0]*o[1]-t[1]*o[0];return.5*i}function h(n){var t=n[0],r=n[1],e=n[2];return Math.abs((t[0]-e[0])*(r[1]-t[1])-(t[0]-r[0])*(e[1]-t[1]))}function p(n,t){return n[1][2]-t[1][2]}function g(){function n(n,t){for(;t>0;){var r=(t+1>>1)-1,o=e[r];if(p(n,o)>=0)break;e[o._=t]=o,e[n._=t=r]=n}}function t(n,t){for(;;){var r=t+1<<1,i=r-1,u=t,f=e[u];if(o>i&&p(e[i],f)<0&&(f=e[u=i]),o>r&&p(e[r],f)<0&&(f=e[u=r]),u===t)break;e[f._=t]=f,e[n._=t=u]=n}}var r={},e=[],o=0;return r.push=function(t){return n(e[t._=o]=t,o++),o},r.pop=function(){if(!(0>=o)){var n,r=e[0];return--o>0&&(n=e[o],t(e[n._=0]=n,0)),r}},r.remove=function(r){var i,u=r._;if(e[u]===r)return u!==--o&&(i=e[o],(p(i,r)<0?n:t)(e[i._=u]=i,u)),u},r}function v(n){if(!n)return y;var t,r,e=n.scale[0],o=n.scale[1],i=n.translate[0],u=n.translate[1];return function(n,f){f||(t=r=0),n[0]=(t+=n[0])*e+i,n[1]=(r+=n[1])*o+u}}function m(n){if(!n)return y;var t,r,e=n.scale[0],o=n.scale[1],i=n.translate[0],u=n.translate[1];return function(n,f){f||(t=r=0);var c=(n[0]-i)/e|0,a=(n[1]-u)/o|0;n[0]=c-t,n[1]=a-r,t=c,r=a}}function y(){}var d={version:"1.6.18",mesh:function(n){return u(n,r.apply(this,arguments))},meshArcs:r,merge:function(n){return u(n,e.apply(this,arguments))},mergeArcs:e,feature:o,neighbors:a,presimplify:s};"function"==typeof define&&define.amd?define(d):"object"==typeof module&&module.exports?module.exports=d:this.topojson=d}(); \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addDevice_ex1.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addDevice_ex1.json
deleted file mode 100644
index b82fda85..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addDevice_ex1.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000003",
- "type": "switch",
- "online": true,
- "labels": [
- "of:0000000000000003",
- "3",
- "",
- null
- ],
- "props": {
- "latitude": 123.5,
- "longitude": 67.8,
- "anotherProp": "foobar"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addDevice_ex2_memo.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addDevice_ex2_memo.json
deleted file mode 100644
index 5f519ffa..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addDevice_ex2_memo.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000003",
- "type": "switch",
- "online": true,
- "labels": [
- "of:0000000000000003",
- "3",
- "",
- null
- ],
- "props": {
- "latitude": 123.5,
- "longitude": 67.8,
- "anotherProp": "foobar"
- },
- "metaUi": {
- "xpc": 57.3,
- "ypc": 24.86,
- "and": "other properties the UI wishes to remember..."
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addDevice_ex3.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addDevice_ex3.json
deleted file mode 100644
index e02f7124..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addDevice_ex3.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:000000000000000a",
- "type": "switch",
- "online": true,
- "master": "local",
- "labels": [
- "",
- "NWOR",
- "of:000000000000000a"
- ],
- "props": {
- "latitude": "29.951475",
- "name": "NWOR",
- "longitude": "-90.078434"
- },
- "location": {
- "type": "latlng",
- "lat": 29.951475,
- "lng": -90.078434
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addHost_ex1.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addHost_ex1.json
deleted file mode 100644
index a97d15a4..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addHost_ex1.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "6A:40:24:F7:9C:2C/-1",
- "ingress": "6A:40:24:F7:9C:2C/-1/0-of:0000000000000003/2",
- "egress": "of:0000000000000003/2-6A:40:24:F7:9C:2C/-1/0",
- "cp": {
- "device": "of:0000000000000003",
- "port": 2
- },
- "labels": [
- "unknown",
- "6A:40:24:F7:9C:2C"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addHost_ex2.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addHost_ex2.json
deleted file mode 100644
index d47265b3..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addHost_ex2.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "00:00:00:00:00:01/-1",
- "type": "endstation",
- "ingress": "00:00:00:00:00:01/-1/0-of:0000000000000001/1",
- "egress": "of:0000000000000001/1-00:00:00:00:00:01/-1/0",
- "cp": {
- "device": "of:0000000000000001",
- "port": 1
- },
- "labels": [
- "10.0.0.1",
- "00:00:00:00:00:01"
- ],
- "props": {
- "name": "CMBR",
- "latitude": "44.37373",
- "longitude": "-71.109734"
- },
- "location": {
- "type": "latlng",
- "lat": 44.37373,
- "lng": -71.109734
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addInstance_ex1.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addInstance_ex1.json
deleted file mode 100644
index 0579c1d5..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addInstance_ex1.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "local",
- "ip": "127.0.0.1",
- "online": true,
- "uiAttached": true,
- "switches": 25,
- "labels": [
- "local",
- "127.0.0.1"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addLink_ex1.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addLink_ex1.json
deleted file mode 100644
index f48147fc..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/addLink_ex1.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000000000000007/4-of:0000000000000006/1",
- "type": "direct",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000000000000007",
- "srcPort": "4",
- "dst": "of:0000000000000006",
- "dstPort": "1"
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeDevice_fab.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeDevice_fab.json
deleted file mode 100644
index 0e8d47a0..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeDevice_fab.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "__comments__": [
- "fabricated event",
- "not sure if this is the actual format",
- "but we really only care about 'id' being in the payload"
- ],
- "event": "removeDevice",
- "payload": {
- "id": "of:0000000000000002",
- "type": "switch",
- "online": true,
- "labels": [
- "of:0000000000000002",
- "2",
- "",
- null
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeHost_fab.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeHost_fab.json
deleted file mode 100644
index 42371993..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeHost_fab.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "__comments__": [
- "fabricated event",
- "not sure if this is the actual format",
- "but we really only care about 'id' being in the payload"
- ],
- "event": "removeHost",
- "payload": {
- "id": "6A:40:24:F7:9C:2C/-1",
- "ingress": "6A:40:24:F7:9C:2C/-1/0-of:0000000000000003/2",
- "egress": "of:0000000000000003/2-6A:40:24:F7:9C:2C/-1/0",
- "cp": {
- "device": "of:0000000000000003",
- "port": 2
- },
- "labels": [
- "unknown",
- "6A:40:24:F7:9C:2C"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeInstance_ex1.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeInstance_ex1.json
deleted file mode 100644
index 0f9388b6..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeInstance_ex1.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "event": "removeInstance",
- "payload": {
- "id": "onos-1",
- "online": "false"
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeLink_ex1.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeLink_ex1.json
deleted file mode 100644
index 8d1dd035..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/removeLink_ex1.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "event": "removeLink",
- "payload": {
- "id": "of:0000000000000001/1-of:0000000000000002/4",
- "type": "direct",
- "linkWidth": 2,
- "src": "of:0000000000000001",
- "srcPort": "1",
- "dst": "of:0000000000000002",
- "dstPort": "4"
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showDetails_ex1_host.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showDetails_ex1_host.json
deleted file mode 100644
index 19d99593..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showDetails_ex1_host.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "event": "showDetails",
- "sid": 9,
- "payload": {
- "id": "CA:4B:EE:A4:B0:33/-1",
- "type": "host",
- "propOrder": [
- "MAC",
- "IP",
- "-",
- "Latitude",
- "Longitude"
- ],
- "props": {
- "MAC": "CA:4B:EE:A4:B0:33",
- "IP": "[10.0.0.1]",
- "-": "",
- "Latitude": null,
- "Longitude": null
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showDetails_ex2_device.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showDetails_ex2_device.json
deleted file mode 100644
index 8ac1f4f9..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showDetails_ex2_device.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "event": "showDetails",
- "sid": 37,
- "payload": {
- "id": "of:000000000000000a",
- "type": "switch",
- "propOrder": [
- "Name",
- "Vendor",
- "H/W Version",
- "S/W Version",
- "Serial Number",
- "-",
- "Latitude",
- "Longitude",
- "Ports",
- "-",
- "Master"
- ],
- "props": {
- "Name": null,
- "Vendor": "Nicira, Inc.",
- "H/W Version": "Open vSwitch",
- "S/W Version": "2.0.1",
- "Serial Number": "None",
- "-": "",
- "Latitude": null,
- "Longitude": null,
- "Ports": "5",
- "Master":"local"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showSummary_ex1.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showSummary_ex1.json
deleted file mode 100644
index 4d5bd30b..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showSummary_ex1.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "event": "showSummary",
- "sid": 1,
- "payload": {
- "id": "ONOS Summary",
- "type": "node",
- "propOrder": [
- "Devices",
- "Links",
- "Hosts",
- "Topology SCCs",
- "Paths",
- "-",
- "Intents",
- "Flows",
- "Version"
- ],
- "props": {
- "Devices": "25",
- "Links": "112",
- "Hosts": "25",
- "Topology SCCs": "1",
- "Paths": "1,272",
- "-": "",
- "Intents": "0",
- "Flows": "0",
- "Version": "1.0.0*"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showTraffic_ex1.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showTraffic_ex1.json
deleted file mode 100644
index bed7cdd0..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showTraffic_ex1.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "event": "showTraffic",
- "sid":63,
- "payload": {
- "paths": [
- {
- "class": "primary",
- "traffic": false,
- "links": [
- "1E:10:D9:A2:84:E2/-1/0-of:0000000000000003/1",
- "of:0000000000000003/4-of:0000000000000002/1",
- "of:0000000000000002/4-of:0000000000000001/1",
- "of:0000000000000001/2-of:0000000000000006/4",
- "of:0000000000000006/2-of:0000000000000008/4",
- "of:0000000000000008/3-9E:0B:E0:38:98:DE/-1/0"
- ],
- "labels": [
- "",
- "",
- "",
- "",
- "",
- ""
- ]
- },
- {
- "class": "primary",
- "traffic": false,
- "links": [
- "9E:0B:E0:38:98:DE/-1/0-of:0000000000000008/3",
- "of:0000000000000008/4-of:0000000000000006/2",
- "of:0000000000000006/4-of:0000000000000001/2",
- "of:0000000000000001/1-of:0000000000000002/4",
- "of:0000000000000002/1-of:0000000000000003/4",
- "of:0000000000000003/1-1E:10:D9:A2:84:E2/-1/0"
- ],
- "labels": [
- "",
- "",
- "",
- "",
- "",
- ""
- ]
- }
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showTraffic_ex2_animated.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showTraffic_ex2_animated.json
deleted file mode 100644
index 610b516c..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showTraffic_ex2_animated.json
+++ /dev/null
@@ -1,88 +0,0 @@
-{
- "event": "showTraffic",
- "sid": 227,
- "payload": {
- "paths": [
- {
- "class": "primary animated",
- "traffic": true,
- "links": [
- "02:D7:91:9F:4B:E8/-1/0-of:0000000000000004/1",
- "of:0000000000000004/4-of:0000000000000002/2",
- "of:0000000000000002/4-of:0000000000000001/1",
- "of:0000000000000001/2-of:0000000000000006/4",
- "of:0000000000000006/2-of:0000000000000008/4",
- "of:0000000000000008/3-9E:0B:E0:38:98:DE/-1/0"
- ],
- "labels": [
- "",
- "Load{rate=98, latest=37898}",
- "",
- "",
- "",
- "Load{rate=98, latest=38080}"
- ]
- },
- {
- "class": "primary animated",
- "traffic": true,
- "links": [
- "9E:0B:E0:38:98:DE/-1/0-of:0000000000000008/3",
- "of:0000000000000008/4-of:0000000000000006/2",
- "of:0000000000000006/4-of:0000000000000001/2",
- "of:0000000000000001/1-of:0000000000000002/4",
- "of:0000000000000002/2-of:0000000000000004/4",
- "of:0000000000000004/1-02:D7:91:9F:4B:E8/-1/0"
- ],
- "labels": [
- "",
- "",
- "Load{rate=98, latest=38178}",
- "",
- "Load{rate=98, latest=37898}",
- "Load{rate=98, latest=37898}"
- ]
- },
- {
- "class": "primary animated",
- "traffic": true,
- "links": [
- "1E:10:D9:A2:84:E2/-1/0-of:0000000000000003/1",
- "of:0000000000000003/4-of:0000000000000002/1",
- "of:0000000000000002/4-of:0000000000000001/1",
- "of:0000000000000001/2-of:0000000000000006/4",
- "of:0000000000000006/2-of:0000000000000008/4",
- "of:0000000000000008/3-9E:0B:E0:38:98:DE/-1/0"
- ],
- "labels": [
- "",
- "",
- "",
- "",
- "",
- "Load{rate=98, latest=38080}"
- ]
- },
- {
- "class": "primary animated",
- "traffic": true,
- "links": [
- "9E:0B:E0:38:98:DE/-1/0-of:0000000000000008/3",
- "of:0000000000000008/4-of:0000000000000006/2",
- "of:0000000000000006/4-of:0000000000000001/2",
- "of:0000000000000001/1-of:0000000000000002/4",
- "of:0000000000000002/1-of:0000000000000003/4",
- "of:0000000000000003/1-1E:10:D9:A2:84:E2/-1/0"
- ],
- "labels": [
- "",
- "",
- "Load{rate=98, latest=38178}",
- "",
- "",
- ""
- ]
- }
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showTraffic_ex3_none.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showTraffic_ex3_none.json
deleted file mode 100644
index 4acd8296..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/showTraffic_ex3_none.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "event": "showTraffic",
- "sid": 11,
- "payload": {
- "paths": []
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateDevice_ex1.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateDevice_ex1.json
deleted file mode 100644
index dda6186b..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateDevice_ex1.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "updateDevice",
- "payload": {
- "id": "of:0000000000000002",
- "type": "switch",
- "online": true,
- "labels": [
- "of:0000000000000002",
- "2",
- "",
- null
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateDevice_ex2.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateDevice_ex2.json
deleted file mode 100644
index d607f985..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateDevice_ex2.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "updateDevice",
- "payload": {
- "id": "of:0000000000000002",
- "type": "switch",
- "online": false,
- "labels": [
- "of:0000000000000002",
- "2",
- "",
- null
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateHost.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateHost.json
deleted file mode 100644
index fd7361c9..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateHost.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "updateHost",
- "payload": {
- "id": "AA:C2:74:3F:B8:06/-1",
- "ingress": "AA:C2:74:3F:B8:06/-1/0-of:0000000000000005/3",
- "egress": "of:0000000000000005/3-AA:C2:74:3F:B8:06/-1/0",
- "cp": {
- "device": "of:0000000000000005",
- "port": 3
- },
- "labels": [
- "10.0.0.9",
- "AA:C2:74:3F:B8:06"
- ],
- "props":{}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateInstance_ex1.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateInstance_ex1.json
deleted file mode 100644
index e8cf9e8d..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateInstance_ex1.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "event": "updateInstance",
- "payload": {
- "id": "onos-1",
- "online": "false"
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateLink_ex1.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateLink_ex1.json
deleted file mode 100644
index 3be5c5fb..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/rx/updateLink_ex1.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "event": "updateLink",
- "payload": {
- "id": "of:0000000000000002/4-of:0000000000000001/1",
- "type": "direct",
- "linkWidth": 2,
- "src": "of:0000000000000002",
- "srcPort": "4",
- "dst": "of:0000000000000001",
- "dstPort": "1"
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/cancelSummary_ex1.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/cancelSummary_ex1.json
deleted file mode 100644
index 6418471f..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/cancelSummary_ex1.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "event": "cancelSummary",
- "sid": 2,
- "payload": {}
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestDetails_ex1.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestDetails_ex1.json
deleted file mode 100644
index 6c886057..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestDetails_ex1.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "event": "requestDetails",
- "sid": 15,
- "payload": {
- "id": "of:0000000000000003",
- "class": "device"
- }
-}
-
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestDetails_ex2.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestDetails_ex2.json
deleted file mode 100644
index 2cc1bfa7..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestDetails_ex2.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "event": "requestDetails",
- "sid": 9,
- "payload": {
- "id": "CA:4B:EE:A4:B0:33/-1",
- "class": "host"
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestSummary_ex1.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestSummary_ex1.json
deleted file mode 100644
index 448d027c..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestSummary_ex1.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "event": "requestSummary",
- "sid": 1,
- "payload": {}
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex1_devs.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex1_devs.json
deleted file mode 100644
index 5c00b710..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex1_devs.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "event": "requestTraffic",
- "sid": 6,
- "payload": {
- "ids": [
- "of:0000000000000007",
- "of:000000000000000c",
- "of:000000000000000a"
- ],
- "hover": ""
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex2_hosts.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex2_hosts.json
deleted file mode 100644
index 3d7bb2dc..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex2_hosts.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "event": "requestTraffic",
- "sid": 12,
- "payload": {
- "ids": [
- "86:C3:7B:90:79:CD/-1",
- "22:BA:28:81:FD:45/-1",
- "BA:91:F6:8E:B6:B6/-1",
- "06:E2:E6:F7:03:12/-1"
- ],
- "hover": ""
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex3_devs_hosts.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex3_devs_hosts.json
deleted file mode 100644
index 1757b443..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex3_devs_hosts.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "event": "requestTraffic",
- "sid": 18,
- "payload": {
- "ids": [
- "of:0000000000000001",
- "86:C3:7B:90:79:CD/-1",
- "7E:D2:EE:0F:12:4A/-1",
- "of:000000000000000c"
- ],
- "hover": ""
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex4_hover.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex4_hover.json
deleted file mode 100644
index b86e03aa..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/requestTraffic_ex4_hover.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "event": "requestTraffic",
- "sid": 48,
- "payload": {
- "ids": [],
- "hover": "9E:0B:E0:38:98:DE/-1"
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/updateMeta_ex1.json b/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/updateMeta_ex1.json
deleted file mode 100644
index 61145837..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/_capture/tx/updateMeta_ex1.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "updateMeta",
- "sid": 11,
- "payload": {
- "id": "62:4F:65:BF:FF:B3/-1",
- "class": "host",
- "memento": {
- "xpc": 57.3,
- "ypc": 24.86,
- "and": "other properties the UI wishes to remember..."
- }
- }
-}
-
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_10_addHost_02.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_10_addHost_02.json
deleted file mode 100644
index db17014e..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_10_addHost_02.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "0E:2A:69:30:13:97/-1",
- "ingress": "0E:2A:69:30:13:97/-1/0-of:0000000000000002/3",
- "egress": "of:0000000000000002/3-0E:2A:69:30:13:97/-1/0",
- "cp": {
- "device": "of:0000000000000002",
- "port": 3
- },
- "labels": [
- "192.168.0.2",
- "0E:2A:69:30:13:97"
- ],
- "metaUi": {
- "x": 340,
- "y": 100
- },
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_11_addHost_03.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_11_addHost_03.json
deleted file mode 100644
index 5038df10..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_11_addHost_03.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "0E:2A:69:30:13:a8/-1",
- "ingress": "0E:2A:69:30:13:a8/-1/0-of:0000000000000002/4",
- "egress": "of:0000000000000002/4-0E:2A:69:30:13:a8/-1/0",
- "cp": {
- "device": "of:0000000000000002",
- "port": 4
- },
- "labels": [
- "192.168.0.3",
- "0E:2A:69:30:13:a8"
- ],
- "metaUi": {
- "x": 480,
- "y": 90
- },
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_12_showHighlights_clear.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_12_showHighlights_clear.json
deleted file mode 100644
index 615efd25..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_12_showHighlights_clear.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "event": "showHighlights",
- "payload": {
- "devices": [],
- "hosts": [],
- "links": []
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_13_showHighlights_devices.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_13_showHighlights_devices.json
deleted file mode 100644
index 4f35403f..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_13_showHighlights_devices.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "event": "showHighlights",
- "payload": {
- "devices": [
- {
- "id": "of:0000000000000001",
- "badge": {
- "status": "i",
- "gid": "xMark",
- "msg": "x marks the spot"
- }
- },
- {
- "id": "of:0000000000000002",
- "badge": {
- "status": "w",
- "gid": "crown",
- "msg": "it's good to be the King"
- }
- },
- {
- "id": "of:0000000000000003",
- "badge": {
- "status": "e",
- "gid": "chain",
- "msg": "the weakest link"
- }
- },
- {
- "id": "of:0000000000000004",
- "badge": {
- "status": "i",
- "txt": "1",
- "msg": "singular sensation"
- }
- },
- {
- "id": "of:0000000000000005",
- "badge": {
- "status": "w",
- "txt": "42",
- "msg": "life, the universe, and everything!"
- }
- },
- {
- "id": "of:0000000000000006",
- "badge": {
- "status": "e",
- "txt": "99",
- "msg": "cadbury's flake"
- }
- }
- ],
- "hosts": [],
- "links": [
- {
- "css": "primary",
- "id": "of:0000000000000001/5-of:0000000000000002/7",
- "label": "Foo!"
- }
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_14_showHighlights_hosts.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_14_showHighlights_hosts.json
deleted file mode 100644
index a935496f..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_14_showHighlights_hosts.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "event": "showHighlights",
- "payload": {
- "devices": [],
- "hosts": [
- {
- "id": "0E:2A:69:30:13:86/-1",
- "badge": {
- "status": "e",
- "txt": "99",
- "msg": "cadbury's flake"
- }
- },
- {
- "id": "0E:2A:69:30:13:97/-1",
- "badge": {
- "status": "i",
- "gid": "xMark",
- "msg": "x marks the spot"
- }
- },
- {
- "id": "0E:2A:69:30:13:a8/-1",
- "badge": {
- "status": "w",
- "gid": "crown"
- }
- }
- ],
- "links": []
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_15_showHighlights_clear.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_15_showHighlights_clear.json
deleted file mode 100644
index 615efd25..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_15_showHighlights_clear.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "event": "showHighlights",
- "payload": {
- "devices": [],
- "hosts": [],
- "links": []
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_1_addInstance.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_1_addInstance.json
deleted file mode 100644
index cdb95361..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_1_addInstance.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "ONOS",
- "ip": "192.168.56.101",
- "online": true,
- "uiAttached": true,
- "switches": 2,
- "labels": [
- "ONOS",
- "192.168.56.101"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_2_addDevice_s1.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_2_addDevice_s1.json
deleted file mode 100644
index 2e9d30f2..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_2_addDevice_s1.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000001",
- "type": "switch",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "switch-1",
- "of:0000000000000001"
- ],
- "metaUi": {
- "x": 200,
- "y": 200
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_3_addDevice_s2.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_3_addDevice_s2.json
deleted file mode 100644
index 79c04d3a..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_3_addDevice_s2.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000002",
- "type": "switch",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "switch-2",
- "of:0000000000000002"
- ],
- "metaUi": {
- "x": 400,
- "y": 220
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_4_addDevice_s3.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_4_addDevice_s3.json
deleted file mode 100644
index 57f3251b..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_4_addDevice_s3.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000003",
- "type": "switch",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "switch-3",
- "of:0000000000000003"
- ],
- "metaUi": {
- "x": 600,
- "y": 200
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_5_addDevice_s4.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_5_addDevice_s4.json
deleted file mode 100644
index bab00488..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_5_addDevice_s4.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000004",
- "type": "switch",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "switch-4",
- "of:0000000000000004"
- ],
- "metaUi": {
- "x": 200,
- "y": 400
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_6_addDevice_s5.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_6_addDevice_s5.json
deleted file mode 100644
index 6ee18080..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_6_addDevice_s5.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000005",
- "type": "switch",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "switch-5",
- "of:0000000000000005"
- ],
- "metaUi": {
- "x": 400,
- "y": 420
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_7_addDevice_s6.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_7_addDevice_s6.json
deleted file mode 100644
index 4554996e..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_7_addDevice_s6.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000006",
- "type": "switch",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "switch-6",
- "of:0000000000000006"
- ],
- "metaUi": {
- "x": 600,
- "y": 400
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_8_addLink_1_2.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_8_addLink_1_2.json
deleted file mode 100644
index fb952837..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_8_addLink_1_2.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000000000000001/5-of:0000000000000002/7",
- "type": "direct",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000000000000001",
- "srcPort": "5",
- "dst": "of:0000000000000002",
- "dstPort": "7",
- "props" : {
- "BW": "70 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_9_addHost_01.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_9_addHost_01.json
deleted file mode 100644
index 96046061..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/ev_9_addHost_01.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "0E:2A:69:30:13:86/-1",
- "ingress": "0E:2A:69:30:13:86/-1/0-of:0000000000000001/2",
- "egress": "of:0000000000000001/2-0E:2A:69:30:13:86/-1/0",
- "cp": {
- "device": "of:0000000000000001",
- "port": 2
- },
- "labels": [
- "192.168.0.1",
- "0E:2A:69:30:13:86"
- ],
- "metaUi": {
- "x": 210,
- "y": 100
- },
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/badges/scenario.json b/framework/src/onos/web/gui/src/test/_karma/ev/badges/scenario.json
deleted file mode 100644
index c5bad4f8..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/badges/scenario.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "comments": [
- "Demo of adding badges to devices and hosts"
- ],
- "title": "Demo adding badges",
- "params": {
- "lastAuto": 12
- },
- "description": [
- "Demonstrate the device/host badging feature."
- ]
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_10_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_10_onos.json
deleted file mode 100644
index b4685cbc..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_10_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff03",
- "type": "roadm",
- "online": true,
- "master": "192.168.56.101",
- "labels": [
- "",
- "opt-3",
- "0000ffffffffff03"
- ],
- "metaUi": {
- "x": 282,
- "y": 603
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_11_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_11_onos.json
deleted file mode 100644
index 0fde1c0b..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_11_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0009",
- "type": "switch",
- "online": false,
- "master": "onos-2",
- "labels": [
- "",
- "sw-9",
- "0000ffffffff0009"
- ],
- "metaUi": {
- "x": 884,
- "y": 477
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_12_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_12_onos.json
deleted file mode 100644
index 4f3af686..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_12_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff09",
- "type": "roadm",
- "online": false,
- "master": "onos-2",
- "labels": [
- "",
- "opt-9",
- "0000ffffffffff09"
- ],
- "metaUi": {
- "x": 884,
- "y": 577
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_13_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_13_onos.json
deleted file mode 100644
index 56338021..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_13_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "updateInstance",
- "payload": {
- "id": "onos-slave",
- "ip": "192.168.24.11",
- "online": true,
- "uiAttached": false,
- "switches": 103,
- "labels": [
- "onos-slave",
- "192.168.24.11"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_14_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_14_onos.json
deleted file mode 100644
index f8a91863..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_14_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "removeInstance",
- "payload": {
- "id": "onos-leader",
- "ip": "192.168.0.5",
- "online": false,
- "uiAttached": false,
- "switches": 0,
- "labels": [
- "onos-leader",
- "192.168.0.5"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_15_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_15_onos.json
deleted file mode 100644
index eef2964b..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_15_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "onos-leader",
- "ip": "192.168.0.5",
- "online": true,
- "uiAttached": false,
- "switches": 0,
- "labels": [
- "onos-leader",
- "192.168.0.5"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_16_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_16_onos.json
deleted file mode 100644
index 1367251c..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_16_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "onos-6",
- "ip": "192.168.0.66",
- "online": true,
- "uiAttached": false,
- "switches": 0,
- "labels": [
- "onos-6",
- "192.168.0.66"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_17_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_17_onos.json
deleted file mode 100644
index c080d560..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_17_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "onos-7",
- "ip": "192.168.0.77",
- "online": true,
- "uiAttached": false,
- "switches": 0,
- "labels": [
- "onos-7",
- "192.168.0.77"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_18_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_18_onos.json
deleted file mode 100644
index c1955853..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_18_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "updateInstance",
- "payload": {
- "id": "onos-master",
- "ip": "192.168.0.7",
- "online": true,
- "uiAttached": false,
- "switches": 300,
- "labels": [
- "onos-master",
- "192.168.0.7"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_19_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_19_onos.json
deleted file mode 100644
index bd536daf..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_19_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0002",
- "type": "switch",
- "online": false,
- "master": "192.168.56.101",
- "labels": [
- "",
- "sw-2",
- "0000ffffffff0002"
- ],
- "metaUi": {
- "x": 142,
- "y": 503
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_1_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_1_onos.json
deleted file mode 100644
index 0fac1a1a..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_1_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "192.168.56.101",
- "ip": "192.168.56.101",
- "online": true,
- "uiAttached": true,
- "switches": 4,
- "labels": [
- "192.168.56.101",
- "192.168.56.101"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_20_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_20_onos.json
deleted file mode 100644
index faf0a771..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_20_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff02",
- "type": "roadm",
- "online": false,
- "master": "192.168.56.101",
- "labels": [
- "",
- "opt-2",
- "0000ffffffffff02"
- ],
- "metaUi": {
- "x": 142,
- "y": 603
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_21_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_21_onos.json
deleted file mode 100644
index 5d44197b..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_21_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0006",
- "type": "switch",
- "online": false,
- "master": "onos-master",
- "labels": [
- "",
- "sw-6",
- "0000ffffffff0006"
- ],
- "metaUi": {
- "x": 382,
- "y": 333
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_22_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_22_onos.json
deleted file mode 100644
index 02e3d6e0..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_22_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff000a",
- "type": "switch",
- "online": true,
- "master": "onos-slave",
- "labels": [
- "",
- "sw-A",
- "0000ffffffff000a"
- ],
- "metaUi": {
- "x": 195,
- "y": 259
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_23_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_23_onos.json
deleted file mode 100644
index 547d6a08..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_23_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff000b",
- "type": "switch",
- "online": false,
- "master": "onos-slave",
- "labels": [
- "",
- "sw-B",
- "0000ffffffff000b"
- ],
- "metaUi": {
- "x": 52,
- "y": 262
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_24_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_24_onos.json
deleted file mode 100644
index d7de3c1b..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_24_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff000c",
- "type": "switch",
- "online": true,
- "master": "onos-leader",
- "labels": [
- "",
- "sw-C",
- "0000ffffffff000c"
- ],
- "metaUi": {
- "x": 229,
- "y": 354
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_25_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_25_onos.json
deleted file mode 100644
index cade64c8..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_25_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff000d",
- "type": "switch",
- "online": false,
- "master": "onos-leader",
- "labels": [
- "",
- "sw-D",
- "0000ffffffff000d"
- ],
- "metaUi": {
- "x": 100,
- "y": 357
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_26_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_26_onos.json
deleted file mode 100644
index 9f21a7cc..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_26_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff000e",
- "type": "switch",
- "online": true,
- "master": "onos-6",
- "labels": [
- "",
- "sw-E",
- "0000ffffffff000e"
- ],
- "metaUi": {
- "x": 757,
- "y": 267
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_27_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_27_onos.json
deleted file mode 100644
index 9f9b70a9..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_27_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff000f",
- "type": "switch",
- "online": false,
- "master": "onos-6",
- "labels": [
- "",
- "sw-F",
- "0000ffffffff000f"
- ],
- "metaUi": {
- "x": 877,
- "y": 267
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_28_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_28_onos.json
deleted file mode 100644
index a60b43e5..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_28_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0010",
- "type": "switch",
- "online": true,
- "master": "onos-7",
- "labels": [
- "",
- "sw-1-0",
- "0000ffffffff0010"
- ],
- "metaUi": {
- "x": 442,
- "y": 508
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_29_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_29_onos.json
deleted file mode 100644
index ae45cd27..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_29_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0011",
- "type": "switch",
- "online": false,
- "master": "onos-7",
- "labels": [
- "",
- "sw-1-1",
- "0000ffffffff0011"
- ],
- "metaUi": {
- "x": 576,
- "y": 519
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_2_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_2_onos.json
deleted file mode 100644
index bbc587ae..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_2_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "onos-2",
- "ip": "192.168.0.2",
- "online": true,
- "uiAttached": false,
- "switches": 3,
- "labels": [
- "onos-2",
- "192.168.0.2"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_30_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_30_onos.json
deleted file mode 100644
index 327e2641..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_30_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "updateInstance",
- "payload": {
- "id": "192.168.56.101",
- "ip": "192.168.56.101",
- "online": false,
- "uiAttached": false,
- "switches": 4,
- "labels": [
- "192.168.56.101",
- "192.168.56.101"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_31_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_31_onos.json
deleted file mode 100644
index dad87a23..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_31_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "updateInstance",
- "payload": {
- "id": "onos-2",
- "ip": "192.168.0.2",
- "online": false,
- "uiAttached": false,
- "switches": 3,
- "labels": [
- "onos-2",
- "192.168.0.2"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_32_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_32_onos.json
deleted file mode 100644
index 6efdfc5d..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_32_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "updateInstance",
- "payload": {
- "id": "onos-leader",
- "ip": "192.168.0.5",
- "online": false,
- "uiAttached": false,
- "switches": 0,
- "labels": [
- "onos-leader",
- "192.168.0.5"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_33_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_33_onos.json
deleted file mode 100644
index 2751055a..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_33_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "updateInstance",
- "payload": {
- "id": "onos-master",
- "ip": "192.168.0.7",
- "online": true,
- "uiAttached": true,
- "switches": 300,
- "labels": [
- "onos-master",
- "192.168.0.7"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_34_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_34_onos.json
deleted file mode 100644
index 1cab6fd7..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_34_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "updateInstance",
- "payload": {
- "id": "onos-slave",
- "ip": "192.168.0.11",
- "online": false,
- "uiAttached": false,
- "switches": 17,
- "labels": [
- "onos-slave",
- "192.168.0.11"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_35_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_35_onos.json
deleted file mode 100644
index 142bd367..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_35_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "updateInstance",
- "payload": {
- "id": "onos-6",
- "ip": "192.168.0.66",
- "online": false,
- "uiAttached": false,
- "switches": 17,
- "labels": [
- "onos-6",
- "192.168.0.66"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_36_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_36_onos.json
deleted file mode 100644
index a4d8dfa4..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_36_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "updateInstance",
- "payload": {
- "id": "onos-7",
- "ip": "192.168.0.77",
- "online": false,
- "uiAttached": false,
- "switches": 17,
- "labels": [
- "onos-7",
- "192.168.0.77"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_37_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_37_onos.json
deleted file mode 100644
index a5cef11a..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_37_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "updateInstance",
- "payload": {
- "id": "192.168.56.101",
- "ip": "192.168.56.101",
- "online": true,
- "uiAttached": true,
- "switches": 4,
- "labels": [
- "192.168.56.101",
- "192.168.56.101"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_38_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_38_onos.json
deleted file mode 100644
index 65cae8d8..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_38_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "updateInstance",
- "payload": {
- "id": "onos-master",
- "ip": "192.168.0.7",
- "online": false,
- "uiAttached": false,
- "switches": 300,
- "labels": [
- "onos-master",
- "192.168.0.7"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_3_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_3_onos.json
deleted file mode 100644
index f7e1f497..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_3_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "onos-leader",
- "ip": "192.168.0.5",
- "online": false,
- "uiAttached": false,
- "switches": 0,
- "labels": [
- "onos-leader",
- "192.168.0.5"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_4_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_4_onos.json
deleted file mode 100644
index 3eeb99a0..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_4_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "onos-master",
- "ip": "192.168.0.7",
- "online": false,
- "uiAttached": false,
- "switches": 300,
- "labels": [
- "onos-master",
- "192.168.0.7"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_5_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_5_onos.json
deleted file mode 100644
index a41e1d7d..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_5_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "onos-slave",
- "ip": "192.168.0.11",
- "online": false,
- "uiAttached": false,
- "switches": 17,
- "labels": [
- "onos-slave",
- "192.168.0.11"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_6_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_6_onos.json
deleted file mode 100644
index d19a508d..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_6_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0008",
- "type": "switch",
- "online": true,
- "master": "onos-2",
- "labels": [
- "",
- "sw-8",
- "0000ffffffff0008"
- ],
- "metaUi": {
- "x": 734,
- "y": 477
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_7_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_7_onos.json
deleted file mode 100644
index d382b7c8..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_7_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0003",
- "type": "switch",
- "online": true,
- "master": "192.168.56.101",
- "labels": [
- "",
- "sw-3",
- "0000ffffffff0003"
- ],
- "metaUi": {
- "x": 282,
- "y": 503
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_8_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_8_onos.json
deleted file mode 100644
index 7967c0e7..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_8_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0007",
- "type": "switch",
- "online": true,
- "master": "onos-master",
- "labels": [
- "",
- "sw-7",
- "0000ffffffff0007"
- ],
- "metaUi": {
- "x": 530,
- "y": 330
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_9_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_9_onos.json
deleted file mode 100644
index ff160d62..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/ev_9_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff08",
- "type": "roadm",
- "online": true,
- "master": "onos-2",
- "labels": [
- "",
- "opt-8",
- "0000ffffffffff08"
- ],
- "metaUi": {
- "x": 734,
- "y": 577
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/colors/scenario.json b/framework/src/onos/web/gui/src/test/_karma/ev/colors/scenario.json
deleted file mode 100644
index dd178283..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/colors/scenario.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "comments": [
- "Tweaking Colors"
- ],
- "title": "Color-Tweaking Scenario",
- "params": {
- "lastAuto": 29
- },
- "description": [
- "Press '=' to load initial events.",
- "Press '-' to fire further events."
- ]
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_10_addDevice_s9_ids.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_10_addDevice_s9_ids.json
deleted file mode 100644
index 232d4edb..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_10_addDevice_s9_ids.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000009",
- "type": "ids",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "ids",
- "of:0000000000000009"
- ],
- "metaUi": {
- "x": 200,
- "y": 400
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_11_addDevice_s10_controller.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_11_addDevice_s10_controller.json
deleted file mode 100644
index abd24d66..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_11_addDevice_s10_controller.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:00000000000000010",
- "type": "controller",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "controller",
- "of:0000000000000010"
- ],
- "metaUi": {
- "x": 350,
- "y": 400
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_12_addDevice_s11_virtual.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_12_addDevice_s11_virtual.json
deleted file mode 100644
index 1fe1837b..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_12_addDevice_s11_virtual.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:00000000000000011",
- "type": "virtual",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "virtual",
- "of:0000000000000011"
- ],
- "metaUi": {
- "x": 500,
- "y": 400
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_13_addDevice_s12_fiber_switch.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_13_addDevice_s12_fiber_switch.json
deleted file mode 100644
index 954376cd..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_13_addDevice_s12_fiber_switch.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:00000000000000012",
- "type": "fiber_switch",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "fiber_switch",
- "of:0000000000000012"
- ],
- "metaUi": {
- "x": 650,
- "y": 400
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_14_addDevice_s13_microwave.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_14_addDevice_s13_microwave.json
deleted file mode 100644
index 3d40ceca..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_14_addDevice_s13_microwave.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:00000000000000013",
- "type": "microwave",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "microwave",
- "of:0000000000000013"
- ],
- "metaUi": {
- "x": 300,
- "y": 500
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_15_addDevice_s14_other.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_15_addDevice_s14_other.json
deleted file mode 100644
index e33532d7..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_15_addDevice_s14_other.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:00000000000000014",
- "type": "other",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "other",
- "of:0000000000000014"
- ],
- "metaUi": {
- "x": 450,
- "y": 500
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_16_addDevice_s15_unmatched.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_16_addDevice_s15_unmatched.json
deleted file mode 100644
index 1773c917..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_16_addDevice_s15_unmatched.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:00000000000000015",
- "type": "-unmatched-",
- "online": true,
- "master": "ONOS-B",
- "labels": [
- "",
- "-unmatched-",
- "of:0000000000000015"
- ],
- "metaUi": {
- "x": 600,
- "y": 500
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_1_addInstance.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_1_addInstance.json
deleted file mode 100644
index 20be9e2b..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_1_addInstance.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "ONOS",
- "ip": "192.168.56.101",
- "online": true,
- "uiAttached": true,
- "switches": 4,
- "labels": [
- "ONOS",
- "192.168.56.101"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_2_addDevice_s1_switch.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_2_addDevice_s1_switch.json
deleted file mode 100644
index 5f8ad66e..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_2_addDevice_s1_switch.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000001",
- "type": "switch",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "switch",
- "of:0000000000000001"
- ],
- "metaUi": {
- "x": 200,
- "y": 200
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_3_addDevice_s2_router.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_3_addDevice_s2_router.json
deleted file mode 100644
index b6da44ce..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_3_addDevice_s2_router.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000002",
- "type": "router",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "router",
- "of:0000000000000002"
- ],
- "metaUi": {
- "x": 350,
- "y": 200
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_4_addDevice_s3_roadm.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_4_addDevice_s3_roadm.json
deleted file mode 100644
index 468749ef..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_4_addDevice_s3_roadm.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000003",
- "type": "roadm",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "roadm",
- "of:0000000000000003"
- ],
- "metaUi": {
- "x": 500,
- "y": 200
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_5_addDevice_s4_otn.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_5_addDevice_s4_otn.json
deleted file mode 100644
index c8e234be..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_5_addDevice_s4_otn.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000004",
- "type": "otn",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "otn",
- "of:0000000000000004"
- ],
- "metaUi": {
- "x": 650,
- "y": 200
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_6_addDevice_s5_roadm_otn.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_6_addDevice_s5_roadm_otn.json
deleted file mode 100644
index c54cc4ae..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_6_addDevice_s5_roadm_otn.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000005",
- "type": "roadm_otn",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "roadm_otn",
- "of:0000000000000005"
- ],
- "metaUi": {
- "x": 300,
- "y": 300
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_7_addDevice_s6_firewall.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_7_addDevice_s6_firewall.json
deleted file mode 100644
index 19d50d45..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_7_addDevice_s6_firewall.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000006",
- "type": "firewall",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "firewall",
- "of:0000000000000006"
- ],
- "metaUi": {
- "x": 450,
- "y": 300
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_8_addDevice_s7_balancer.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_8_addDevice_s7_balancer.json
deleted file mode 100644
index d9a3b795..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_8_addDevice_s7_balancer.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000007",
- "type": "balancer",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "balancer",
- "of:0000000000000007"
- ],
- "metaUi": {
- "x": 600,
- "y": 300
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_9_addDevice_s8_ips.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_9_addDevice_s8_ips.json
deleted file mode 100644
index c89f565e..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/ev_9_addDevice_s8_ips.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000000000000008",
- "type": "ips",
- "online": true,
- "master": "ONOS",
- "labels": [
- "",
- "ips",
- "of:0000000000000008"
- ],
- "metaUi": {
- "x": 750,
- "y": 300
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/devices/scenario.json b/framework/src/onos/web/gui/src/test/_karma/ev/devices/scenario.json
deleted file mode 100644
index ee3c1eaf..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/devices/scenario.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "comments": [
- "Showing all device types"
- ],
- "title": "Show Device Types",
- "params": {
- "lastAuto": 16
- },
- "description": [
- "Show all device types."
- ]
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_10_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_10_onos.json
deleted file mode 100644
index 4a289d82..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_10_onos.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0003/4-of:0000ffffffffff03/1",
- "type": "pktopt",
- "linkWidth": 2,
- "src": "of:0000ffffffff0003",
- "srcPort": "4",
- "dst": "of:0000ffffffffff03",
- "dstPort": "1",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_11_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_11_onos.json
deleted file mode 100644
index 70dc216c..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_11_onos.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0003/9-of:0000ffffffff0007/2",
- "type": "direct",
- "linkWidth": 2,
- "src": "of:0000ffffffff0003",
- "srcPort": "9",
- "dst": "of:0000ffffffff0007",
- "dstPort": "2",
- "props" : {
- "BW": "120 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_12_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_12_onos.json
deleted file mode 100644
index 78e6a394..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_12_onos.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0008/2-of:0000ffffffff0003/1",
- "type": "direct",
- "linkWidth": 2,
- "src": "of:0000ffffffff0008",
- "srcPort": "2",
- "dst": "of:0000ffffffff0003",
- "dstPort": "1",
- "props" : {
- "BW": "70 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_13_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_13_onos.json
deleted file mode 100644
index d9d27e70..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_13_onos.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0008/4-of:0000ffffffff0007/1",
- "type": "direct",
- "linkWidth": 2,
- "src": "of:0000ffffffff0008",
- "srcPort": "4",
- "dst": "of:0000ffffffff0007",
- "dstPort": "1",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_14_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_14_onos.json
deleted file mode 100644
index 89435bcd..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_14_onos.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff08/4-of:0000ffffffffff03/1",
- "type": "optical",
- "linkWidth": 2,
- "src": "of:0000ffffffffff08",
- "srcPort": "4",
- "dst": "of:0000ffffffffff03",
- "dstPort": "1",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_15_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_15_onos.json
deleted file mode 100644
index af031a63..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_15_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "0E:2A:69:30:13:aa/-1",
- "ingress": "0E:2A:69:30:13:aa/-1/0-of:0000ffffffff0008/101",
- "egress": "of:0000ffffffff0008/101-0E:2A:69:30:13:aa/-1/0",
- "cp": {
- "device": "of:0000ffffffff0008",
- "port": 101
- },
- "labels": [
- "12.13.14.15",
- "0E:2A:69:30:13:aa"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_16_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_16_onos.json
deleted file mode 100644
index 6efcda93..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_16_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "0E:2A:69:30:13:88/-1",
- "ingress": "0E:2A:69:30:13:88/-1/0-of:0000ffffffff0007/101",
- "egress": "of:0000ffffffff0007/101-0E:2A:69:30:13:86/-1/0",
- "cp": {
- "device": "of:0000ffffffff0007",
- "port": 101
- },
- "labels": [
- "4.5.7.6",
- "0E:2A:69:30:13:88"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_17_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_17_onos.json
deleted file mode 100644
index a5ee5c98..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_17_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "0E:2A:69:30:13:86/-1",
- "ingress": "0E:2A:69:30:13:86/-1/0-of:0000ffffffff0003/101",
- "egress": "of:0000ffffffff0003/101-0E:2A:69:30:13:86/-1/0",
- "cp": {
- "device": "of:0000ffffffff0003",
- "port": 101
- },
- "labels": [
- "1.2.3.4",
- "0E:2A:69:30:13:86"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_18_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_18_onos.json
deleted file mode 100644
index 4168e11d..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_18_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "updateInstance",
- "payload": {
- "id": "onos-3",
- "ip": "192.168.3.3",
- "online": true,
- "uiAttached": false,
- "switches": 2,
- "labels": [
- "onos-3",
- "192.168.3.3"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_19_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_19_onos.json
deleted file mode 100644
index 2e955399..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_19_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "updateInstance",
- "payload": {
- "id": "onos-3",
- "ip": "192.168.3.3",
- "online": false,
- "uiAttached": false,
- "switches": 2,
- "labels": [
- "onos-3",
- "192.168.3.3"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_1_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_1_onos.json
deleted file mode 100644
index 287538ef..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_1_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "192.168.56.101",
- "ip": "192.168.56.101",
- "online": true,
- "uiAttached": false,
- "switches": 2,
- "labels": [
- "192.168.56.101",
- "127.0.0.1"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_2_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_2_onos.json
deleted file mode 100644
index bbf6c649..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_2_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "onos-2",
- "ip": "192.168.2.2",
- "online": true,
- "uiAttached": true,
- "switches": 1,
- "labels": [
- "onos-2",
- "192.168.2.2"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_3_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_3_onos.json
deleted file mode 100644
index 0459e10a..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_3_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "onos-3",
- "ip": "192.168.3.3",
- "online": false,
- "uiAttached": false,
- "switches": 2,
- "labels": [
- "onos-3",
- "192.168.3.3"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_4_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_4_onos.json
deleted file mode 100644
index f1abeeb5..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_4_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0008",
- "type": "switch",
- "online": true,
- "master": "onos-3",
- "labels": [
- "0000ffffffff0008",
- "FF:FF:FF:FF:00:08",
- "sw-8"
- ],
- "metaUi": {
- "x": 734,
- "y": 477
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_5_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_5_onos.json
deleted file mode 100644
index d99b0fe6..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_5_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0003",
- "type": "switch",
- "online": true,
- "master": "192.168.56.101",
- "labels": [
- "0000ffffffff0003",
- "FF:FF:FF:FF:00:03",
- "sw-3"
- ],
- "metaUi": {
- "x": 282,
- "y": 503
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_6_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_6_onos.json
deleted file mode 100644
index 2f58f613..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_6_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0007",
- "type": "switch",
- "online": true,
- "master": "onos-2",
- "labels": [
- "0000ffffffff0007",
- "FF:FF:FF:FF:00:07",
- "sw-7"
- ],
- "metaUi": {
- "x": 530,
- "y": 330
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_7_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_7_onos.json
deleted file mode 100644
index 33f29679..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_7_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff08",
- "type": "roadm",
- "online": true,
- "master": "onos-3",
- "labels": [
- "0000ffffffffff08",
- "FF:FF:FF:FF:FF:08",
- "opt-8"
- ],
- "metaUi": {
- "x": 734,
- "y": 577
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_8_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_8_onos.json
deleted file mode 100644
index d3bb1435..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_8_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff03",
- "type": "roadm",
- "online": true,
- "master": "192.168.56.101",
- "labels": [
- "0000ffffffffff03",
- "FF:FF:FF:FF:FF:03",
- "opt-3"
- ],
- "metaUi": {
- "x": 282,
- "y": 603
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_9_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_9_onos.json
deleted file mode 100644
index 115858ae..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/ev_9_onos.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0008/4-of:0000ffffffffff08/1",
- "type": "pktopt",
- "linkWidth": 2,
- "src": "of:0000ffffffff0008",
- "srcPort": "4",
- "dst": "of:0000ffffffffff08",
- "dstPort": "1",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/instances/scenario.json b/framework/src/onos/web/gui/src/test/_karma/ev/instances/scenario.json
deleted file mode 100644
index 503edfc3..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/instances/scenario.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "comments": [
- "Developing ONOS instance visualization"
- ],
- "title": "ONOS Instance Scenario",
- "params": {
- "lastAuto": 17
- },
- "description": [
- "Press 'I' to show instance pane.",
- "Press 'H' to show hosts.",
- "",
- "Press '=' to load initial events.",
- "Press '-' to fire further events."
- ]
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_1_ui.json b/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_1_ui.json
deleted file mode 100644
index 962fcaa3..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_1_ui.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "event": "addHostIntent",
- "sid": 1,
- "payload": {
- "one": "hostOne",
- "two": "hostTwo"
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_2_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_2_onos.json
deleted file mode 100644
index 4fdeaa1a..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_2_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "showTraffic",
- "sid": 1,
- "payload": {
- "paths": [
- {
- "intentId": "0x1234",
- "links": [ "1-2", "2-3" ],
- "class": "primary"
- },
- {
- "intentId": "0x4321",
- "links": [ "5-6", "6-7" ],
- "class": "secondary"
- }
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_3_ui.json b/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_3_ui.json
deleted file mode 100644
index f6a2b173..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_3_ui.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "event": "requestTraffic",
- "sid": 2,
- "payload": {
- "ids": [ "00:00:00:00:00:01/-1", "00:00:00:00:00:02/-1" ],
- "hover": ""
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_4_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_4_onos.json
deleted file mode 100644
index f78616a0..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_4_onos.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "event": "showPath",
- "sid": 2,
- "payload": {
- "paths": [
- {
- "intentId": "0x1234",
- "links": [ "1-2", "2-3" ],
- "class": "animated",
- "labels": [ "9Gb", "9Gb" ]
- },
- {
- "intentId": "0x4321",
- "links": [ "5-6", "6-7" ],
- "class": "animated",
- "labels": [ "4GB", "4GB" ]
- }
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_5_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_5_onos.json
deleted file mode 100644
index 2afb7857..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_5_onos.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "event": "showTraffic",
- "sid": 2,
- "payload": {
- "paths": [
- {
- "intentId": "0x1234",
- "links": [ "1-2", "2-3" ],
- "class": "animated",
- "labels": [ "17Gb", "16Gb" ]
- },
- {
- "intentId": "0x4321",
- "links": [ "5-6", "6-7" ],
- "class": "animated",
- "labels": [ "9Gb", "5Gb" ]
- }
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_6_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_6_onos.json
deleted file mode 100644
index 5f554151..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_6_onos.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "event": "showTraffic",
- "sid": 2,
- "payload": {
- "paths": [
- {
- "intentId": "0x1234",
- "links": [ "1-2", "2-3" ],
- "class": "primary",
- "labels": [ "17Gb", "16Gb" ]
- },
- {
- "intentId": "0x4321",
- "links": [ "5-6", "6-7" ],
- "class": "secondary",
- "labels": [ "9Gb", "5Gb" ]
- }
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_7_ui.json b/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_7_ui.json
deleted file mode 100644
index 89da44e1..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_7_ui.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "event": "cancelTraffic",
- "sid": 3,
- "payload": {
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_8_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_8_onos.json
deleted file mode 100644
index 8d5a50ee..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/ev_8_onos.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "event": "showTraffic",
- "sid": 3,
- "payload": {
- "paths": []
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/scenario.json b/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/scenario.json
deleted file mode 100644
index f109ddeb..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/intentSketch/scenario.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "comments": [
- "This scenario steps through adding a host intent."
- ],
- "title": "Host Intent Scenario",
- "params": {
- "lastAuto": 0
- },
- "description": [
- "Currently this is just a sketch of the event sequence,",
- " but is NOT YET a runnable scenario."
- ]
-} \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_10_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_10_onos.json
deleted file mode 100644
index 5775e43f..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_10_onos.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0008/10-of:0000ffffffff0003/20",
- "type": "direct",
- "linkWidth": 2,
- "src": "of:0000ffffffff0008",
- "srcPort": "10",
- "dst": "of:0000ffffffff0003",
- "dstPort": "20",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_11_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_11_onos.json
deleted file mode 100644
index f0d0b4d3..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_11_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "0E:2A:69:30:13:88/-1",
- "ingress": "0E:2A:69:30:13:88/-1/0-of:0000ffffffff0003/1",
- "egress": "of:0000ffffffff0003/1-0E:2A:69:30:13:88/-1/0",
- "cp": {
- "device": "of:0000ffffffff0003",
- "port": 1
- },
- "labels": [
- "Host-A",
- "0E:2A:69:30:13:88"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_12_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_12_onos.json
deleted file mode 100644
index d9773430..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_12_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "0E:2A:69:30:13:89/-1",
- "ingress": "0E:2A:69:30:13:89/-1/0-of:0000ffffffff0007/1",
- "egress": "of:0000ffffffff0007/1-0E:2A:69:30:13:89/-1/0",
- "cp": {
- "device": "of:0000ffffffff0007",
- "port": 1
- },
- "labels": [
- "Host-B",
- "0E:2A:69:30:13:89"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_13_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_13_onos.json
deleted file mode 100644
index 8f643baf..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_13_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "0E:2A:69:30:13:8A/-1",
- "ingress": "0E:2A:69:30:13:8A/-1/0-of:0000ffffffff0008/1",
- "egress": "of:0000ffffffff0008/1-0E:2A:69:30:13:8A/-1/0",
- "cp": {
- "device": "of:0000ffffffff0008",
- "port": 1
- },
- "labels": [
- "Host-C",
- "0E:2A:69:30:13:8A"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_14_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_14_onos.json
deleted file mode 100644
index d7610199..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_14_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "updateLink",
- "payload": {
- "id": "of:0000ffffffff0007/10-of:0000ffffffff0008/20",
- "src": "of:0000ffffffff0007",
- "srcPort": "10",
- "dst": "of:0000ffffffff0008",
- "dstPort": "20",
-
- "type": "direct",
- "linkWidth": 2,
- "online": true,
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_15_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_15_onos.json
deleted file mode 100644
index dbdfb3a0..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_15_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "updateLink",
- "payload": {
- "id": "of:0000ffffffff0007/20-of:0000ffffffff0003/10",
- "src": "of:0000ffffffff0007",
- "srcPort": "20",
- "dst": "of:0000ffffffff0003",
- "dstPort": "10",
-
- "type": "direct",
- "linkWidth": 6,
- "online": true,
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_16_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_16_onos.json
deleted file mode 100644
index b7783c12..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_16_onos.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "removeLink",
- "payload": {
- "id": "of:0000ffffffff0007/20-of:0000ffffffff0003/10",
- "type": "direct",
- "linkWidth": 2,
- "src": "of:0000ffffffff0007",
- "srcPort": "20",
- "dst": "of:0000ffffffff0003",
- "dstPort": "10",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_17_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_17_onos.json
deleted file mode 100644
index daf926e7..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_17_onos.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "removeLink",
- "payload": {
- "id": "of:0000ffffffff0003/10-of:0000ffffffff0007/20",
- "type": "direct",
- "linkWidth": 2,
- "src": "of:0000ffffffff0003",
- "srcPort": "10",
- "dst": "of:0000ffffffff0007",
- "dstPort": "20",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_18_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_18_onos.json
deleted file mode 100644
index aa403613..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_18_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0003/10-of:0000ffffffff0007/20",
- "type": "direct",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffff0003",
- "srcPort": "10",
- "dst": "of:0000ffffffff0007",
- "dstPort": "20",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_19_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_19_onos.json
deleted file mode 100644
index 58772f7b..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_19_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0007/20-of:0000ffffffff0003/10",
- "type": "direct",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffff0007",
- "srcPort": "20",
- "dst": "of:0000ffffffff0003",
- "dstPort": "10",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_1_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_1_onos.json
deleted file mode 100644
index 46803a23..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_1_onos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "local",
- "ip": "127.0.0.1",
- "online": true,
- "uiAttached": true,
- "switches": 43,
- "labels": [
- "local",
- "127.0.0.1"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_20_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_20_onos.json
deleted file mode 100644
index 19b5cd3c..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_20_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "updateLink",
- "payload": {
- "id": "of:0000ffffffff0003/20-of:0000ffffffff0008/10",
- "type": "direct",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffff0003",
- "srcPort": "20",
- "dst": "of:0000ffffffff0008",
- "dstPort": "10",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_21_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_21_onos.json
deleted file mode 100644
index 342272c4..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_21_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "updateLink",
- "payload": {
- "id": "of:0000ffffffff0008/10-of:0000ffffffff0003/20",
- "type": "direct",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffff0008",
- "srcPort": "10",
- "dst": "of:0000ffffffff0003",
- "dstPort": "20",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_22_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_22_onos.json
deleted file mode 100644
index b0b51b1f..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_22_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "0E:2A:69:30:BB:BB/-1",
- "type": "bgpSpeaker",
- "ingress": "0E:2A:69:30:BB:BB/-1/0-of:0000ffffffff0007/2",
- "egress": "of:0000ffffffff0007/2-0E:2A:69:30:BB:BB/-1/0",
- "cp": {
- "device": "of:0000ffffffff0007",
- "port": 2
- },
- "labels": [
- "BGP",
- "0E:2A:69:30:BB:BB"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_23_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_23_onos.json
deleted file mode 100644
index 1fd53cd8..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_23_onos.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "event": "showTraffic",
- "sid":62,
- "payload": {
- "paths": [
- {
- "class": "primary",
- "traffic": false,
- "links": [
- "0E:2A:69:30:13:8A/-1/0-of:0000ffffffff0008/1",
- "of:0000ffffffff0008/20-of:0000ffffffff0007/10",
- "of:0000ffffffff0007/1-0E:2A:69:30:13:89/-1/0"
- ],
- "labels": [
- "123 bytes",
- "10 bytes",
- "0 bytes"
- ]
- }
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_24_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_24_onos.json
deleted file mode 100644
index b797752d..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_24_onos.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "event": "showTraffic",
- "sid":63,
- "payload": {
- "paths": [
- {
- "class": "primary animated",
- "traffic": true,
- "links": [
- "0E:2A:69:30:13:8A/-1/0-of:0000ffffffff0008/1",
- "of:0000ffffffff0008/20-of:0000ffffffff0007/10",
- "of:0000ffffffff0007/1-0E:2A:69:30:13:89/-1/0"
- ],
- "labels": [
- "99997 bytes",
- "200 bytes",
- "3.1415926 bytes"
- ]
- }
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_25_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_25_onos.json
deleted file mode 100644
index 59c12fa7..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_25_onos.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "event": "showTraffic",
- "sid": 64,
- "payload": {
- "paths": []
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_2_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_2_onos.json
deleted file mode 100644
index 46e56f60..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_2_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0003",
- "type": "switch",
- "online": true,
- "master": "local",
- "labels": [
- "",
- "sw-3",
- "0000ffffffff0003"
- ],
- "metaUi": {
- "x": 282,
- "y": 503
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_3_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_3_onos.json
deleted file mode 100644
index c32cd285..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_3_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0007",
- "type": "switch",
- "online": true,
- "master": "local",
- "labels": [
- "",
- "sw-7",
- "0000ffffffff0007"
- ],
- "metaUi": {
- "x": 530,
- "y": 330
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_4_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_4_onos.json
deleted file mode 100644
index 375fcccf..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_4_onos.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0008",
- "type": "switch",
- "online": true,
- "master": "local",
- "labels": [
- "",
- "sw-8",
- "0000ffffffff0008"
- ],
- "metaUi": {
- "x": 734,
- "y": 477
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_5_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_5_onos.json
deleted file mode 100644
index 771c332a..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_5_onos.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0007/10-of:0000ffffffff0008/20",
- "type": "direct",
- "linkWidth": 2,
- "src": "of:0000ffffffff0007",
- "srcPort": "10",
- "dst": "of:0000ffffffff0008",
- "dstPort": "20",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_6_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_6_onos.json
deleted file mode 100644
index 6eea869a..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_6_onos.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0008/20-of:0000ffffffff0007/10",
- "type": "direct",
- "linkWidth": 2,
- "src": "of:0000ffffffff0008",
- "srcPort": "20",
- "dst": "of:0000ffffffff0007",
- "dstPort": "10",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_7_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_7_onos.json
deleted file mode 100644
index cff94a50..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_7_onos.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0003/10-of:0000ffffffff0007/20",
- "type": "direct",
- "linkWidth": 2,
- "src": "of:0000ffffffff0003",
- "srcPort": "10",
- "dst": "of:0000ffffffff0007",
- "dstPort": "20",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_8_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_8_onos.json
deleted file mode 100644
index 0a5a3142..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_8_onos.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0007/20-of:0000ffffffff0003/10",
- "type": "direct",
- "linkWidth": 2,
- "src": "of:0000ffffffff0007",
- "srcPort": "20",
- "dst": "of:0000ffffffff0003",
- "dstPort": "10",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_9_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_9_onos.json
deleted file mode 100644
index 0b6b67b1..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/ev_9_onos.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0003/20-of:0000ffffffff0008/10",
- "type": "direct",
- "linkWidth": 2,
- "src": "of:0000ffffffff0003",
- "srcPort": "20",
- "dst": "of:0000ffffffff0008",
- "dstPort": "10",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/links/scenario.json b/framework/src/onos/web/gui/src/test/_karma/ev/links/scenario.json
deleted file mode 100644
index 2cef0aa7..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/links/scenario.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "comments": [
- "Stepping through link events"
- ],
- "title": "Process Link Events Scenario",
- "params": {
- "lastAuto": 13
- },
- "description": [
- "Press 'H' to show hosts.",
- "",
- "Press '=' to load initial events.",
- "Press '-' to fire further events."
- ]
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_10_addInstance_F.json b/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_10_addInstance_F.json
deleted file mode 100644
index ce5a2e95..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_10_addInstance_F.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "instF",
- "ip": "123.6.6.6",
- "online": true,
- "uiAttached": false,
- "switches": 6,
- "labels": [
- "instF",
- "123.6.6.6"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_11_addInstance_G.json b/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_11_addInstance_G.json
deleted file mode 100644
index c2a70afa..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_11_addInstance_G.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "instG",
- "ip": "123.7.7.7",
- "online": true,
- "uiAttached": false,
- "switches": 7,
- "labels": [
- "instG",
- "123.7.7.7"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_1_showSummary.json b/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_1_showSummary.json
deleted file mode 100644
index a08504e1..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_1_showSummary.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "event": "showSummary",
- "sid": 1,
- "payload": {
- "id": "ONOS Summary",
- "type": "node",
- "propOrder": [
- "Devices",
- "Links",
- "Hosts",
- "Topology SCCs",
- "-",
- "Intents",
- "Flows",
- "Version"
- ],
- "props": {
- "Devices": "25",
- "Links": "112",
- "Hosts": "0",
- "Topology SCCs": "1",
- "-": "",
- "Intents": "0",
- "Flows": "125",
- "Version": "1.0.0*"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_2_addInstance.json b/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_2_addInstance.json
deleted file mode 100644
index 0579c1d5..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_2_addInstance.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "local",
- "ip": "127.0.0.1",
- "online": true,
- "uiAttached": true,
- "switches": 25,
- "labels": [
- "local",
- "127.0.0.1"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_3_addInstance_B.json b/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_3_addInstance_B.json
deleted file mode 100644
index 4313116d..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_3_addInstance_B.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "instB",
- "ip": "123.22.33.241",
- "online": true,
- "uiAttached": false,
- "switches": 14,
- "labels": [
- "instB",
- "123.22.33.241"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_4_addInstance_C.json b/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_4_addInstance_C.json
deleted file mode 100644
index b3376c0d..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_4_addInstance_C.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "instC",
- "ip": "123.22.33.124",
- "online": true,
- "uiAttached": false,
- "switches": 7,
- "labels": [
- "instC",
- "123.22.33.124"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_5_updateInstance_B.json b/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_5_updateInstance_B.json
deleted file mode 100644
index f3cc9c92..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_5_updateInstance_B.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "updateInstance",
- "payload": {
- "id": "instB",
- "ip": "123.22.33.241",
- "online": false,
- "uiAttached": false,
- "switches": 14,
- "labels": [
- "instB",
- "123.22.33.241"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_6_removeInstance_B.json b/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_6_removeInstance_B.json
deleted file mode 100644
index 0ade799d..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_6_removeInstance_B.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "removeInstance",
- "payload": {
- "id": "instB",
- "ip": "123.22.33.241",
- "online": false,
- "uiAttached": false,
- "switches": 14,
- "labels": [
- "instB",
- "123.22.33.241"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_7_addInstance_D.json b/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_7_addInstance_D.json
deleted file mode 100644
index 3ba5fca6..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_7_addInstance_D.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "instD",
- "ip": "123.33.44.55",
- "online": true,
- "uiAttached": false,
- "switches": 133,
- "labels": [
- "instD",
- "123.33.44.55"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_8_addInstance_B.json b/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_8_addInstance_B.json
deleted file mode 100644
index 4313116d..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_8_addInstance_B.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "instB",
- "ip": "123.22.33.241",
- "online": true,
- "uiAttached": false,
- "switches": 14,
- "labels": [
- "instB",
- "123.22.33.241"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_9_addInstance_E.json b/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_9_addInstance_E.json
deleted file mode 100644
index 18000937..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/ev_9_addInstance_E.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "instE",
- "ip": "123.5.5.5",
- "online": true,
- "uiAttached": false,
- "switches": 5,
- "labels": [
- "instE",
- "123.5.5.5"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/scenario.json b/framework/src/onos/web/gui/src/test/_karma/ev/migrate/scenario.json
deleted file mode 100644
index 5ba25204..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/migrate/scenario.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "comments": [
- "Used during the migration of old GUI (topo.js==3.1KLOC) to Angular"
- ],
- "title": "Migration Helper",
- "params": {
- "lastAuto": 0
- },
- "description": [
- "Do what you need to..."
- ]
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_1_addInstanceA.json b/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_1_addInstanceA.json
deleted file mode 100644
index ea1fa0ff..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_1_addInstanceA.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "myInstA",
- "ip": "192.168.56.101",
- "online": true,
- "uiAttached": true,
- "switches": 2,
- "labels": [
- "myInstA",
- "192.168.56.101"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_2_addInstanceB.json b/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_2_addInstanceB.json
deleted file mode 100644
index 5b09dec7..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_2_addInstanceB.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "myInstB",
- "ip": "192.168.56.102",
- "online": true,
- "uiAttached": false,
- "switches": 4,
- "labels": [
- "myInstB",
- "192.168.56.102"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_3_addDevice_08.json b/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_3_addDevice_08.json
deleted file mode 100644
index 029dec10..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_3_addDevice_08.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0008",
- "type": "switch",
- "online": true,
- "master": "myInstA",
- "labels": [
- "",
- "switch-8",
- "0000ffffffff0008"
- ],
- "metaUi": {
- "x": 520,
- "y": 350
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_4_addDevice_03.json b/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_4_addDevice_03.json
deleted file mode 100644
index 39aa5cfd..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_4_addDevice_03.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0003",
- "type": "switch",
- "online": true,
- "master": "myInstB",
- "labels": [
- "",
- "switch-3",
- "0000ffffffff0003"
- ],
- "metaUi": {
- "x": 800,
- "y": 280
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_5_addLink_03_08.json b/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_5_addLink_03_08.json
deleted file mode 100644
index 755255a2..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_5_addLink_03_08.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0003/21-of:0000ffffffff0008/20",
- "type": "direct",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffff0003",
- "srcPort": "21",
- "dst": "of:0000ffffffff0008",
- "dstPort": "20",
- "props" : {
- "BW": "70 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_6_addHost_03.json b/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_6_addHost_03.json
deleted file mode 100644
index c357942e..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_6_addHost_03.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "0E:2A:69:30:13:86/-1",
- "ingress": "0E:2A:69:30:13:86/-1/0-of:0000ffffffff0003/2",
- "egress": "of:0000ffffffff0003/2-0E:2A:69:30:13:86/-1/0",
- "cp": [
- { "device": "of:0000ffffffff0003", "port": 2 },
- { "device": "of:0000ffffffff0008", "port": 4 }
- ],
- "labels": [
- "192.168.1.201",
- "0E:2A:69:30:13:86"
- ],
- "props": {
- "routerId": "router-one"
- },
- "type": "router"
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_7_addHost_08.json b/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_7_addHost_08.json
deleted file mode 100644
index 43f6b2ba..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/ev_7_addHost_08.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "A6:96:E5:03:52:5F/-1",
- "ingress": "A6:96:E5:03:52:5F/-1/0-of:0000ffffffff0008/1",
- "egress": "of:0000ffffffff0008/1-A6:96:E5:03:52:5F/-1/0",
- "cp": [
- { "device": "of:0000ffffffff0008", "port": 1 }
- ],
- "labels": [
- "192.168.1.202",
- "A6:96:E5:03:52:5F"
- ],
- "props": {
- "routerId": "router-one"
- },
- "type": "router"
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/scenario.json b/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/scenario.json
deleted file mode 100644
index a720ab86..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/multiHomed/scenario.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "comments": [
- "Add two devices and one link (auto), and two 'hosts'.",
- "But the hosts are the same box with two NICs."
- ],
- "title": "Multi-Homed Scenario",
- "params": {
- "lastAuto": 0
- },
- "description": [
- "Simple sequence of events...",
- "",
- "1. add instance A",
- "2. add instance B",
- "3. add device [8]",
- "4. add device [3]",
- "5. add link [3] --> [8]",
- "6. add host (to [3])",
- "7. add host (to [8])"
- ]
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_10_addLink_2-2b.json b/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_10_addLink_2-2b.json
deleted file mode 100644
index 10f868fa..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_10_addLink_2-2b.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "2-2b",
- "type": "direct",
- "online": true,
- "linkWidth": 2,
- "src": "sw2",
- "srcPort": "20",
- "dst": "sw2b",
- "dstPort": "10"
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_11_addLink_3-3b.json b/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_11_addLink_3-3b.json
deleted file mode 100644
index deaf0a14..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_11_addLink_3-3b.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "3-3b",
- "type": "direct",
- "online": true,
- "linkWidth": 2,
- "src": "sw3",
- "srcPort": "20",
- "dst": "sw3b",
- "dstPort": "10"
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_12_addLink_4-4b.json b/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_12_addLink_4-4b.json
deleted file mode 100644
index ff47e5cd..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_12_addLink_4-4b.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "4-4b",
- "type": "direct",
- "online": true,
- "linkWidth": 2,
- "src": "sw4",
- "srcPort": "20",
- "dst": "sw4b",
- "dstPort": "10"
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_1_addDevice_sw1b.json b/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_1_addDevice_sw1b.json
deleted file mode 100644
index 780f0aaf..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_1_addDevice_sw1b.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "sw1b",
- "type": "roadm",
- "online": true,
- "labels": [
- "",
- "sw-1b",
- "00001b"
- ],
- "metaUi": {
- "x": 200,
- "y": 200
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_2_addDevice_sw2b.json b/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_2_addDevice_sw2b.json
deleted file mode 100644
index e0dba2b3..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_2_addDevice_sw2b.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "sw2b",
- "type": "roadm",
- "online": true,
- "labels": [
- "",
- "sw-2b",
- "00002b"
- ],
- "metaUi": {
- "x": 800,
- "y": 200
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_3_addDevice_sw3b.json b/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_3_addDevice_sw3b.json
deleted file mode 100644
index 38d066a7..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_3_addDevice_sw3b.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "sw3b",
- "type": "roadm",
- "online": true,
- "labels": [
- "",
- "sw-3b",
- "00003b"
- ],
- "metaUi": {
- "x": 200,
- "y": 600
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_4_addDevice_sw4b.json b/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_4_addDevice_sw4b.json
deleted file mode 100644
index bece53db..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_4_addDevice_sw4b.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "sw4b",
- "type": "roadm",
- "online": true,
- "labels": [
- "",
- "sw-4b",
- "00004b"
- ],
- "metaUi": {
- "x": 800,
- "y": 600
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_5_addDevice_sw1.json b/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_5_addDevice_sw1.json
deleted file mode 100644
index a05f3f91..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_5_addDevice_sw1.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "sw1",
- "type": "switch",
- "online": true,
- "labels": [
- "",
- "sw-1",
- "00001"
- ],
- "metaUi": {
- "x": 200,
- "y": 200
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_6_addDevice_sw2.json b/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_6_addDevice_sw2.json
deleted file mode 100644
index 27e3b14f..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_6_addDevice_sw2.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "sw2",
- "type": "switch",
- "online": true,
- "labels": [
- "",
- "sw-2",
- "00002"
- ],
- "metaUi": {
- "x": 800,
- "y": 200
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_7_addDevice_sw3.json b/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_7_addDevice_sw3.json
deleted file mode 100644
index 992b964d..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_7_addDevice_sw3.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "sw3",
- "type": "switch",
- "online": true,
- "labels": [
- "",
- "sw-3",
- "00003"
- ],
- "metaUi": {
- "x": 200,
- "y": 600
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_8_addDevice_sw4.json b/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_8_addDevice_sw4.json
deleted file mode 100644
index 2c33d501..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_8_addDevice_sw4.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "sw4",
- "type": "switch",
- "online": true,
- "labels": [
- "",
- "sw-4",
- "00004"
- ],
- "metaUi": {
- "x": 800,
- "y": 600
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_9_addLink_1-1b.json b/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_9_addLink_1-1b.json
deleted file mode 100644
index 57e97069..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/ev_9_addLink_1-1b.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "1-1b",
- "type": "direct",
- "online": true,
- "linkWidth": 2,
- "src": "sw1",
- "srcPort": "20",
- "dst": "sw1b",
- "dstPort": "10"
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/scenario.json b/framework/src/onos/web/gui/src/test/_karma/ev/oblique/scenario.json
deleted file mode 100644
index ff55c183..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/oblique/scenario.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "title": "Oblique Test Scenario",
- "params": {
- "lastAuto": 8
- },
- "description": [
- "Test Scenario for Oblique view"
- ]
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_10_updateHost_03.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_10_updateHost_03.json
deleted file mode 100644
index 3a3ea9e8..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_10_updateHost_03.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "updateHost",
- "payload": {
- "id": "0E:2A:69:30:13:86/-1",
- "ingress": "0E:2A:69:30:13:86/-1/0-of:0000ffffffff0003/2",
- "egress": "of:0000ffffffff0003/2-0E:2A:69:30:13:86/-1/0",
- "cp": {
- "device": "of:0000ffffffff0003",
- "port": 2
- },
- "labels": [
- "10.0.0.13",
- "0E:2A:69:30:13:86"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_11_updateHost_08.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_11_updateHost_08.json
deleted file mode 100644
index 0fb56fae..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_11_updateHost_08.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "updateHost",
- "payload": {
- "id": "A6:96:E5:03:52:5F/-1",
- "ingress": "A6:96:E5:03:52:5F/-1/0-of:0000ffffffff0008/1",
- "egress": "of:0000ffffffff0008/1-A6:96:E5:03:52:5F/-1/0",
- "cp": {
- "device": "of:0000ffffffff0008",
- "port": 1
- },
- "labels": [
- "10.0.0.17",
- "A6:96:E5:03:52:5F"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_12_updateLink.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_12_updateLink.json
deleted file mode 100644
index f09cc9bc..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_12_updateLink.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "updateLink",
- "payload": {
- "id": "of:0000ffffffff0003/21-of:0000ffffffff0008/20",
- "type": "direct",
- "linkWidth": 6,
- "src": "of:0000ffffffff0003",
- "srcPort": "21",
- "dst": "of:0000ffffffff0008",
- "dstPort": "20",
- "props" : {
- "BW": "512 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_13_updateLink.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_13_updateLink.json
deleted file mode 100644
index 447ded37..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_13_updateLink.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "updateLink",
- "payload": {
- "id": "of:0000ffffffff0003/21-of:0000ffffffff0008/20",
- "type": "direct",
- "linkWidth": 2,
- "src": "of:0000ffffffff0003",
- "srcPort": "21",
- "dst": "of:0000ffffffff0008",
- "dstPort": "20",
- "props" : {
- "BW": "80 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_14_removeLink.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_14_removeLink.json
deleted file mode 100644
index 96018f33..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_14_removeLink.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "event": "removeLink",
- "payload": {
- "id": "of:0000ffffffff0003/21-of:0000ffffffff0008/20",
- "type": "direct",
- "linkWidth": 2,
- "src": "of:0000ffffffff0003",
- "srcPort": "21",
- "dst": "of:0000ffffffff0008",
- "dstPort": "20",
- "props" : {
- "BW": "80 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_15_removeHost_08.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_15_removeHost_08.json
deleted file mode 100644
index 5320841f..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_15_removeHost_08.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "removeHost",
- "payload": {
- "id": "A6:96:E5:03:52:5F/-1",
- "ingress": "A6:96:E5:03:52:5F/-1/0-of:0000ffffffff0008/1",
- "egress": "of:0000ffffffff0008/1-A6:96:E5:03:52:5F/-1/0",
- "cp": {
- "device": "of:0000ffffffff0008",
- "port": 1
- },
- "labels": [
- "10.0.0.17",
- "A6:96:E5:03:52:5F"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_16_removeDevice_03.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_16_removeDevice_03.json
deleted file mode 100644
index 9df9d613..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_16_removeDevice_03.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "event": "removeDevice",
- "payload": {
- "id": "of:0000ffffffff0003",
- "type": "switch",
- "online": false,
- "location": {
- "type": "latlng",
- "lat": 40.7127,
- "lng": -74.0059
- },
- "labels": [
- "",
- "sw-3",
- "0000ffffffff0003"
- ],
- "metaUi": {
- "x": 800,
- "y": 280
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_17_removeDevice_08.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_17_removeDevice_08.json
deleted file mode 100644
index 15e711d0..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_17_removeDevice_08.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "event": "removeDevice",
- "payload": {
- "id": "of:0000ffffffff0008",
- "type": "switch",
- "online": false,
- "master": "myInstA",
- "location": {
- "type": "latlng",
- "lat": 37.7833,
- "lng": -122.4167
- },
- "labels": [
- "",
- "sw-8",
- "0000ffffffff0008"
- ],
- "metaUi": {
- "x": 520,
- "y": 350
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_1_addInstanceA.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_1_addInstanceA.json
deleted file mode 100644
index ea1fa0ff..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_1_addInstanceA.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "myInstA",
- "ip": "192.168.56.101",
- "online": true,
- "uiAttached": true,
- "switches": 2,
- "labels": [
- "myInstA",
- "192.168.56.101"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_2_addInstanceB.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_2_addInstanceB.json
deleted file mode 100644
index 5b09dec7..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_2_addInstanceB.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "myInstB",
- "ip": "192.168.56.102",
- "online": true,
- "uiAttached": false,
- "switches": 4,
- "labels": [
- "myInstB",
- "192.168.56.102"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_3_addDevice_08.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_3_addDevice_08.json
deleted file mode 100644
index 9c16f2b4..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_3_addDevice_08.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0008",
- "type": "switch",
- "online": false,
- "master": "myInstA",
- "location": {
- "type": "latlng",
- "lat": 37.7833,
- "lng": -122.4167
- },
- "labels": [
- "",
- "sw-8",
- "0000ffffffff0008"
- ],
- "metaUi": {
- "x": 520,
- "y": 350
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_4_addDevice_03.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_4_addDevice_03.json
deleted file mode 100644
index 0b8f0447..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_4_addDevice_03.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0003",
- "type": "switch",
- "online": false,
- "master": "myInstB",
- "location": {
- "type": "latlng",
- "lat": 40.7127,
- "lng": -74.0059
- },
- "labels": [
- "",
- "sw-3",
- "0000ffffffff0003"
- ],
- "metaUi": {
- "x": 800,
- "y": 280
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_5_updateDevice_08_online.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_5_updateDevice_08_online.json
deleted file mode 100644
index 3b422833..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_5_updateDevice_08_online.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "updateDevice",
- "payload": {
- "id": "of:0000ffffffff0008",
- "type": "switch",
- "online": true,
- "master": "myInstA",
- "labels": [
- "",
- "switch-8",
- "0000ffffffff0008"
- ],
- "metaUi": {
- "x": 520,
- "y": 350
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_6_updateDevice_03_online.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_6_updateDevice_03_online.json
deleted file mode 100644
index d05aea66..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_6_updateDevice_03_online.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "updateDevice",
- "payload": {
- "id": "of:0000ffffffff0003",
- "type": "switch",
- "online": true,
- "master": "myInstB",
- "labels": [
- "",
- "switch-3",
- "0000ffffffff0003"
- ],
- "metaUi": {
- "x": 800,
- "y": 280
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_7_addLink_03_08.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_7_addLink_03_08.json
deleted file mode 100644
index 755255a2..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_7_addLink_03_08.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0003/21-of:0000ffffffff0008/20",
- "type": "direct",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffff0003",
- "srcPort": "21",
- "dst": "of:0000ffffffff0008",
- "dstPort": "20",
- "props" : {
- "BW": "70 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_8_addHost_03.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_8_addHost_03.json
deleted file mode 100644
index fba7015a..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_8_addHost_03.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "0E:2A:69:30:13:86/-1",
- "ingress": "0E:2A:69:30:13:86/-1/0-of:0000ffffffff0003/2",
- "egress": "of:0000ffffffff0003/2-0E:2A:69:30:13:86/-1/0",
- "cp": {
- "device": "of:0000ffffffff0003",
- "port": 2
- },
- "labels": [
- "unknown",
- "0E:2A:69:30:13:86"
- ],
- "metaUi": {
- "Xx": 800,
- "Xy": 180
- },
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_9_addHost_08.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_9_addHost_08.json
deleted file mode 100644
index eff767dd..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/ev_9_addHost_08.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "A6:96:E5:03:52:5F/-1",
- "ingress": "A6:96:E5:03:52:5F/-1/0-of:0000ffffffff0008/1",
- "egress": "of:0000ffffffff0008/1-A6:96:E5:03:52:5F/-1/0",
- "cp": {
- "device": "of:0000ffffffff0008",
- "port": 1
- },
- "labels": [
- "unknown",
- "A6:96:E5:03:52:5F"
- ],
- "metaUi": {
- "Xx": 520,
- "Xy": 250
- },
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/simple/scenario.json b/framework/src/onos/web/gui/src/test/_karma/ev/simple/scenario.json
deleted file mode 100644
index 38daa5c7..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/simple/scenario.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "comments": [
- "Add two devices and one link (auto), and two hosts.",
- "Then update the two hosts (with IP address labels)."
- ],
- "title": "Simple Startup Scenario",
- "params": {
- "lastAuto": 0
- },
- "description": [
- "Simple sequence of events...",
- "",
- "1. add instance A",
- "2. add instance B",
- "3. add device [8] (offline)",
- "4. add device [3] (offline)",
- "5. update device [8] (online, label3 change)",
- "6. update device [3] (online, label3 change)",
- "7. add link [3] --> [8]",
- "8. add host (to [3])",
- "9. add host (to [8])",
- "10. update host[3] (IP now 10.0.0.13)",
- "11. update host[8] (IP now 10.0.0.17)",
- "12. update link (increase width, update props)",
- "13. update link (reduce width, update props)",
- "14. remove link",
- "15. remove host (10.0.0.17)",
- "16. remove device [3]"
- ]
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_10_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_10_onos.json
deleted file mode 100644
index e07a3c71..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_10_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff04",
- "type": "roadm",
- "online": true,
- "labels": [
- "",
- "opt-4",
- "0000ffffffffff04"
- ],
- "metaUi": {
- "x": 322,
- "y": 138
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_11_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_11_onos.json
deleted file mode 100644
index 71efaf39..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_11_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff000A",
- "type": "switch",
- "online": true,
- "labels": [
- "",
- "sw-A",
- "0000ffffffff000A"
- ],
- "metaUi": {
- "x": 832,
- "y": 223
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_12_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_12_onos.json
deleted file mode 100644
index 7d9fe610..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_12_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0001",
- "type": "switch",
- "online": true,
- "labels": [
- "",
- "sw-1",
- "0000ffffffff0001"
- ],
- "metaUi": {
- "x": 167,
- "y": 403
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_13_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_13_onos.json
deleted file mode 100644
index 12937b42..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_13_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff01",
- "type": "roadm",
- "online": true,
- "labels": [
- "",
- "opt-1",
- "0000ffffffffff01"
- ],
- "metaUi": {
- "x": 227,
- "y": 460
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_14_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_14_onos.json
deleted file mode 100644
index c4f9790c..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_14_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0004",
- "type": "switch",
- "online": true,
- "labels": [
- "",
- "sw-4",
- "0000ffffffff0004"
- ],
- "metaUi": {
- "x": 317,
- "y": 73
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_15_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_15_onos.json
deleted file mode 100644
index 6a51e771..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_15_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff0A",
- "type": "roadm",
- "online": true,
- "labels": [
- "",
- "opt-A",
- "0000ffffffffff0A"
- ],
- "metaUi": {
- "x": 840,
- "y": 290
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_16_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_16_onos.json
deleted file mode 100644
index ba243ba5..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_16_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff09",
- "type": "roadm",
- "online": true,
- "labels": [
- "",
- "opt-9",
- "0000ffffffffff09"
- ],
- "metaUi": {
- "x": 1010,
- "y": 229
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_17_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_17_onos.json
deleted file mode 100644
index 1a7e24bc..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_17_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff02/20-of:0000ffffffffff05/10",
- "type": "optical",
- "online": true,
- "linkWidth": 4,
- "src": "of:0000ffffffffff02",
- "srcPort": "20",
- "dst": "of:0000ffffffffff05",
- "dstPort": "10",
- "props" : {
- "BW": "80 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_18_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_18_onos.json
deleted file mode 100644
index 5f9f7d7c..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_18_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff000A/2-of:0000ffffffffff0A/1",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffff000A",
- "srcPort": "2",
- "dst": "of:0000ffffffffff0A",
- "dstPort": "1",
- "props" : {
- "BW": "100 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_19_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_19_onos.json
deleted file mode 100644
index 5c928ee1..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_19_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff03/10-of:0000ffffffffff02/10",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffffff03",
- "srcPort": "10",
- "dst": "of:0000ffffffffff02",
- "dstPort": "10",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_1_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_1_onos.json
deleted file mode 100644
index bd07ae66..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_1_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff08",
- "type": "roadm",
- "online": true,
- "labels": [
- "",
- "opt-B",
- "0000ffffffffff08"
- ],
- "metaUi": {
- "x": 539,
- "y": 186
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_20_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_20_onos.json
deleted file mode 100644
index 44705d57..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_20_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff07/21-of:0000ffffffffff05/20",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffffff07",
- "srcPort": "21",
- "dst": "of:0000ffffffffff05",
- "dstPort": "20",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_21_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_21_onos.json
deleted file mode 100644
index 0fa67d21..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_21_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0001/2-of:0000ffffffffff01/1",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffff0001",
- "srcPort": "2",
- "dst": "of:0000ffffffffff01",
- "dstPort": "1",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_22_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_22_onos.json
deleted file mode 100644
index 0edde2a5..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_22_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff09/20-of:0000ffffffffff0A/20",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffffff09",
- "srcPort": "20",
- "dst": "of:0000ffffffffff0A",
- "dstPort": "20",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_23_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_23_onos.json
deleted file mode 100644
index 5443b417..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_23_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff07/30-of:0000ffffffffff08/20",
- "type": "optical",
- "online": true,
- "linkWidth": 4,
- "src": "of:0000ffffffffff07",
- "srcPort": "30",
- "dst": "of:0000ffffffffff08",
- "dstPort": "20",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_24_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_24_onos.json
deleted file mode 100644
index 5e7bb99b..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_24_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff02/10-of:0000ffffffffff01/10",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffffff02",
- "srcPort": "10",
- "dst": "of:0000ffffffffff01",
- "dstPort": "10",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_25_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_25_onos.json
deleted file mode 100644
index 1d0e9762..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_25_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff04/27-of:0000ffffffffff08/10",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffffff04",
- "srcPort": "27",
- "dst": "of:0000ffffffffff08",
- "dstPort": "10",
- "props" : {
- "BW": "30 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_26_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_26_onos.json
deleted file mode 100644
index 9f2cd7b2..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_26_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0003/2-of:0000ffffffffff03/1",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffff0003",
- "srcPort": "2",
- "dst": "of:0000ffffffffff03",
- "dstPort": "1",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_27_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_27_onos.json
deleted file mode 100644
index 23ccc226..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_27_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff09/1-of:0000ffffffff0009/2",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffffff09",
- "srcPort": "1",
- "dst": "of:0000ffffffff0009",
- "dstPort": "2",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_28_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_28_onos.json
deleted file mode 100644
index 84be94f5..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_28_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff03/30-of:0000ffffffffff04/10",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffffff03",
- "srcPort": "30",
- "dst": "of:0000ffffffffff04",
- "dstPort": "10",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_29_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_29_onos.json
deleted file mode 100644
index be5c6963..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_29_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff07/20-of:0000ffffffffff09/10",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffffff07",
- "srcPort": "20",
- "dst": "of:0000ffffffffff09",
- "dstPort": "10",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_2_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_2_onos.json
deleted file mode 100644
index b00c6890..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_2_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff03",
- "type": "roadm",
- "online": true,
- "labels": [
- "",
- "opt-3",
- "0000ffffffffff03"
- ],
- "metaUi": {
- "x": 95,
- "y": 225
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_30_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_30_onos.json
deleted file mode 100644
index 283d300d..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_30_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff0A/10-of:0000ffffffffff08/30",
- "type": "optical",
- "online": true,
- "linkWidth": 4,
- "src": "of:0000ffffffffff0A",
- "srcPort": "10",
- "dst": "of:0000ffffffffff08",
- "dstPort": "30",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_31_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_31_onos.json
deleted file mode 100644
index 965f76b1..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_31_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0004/2-of:0000ffffffffff04/1",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffff0004",
- "srcPort": "2",
- "dst": "of:0000ffffffffff04",
- "dstPort": "1",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_32_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_32_onos.json
deleted file mode 100644
index 3d90bfab..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_32_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff07/1-of:0000ffffffff0007/2",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffffff07",
- "srcPort": "1",
- "dst": "of:0000ffffffff0007",
- "dstPort": "2",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_33_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_33_onos.json
deleted file mode 100644
index 7b17ddaa..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_33_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "updateDevice",
- "payload": {
- "id": "of:0000ffffffffff06",
- "type": "roadm",
- "online": true,
- "labels": [
- "",
- "opt-6",
- "0000ffffffffff06"
- ],
- "metaUi": {
- "x": 336,
- "y": 254
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_34_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_34_onos.json
deleted file mode 100644
index a75a345c..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_34_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff06/20-of:0000ffffffffff05/30",
- "type": "optical",
- "online": true,
- "linkWidth": 4,
- "src": "of:0000ffffffffff06",
- "srcPort": "20",
- "dst": "of:0000ffffffffff05",
- "dstPort": "30",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_35_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_35_onos.json
deleted file mode 100644
index 055a80d7..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_35_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff03/20-of:0000ffffffffff06/10",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffffff03",
- "srcPort": "20",
- "dst": "of:0000ffffffffff06",
- "dstPort": "10",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_36_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_36_onos.json
deleted file mode 100644
index addcc6dc..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_36_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff06/30-of:0000ffffffffff08/10",
- "type": "optical",
- "online": true,
- "linkWidth": 4,
- "src": "of:0000ffffffffff06",
- "srcPort": "30",
- "dst": "of:0000ffffffffff08",
- "dstPort": "10",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_37_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_37_onos.json
deleted file mode 100644
index 42adbf93..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_37_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "updateDevice",
- "payload": {
- "id": "of:0000ffffffffff08",
- "type": "roadm",
- "online": false,
- "labels": [
- "",
- "opt-8",
- "0000ffffffffff08"
- ],
- "metaUi": {
- "x": 539,
- "y": 186
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_38_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_38_onos.json
deleted file mode 100644
index 5479f6e0..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_38_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "removeLink",
- "payload": {
- "id": "of:0000ffffffffff07/30-of:0000ffffffffff08/20",
- "type": "optical",
- "online": false,
- "linkWidth": 4,
- "src": "of:0000ffffffffff07",
- "srcPort": "30",
- "dst": "of:0000ffffffffff08",
- "dstPort": "20",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_39_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_39_onos.json
deleted file mode 100644
index 13c2cf22..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_39_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "removeLink",
- "payload": {
- "id": "of:0000ffffffffff04/27-of:0000ffffffffff08/10",
- "type": "optical",
- "online": false,
- "linkWidth": 2,
- "src": "of:0000ffffffffff04",
- "srcPort": "27",
- "dst": "of:0000ffffffffff08",
- "dstPort": "10",
- "props" : {
- "BW": "30 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_3_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_3_onos.json
deleted file mode 100644
index eb1da818..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_3_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0007",
- "type": "switch",
- "online": true,
- "labels": [
- "",
- "sw-7",
- "0000ffffffff0007"
- ],
- "metaUi": {
- "x": 890,
- "y": 375
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_40_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_40_onos.json
deleted file mode 100644
index 7a9c1e1e..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_40_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "removeLink",
- "payload": {
- "id": "of:0000ffffffffff0A/10-of:0000ffffffffff08/30",
- "type": "optical",
- "online": false,
- "linkWidth": 4,
- "src": "of:0000ffffffffff0A",
- "srcPort": "10",
- "dst": "of:0000ffffffffff08",
- "dstPort": "30",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_41_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_41_onos.json
deleted file mode 100644
index fb2fa458..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_41_onos.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "removeLink",
- "payload": {
- "id": "of:0000ffffffffff06/30-of:0000ffffffffff08/10",
- "type": "optical",
- "online": false,
- "linkWidth": 4,
- "src": "of:0000ffffffffff06",
- "srcPort": "30",
- "dst": "of:0000ffffffffff08",
- "dstPort": "10",
- "props" : {
- "BW": "70 G"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_4_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_4_onos.json
deleted file mode 100644
index 495d69b1..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_4_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0009",
- "type": "switch",
- "online": true,
- "labels": [
- "",
- "sw-9",
- "0000ffffffff0009"
- ],
- "metaUi": {
- "x": 1004,
- "y": 163
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_5_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_5_onos.json
deleted file mode 100644
index 0fe43412..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_5_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff02",
- "type": "roadm",
- "online": true,
- "labels": [
- "",
- "opt-2",
- "0000ffffffffff02"
- ],
- "metaUi": {
- "x": 211,
- "y": 307
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_6_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_6_onos.json
deleted file mode 100644
index 7557c026..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_6_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0003",
- "type": "switch",
- "online": true,
- "labels": [
- "",
- "sw-3",
- "0000ffffffff0003"
- ],
- "metaUi": {
- "x": 114,
- "y": 158
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_7_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_7_onos.json
deleted file mode 100644
index ed90ac3a..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_7_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff07",
- "type": "roadm",
- "online": true,
- "labels": [
- "",
- "opt-7",
- "0000ffffffffff07"
- ],
- "metaUi": {
- "x": 925,
- "y": 446
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_8_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_8_onos.json
deleted file mode 100644
index f9f429bc..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_8_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff06",
- "type": "roadm",
- "online": false,
- "labels": [
- "",
- "opt-6",
- "0000ffffffffff06"
- ],
- "metaUi": {
- "x": 336,
- "y": 254
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_9_onos.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_9_onos.json
deleted file mode 100644
index 72d8feda..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/ev_9_onos.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff05",
- "type": "roadm",
- "online": true,
- "labels": [
- "",
- "opt-5",
- "0000ffffffffff05"
- ],
- "metaUi": {
- "x": 539,
- "y": 524
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/startup/scenario.json b/framework/src/onos/web/gui/src/test/_karma/ev/startup/scenario.json
deleted file mode 100644
index 0fe1dd31..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/startup/scenario.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "comments": [
- "This scenario steps through adding devices and links.",
- "(Typical 'start-ip' of the view.)"
- ],
- "title": "Startup Scenario",
- "params": {
- "lastAuto": 32
- },
- "description": [
- "Loads 16 devices (10 optical, 6 packet)",
- " and their associated links.",
- "",
- "Press '=' to load initial events.",
- "Press '-' to fire further events...",
- " * 4 events - device online, add 3 links",
- " * 5 events - device offline, remove 4 links"
- ]
-} \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_10_addLink_s8-r8.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_10_addLink_s8-r8.json
deleted file mode 100644
index 190ce4ec..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_10_addLink_s8-r8.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0008/5-of:0000ffffffffff08/11",
- "type": "indirect",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffff0008",
- "srcPort": "5",
- "dst": "of:0000ffffffffff08",
- "dstPort": "11",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_11_addLink_s3-r3.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_11_addLink_s3-r3.json
deleted file mode 100644
index 34e074ab..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_11_addLink_s3-r3.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0003/6-of:0000ffffffffff03/8",
- "type": "indirect",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffff0003",
- "srcPort": "6",
- "dst": "of:0000ffffffffff03",
- "dstPort": "8",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_12_addLink_r8-r3.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_12_addLink_r8-r3.json
deleted file mode 100644
index 8d97902e..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_12_addLink_r8-r3.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff08/13-of:0000ffffffffff03/17",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffffff08",
- "srcPort": "13",
- "dst": "of:0000ffffffffff03",
- "dstPort": "17",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_13_addHost_h3.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_13_addHost_h3.json
deleted file mode 100644
index a5ee5c98..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_13_addHost_h3.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "0E:2A:69:30:13:86/-1",
- "ingress": "0E:2A:69:30:13:86/-1/0-of:0000ffffffff0003/101",
- "egress": "of:0000ffffffff0003/101-0E:2A:69:30:13:86/-1/0",
- "cp": {
- "device": "of:0000ffffffff0003",
- "port": 101
- },
- "labels": [
- "1.2.3.4",
- "0E:2A:69:30:13:86"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_14_addHost_h7.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_14_addHost_h7.json
deleted file mode 100644
index 262b8f21..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_14_addHost_h7.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "0E:2A:69:30:13:88/-1",
- "ingress": "0E:2A:69:30:13:88/-1/0-of:0000ffffffff0007/102",
- "egress": "of:0000ffffffff0007/102-0E:2A:69:30:13:86/-1/0",
- "cp": {
- "device": "of:0000ffffffff0007",
- "port": 102
- },
- "labels": [
- "4.5.7.6",
- "0E:2A:69:30:13:88"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_15_addHost_h8.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_15_addHost_h8.json
deleted file mode 100644
index 65cd825a..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_15_addHost_h8.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "addHost",
- "payload": {
- "id": "0E:2A:69:30:13:aa/-1",
- "ingress": "0E:2A:69:30:13:aa/-1/0-of:0000ffffffff0008/103",
- "egress": "of:0000ffffffff0008/103-0E:2A:69:30:13:aa/-1/0",
- "cp": {
- "device": "of:0000ffffffff0008",
- "port": 103
- },
- "labels": [
- "12.13.14.15",
- "0E:2A:69:30:13:aa"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_16_addDevice_r4.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_16_addDevice_r4.json
deleted file mode 100644
index fc354f09..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_16_addDevice_r4.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff04",
- "type": "roadm",
- "online": true,
- "master": "myInstB",
- "labels": [
- "",
- "opt-4",
- "0000ffffffffff04"
- ],
- "metaUi": {
- "x": 1100,
- "y": 600
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_17_addLink_r8-r4.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_17_addLink_r8-r4.json
deleted file mode 100644
index d32efef5..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_17_addLink_r8-r4.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffffff08/99-of:0000ffffffffff04/65535",
- "type": "optical",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffffff08",
- "srcPort": "99",
- "dst": "of:0000ffffffffff04",
- "dstPort": "65535",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_18_showTraffic_primary.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_18_showTraffic_primary.json
deleted file mode 100644
index 7eafcf10..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_18_showTraffic_primary.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "event": "showTraffic",
- "sid": 1,
- "payload": {
- "paths": [
- {
- "class": "primary animated",
- "links": [
- "0E:2A:69:30:13:86/-1/0-of:0000ffffffff0003/101",
- "0E:2A:69:30:13:aa/-1/0-of:0000ffffffff0008/103",
- "of:0000ffffffff0003/6-of:0000ffffffffff03/8",
- "of:0000ffffffff0008/5-of:0000ffffffffff08/11"
- ],
- "labels": [
- "20 bytes",
- "20 bytes",
- "24 bytes",
- "some bits"
- ]
- },
- {
- "class": "primary optical animated",
- "links": [
- "of:0000ffffffffff08/13-of:0000ffffffffff03/17",
- "of:0000ffffffffff08/99-of:0000ffffffffff04/65535"
- ],
- "labels": [
- "foo bars",
- "boo fars"
- ]
- }
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_19_showTraffic_secondary.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_19_showTraffic_secondary.json
deleted file mode 100644
index 1f60c72a..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_19_showTraffic_secondary.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "event": "showTraffic",
- "sid": 1,
- "payload": {
- "paths": [
- {
- "class": "secondary animated",
- "links": [
- "0E:2A:69:30:13:86/-1/0-of:0000ffffffff0003/101",
- "0E:2A:69:30:13:aa/-1/0-of:0000ffffffff0008/103",
- "of:0000ffffffff0003/6-of:0000ffffffffff03/8",
- "of:0000ffffffff0008/5-of:0000ffffffffff08/11"
- ],
- "labels": [
- "35 bytes",
- "35 bytes",
- "24 bytes",
- "some bits"
- ]
- },
- {
- "class": "secondary optical animated",
- "links": [
- "of:0000ffffffffff08/13-of:0000ffffffffff03/17",
- "of:0000ffffffffff08/99-of:0000ffffffffff04/65535"
- ],
- "labels": [
- "foo bars",
- "bar foos"
- ]
- }
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_1_addInstance.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_1_addInstance.json
deleted file mode 100644
index c2eda412..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_1_addInstance.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "event": "addInstance",
- "payload": {
- "id": "myInstA",
- "ip": "192.168.56.101",
- "online": true,
- "uiAttached": true,
- "switches": 4,
- "labels": [
- "myInstA",
- "192.168.56.101"
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_20_showTraffic_allMix.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_20_showTraffic_allMix.json
deleted file mode 100644
index 0526274c..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_20_showTraffic_allMix.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "event": "showTraffic",
- "sid": 1,
- "payload": {
- "paths": [
- {
- "class": "primary animated",
- "links": [
- "of:0000ffffffff0008/21-of:0000ffffffff0003/1"
- ],
- "labels": ["primary"]
- },
- {
- "class": "secondary animated",
- "links": [
- "of:0000ffffffff0003/9-of:0000ffffffff0007/2",
- "of:0000ffffffff0008/4-of:0000ffffffff0007/3",
- "of:0000ffffffff0003/6-of:0000ffffffffff03/8",
- "of:0000ffffffff0008/5-of:0000ffffffffff08/11"
- ],
- "labels": ["secondary", "secondo", "deux", "zwei"]
- },
- {
- "class": "secondary optical animated",
- "links": [
- "of:0000ffffffffff08/99-of:0000ffffffffff04/65535"
- ],
- "labels": ["secondary optical"]
- },
- {
- "class": "primary optical animated",
- "links": [
- "of:0000ffffffffff08/13-of:0000ffffffffff03/17"
- ],
- "labels": ["primary optical"]
- }
- ]
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_21_showTraffic_none.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_21_showTraffic_none.json
deleted file mode 100644
index 5f8aae0c..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_21_showTraffic_none.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "event": "showTraffic",
- "sid": 1,
- "payload": {
- "paths": []
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_22_updateDevice_s7offline.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_22_updateDevice_s7offline.json
deleted file mode 100644
index 2f9d567c..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_22_updateDevice_s7offline.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "updateDevice",
- "payload": {
- "id": "of:0000ffffffff0007",
- "type": "switch",
- "online": false,
- "labels": [
- "",
- "sw-7",
- "0000ffffffff0007"
- ],
- "metaUi": {
- "x": 530,
- "y": 330
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_23_updateDevice_s7online.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_23_updateDevice_s7online.json
deleted file mode 100644
index a409b614..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_23_updateDevice_s7online.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "updateDevice",
- "payload": {
- "id": "of:0000ffffffff0007",
- "type": "switch",
- "online": true,
- "labels": [
- "",
- "sw-7",
- "0000ffffffff0007"
- ],
- "metaUi": {
- "x": 530,
- "y": 330
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_24_removeDevice_s8.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_24_removeDevice_s8.json
deleted file mode 100644
index 0478da1d..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_24_removeDevice_s8.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "removeDevice",
- "payload": {
- "id": "of:0000ffffffff0008",
- "type": "switch",
- "online": false,
- "labels": [
- "",
- "sw-8",
- "0000ffffffff0008"
- ],
- "metaUi": {
- "x": 734,
- "y": 477
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_25_addDevice_s8.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_25_addDevice_s8.json
deleted file mode 100644
index 16f530fa..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_25_addDevice_s8.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0008",
- "type": "switch",
- "online": true,
- "master": "myInstA",
- "labels": [
- "",
- "sw-8",
- "0000ffffffff0008"
- ],
- "metaUi": {
- "x": 734,
- "y": 477
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_26_removeHost_h7.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_26_removeHost_h7.json
deleted file mode 100644
index 69fc2bcb..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_26_removeHost_h7.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "event": "removeHost",
- "payload": {
- "id": "0E:2A:69:30:13:88/-1",
- "ingress": "0E:2A:69:30:13:88/-1/0-of:0000ffffffff0007/101",
- "egress": "of:0000ffffffff0007/101-0E:2A:69:30:13:86/-1/0",
- "cp": {
- "device": "of:0000ffffffff0007",
- "port": 101
- },
- "labels": [
- "4.5.7.6",
- "0E:2A:69:30:13:88"
- ],
- "props": {}
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_2_addDevice_s8.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_2_addDevice_s8.json
deleted file mode 100644
index 16f530fa..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_2_addDevice_s8.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0008",
- "type": "switch",
- "online": true,
- "master": "myInstA",
- "labels": [
- "",
- "sw-8",
- "0000ffffffff0008"
- ],
- "metaUi": {
- "x": 734,
- "y": 477
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_3_addDevice_s3.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_3_addDevice_s3.json
deleted file mode 100644
index 60f687e3..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_3_addDevice_s3.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0003",
- "type": "switch",
- "online": true,
- "master": "myInstA",
- "labels": [
- "",
- "sw-3",
- "0000ffffffff0003"
- ],
- "metaUi": {
- "x": 282,
- "y": 503
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_4_addDevice_s7.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_4_addDevice_s7.json
deleted file mode 100644
index e4681187..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_4_addDevice_s7.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffff0007",
- "type": "switch",
- "online": true,
- "master": "myInstA",
- "labels": [
- "",
- "sw-7",
- "0000ffffffff0007"
- ],
- "metaUi": {
- "x": 530,
- "y": 330
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_5_addDevice_r8.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_5_addDevice_r8.json
deleted file mode 100644
index 6fa87b19..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_5_addDevice_r8.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff08",
- "type": "roadm",
- "online": true,
- "master": "myInstA",
- "labels": [
- "",
- "opt-8",
- "0000ffffffffff08"
- ],
- "metaUi": {
- "x": 734,
- "y": 577
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_6_addDevice_r3.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_6_addDevice_r3.json
deleted file mode 100644
index ed1b1cbf..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_6_addDevice_r3.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "event": "addDevice",
- "payload": {
- "id": "of:0000ffffffffff03",
- "type": "roadm",
- "online": true,
- "master": "myInstA",
- "labels": [
- "",
- "opt-3",
- "0000ffffffffff03"
- ],
- "metaUi": {
- "x": 282,
- "y": 603
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_7_addLink_s3-s7.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_7_addLink_s3-s7.json
deleted file mode 100644
index 00583d4d..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_7_addLink_s3-s7.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0003/9-of:0000ffffffff0007/2",
- "type": "direct",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffff0003",
- "srcPort": "9",
- "dst": "of:0000ffffffff0007",
- "dstPort": "2",
- "props" : {
- "BW": "120 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_8_addLink_s8-s3.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_8_addLink_s8-s3.json
deleted file mode 100644
index 84531de8..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_8_addLink_s8-s3.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0008/21-of:0000ffffffff0003/1",
- "type": "direct",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffff0008",
- "srcPort": "21",
- "dst": "of:0000ffffffff0003",
- "dstPort": "1",
- "props" : {
- "BW": "70 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_9_addLink_s8-s7.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_9_addLink_s8-s7.json
deleted file mode 100644
index a432a521..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/ev_9_addLink_s8-s7.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "event": "addLink",
- "payload": {
- "id": "of:0000ffffffff0008/4-of:0000ffffffff0007/3",
- "type": "direct",
- "online": true,
- "linkWidth": 2,
- "src": "of:0000ffffffff0008",
- "srcPort": "4",
- "dst": "of:0000ffffffff0007",
- "dstPort": "3",
- "props" : {
- "BW": "90 Gb"
- }
- }
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/scenario.json b/framework/src/onos/web/gui/src/test/_karma/ev/traffic/scenario.json
deleted file mode 100644
index 4e7ce4f8..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/ev/traffic/scenario.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "comments": [
- "Stepping through showTraffic",
- "NOTE: showTraffic event is deprecated",
- " This needs to be re-worked to use showHighlights"
- ],
- "title": "Show Traffic Scenario",
- "params": {
- "lastAuto": 15
- },
- "description": [
- "Primary, secondary and animated link visualizations."
- ]
-}
diff --git a/framework/src/onos/web/gui/src/test/_karma/mockserver.js b/framework/src/onos/web/gui/src/test/_karma/mockserver.js
deleted file mode 100644
index 23b468b0..00000000
--- a/framework/src/onos/web/gui/src/test/_karma/mockserver.js
+++ /dev/null
@@ -1,361 +0,0 @@
-#!/usr/bin/env node
-
-// === Mock Web Socket Server - for testing the topology view
-
-var fs = require('fs'),
- readline = require('readline'),
- http = require('http'),
- WebSocketServer = require('websocket').server,
- port = 8123,
- scenarioRoot = 'ev/',
- verbose = false, // show received messages from client
- extraVerbose = false; // show ALL received messages from client
-
-var lastcmd, // last command executed
- lastargs, // arguments to last command
- connection, // ws connection
- origin, // origin of connection
- scid, // scenario ID
- scdata, // scenario data
- scdone, // shows when scenario is over
- eventsById, // map of event file names
- maxEvno, // highest loaded event number
- autoLast, // last event number for auto-advance
- evno, // next event number
- evdata; // event data
-
-
-process.argv.forEach(function (val) {
- switch (val) {
- case '-v': verbose = true; break;
- case '-v!': extraVerbose = true; break;
- }
-});
-
-var scFiles = fs.readdirSync(scenarioRoot);
-console.log();
-console.log('Mock Server v1.0');
-if (verbose || extraVerbose) {
- console.log('Verbose=' + verbose, 'ExtraVerbose=' + extraVerbose);
-}
-console.log('================');
-listScenarios();
-
-var rl = readline.createInterface(process.stdin, process.stdout);
-rl.setPrompt('ws> ');
-
-
-var server = http.createServer(function(request, response) {
- console.log((new Date()) + ' Received request for ' + request.url);
- response.writeHead(404);
- response.end();
-});
-
-server.listen(port, function() {
- console.log((new Date()) + ' Server is listening on port ' + port);
-});
-
-server.on('listening', function () {
- console.log('OK, server is running');
- console.log('(? for help)');
-});
-
-var wsServer = new WebSocketServer({
- httpServer: server,
- // You should not use autoAcceptConnections for production
- // applications, as it defeats all standard cross-origin protection
- // facilities built into the protocol and the browser. You should
- // *always* verify the connection's origin and decide whether or not
- // to accept it.
- autoAcceptConnections: false
-});
-
-function originIsAllowed(origin) {
- // put logic here to detect whether the specified origin is allowed.
- return true;
-}
-
-// displays the message if our arguments say we should
-function displayMsg(msg) {
- var ev = JSON.parse(msg);
- switch (ev.event) {
- case 'topoHeartbeat': return extraVerbose;
- default: return true;
- }
-}
-
-wsServer.on('request', function(request) {
- console.log(); // newline after prompt
- console.log("Origin: ", request.origin);
-
- if (!originIsAllowed(request.origin)) {
- // Make sure we only accept requests from an allowed origin
- request.reject();
- console.log((new Date()) + ' Connection from origin ' + request.origin + ' rejected.');
- return;
- }
-
- origin = request.origin;
- connection = request.accept(null, origin);
-
-
- console.log((new Date()) + ' Connection accepted.');
- rl.prompt();
-
- connection.on('message', function(message) {
- if (verbose || extraVerbose) {
- if (message.type === 'utf8') {
- if (displayMsg(message.utf8Data)) {
- console.log(); // newline after prompt
- console.log('Received Message: ' + message.utf8Data);
- }
- //connection.sendUTF(message.utf8Data);
- rl.prompt();
- }
- else if (message.type === 'binary') {
- console.log('Received Binary Message of ' + message.binaryData.length + ' bytes');
- //connection.sendBytes(message.binaryData);
- }
- }
- });
- connection.on('close', function(reasonCode, description) {
- console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.');
- connection = null;
- origin = null;
- });
-});
-
-
-setTimeout(doCli, 10); // allow async processes to write to stdout first
-
-function doCli() {
- rl.prompt();
- rl.on('line', function (line) {
- var words = line.trim().split(' '),
- cmd = words.shift(),
- str = words.join(' ');
-
- if (!cmd) {
- // repeat last command
- cmd = lastcmd;
- str = lastargs;
- }
-
- switch(cmd) {
- case 'l': listScenarios(); break;
- case 'c': connStatus(); break;
- case 'm': customMessage(str); break;
- case 's': setScenario(str); break;
- case 'a': autoAdvance(); break;
- case 'n': nextEvent(); break;
- case 'r': restartScenario(); break;
- case 'q': quit(); break;
- case '?': showHelp(); break;
- default: console.log('Say what?! (? for help)'); break;
- }
- lastcmd = cmd;
- lastargs = str;
- rl.prompt();
-
- }).on('close', function () {
- quit();
- });
-}
-
-var helptext = '\n' +
- 'l - list scenarios\n' +
- 'c - show connection status\n' +
- 'm {text} - send custom message to client\n' +
- 's {id} - load scenario {id}\n' +
- 's - show scenario status\n' +
- 'a - auto-send events\n' +
- 'n - send next event\n' +
- 'r - restart the scenario\n' +
- 'q - exit the server\n' +
- '? - display this help text\n';
-
-function showHelp() {
- console.log(helptext);
-}
-
-function listScenarios() {
- console.log('Scenarios ...');
- console.log(scFiles.join(', '));
- console.log();
-}
-
-function connStatus() {
- if (connection) {
- console.log('Connection from ' + origin + ' established.');
- } else {
- console.log('No connection.');
- }
-}
-
-function quit() {
- console.log('Quitting...');
- process.exit(0);
-}
-
-function customMessage(m) {
- if (connection) {
- console.log('Sending message: ' + m);
- connection.sendUTF(m);
- } else {
- console.warn('No current connection.');
- }
-}
-
-function showScenarioStatus() {
- var msg;
- if (!scid) {
- console.log('No scenario loaded.');
- } else {
- msg = 'Scenario: "' + scid + '", ' +
- (scdone ? 'DONE' : 'next event: ' + evno);
- console.log(msg);
- }
-}
-
-function scenarioPath(evno) {
- var file = evno ? ('/' + eventsById[evno].fname) : '/scenario.json';
- return scenarioRoot + scid + file;
-}
-
-
-function initScenario(verb) {
- console.log(); // get past prompt
- console.log(verb + ' scenario "' + scid + '"');
- console.log(scdata.title);
- scdata.description.forEach(function (d) {
- console.log(' ' + d);
- });
- autoLast = (scdata.params && scdata.params.lastAuto) || 0;
- if (autoLast) {
- console.log('[auto-advance: ' + autoLast + ']');
- }
- evno = 1;
- scdone = false;
- readEventFilenames();
-}
-
-function readEventFilenames() {
- var files = fs.readdirSync(scenarioRoot + scid),
- eventCount = 0,
- match, id, tag;
-
- maxEvno = 0;
-
- eventsById = {};
- files.forEach(function (f) {
- match = /^ev_(\d+)_(.*)\.json$/.exec(f);
- if (match) {
- eventCount++;
- id = match[1];
- tag = match[2];
- eventsById[id] = {
- fname: f,
- num: id,
- tag: tag
- };
- if (Number(id) > Number(maxEvno)) {
- maxEvno = id;
- }
- }
-
- });
- console.log('[' + eventCount + ' events loaded, (max=' + maxEvno + ')]');
-}
-
-function setScenario(id) {
- if (!id) {
- return showScenarioStatus();
- }
-
- evdata = null;
- scid = id;
- fs.readFile(scenarioPath(), 'utf8', function (err, data) {
- if (err) {
- console.warn('No scenario named "' + id + '"', err);
- scid = null;
- } else {
- scdata = JSON.parse(data);
- initScenario('Loading');
- }
- rl.prompt();
- });
-}
-
-function restartScenario() {
- if (!scid) {
- console.log('No scenario loaded.');
- } else {
- initScenario('Restarting');
- }
- rl.prompt();
-}
-
-function eventAvailable() {
- if (!scid) {
- console.log('No scenario loaded.');
- rl.prompt();
- return false;
- }
-
- if (!connection) {
- console.log('No current connection.');
- rl.prompt();
- return false;
- }
-
- if (Number(evno) > Number(maxEvno)) {
- scdone = true;
- console.log('Scenario DONE.');
- return false;
- }
- return true;
-}
-
-function autoAdvance() {
- if (evno > autoLast) {
- console.log('[auto done]');
- return;
- }
-
- // need to recurse with a callback, since each event send relies
- // on an async load of event data...
- function callback() {
- if (eventAvailable() && evno <= autoLast) {
- _nextEvent(callback);
- }
- }
-
- callback();
-}
-
-function nextEvent() {
- if (eventAvailable()) {
- _nextEvent();
- }
-}
-
-function _nextEvent(callback) {
- var path = scenarioPath(evno);
-
- fs.readFile(path, 'utf8', function (err, data) {
- if (err) {
- console.error('Oops error: ' + err);
- } else {
- evdata = JSON.parse(data);
- console.log(); // get past prompt
- console.log('Sending event #' + evno + ' [' + evdata.event +
- '] from ' + eventsById[evno].fname);
- connection.sendUTF(data);
- evno++;
- if (callback) {
- callback();
- }
- }
- rl.prompt();
- });
-}
diff --git a/framework/src/onos/web/gui/src/test/java/org/onosproject/ui/impl/README.txt b/framework/src/onos/web/gui/src/test/java/org/onosproject/ui/impl/README.txt
deleted file mode 100644
index 0d5844db..00000000
--- a/framework/src/onos/web/gui/src/test/java/org/onosproject/ui/impl/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-# Need to write unit tests for the GUI server-side code!
diff --git a/framework/src/onos/web/gui/src/test/webapp/_sdh/ng-examples/js/ch03-controllerSpec.js b/framework/src/onos/web/gui/src/test/webapp/_sdh/ng-examples/js/ch03-controllerSpec.js
deleted file mode 100644
index b2d4947b..00000000
--- a/framework/src/onos/web/gui/src/test/webapp/_sdh/ng-examples/js/ch03-controllerSpec.js
+++ /dev/null
@@ -1,35 +0,0 @@
-// Jasmine unit tests for ch03-controller.js
-
-describe('Controller: ListCtrl', function () {
- // instantiate a new version of my module before each test
- beforeEach(module('notesApp'));
-
- var ctrl;
-
- // before each unit test, instantiate a new instance of the controller
- beforeEach(inject(function ($controller) {
- ctrl = $controller('ListCtrl');
- }));
-
- it('should have items available on load', function () {
- expect(ctrl.items).toEqual([
- {id: 1, label: 'First', done: true},
- {id: 2, label: 'Second', done: false}
- ]);
- });
-
- it('should have highlight items based on state', function () {
- var item = {id: 1, label: 'First', done: true};
-
- var actualClass = ctrl.getDoneClass(item);
- expect(actualClass.finished).toBeTruthy();
- expect(actualClass.unfinished).toBeFalsy();
-
- item.done = false;
-
- actualClass = ctrl.getDoneClass(item);
- expect(actualClass.finished).toBeFalsy();
- expect(actualClass.unfinished).toBeTruthy();
- });
-
-}); \ No newline at end of file
diff --git a/framework/src/onos/web/gui/src/test/webapp/_sdh/ng-examples/js/ch09-01-time-agoSpec.js b/framework/src/onos/web/gui/src/test/webapp/_sdh/ng-examples/js/ch09-01-time-agoSpec.js
deleted file mode 100644
index a518ae2b..00000000
--- a/framework/src/onos/web/gui/src/test/webapp/_sdh/ng-examples/js/ch09-01-time-agoSpec.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// ch09-01-time-agoSpec.js
-
-describe('timeAgo Filter', function () {
- beforeEach(module('filterApp'));
-
- var filter;
- beforeEach(inject(function (timeAgoFilter) {
- filter = timeAgoFilter;
- }));
-
- it('should respond based on timestamp', function() {
- // The presence of new Date().getTime() makes it slightly
- // hard to unit test deterministically.
- // Ideally, we would inject a dateProvider into the timeAgo
- // filter, but we are trying to keep it simple for now.
- // So, we assume that our tests are fast enough to execute
- // in mere milliseconds.
-
- var t = new Date().getTime();
- t -= 10000;
- expect(filter(t)).toEqual('seconds ago');
- expect(filter(t, true)).toEqual('minutes ago');
-
- var fmin = t - 1000 * 60;
- expect(filter(fmin)).toEqual('minutes ago');
- expect(filter(fmin, true)).toEqual('minutes ago');
-
- var fhour = t - 1000 * 60 * 68;
- expect(filter(fhour)).toEqual('hours ago');
- expect(filter(fhour, true)).toEqual('hours ago');
-
- var fday = t - 1000 * 60 * 60 * 26;
- expect(filter(fday)).toEqual('days ago');
- expect(filter(fday, true)).toEqual('days ago');
-
- var fmon = t - 1000 * 60 * 60 * 24 * 34;
- expect(filter(fmon)).toEqual('months ago');
- expect(filter(fmon, true)).toEqual('months ago');
- });
-});