From a8f1c5ed03dff11a59a87a25ba2bde837963bb00 Mon Sep 17 00:00:00 2001 From: Jason Roehm Date: Tue, 15 Mar 2016 09:27:33 -0400 Subject: [PATCH 001/132] add 'triggers' keyword to gitlab-ci.yml 'only' and 'except' fields to allow control over whether triggers will cause jobs to run --- app/services/ci/create_builds_service.rb | 2 +- lib/ci/gitlab_ci_yaml_processor.rb | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/app/services/ci/create_builds_service.rb b/app/services/ci/create_builds_service.rb index 002f7ba1278..2cd51a7610f 100644 --- a/app/services/ci/create_builds_service.rb +++ b/app/services/ci/create_builds_service.rb @@ -1,7 +1,7 @@ module Ci class CreateBuildsService def execute(commit, stage, ref, tag, user, trigger_request, status) - builds_attrs = commit.config_processor.builds_for_stage_and_ref(stage, ref, tag) + builds_attrs = commit.config_processor.builds_for_stage_and_ref(stage, ref, tag, trigger_request) # check when to create next build builds_attrs = builds_attrs.select do |build_attrs| diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb index c89e1b51019..bc6fea9a286 100644 --- a/lib/ci/gitlab_ci_yaml_processor.rb +++ b/lib/ci/gitlab_ci_yaml_processor.rb @@ -26,8 +26,8 @@ module Ci validate! end - def builds_for_stage_and_ref(stage, ref, tag = false) - builds.select{|build| build[:stage] == stage && process?(build[:only], build[:except], ref, tag)} + def builds_for_stage_and_ref(stage, ref, tag = false, trigger_request = nil) + builds.select{|build| build[:stage] == stage && process?(build[:only], build[:except], ref, tag, trigger_request)} end def builds @@ -266,21 +266,21 @@ module Ci value.in?([true, false]) end - def process?(only_params, except_params, ref, tag) + def process?(only_params, except_params, ref, tag, trigger_request) if only_params.present? - return false unless matching?(only_params, ref, tag) + return false unless matching?(only_params, ref, tag, trigger_request) end if except_params.present? - return false if matching?(except_params, ref, tag) + return false if matching?(except_params, ref, tag, trigger_request) end true end - def matching?(patterns, ref, tag) + def matching?(patterns, ref, tag, trigger_request) patterns.any? do |pattern| - match_ref?(pattern, ref, tag) + match_ref?(pattern, ref, tag, trigger_request) end end @@ -289,6 +289,7 @@ module Ci return false if path && path != self.path return true if tag && pattern == 'tags' return true if !tag && pattern == 'branches' + return true if trigger_request != nil && pattern == 'triggers' if pattern.first == "/" && pattern.last == "/" Regexp.new(pattern[1...-1]) =~ ref From 6c1badbd108a12d1217596a3319f9bd3ca7319b8 Mon Sep 17 00:00:00 2001 From: Jason Roehm Date: Tue, 15 Mar 2016 09:35:38 -0400 Subject: [PATCH 002/132] add tests for only/except 'triggers' keyword --- spec/lib/ci/gitlab_ci_yaml_processor_spec.rb | 44 ++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb index fab6412d29f..b79b8147ce0 100644 --- a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb +++ b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb @@ -97,6 +97,28 @@ module Ci expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(0) end + it "returns builds if only has a triggers keyword specified and a trigger is provided" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: type, only: ["triggers"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "deploy", false, true).size).to eq(1) + end + + it "does not return builds if only has a triggers keyword specified and no trigger is provided" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: type, only: ["triggers"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(0) + end + it "returns builds if only has current repository path" do config = YAML.dump({ before_script: ["pwd"], @@ -203,6 +225,28 @@ module Ci expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(1) end + it "does not return builds if except has a triggers keyword specified and a trigger is provided" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: type, except: ["triggers"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "deploy", false, true).size).to eq(0) + end + + it "returns builds if except has a triggers keyword specified and no trigger is provided" do + config = YAML.dump({ + before_script: ["pwd"], + rspec: { script: "rspec", type: type, except: ["triggers"] } + }) + + config_processor = GitlabCiYamlProcessor.new(config, path) + + expect(config_processor.builds_for_stage_and_ref(type, "deploy").size).to eq(1) + end + it "does not return builds if except has current repository path" do config = YAML.dump({ before_script: ["pwd"], From b6ede127294fd0df63facb9a65791c018067db9f Mon Sep 17 00:00:00 2001 From: Jason Roehm Date: Tue, 15 Mar 2016 09:46:09 -0400 Subject: [PATCH 003/132] add some documentation for `triggers` keyword [ci skip] --- doc/ci/yaml/README.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md index 5158e3c387c..510fab7340a 100644 --- a/doc/ci/yaml/README.md +++ b/doc/ci/yaml/README.md @@ -286,7 +286,7 @@ There are a few rules that apply to the usage of refs policy: * `only` and `except` are inclusive. If both `only` and `except` are defined in a job specification, the ref is filtered by `only` and `except`. * `only` and `except` allow the use of regular expressions. -* `only` and `except` allow the use of special keywords: `branches` and `tags`. +* `only` and `except` allow the use of special keywords: `branches`, `tags`, and `triggers`. * `only` and `except` allow to specify a repository path to filter jobs for forks. @@ -303,6 +303,17 @@ job: - branches ``` +In this example, `job` will run only for refs that are tagged, or if a build is explicitly requested +via an API trigger. + +```yaml +job: + # use special keywords + only: + - tags + - triggers +``` + The repository path can be used to have jobs executed only for the parent repository and not forks: From c57c9c41e02907959a5dd78f2896734f0034aafc Mon Sep 17 00:00:00 2001 From: Jason Roehm Date: Tue, 15 Mar 2016 09:47:47 -0400 Subject: [PATCH 004/132] fix rubocop violation --- lib/ci/gitlab_ci_yaml_processor.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb index bc6fea9a286..610c56ddd92 100644 --- a/lib/ci/gitlab_ci_yaml_processor.rb +++ b/lib/ci/gitlab_ci_yaml_processor.rb @@ -289,7 +289,7 @@ module Ci return false if path && path != self.path return true if tag && pattern == 'tags' return true if !tag && pattern == 'branches' - return true if trigger_request != nil && pattern == 'triggers' + return true if !trigger_request.nil? && pattern == 'triggers' if pattern.first == "/" && pattern.last == "/" Regexp.new(pattern[1...-1]) =~ ref From cd5cbc0fd55a494247689cbfa5c9a3ef8bc8914e Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Tue, 15 Mar 2016 15:57:30 +0200 Subject: [PATCH 005/132] First draft on GitLab intro docs [ci skip] --- doc/intro/README.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 doc/intro/README.md diff --git a/doc/intro/README.md b/doc/intro/README.md new file mode 100644 index 00000000000..864d5812ed8 --- /dev/null +++ b/doc/intro/README.md @@ -0,0 +1,40 @@ +## Organize + +> Create projects and groups + +- [Create a new project](../gitlab-basics/create-project.md) +- [Create a new group](../gitlab-basics/create-group.md) + +## Prioritize + +> Create issues, labels, milestones, voting, and review issues + +- [Create a new issue](../gitlab-basics/create-issue.md) +- [Assign labels to issues](../workflow/labels.md) +- [Use milestones as an overview of your project's tracker](../workflow/milestones.md) +- Use voting to express your like/dislike to the issue in demand + +## Collaborate + +> Create merge requests, diffs, commits, and review code + +- [Create a new merge request](../gitlab-basics/add-merge-request.md) +- Review merge requests easily using inline comments + +## Deploy + +> Use built-in continuous integration in GitLab, or use your favorite CI tool. + +- [GitLab CI quick start guide](../ci/quick_start/README.md) + +## Install + +> Install and update your GitLab installation. + +- Install GitLab + - Omnibus + - [Source](../install/installation.md) +- Upgrade GitLab +- Learn about GitLab Omnibus architecture +- GitLab Omnibus configuration options +- Migrating from source installation to GitLab Omnibus From 588002d8c70da8b4c52e409c62a95a63e24b391b Mon Sep 17 00:00:00 2001 From: Jason Roehm Date: Tue, 15 Mar 2016 11:03:00 -0400 Subject: [PATCH 006/132] fixed missing argument in list --- lib/ci/gitlab_ci_yaml_processor.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb index 610c56ddd92..abab91ddf53 100644 --- a/lib/ci/gitlab_ci_yaml_processor.rb +++ b/lib/ci/gitlab_ci_yaml_processor.rb @@ -284,7 +284,7 @@ module Ci end end - def match_ref?(pattern, ref, tag) + def match_ref?(pattern, ref, tag, trigger_request) pattern, path = pattern.split('@', 2) return false if path && path != self.path return true if tag && pattern == 'tags' From 5adaabdd30388993ce547a782146d166d30cfc9b Mon Sep 17 00:00:00 2001 From: Jason Roehm Date: Tue, 15 Mar 2016 21:28:06 -0400 Subject: [PATCH 007/132] make conditional a bit clearer --- lib/ci/gitlab_ci_yaml_processor.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb index abab91ddf53..2228425076b 100644 --- a/lib/ci/gitlab_ci_yaml_processor.rb +++ b/lib/ci/gitlab_ci_yaml_processor.rb @@ -289,7 +289,7 @@ module Ci return false if path && path != self.path return true if tag && pattern == 'tags' return true if !tag && pattern == 'branches' - return true if !trigger_request.nil? && pattern == 'triggers' + return true if trigger_request.present? && pattern == 'triggers' if pattern.first == "/" && pattern.last == "/" Regexp.new(pattern[1...-1]) =~ ref From f108cedf4a46ee0f6114a5a8584a6080f4346e5b Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Thu, 17 Mar 2016 07:56:23 +0100 Subject: [PATCH 008/132] Add description of technical debt label in docs [ci skip] --- CONTRIBUTING.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7540fa1afcc..a946c2cd882 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,6 +16,7 @@ - [Issue tracker guidelines](#issue-tracker-guidelines) - [Issue weight](#issue-weight) - [Regression issues](#regression-issues) + - [Technical debt](#technical-debt) - [Merge requests](#merge-requests) - [Merge request guidelines](#merge-request-guidelines) - [Merge request description format](#merge-request-description-format) @@ -242,6 +243,25 @@ addressed. [8.3 Regressions]: https://gitlab.com/gitlab-org/gitlab-ce/issues/4127 [update the notes]: https://gitlab.com/gitlab-org/release-tools/blob/master/doc/pro-tips.md#update-the-regression-issue +### Technical debt + +In order to track things that can be improved in GitLab codebase, we created a +*technical debt* label in [issue tracker of CE][ce-tracker]. + +This label should be added to issues that describe things that can be improved, +shortcuts that has been taken, code that needs refactoring, features that need +additional attention, and all other things that have been left behind due to +high velocity of development. + +Everyone can create an issue (though you may need to ask for adding a specific +label, if you do not have permissions to do it by yourself), additional labels +can be combined with *technical debt* label, to make it easier to schedule the +improvements for a release. + +Issues with *technical debt* label have a same priority like issues that +describe a new features that can be introduced in GitLab, and should be +scheduled for a release by appropriate person. + ## Merge requests We welcome merge requests with fixes and improvements to GitLab code, tests, From 78530162261accaa01be0dc90bf8cd06acb210a6 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Thu, 17 Mar 2016 01:26:48 -0500 Subject: [PATCH 009/132] Add cropper library --- app/assets/javascripts/lib/cropper.js | 2993 +++++++++++++++++++++++ app/assets/stylesheets/application.scss | 1 + app/assets/stylesheets/cropper.css | 379 +++ 3 files changed, 3373 insertions(+) create mode 100644 app/assets/javascripts/lib/cropper.js create mode 100644 app/assets/stylesheets/cropper.css diff --git a/app/assets/javascripts/lib/cropper.js b/app/assets/javascripts/lib/cropper.js new file mode 100644 index 00000000000..805485904a5 --- /dev/null +++ b/app/assets/javascripts/lib/cropper.js @@ -0,0 +1,2993 @@ +/*! + * Cropper v2.3.0 + * https://github.com/fengyuanchen/cropper + * + * Copyright (c) 2014-2016 Fengyuan Chen and contributors + * Released under the MIT license + * + * Date: 2016-02-22T02:13:13.332Z + */ + +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as anonymous module. + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // Node / CommonJS + factory(require('jquery')); + } else { + // Browser globals. + factory(jQuery); + } +})(function ($) { + + 'use strict'; + + // Globals + var $window = $(window); + var $document = $(document); + var location = window.location; + var navigator = window.navigator; + var ArrayBuffer = window.ArrayBuffer; + var Uint8Array = window.Uint8Array; + var DataView = window.DataView; + var btoa = window.btoa; + + // Constants + var NAMESPACE = 'cropper'; + + // Classes + var CLASS_MODAL = 'cropper-modal'; + var CLASS_HIDE = 'cropper-hide'; + var CLASS_HIDDEN = 'cropper-hidden'; + var CLASS_INVISIBLE = 'cropper-invisible'; + var CLASS_MOVE = 'cropper-move'; + var CLASS_CROP = 'cropper-crop'; + var CLASS_DISABLED = 'cropper-disabled'; + var CLASS_BG = 'cropper-bg'; + + // Events + var EVENT_MOUSE_DOWN = 'mousedown touchstart pointerdown MSPointerDown'; + var EVENT_MOUSE_MOVE = 'mousemove touchmove pointermove MSPointerMove'; + var EVENT_MOUSE_UP = 'mouseup touchend touchcancel pointerup pointercancel MSPointerUp MSPointerCancel'; + var EVENT_WHEEL = 'wheel mousewheel DOMMouseScroll'; + var EVENT_DBLCLICK = 'dblclick'; + var EVENT_LOAD = 'load.' + NAMESPACE; + var EVENT_ERROR = 'error.' + NAMESPACE; + var EVENT_RESIZE = 'resize.' + NAMESPACE; // Bind to window with namespace + var EVENT_BUILD = 'build.' + NAMESPACE; + var EVENT_BUILT = 'built.' + NAMESPACE; + var EVENT_CROP_START = 'cropstart.' + NAMESPACE; + var EVENT_CROP_MOVE = 'cropmove.' + NAMESPACE; + var EVENT_CROP_END = 'cropend.' + NAMESPACE; + var EVENT_CROP = 'crop.' + NAMESPACE; + var EVENT_ZOOM = 'zoom.' + NAMESPACE; + + // RegExps + var REGEXP_ACTIONS = /e|w|s|n|se|sw|ne|nw|all|crop|move|zoom/; + var REGEXP_DATA_URL = /^data\:/; + var REGEXP_DATA_URL_HEAD = /^data\:([^\;]+)\;base64,/; + var REGEXP_DATA_URL_JPEG = /^data\:image\/jpeg.*;base64,/; + + // Data keys + var DATA_PREVIEW = 'preview'; + var DATA_ACTION = 'action'; + + // Actions + var ACTION_EAST = 'e'; + var ACTION_WEST = 'w'; + var ACTION_SOUTH = 's'; + var ACTION_NORTH = 'n'; + var ACTION_SOUTH_EAST = 'se'; + var ACTION_SOUTH_WEST = 'sw'; + var ACTION_NORTH_EAST = 'ne'; + var ACTION_NORTH_WEST = 'nw'; + var ACTION_ALL = 'all'; + var ACTION_CROP = 'crop'; + var ACTION_MOVE = 'move'; + var ACTION_ZOOM = 'zoom'; + var ACTION_NONE = 'none'; + + // Supports + var SUPPORT_CANVAS = $.isFunction($('')[0].getContext); + var IS_SAFARI = navigator && /safari/i.test(navigator.userAgent) && /apple computer/i.test(navigator.vendor); + + // Maths + var num = Number; + var min = Math.min; + var max = Math.max; + var abs = Math.abs; + var sin = Math.sin; + var cos = Math.cos; + var sqrt = Math.sqrt; + var round = Math.round; + var floor = Math.floor; + + // Utilities + var fromCharCode = String.fromCharCode; + + function isNumber(n) { + return typeof n === 'number' && !isNaN(n); + } + + function isUndefined(n) { + return typeof n === 'undefined'; + } + + function toArray(obj, offset) { + var args = []; + + // This is necessary for IE8 + if (isNumber(offset)) { + args.push(offset); + } + + return args.slice.apply(obj, args); + } + + // Custom proxy to avoid jQuery's guid + function proxy(fn, context) { + var args = toArray(arguments, 2); + + return function () { + return fn.apply(context, args.concat(toArray(arguments))); + }; + } + + function isCrossOriginURL(url) { + var parts = url.match(/^(https?:)\/\/([^\:\/\?#]+):?(\d*)/i); + + return parts && ( + parts[1] !== location.protocol || + parts[2] !== location.hostname || + parts[3] !== location.port + ); + } + + function addTimestamp(url) { + var timestamp = 'timestamp=' + (new Date()).getTime(); + + return (url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp); + } + + function getCrossOrigin(crossOrigin) { + return crossOrigin ? ' crossOrigin="' + crossOrigin + '"' : ''; + } + + function getImageSize(image, callback) { + var newImage; + + // Modern browsers (ignore Safari, #120 & #509) + if (image.naturalWidth && !IS_SAFARI) { + return callback(image.naturalWidth, image.naturalHeight); + } + + // IE8: Don't use `new Image()` here (#319) + newImage = document.createElement('img'); + + newImage.onload = function () { + callback(this.width, this.height); + }; + + newImage.src = image.src; + } + + function getTransform(options) { + var transforms = []; + var rotate = options.rotate; + var scaleX = options.scaleX; + var scaleY = options.scaleY; + + if (isNumber(rotate)) { + transforms.push('rotate(' + rotate + 'deg)'); + } + + if (isNumber(scaleX) && isNumber(scaleY)) { + transforms.push('scale(' + scaleX + ',' + scaleY + ')'); + } + + return transforms.length ? transforms.join(' ') : 'none'; + } + + function getRotatedSizes(data, isReversed) { + var deg = abs(data.degree) % 180; + var arc = (deg > 90 ? (180 - deg) : deg) * Math.PI / 180; + var sinArc = sin(arc); + var cosArc = cos(arc); + var width = data.width; + var height = data.height; + var aspectRatio = data.aspectRatio; + var newWidth; + var newHeight; + + if (!isReversed) { + newWidth = width * cosArc + height * sinArc; + newHeight = width * sinArc + height * cosArc; + } else { + newWidth = width / (cosArc + sinArc / aspectRatio); + newHeight = newWidth / aspectRatio; + } + + return { + width: newWidth, + height: newHeight + }; + } + + function getSourceCanvas(image, data) { + var canvas = $('')[0]; + var context = canvas.getContext('2d'); + var dstX = 0; + var dstY = 0; + var dstWidth = data.naturalWidth; + var dstHeight = data.naturalHeight; + var rotate = data.rotate; + var scaleX = data.scaleX; + var scaleY = data.scaleY; + var scalable = isNumber(scaleX) && isNumber(scaleY) && (scaleX !== 1 || scaleY !== 1); + var rotatable = isNumber(rotate) && rotate !== 0; + var advanced = rotatable || scalable; + var canvasWidth = dstWidth * abs(scaleX || 1); + var canvasHeight = dstHeight * abs(scaleY || 1); + var translateX; + var translateY; + var rotated; + + if (scalable) { + translateX = canvasWidth / 2; + translateY = canvasHeight / 2; + } + + if (rotatable) { + rotated = getRotatedSizes({ + width: canvasWidth, + height: canvasHeight, + degree: rotate + }); + + canvasWidth = rotated.width; + canvasHeight = rotated.height; + translateX = canvasWidth / 2; + translateY = canvasHeight / 2; + } + + canvas.width = canvasWidth; + canvas.height = canvasHeight; + + if (advanced) { + dstX = -dstWidth / 2; + dstY = -dstHeight / 2; + + context.save(); + context.translate(translateX, translateY); + } + + if (rotatable) { + context.rotate(rotate * Math.PI / 180); + } + + // Should call `scale` after rotated + if (scalable) { + context.scale(scaleX, scaleY); + } + + context.drawImage(image, floor(dstX), floor(dstY), floor(dstWidth), floor(dstHeight)); + + if (advanced) { + context.restore(); + } + + return canvas; + } + + function getTouchesCenter(touches) { + var length = touches.length; + var pageX = 0; + var pageY = 0; + + if (length) { + $.each(touches, function (i, touch) { + pageX += touch.pageX; + pageY += touch.pageY; + }); + + pageX /= length; + pageY /= length; + } + + return { + pageX: pageX, + pageY: pageY + }; + } + + function getStringFromCharCode(dataView, start, length) { + var str = ''; + var i; + + for (i = start, length += start; i < length; i++) { + str += fromCharCode(dataView.getUint8(i)); + } + + return str; + } + + function getOrientation(arrayBuffer) { + var dataView = new DataView(arrayBuffer); + var length = dataView.byteLength; + var orientation; + var exifIDCode; + var tiffOffset; + var firstIFDOffset; + var littleEndian; + var endianness; + var app1Start; + var ifdStart; + var offset; + var i; + + // Only handle JPEG image (start by 0xFFD8) + if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) { + offset = 2; + + while (offset < length) { + if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) { + app1Start = offset; + break; + } + + offset++; + } + } + + if (app1Start) { + exifIDCode = app1Start + 4; + tiffOffset = app1Start + 10; + + if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') { + endianness = dataView.getUint16(tiffOffset); + littleEndian = endianness === 0x4949; + + if (littleEndian || endianness === 0x4D4D /* bigEndian */) { + if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) { + firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian); + + if (firstIFDOffset >= 0x00000008) { + ifdStart = tiffOffset + firstIFDOffset; + } + } + } + } + } + + if (ifdStart) { + length = dataView.getUint16(ifdStart, littleEndian); + + for (i = 0; i < length; i++) { + offset = ifdStart + i * 12 + 2; + + if (dataView.getUint16(offset, littleEndian) === 0x0112 /* Orientation */) { + + // 8 is the offset of the current tag's value + offset += 8; + + // Get the original orientation value + orientation = dataView.getUint16(offset, littleEndian); + + // Override the orientation with its default value for Safari (#120) + if (IS_SAFARI) { + dataView.setUint16(offset, 1, littleEndian); + } + + break; + } + } + } + + return orientation; + } + + function dataURLToArrayBuffer(dataURL) { + var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, ''); + var binary = atob(base64); + var length = binary.length; + var arrayBuffer = new ArrayBuffer(length); + var dataView = new Uint8Array(arrayBuffer); + var i; + + for (i = 0; i < length; i++) { + dataView[i] = binary.charCodeAt(i); + } + + return arrayBuffer; + } + + // Only available for JPEG image + function arrayBufferToDataURL(arrayBuffer) { + var dataView = new Uint8Array(arrayBuffer); + var length = dataView.length; + var base64 = ''; + var i; + + for (i = 0; i < length; i++) { + base64 += fromCharCode(dataView[i]); + } + + return 'data:image/jpeg;base64,' + btoa(base64); + } + + function Cropper(element, options) { + this.$element = $(element); + this.options = $.extend({}, Cropper.DEFAULTS, $.isPlainObject(options) && options); + this.isLoaded = false; + this.isBuilt = false; + this.isCompleted = false; + this.isRotated = false; + this.isCropped = false; + this.isDisabled = false; + this.isReplaced = false; + this.isLimited = false; + this.wheeling = false; + this.isImg = false; + this.originalUrl = ''; + this.canvas = null; + this.cropBox = null; + this.init(); + } + + Cropper.prototype = { + constructor: Cropper, + + init: function () { + var $this = this.$element; + var url; + + if ($this.is('img')) { + this.isImg = true; + + // Should use `$.fn.attr` here. e.g.: "img/picture.jpg" + this.originalUrl = url = $this.attr('src'); + + // Stop when it's a blank image + if (!url) { + return; + } + + // Should use `$.fn.prop` here. e.g.: "http://example.com/img/picture.jpg" + url = $this.prop('src'); + } else if ($this.is('canvas') && SUPPORT_CANVAS) { + url = $this[0].toDataURL(); + } + + this.load(url); + }, + + // A shortcut for triggering custom events + trigger: function (type, data) { + var e = $.Event(type, data); + + this.$element.trigger(e); + + return e; + }, + + load: function (url) { + var options = this.options; + var $this = this.$element; + var read; + var xhr; + + if (!url) { + return; + } + + // Trigger build event first + $this.one(EVENT_BUILD, options.build); + + if (this.trigger(EVENT_BUILD).isDefaultPrevented()) { + return; + } + + this.url = url; + this.image = {}; + + if (!options.checkOrientation || !ArrayBuffer) { + return this.clone(); + } + + read = $.proxy(this.read, this); + + // XMLHttpRequest disallows to open a Data URL in some browsers like IE11 and Safari + if (REGEXP_DATA_URL.test(url)) { + return REGEXP_DATA_URL_JPEG.test(url) ? + read(dataURLToArrayBuffer(url)) : + this.clone(); + } + + xhr = new XMLHttpRequest(); + + xhr.onerror = xhr.onabort = $.proxy(function () { + this.clone(); + }, this); + + xhr.onload = function () { + read(this.response); + }; + + xhr.open('get', url); + xhr.responseType = 'arraybuffer'; + xhr.send(); + }, + + read: function (arrayBuffer) { + var options = this.options; + var orientation = getOrientation(arrayBuffer); + var image = this.image; + var rotate; + var scaleX; + var scaleY; + + if (orientation > 1) { + this.url = arrayBufferToDataURL(arrayBuffer); + + switch (orientation) { + + // flip horizontal + case 2: + scaleX = -1; + break; + + // rotate left 180° + case 3: + rotate = -180; + break; + + // flip vertical + case 4: + scaleY = -1; + break; + + // flip vertical + rotate right 90° + case 5: + rotate = 90; + scaleY = -1; + break; + + // rotate right 90° + case 6: + rotate = 90; + break; + + // flip horizontal + rotate right 90° + case 7: + rotate = 90; + scaleX = -1; + break; + + // rotate left 90° + case 8: + rotate = -90; + break; + } + } + + if (options.rotatable) { + image.rotate = rotate; + } + + if (options.scalable) { + image.scaleX = scaleX; + image.scaleY = scaleY; + } + + this.clone(); + }, + + clone: function () { + var options = this.options; + var $this = this.$element; + var url = this.url; + var crossOrigin = ''; + var crossOriginUrl; + var $clone; + + if (options.checkCrossOrigin && isCrossOriginURL(url)) { + crossOrigin = $this.prop('crossOrigin'); + + if (crossOrigin) { + crossOriginUrl = url; + } else { + crossOrigin = 'anonymous'; + + // Bust cache (#148) when there is not a "crossOrigin" property + crossOriginUrl = addTimestamp(url); + } + } + + this.crossOrigin = crossOrigin; + this.crossOriginUrl = crossOriginUrl; + this.$clone = $clone = $(''); + + if (this.isImg) { + if ($this[0].complete) { + this.start(); + } else { + $this.one(EVENT_LOAD, $.proxy(this.start, this)); + } + } else { + $clone. + one(EVENT_LOAD, $.proxy(this.start, this)). + one(EVENT_ERROR, $.proxy(this.stop, this)). + addClass(CLASS_HIDE). + insertAfter($this); + } + }, + + start: function () { + var $image = this.$element; + var $clone = this.$clone; + + if (!this.isImg) { + $clone.off(EVENT_ERROR, this.stop); + $image = $clone; + } + + getImageSize($image[0], $.proxy(function (naturalWidth, naturalHeight) { + $.extend(this.image, { + naturalWidth: naturalWidth, + naturalHeight: naturalHeight, + aspectRatio: naturalWidth / naturalHeight + }); + + this.isLoaded = true; + this.build(); + }, this)); + }, + + stop: function () { + this.$clone.remove(); + this.$clone = null; + }, + + build: function () { + var options = this.options; + var $this = this.$element; + var $clone = this.$clone; + var $cropper; + var $cropBox; + var $face; + + if (!this.isLoaded) { + return; + } + + // Unbuild first when replace + if (this.isBuilt) { + this.unbuild(); + } + + // Create cropper elements + this.$container = $this.parent(); + this.$cropper = $cropper = $(Cropper.TEMPLATE); + this.$canvas = $cropper.find('.cropper-canvas').append($clone); + this.$dragBox = $cropper.find('.cropper-drag-box'); + this.$cropBox = $cropBox = $cropper.find('.cropper-crop-box'); + this.$viewBox = $cropper.find('.cropper-view-box'); + this.$face = $face = $cropBox.find('.cropper-face'); + + // Hide the original image + $this.addClass(CLASS_HIDDEN).after($cropper); + + // Show the clone image if is hidden + if (!this.isImg) { + $clone.removeClass(CLASS_HIDE); + } + + this.initPreview(); + this.bind(); + + options.aspectRatio = max(0, options.aspectRatio) || NaN; + options.viewMode = max(0, min(3, round(options.viewMode))) || 0; + + if (options.autoCrop) { + this.isCropped = true; + + if (options.modal) { + this.$dragBox.addClass(CLASS_MODAL); + } + } else { + $cropBox.addClass(CLASS_HIDDEN); + } + + if (!options.guides) { + $cropBox.find('.cropper-dashed').addClass(CLASS_HIDDEN); + } + + if (!options.center) { + $cropBox.find('.cropper-center').addClass(CLASS_HIDDEN); + } + + if (options.cropBoxMovable) { + $face.addClass(CLASS_MOVE).data(DATA_ACTION, ACTION_ALL); + } + + if (!options.highlight) { + $face.addClass(CLASS_INVISIBLE); + } + + if (options.background) { + $cropper.addClass(CLASS_BG); + } + + if (!options.cropBoxResizable) { + $cropBox.find('.cropper-line, .cropper-point').addClass(CLASS_HIDDEN); + } + + this.setDragMode(options.dragMode); + this.render(); + this.isBuilt = true; + this.setData(options.data); + $this.one(EVENT_BUILT, options.built); + + // Trigger the built event asynchronously to keep `data('cropper')` is defined + setTimeout($.proxy(function () { + this.trigger(EVENT_BUILT); + this.isCompleted = true; + }, this), 0); + }, + + unbuild: function () { + if (!this.isBuilt) { + return; + } + + this.isBuilt = false; + this.isCompleted = false; + this.initialImage = null; + + // Clear `initialCanvas` is necessary when replace + this.initialCanvas = null; + this.initialCropBox = null; + this.container = null; + this.canvas = null; + + // Clear `cropBox` is necessary when replace + this.cropBox = null; + this.unbind(); + + this.resetPreview(); + this.$preview = null; + + this.$viewBox = null; + this.$cropBox = null; + this.$dragBox = null; + this.$canvas = null; + this.$container = null; + + this.$cropper.remove(); + this.$cropper = null; + }, + + render: function () { + this.initContainer(); + this.initCanvas(); + this.initCropBox(); + + this.renderCanvas(); + + if (this.isCropped) { + this.renderCropBox(); + } + }, + + initContainer: function () { + var options = this.options; + var $this = this.$element; + var $container = this.$container; + var $cropper = this.$cropper; + + $cropper.addClass(CLASS_HIDDEN); + $this.removeClass(CLASS_HIDDEN); + + $cropper.css((this.container = { + width: max($container.width(), num(options.minContainerWidth) || 200), + height: max($container.height(), num(options.minContainerHeight) || 100) + })); + + $this.addClass(CLASS_HIDDEN); + $cropper.removeClass(CLASS_HIDDEN); + }, + + // Canvas (image wrapper) + initCanvas: function () { + var viewMode = this.options.viewMode; + var container = this.container; + var containerWidth = container.width; + var containerHeight = container.height; + var image = this.image; + var imageNaturalWidth = image.naturalWidth; + var imageNaturalHeight = image.naturalHeight; + var is90Degree = abs(image.rotate) === 90; + var naturalWidth = is90Degree ? imageNaturalHeight : imageNaturalWidth; + var naturalHeight = is90Degree ? imageNaturalWidth : imageNaturalHeight; + var aspectRatio = naturalWidth / naturalHeight; + var canvasWidth = containerWidth; + var canvasHeight = containerHeight; + var canvas; + + if (containerHeight * aspectRatio > containerWidth) { + if (viewMode === 3) { + canvasWidth = containerHeight * aspectRatio; + } else { + canvasHeight = containerWidth / aspectRatio; + } + } else { + if (viewMode === 3) { + canvasHeight = containerWidth / aspectRatio; + } else { + canvasWidth = containerHeight * aspectRatio; + } + } + + canvas = { + naturalWidth: naturalWidth, + naturalHeight: naturalHeight, + aspectRatio: aspectRatio, + width: canvasWidth, + height: canvasHeight + }; + + canvas.oldLeft = canvas.left = (containerWidth - canvasWidth) / 2; + canvas.oldTop = canvas.top = (containerHeight - canvasHeight) / 2; + + this.canvas = canvas; + this.isLimited = (viewMode === 1 || viewMode === 2); + this.limitCanvas(true, true); + this.initialImage = $.extend({}, image); + this.initialCanvas = $.extend({}, canvas); + }, + + limitCanvas: function (isSizeLimited, isPositionLimited) { + var options = this.options; + var viewMode = options.viewMode; + var container = this.container; + var containerWidth = container.width; + var containerHeight = container.height; + var canvas = this.canvas; + var aspectRatio = canvas.aspectRatio; + var cropBox = this.cropBox; + var isCropped = this.isCropped && cropBox; + var minCanvasWidth; + var minCanvasHeight; + var newCanvasLeft; + var newCanvasTop; + + if (isSizeLimited) { + minCanvasWidth = num(options.minCanvasWidth) || 0; + minCanvasHeight = num(options.minCanvasHeight) || 0; + + if (viewMode) { + if (viewMode > 1) { + minCanvasWidth = max(minCanvasWidth, containerWidth); + minCanvasHeight = max(minCanvasHeight, containerHeight); + + if (viewMode === 3) { + if (minCanvasHeight * aspectRatio > minCanvasWidth) { + minCanvasWidth = minCanvasHeight * aspectRatio; + } else { + minCanvasHeight = minCanvasWidth / aspectRatio; + } + } + } else { + if (minCanvasWidth) { + minCanvasWidth = max(minCanvasWidth, isCropped ? cropBox.width : 0); + } else if (minCanvasHeight) { + minCanvasHeight = max(minCanvasHeight, isCropped ? cropBox.height : 0); + } else if (isCropped) { + minCanvasWidth = cropBox.width; + minCanvasHeight = cropBox.height; + + if (minCanvasHeight * aspectRatio > minCanvasWidth) { + minCanvasWidth = minCanvasHeight * aspectRatio; + } else { + minCanvasHeight = minCanvasWidth / aspectRatio; + } + } + } + } + + if (minCanvasWidth && minCanvasHeight) { + if (minCanvasHeight * aspectRatio > minCanvasWidth) { + minCanvasHeight = minCanvasWidth / aspectRatio; + } else { + minCanvasWidth = minCanvasHeight * aspectRatio; + } + } else if (minCanvasWidth) { + minCanvasHeight = minCanvasWidth / aspectRatio; + } else if (minCanvasHeight) { + minCanvasWidth = minCanvasHeight * aspectRatio; + } + + canvas.minWidth = minCanvasWidth; + canvas.minHeight = minCanvasHeight; + canvas.maxWidth = Infinity; + canvas.maxHeight = Infinity; + } + + if (isPositionLimited) { + if (viewMode) { + newCanvasLeft = containerWidth - canvas.width; + newCanvasTop = containerHeight - canvas.height; + + canvas.minLeft = min(0, newCanvasLeft); + canvas.minTop = min(0, newCanvasTop); + canvas.maxLeft = max(0, newCanvasLeft); + canvas.maxTop = max(0, newCanvasTop); + + if (isCropped && this.isLimited) { + canvas.minLeft = min( + cropBox.left, + cropBox.left + cropBox.width - canvas.width + ); + canvas.minTop = min( + cropBox.top, + cropBox.top + cropBox.height - canvas.height + ); + canvas.maxLeft = cropBox.left; + canvas.maxTop = cropBox.top; + + if (viewMode === 2) { + if (canvas.width >= containerWidth) { + canvas.minLeft = min(0, newCanvasLeft); + canvas.maxLeft = max(0, newCanvasLeft); + } + + if (canvas.height >= containerHeight) { + canvas.minTop = min(0, newCanvasTop); + canvas.maxTop = max(0, newCanvasTop); + } + } + } + } else { + canvas.minLeft = -canvas.width; + canvas.minTop = -canvas.height; + canvas.maxLeft = containerWidth; + canvas.maxTop = containerHeight; + } + } + }, + + renderCanvas: function (isChanged) { + var canvas = this.canvas; + var image = this.image; + var rotate = image.rotate; + var naturalWidth = image.naturalWidth; + var naturalHeight = image.naturalHeight; + var aspectRatio; + var rotated; + + if (this.isRotated) { + this.isRotated = false; + + // Computes rotated sizes with image sizes + rotated = getRotatedSizes({ + width: image.width, + height: image.height, + degree: rotate + }); + + aspectRatio = rotated.width / rotated.height; + + if (aspectRatio !== canvas.aspectRatio) { + canvas.left -= (rotated.width - canvas.width) / 2; + canvas.top -= (rotated.height - canvas.height) / 2; + canvas.width = rotated.width; + canvas.height = rotated.height; + canvas.aspectRatio = aspectRatio; + canvas.naturalWidth = naturalWidth; + canvas.naturalHeight = naturalHeight; + + // Computes rotated sizes with natural image sizes + if (rotate % 180) { + rotated = getRotatedSizes({ + width: naturalWidth, + height: naturalHeight, + degree: rotate + }); + + canvas.naturalWidth = rotated.width; + canvas.naturalHeight = rotated.height; + } + + this.limitCanvas(true, false); + } + } + + if (canvas.width > canvas.maxWidth || canvas.width < canvas.minWidth) { + canvas.left = canvas.oldLeft; + } + + if (canvas.height > canvas.maxHeight || canvas.height < canvas.minHeight) { + canvas.top = canvas.oldTop; + } + + canvas.width = min(max(canvas.width, canvas.minWidth), canvas.maxWidth); + canvas.height = min(max(canvas.height, canvas.minHeight), canvas.maxHeight); + + this.limitCanvas(false, true); + + canvas.oldLeft = canvas.left = min(max(canvas.left, canvas.minLeft), canvas.maxLeft); + canvas.oldTop = canvas.top = min(max(canvas.top, canvas.minTop), canvas.maxTop); + + this.$canvas.css({ + width: canvas.width, + height: canvas.height, + left: canvas.left, + top: canvas.top + }); + + this.renderImage(); + + if (this.isCropped && this.isLimited) { + this.limitCropBox(true, true); + } + + if (isChanged) { + this.output(); + } + }, + + renderImage: function (isChanged) { + var canvas = this.canvas; + var image = this.image; + var reversed; + + if (image.rotate) { + reversed = getRotatedSizes({ + width: canvas.width, + height: canvas.height, + degree: image.rotate, + aspectRatio: image.aspectRatio + }, true); + } + + $.extend(image, reversed ? { + width: reversed.width, + height: reversed.height, + left: (canvas.width - reversed.width) / 2, + top: (canvas.height - reversed.height) / 2 + } : { + width: canvas.width, + height: canvas.height, + left: 0, + top: 0 + }); + + this.$clone.css({ + width: image.width, + height: image.height, + marginLeft: image.left, + marginTop: image.top, + transform: getTransform(image) + }); + + if (isChanged) { + this.output(); + } + }, + + initCropBox: function () { + var options = this.options; + var canvas = this.canvas; + var aspectRatio = options.aspectRatio; + var autoCropArea = num(options.autoCropArea) || 0.8; + var cropBox = { + width: canvas.width, + height: canvas.height + }; + + if (aspectRatio) { + if (canvas.height * aspectRatio > canvas.width) { + cropBox.height = cropBox.width / aspectRatio; + } else { + cropBox.width = cropBox.height * aspectRatio; + } + } + + this.cropBox = cropBox; + this.limitCropBox(true, true); + + // Initialize auto crop area + cropBox.width = min(max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); + cropBox.height = min(max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); + + // The width of auto crop area must large than "minWidth", and the height too. (#164) + cropBox.width = max(cropBox.minWidth, cropBox.width * autoCropArea); + cropBox.height = max(cropBox.minHeight, cropBox.height * autoCropArea); + cropBox.oldLeft = cropBox.left = canvas.left + (canvas.width - cropBox.width) / 2; + cropBox.oldTop = cropBox.top = canvas.top + (canvas.height - cropBox.height) / 2; + + this.initialCropBox = $.extend({}, cropBox); + }, + + limitCropBox: function (isSizeLimited, isPositionLimited) { + var options = this.options; + var aspectRatio = options.aspectRatio; + var container = this.container; + var containerWidth = container.width; + var containerHeight = container.height; + var canvas = this.canvas; + var cropBox = this.cropBox; + var isLimited = this.isLimited; + var minCropBoxWidth; + var minCropBoxHeight; + var maxCropBoxWidth; + var maxCropBoxHeight; + + if (isSizeLimited) { + minCropBoxWidth = num(options.minCropBoxWidth) || 0; + minCropBoxHeight = num(options.minCropBoxHeight) || 0; + + // The min/maxCropBoxWidth/Height must be less than containerWidth/Height + minCropBoxWidth = min(minCropBoxWidth, containerWidth); + minCropBoxHeight = min(minCropBoxHeight, containerHeight); + maxCropBoxWidth = min(containerWidth, isLimited ? canvas.width : containerWidth); + maxCropBoxHeight = min(containerHeight, isLimited ? canvas.height : containerHeight); + + if (aspectRatio) { + if (minCropBoxWidth && minCropBoxHeight) { + if (minCropBoxHeight * aspectRatio > minCropBoxWidth) { + minCropBoxHeight = minCropBoxWidth / aspectRatio; + } else { + minCropBoxWidth = minCropBoxHeight * aspectRatio; + } + } else if (minCropBoxWidth) { + minCropBoxHeight = minCropBoxWidth / aspectRatio; + } else if (minCropBoxHeight) { + minCropBoxWidth = minCropBoxHeight * aspectRatio; + } + + if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) { + maxCropBoxHeight = maxCropBoxWidth / aspectRatio; + } else { + maxCropBoxWidth = maxCropBoxHeight * aspectRatio; + } + } + + // The minWidth/Height must be less than maxWidth/Height + cropBox.minWidth = min(minCropBoxWidth, maxCropBoxWidth); + cropBox.minHeight = min(minCropBoxHeight, maxCropBoxHeight); + cropBox.maxWidth = maxCropBoxWidth; + cropBox.maxHeight = maxCropBoxHeight; + } + + if (isPositionLimited) { + if (isLimited) { + cropBox.minLeft = max(0, canvas.left); + cropBox.minTop = max(0, canvas.top); + cropBox.maxLeft = min(containerWidth, canvas.left + canvas.width) - cropBox.width; + cropBox.maxTop = min(containerHeight, canvas.top + canvas.height) - cropBox.height; + } else { + cropBox.minLeft = 0; + cropBox.minTop = 0; + cropBox.maxLeft = containerWidth - cropBox.width; + cropBox.maxTop = containerHeight - cropBox.height; + } + } + }, + + renderCropBox: function () { + var options = this.options; + var container = this.container; + var containerWidth = container.width; + var containerHeight = container.height; + var cropBox = this.cropBox; + + if (cropBox.width > cropBox.maxWidth || cropBox.width < cropBox.minWidth) { + cropBox.left = cropBox.oldLeft; + } + + if (cropBox.height > cropBox.maxHeight || cropBox.height < cropBox.minHeight) { + cropBox.top = cropBox.oldTop; + } + + cropBox.width = min(max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); + cropBox.height = min(max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); + + this.limitCropBox(false, true); + + cropBox.oldLeft = cropBox.left = min(max(cropBox.left, cropBox.minLeft), cropBox.maxLeft); + cropBox.oldTop = cropBox.top = min(max(cropBox.top, cropBox.minTop), cropBox.maxTop); + + if (options.movable && options.cropBoxMovable) { + + // Turn to move the canvas when the crop box is equal to the container + this.$face.data(DATA_ACTION, (cropBox.width === containerWidth && cropBox.height === containerHeight) ? ACTION_MOVE : ACTION_ALL); + } + + this.$cropBox.css({ + width: cropBox.width, + height: cropBox.height, + left: cropBox.left, + top: cropBox.top + }); + + if (this.isCropped && this.isLimited) { + this.limitCanvas(true, true); + } + + if (!this.isDisabled) { + this.output(); + } + }, + + output: function () { + this.preview(); + + if (this.isCompleted) { + this.trigger(EVENT_CROP, this.getData()); + } else if (!this.isBuilt) { + + // Only trigger one crop event before complete + this.$element.one(EVENT_BUILT, $.proxy(function () { + this.trigger(EVENT_CROP, this.getData()); + }, this)); + } + }, + + initPreview: function () { + var crossOrigin = getCrossOrigin(this.crossOrigin); + var url = crossOrigin ? this.crossOriginUrl : this.url; + var $clone2; + + this.$preview = $(this.options.preview); + this.$clone2 = $clone2 = $(''); + this.$viewBox.html($clone2); + this.$preview.each(function () { + var $this = $(this); + + // Save the original size for recover + $this.data(DATA_PREVIEW, { + width: $this.width(), + height: $this.height(), + html: $this.html() + }); + + /** + * Override img element styles + * Add `display:block` to avoid margin top issue + * (Occur only when margin-top <= -height) + */ + $this.html( + '' + ); + }); + }, + + resetPreview: function () { + this.$preview.each(function () { + var $this = $(this); + var data = $this.data(DATA_PREVIEW); + + $this.css({ + width: data.width, + height: data.height + }).html(data.html).removeData(DATA_PREVIEW); + }); + }, + + preview: function () { + var image = this.image; + var canvas = this.canvas; + var cropBox = this.cropBox; + var cropBoxWidth = cropBox.width; + var cropBoxHeight = cropBox.height; + var width = image.width; + var height = image.height; + var left = cropBox.left - canvas.left - image.left; + var top = cropBox.top - canvas.top - image.top; + + if (!this.isCropped || this.isDisabled) { + return; + } + + this.$clone2.css({ + width: width, + height: height, + marginLeft: -left, + marginTop: -top, + transform: getTransform(image) + }); + + this.$preview.each(function () { + var $this = $(this); + var data = $this.data(DATA_PREVIEW); + var originalWidth = data.width; + var originalHeight = data.height; + var newWidth = originalWidth; + var newHeight = originalHeight; + var ratio = 1; + + if (cropBoxWidth) { + ratio = originalWidth / cropBoxWidth; + newHeight = cropBoxHeight * ratio; + } + + if (cropBoxHeight && newHeight > originalHeight) { + ratio = originalHeight / cropBoxHeight; + newWidth = cropBoxWidth * ratio; + newHeight = originalHeight; + } + + $this.css({ + width: newWidth, + height: newHeight + }).find('img').css({ + width: width * ratio, + height: height * ratio, + marginLeft: -left * ratio, + marginTop: -top * ratio, + transform: getTransform(image) + }); + }); + }, + + bind: function () { + var options = this.options; + var $this = this.$element; + var $cropper = this.$cropper; + + if ($.isFunction(options.cropstart)) { + $this.on(EVENT_CROP_START, options.cropstart); + } + + if ($.isFunction(options.cropmove)) { + $this.on(EVENT_CROP_MOVE, options.cropmove); + } + + if ($.isFunction(options.cropend)) { + $this.on(EVENT_CROP_END, options.cropend); + } + + if ($.isFunction(options.crop)) { + $this.on(EVENT_CROP, options.crop); + } + + if ($.isFunction(options.zoom)) { + $this.on(EVENT_ZOOM, options.zoom); + } + + $cropper.on(EVENT_MOUSE_DOWN, $.proxy(this.cropStart, this)); + + if (options.zoomable && options.zoomOnWheel) { + $cropper.on(EVENT_WHEEL, $.proxy(this.wheel, this)); + } + + if (options.toggleDragModeOnDblclick) { + $cropper.on(EVENT_DBLCLICK, $.proxy(this.dblclick, this)); + } + + $document. + on(EVENT_MOUSE_MOVE, (this._cropMove = proxy(this.cropMove, this))). + on(EVENT_MOUSE_UP, (this._cropEnd = proxy(this.cropEnd, this))); + + if (options.responsive) { + $window.on(EVENT_RESIZE, (this._resize = proxy(this.resize, this))); + } + }, + + unbind: function () { + var options = this.options; + var $this = this.$element; + var $cropper = this.$cropper; + + if ($.isFunction(options.cropstart)) { + $this.off(EVENT_CROP_START, options.cropstart); + } + + if ($.isFunction(options.cropmove)) { + $this.off(EVENT_CROP_MOVE, options.cropmove); + } + + if ($.isFunction(options.cropend)) { + $this.off(EVENT_CROP_END, options.cropend); + } + + if ($.isFunction(options.crop)) { + $this.off(EVENT_CROP, options.crop); + } + + if ($.isFunction(options.zoom)) { + $this.off(EVENT_ZOOM, options.zoom); + } + + $cropper.off(EVENT_MOUSE_DOWN, this.cropStart); + + if (options.zoomable && options.zoomOnWheel) { + $cropper.off(EVENT_WHEEL, this.wheel); + } + + if (options.toggleDragModeOnDblclick) { + $cropper.off(EVENT_DBLCLICK, this.dblclick); + } + + $document. + off(EVENT_MOUSE_MOVE, this._cropMove). + off(EVENT_MOUSE_UP, this._cropEnd); + + if (options.responsive) { + $window.off(EVENT_RESIZE, this._resize); + } + }, + + resize: function () { + var restore = this.options.restore; + var $container = this.$container; + var container = this.container; + var canvasData; + var cropBoxData; + var ratio; + + // Check `container` is necessary for IE8 + if (this.isDisabled || !container) { + return; + } + + ratio = $container.width() / container.width; + + // Resize when width changed or height changed + if (ratio !== 1 || $container.height() !== container.height) { + if (restore) { + canvasData = this.getCanvasData(); + cropBoxData = this.getCropBoxData(); + } + + this.render(); + + if (restore) { + this.setCanvasData($.each(canvasData, function (i, n) { + canvasData[i] = n * ratio; + })); + this.setCropBoxData($.each(cropBoxData, function (i, n) { + cropBoxData[i] = n * ratio; + })); + } + } + }, + + dblclick: function () { + if (this.isDisabled) { + return; + } + + if (this.$dragBox.hasClass(CLASS_CROP)) { + this.setDragMode(ACTION_MOVE); + } else { + this.setDragMode(ACTION_CROP); + } + }, + + wheel: function (event) { + var e = event.originalEvent || event; + var ratio = num(this.options.wheelZoomRatio) || 0.1; + var delta = 1; + + if (this.isDisabled) { + return; + } + + event.preventDefault(); + + // Limit wheel speed to prevent zoom too fast + if (this.wheeling) { + return; + } + + this.wheeling = true; + + setTimeout($.proxy(function () { + this.wheeling = false; + }, this), 50); + + if (e.deltaY) { + delta = e.deltaY > 0 ? 1 : -1; + } else if (e.wheelDelta) { + delta = -e.wheelDelta / 120; + } else if (e.detail) { + delta = e.detail > 0 ? 1 : -1; + } + + this.zoom(-delta * ratio, event); + }, + + cropStart: function (event) { + var options = this.options; + var originalEvent = event.originalEvent; + var touches = originalEvent && originalEvent.touches; + var e = event; + var touchesLength; + var action; + + if (this.isDisabled) { + return; + } + + if (touches) { + touchesLength = touches.length; + + if (touchesLength > 1) { + if (options.zoomable && options.zoomOnTouch && touchesLength === 2) { + e = touches[1]; + this.startX2 = e.pageX; + this.startY2 = e.pageY; + action = ACTION_ZOOM; + } else { + return; + } + } + + e = touches[0]; + } + + action = action || $(e.target).data(DATA_ACTION); + + if (REGEXP_ACTIONS.test(action)) { + if (this.trigger(EVENT_CROP_START, { + originalEvent: originalEvent, + action: action + }).isDefaultPrevented()) { + return; + } + + event.preventDefault(); + + this.action = action; + this.cropping = false; + + // IE8 has `event.pageX/Y`, but not `event.originalEvent.pageX/Y` + // IE10 has `event.originalEvent.pageX/Y`, but not `event.pageX/Y` + this.startX = e.pageX || originalEvent && originalEvent.pageX; + this.startY = e.pageY || originalEvent && originalEvent.pageY; + + if (action === ACTION_CROP) { + this.cropping = true; + this.$dragBox.addClass(CLASS_MODAL); + } + } + }, + + cropMove: function (event) { + var options = this.options; + var originalEvent = event.originalEvent; + var touches = originalEvent && originalEvent.touches; + var e = event; + var action = this.action; + var touchesLength; + + if (this.isDisabled) { + return; + } + + if (touches) { + touchesLength = touches.length; + + if (touchesLength > 1) { + if (options.zoomable && options.zoomOnTouch && touchesLength === 2) { + e = touches[1]; + this.endX2 = e.pageX; + this.endY2 = e.pageY; + } else { + return; + } + } + + e = touches[0]; + } + + if (action) { + if (this.trigger(EVENT_CROP_MOVE, { + originalEvent: originalEvent, + action: action + }).isDefaultPrevented()) { + return; + } + + event.preventDefault(); + + this.endX = e.pageX || originalEvent && originalEvent.pageX; + this.endY = e.pageY || originalEvent && originalEvent.pageY; + + this.change(e.shiftKey, action === ACTION_ZOOM ? event : null); + } + }, + + cropEnd: function (event) { + var originalEvent = event.originalEvent; + var action = this.action; + + if (this.isDisabled) { + return; + } + + if (action) { + event.preventDefault(); + + if (this.cropping) { + this.cropping = false; + this.$dragBox.toggleClass(CLASS_MODAL, this.isCropped && this.options.modal); + } + + this.action = ''; + + this.trigger(EVENT_CROP_END, { + originalEvent: originalEvent, + action: action + }); + } + }, + + change: function (shiftKey, event) { + var options = this.options; + var aspectRatio = options.aspectRatio; + var action = this.action; + var container = this.container; + var canvas = this.canvas; + var cropBox = this.cropBox; + var width = cropBox.width; + var height = cropBox.height; + var left = cropBox.left; + var top = cropBox.top; + var right = left + width; + var bottom = top + height; + var minLeft = 0; + var minTop = 0; + var maxWidth = container.width; + var maxHeight = container.height; + var renderable = true; + var offset; + var range; + + // Locking aspect ratio in "free mode" by holding shift key (#259) + if (!aspectRatio && shiftKey) { + aspectRatio = width && height ? width / height : 1; + } + + if (this.limited) { + minLeft = cropBox.minLeft; + minTop = cropBox.minTop; + maxWidth = minLeft + min(container.width, canvas.left + canvas.width); + maxHeight = minTop + min(container.height, canvas.top + canvas.height); + } + + range = { + x: this.endX - this.startX, + y: this.endY - this.startY + }; + + if (aspectRatio) { + range.X = range.y * aspectRatio; + range.Y = range.x / aspectRatio; + } + + switch (action) { + // Move crop box + case ACTION_ALL: + left += range.x; + top += range.y; + break; + + // Resize crop box + case ACTION_EAST: + if (range.x >= 0 && (right >= maxWidth || aspectRatio && + (top <= minTop || bottom >= maxHeight))) { + + renderable = false; + break; + } + + width += range.x; + + if (aspectRatio) { + height = width / aspectRatio; + top -= range.Y / 2; + } + + if (width < 0) { + action = ACTION_WEST; + width = 0; + } + + break; + + case ACTION_NORTH: + if (range.y <= 0 && (top <= minTop || aspectRatio && + (left <= minLeft || right >= maxWidth))) { + + renderable = false; + break; + } + + height -= range.y; + top += range.y; + + if (aspectRatio) { + width = height * aspectRatio; + left += range.X / 2; + } + + if (height < 0) { + action = ACTION_SOUTH; + height = 0; + } + + break; + + case ACTION_WEST: + if (range.x <= 0 && (left <= minLeft || aspectRatio && + (top <= minTop || bottom >= maxHeight))) { + + renderable = false; + break; + } + + width -= range.x; + left += range.x; + + if (aspectRatio) { + height = width / aspectRatio; + top += range.Y / 2; + } + + if (width < 0) { + action = ACTION_EAST; + width = 0; + } + + break; + + case ACTION_SOUTH: + if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && + (left <= minLeft || right >= maxWidth))) { + + renderable = false; + break; + } + + height += range.y; + + if (aspectRatio) { + width = height * aspectRatio; + left -= range.X / 2; + } + + if (height < 0) { + action = ACTION_NORTH; + height = 0; + } + + break; + + case ACTION_NORTH_EAST: + if (aspectRatio) { + if (range.y <= 0 && (top <= minTop || right >= maxWidth)) { + renderable = false; + break; + } + + height -= range.y; + top += range.y; + width = height * aspectRatio; + } else { + if (range.x >= 0) { + if (right < maxWidth) { + width += range.x; + } else if (range.y <= 0 && top <= minTop) { + renderable = false; + } + } else { + width += range.x; + } + + if (range.y <= 0) { + if (top > minTop) { + height -= range.y; + top += range.y; + } + } else { + height -= range.y; + top += range.y; + } + } + + if (width < 0 && height < 0) { + action = ACTION_SOUTH_WEST; + height = 0; + width = 0; + } else if (width < 0) { + action = ACTION_NORTH_WEST; + width = 0; + } else if (height < 0) { + action = ACTION_SOUTH_EAST; + height = 0; + } + + break; + + case ACTION_NORTH_WEST: + if (aspectRatio) { + if (range.y <= 0 && (top <= minTop || left <= minLeft)) { + renderable = false; + break; + } + + height -= range.y; + top += range.y; + width = height * aspectRatio; + left += range.X; + } else { + if (range.x <= 0) { + if (left > minLeft) { + width -= range.x; + left += range.x; + } else if (range.y <= 0 && top <= minTop) { + renderable = false; + } + } else { + width -= range.x; + left += range.x; + } + + if (range.y <= 0) { + if (top > minTop) { + height -= range.y; + top += range.y; + } + } else { + height -= range.y; + top += range.y; + } + } + + if (width < 0 && height < 0) { + action = ACTION_SOUTH_EAST; + height = 0; + width = 0; + } else if (width < 0) { + action = ACTION_NORTH_EAST; + width = 0; + } else if (height < 0) { + action = ACTION_SOUTH_WEST; + height = 0; + } + + break; + + case ACTION_SOUTH_WEST: + if (aspectRatio) { + if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) { + renderable = false; + break; + } + + width -= range.x; + left += range.x; + height = width / aspectRatio; + } else { + if (range.x <= 0) { + if (left > minLeft) { + width -= range.x; + left += range.x; + } else if (range.y >= 0 && bottom >= maxHeight) { + renderable = false; + } + } else { + width -= range.x; + left += range.x; + } + + if (range.y >= 0) { + if (bottom < maxHeight) { + height += range.y; + } + } else { + height += range.y; + } + } + + if (width < 0 && height < 0) { + action = ACTION_NORTH_EAST; + height = 0; + width = 0; + } else if (width < 0) { + action = ACTION_SOUTH_EAST; + width = 0; + } else if (height < 0) { + action = ACTION_NORTH_WEST; + height = 0; + } + + break; + + case ACTION_SOUTH_EAST: + if (aspectRatio) { + if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) { + renderable = false; + break; + } + + width += range.x; + height = width / aspectRatio; + } else { + if (range.x >= 0) { + if (right < maxWidth) { + width += range.x; + } else if (range.y >= 0 && bottom >= maxHeight) { + renderable = false; + } + } else { + width += range.x; + } + + if (range.y >= 0) { + if (bottom < maxHeight) { + height += range.y; + } + } else { + height += range.y; + } + } + + if (width < 0 && height < 0) { + action = ACTION_NORTH_WEST; + height = 0; + width = 0; + } else if (width < 0) { + action = ACTION_SOUTH_WEST; + width = 0; + } else if (height < 0) { + action = ACTION_NORTH_EAST; + height = 0; + } + + break; + + // Move canvas + case ACTION_MOVE: + this.move(range.x, range.y); + renderable = false; + break; + + // Zoom canvas + case ACTION_ZOOM: + this.zoom((function (x1, y1, x2, y2) { + var z1 = sqrt(x1 * x1 + y1 * y1); + var z2 = sqrt(x2 * x2 + y2 * y2); + + return (z2 - z1) / z1; + })( + abs(this.startX - this.startX2), + abs(this.startY - this.startY2), + abs(this.endX - this.endX2), + abs(this.endY - this.endY2) + ), event); + this.startX2 = this.endX2; + this.startY2 = this.endY2; + renderable = false; + break; + + // Create crop box + case ACTION_CROP: + if (!range.x || !range.y) { + renderable = false; + break; + } + + offset = this.$cropper.offset(); + left = this.startX - offset.left; + top = this.startY - offset.top; + width = cropBox.minWidth; + height = cropBox.minHeight; + + if (range.x > 0) { + action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST; + } else if (range.x < 0) { + left -= width; + action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST; + } + + if (range.y < 0) { + top -= height; + } + + // Show the crop box if is hidden + if (!this.isCropped) { + this.$cropBox.removeClass(CLASS_HIDDEN); + this.isCropped = true; + + if (this.limited) { + this.limitCropBox(true, true); + } + } + + break; + + // No default + } + + if (renderable) { + cropBox.width = width; + cropBox.height = height; + cropBox.left = left; + cropBox.top = top; + this.action = action; + + this.renderCropBox(); + } + + // Override + this.startX = this.endX; + this.startY = this.endY; + }, + + // Show the crop box manually + crop: function () { + if (!this.isBuilt || this.isDisabled) { + return; + } + + if (!this.isCropped) { + this.isCropped = true; + this.limitCropBox(true, true); + + if (this.options.modal) { + this.$dragBox.addClass(CLASS_MODAL); + } + + this.$cropBox.removeClass(CLASS_HIDDEN); + } + + this.setCropBoxData(this.initialCropBox); + }, + + // Reset the image and crop box to their initial states + reset: function () { + if (!this.isBuilt || this.isDisabled) { + return; + } + + this.image = $.extend({}, this.initialImage); + this.canvas = $.extend({}, this.initialCanvas); + this.cropBox = $.extend({}, this.initialCropBox); + + this.renderCanvas(); + + if (this.isCropped) { + this.renderCropBox(); + } + }, + + // Clear the crop box + clear: function () { + if (!this.isCropped || this.isDisabled) { + return; + } + + $.extend(this.cropBox, { + left: 0, + top: 0, + width: 0, + height: 0 + }); + + this.isCropped = false; + this.renderCropBox(); + + this.limitCanvas(true, true); + + // Render canvas after crop box rendered + this.renderCanvas(); + + this.$dragBox.removeClass(CLASS_MODAL); + this.$cropBox.addClass(CLASS_HIDDEN); + }, + + /** + * Replace the image's src and rebuild the cropper + * + * @param {String} url + * @param {Boolean} onlyColorChanged (optional) + */ + replace: function (url, onlyColorChanged) { + if (!this.isDisabled && url) { + if (this.isImg) { + this.$element.attr('src', url); + } + + if (onlyColorChanged) { + this.url = url; + this.$clone.attr('src', url); + + if (this.isBuilt) { + this.$preview.find('img').add(this.$clone2).attr('src', url); + } + } else { + if (this.isImg) { + this.isReplaced = true; + } + + // Clear previous data + this.options.data = null; + this.load(url); + } + } + }, + + // Enable (unfreeze) the cropper + enable: function () { + if (this.isBuilt) { + this.isDisabled = false; + this.$cropper.removeClass(CLASS_DISABLED); + } + }, + + // Disable (freeze) the cropper + disable: function () { + if (this.isBuilt) { + this.isDisabled = true; + this.$cropper.addClass(CLASS_DISABLED); + } + }, + + // Destroy the cropper and remove the instance from the image + destroy: function () { + var $this = this.$element; + + if (this.isLoaded) { + if (this.isImg && this.isReplaced) { + $this.attr('src', this.originalUrl); + } + + this.unbuild(); + $this.removeClass(CLASS_HIDDEN); + } else { + if (this.isImg) { + $this.off(EVENT_LOAD, this.start); + } else if (this.$clone) { + this.$clone.remove(); + } + } + + $this.removeData(NAMESPACE); + }, + + /** + * Move the canvas with relative offsets + * + * @param {Number} offsetX + * @param {Number} offsetY (optional) + */ + move: function (offsetX, offsetY) { + var canvas = this.canvas; + + this.moveTo( + isUndefined(offsetX) ? offsetX : canvas.left + num(offsetX), + isUndefined(offsetY) ? offsetY : canvas.top + num(offsetY) + ); + }, + + /** + * Move the canvas to an absolute point + * + * @param {Number} x + * @param {Number} y (optional) + */ + moveTo: function (x, y) { + var canvas = this.canvas; + var isChanged = false; + + // If "y" is not present, its default value is "x" + if (isUndefined(y)) { + y = x; + } + + x = num(x); + y = num(y); + + if (this.isBuilt && !this.isDisabled && this.options.movable) { + if (isNumber(x)) { + canvas.left = x; + isChanged = true; + } + + if (isNumber(y)) { + canvas.top = y; + isChanged = true; + } + + if (isChanged) { + this.renderCanvas(true); + } + } + }, + + /** + * Zoom the canvas with a relative ratio + * + * @param {Number} ratio + * @param {jQuery Event} _event (private) + */ + zoom: function (ratio, _event) { + var canvas = this.canvas; + + ratio = num(ratio); + + if (ratio < 0) { + ratio = 1 / (1 - ratio); + } else { + ratio = 1 + ratio; + } + + this.zoomTo(canvas.width * ratio / canvas.naturalWidth, _event); + }, + + /** + * Zoom the canvas to an absolute ratio + * + * @param {Number} ratio + * @param {jQuery Event} _event (private) + */ + zoomTo: function (ratio, _event) { + var options = this.options; + var canvas = this.canvas; + var width = canvas.width; + var height = canvas.height; + var naturalWidth = canvas.naturalWidth; + var naturalHeight = canvas.naturalHeight; + var originalEvent; + var newWidth; + var newHeight; + var offset; + var center; + + ratio = num(ratio); + + if (ratio >= 0 && this.isBuilt && !this.isDisabled && options.zoomable) { + newWidth = naturalWidth * ratio; + newHeight = naturalHeight * ratio; + + if (_event) { + originalEvent = _event.originalEvent; + } + + if (this.trigger(EVENT_ZOOM, { + originalEvent: originalEvent, + oldRatio: width / naturalWidth, + ratio: newWidth / naturalWidth + }).isDefaultPrevented()) { + return; + } + + if (originalEvent) { + offset = this.$cropper.offset(); + center = originalEvent.touches ? getTouchesCenter(originalEvent.touches) : { + pageX: _event.pageX || originalEvent.pageX || 0, + pageY: _event.pageY || originalEvent.pageY || 0 + }; + + // Zoom from the triggering point of the event + canvas.left -= (newWidth - width) * ( + ((center.pageX - offset.left) - canvas.left) / width + ); + canvas.top -= (newHeight - height) * ( + ((center.pageY - offset.top) - canvas.top) / height + ); + } else { + + // Zoom from the center of the canvas + canvas.left -= (newWidth - width) / 2; + canvas.top -= (newHeight - height) / 2; + } + + canvas.width = newWidth; + canvas.height = newHeight; + this.renderCanvas(true); + } + }, + + /** + * Rotate the canvas with a relative degree + * + * @param {Number} degree + */ + rotate: function (degree) { + this.rotateTo((this.image.rotate || 0) + num(degree)); + }, + + /** + * Rotate the canvas to an absolute degree + * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#rotate() + * + * @param {Number} degree + */ + rotateTo: function (degree) { + degree = num(degree); + + if (isNumber(degree) && this.isBuilt && !this.isDisabled && this.options.rotatable) { + this.image.rotate = degree % 360; + this.isRotated = true; + this.renderCanvas(true); + } + }, + + /** + * Scale the image + * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#scale() + * + * @param {Number} scaleX + * @param {Number} scaleY (optional) + */ + scale: function (scaleX, scaleY) { + var image = this.image; + var isChanged = false; + + // If "scaleY" is not present, its default value is "scaleX" + if (isUndefined(scaleY)) { + scaleY = scaleX; + } + + scaleX = num(scaleX); + scaleY = num(scaleY); + + if (this.isBuilt && !this.isDisabled && this.options.scalable) { + if (isNumber(scaleX)) { + image.scaleX = scaleX; + isChanged = true; + } + + if (isNumber(scaleY)) { + image.scaleY = scaleY; + isChanged = true; + } + + if (isChanged) { + this.renderImage(true); + } + } + }, + + /** + * Scale the abscissa of the image + * + * @param {Number} scaleX + */ + scaleX: function (scaleX) { + var scaleY = this.image.scaleY; + + this.scale(scaleX, isNumber(scaleY) ? scaleY : 1); + }, + + /** + * Scale the ordinate of the image + * + * @param {Number} scaleY + */ + scaleY: function (scaleY) { + var scaleX = this.image.scaleX; + + this.scale(isNumber(scaleX) ? scaleX : 1, scaleY); + }, + + /** + * Get the cropped area position and size data (base on the original image) + * + * @param {Boolean} isRounded (optional) + * @return {Object} data + */ + getData: function (isRounded) { + var options = this.options; + var image = this.image; + var canvas = this.canvas; + var cropBox = this.cropBox; + var ratio; + var data; + + if (this.isBuilt && this.isCropped) { + data = { + x: cropBox.left - canvas.left, + y: cropBox.top - canvas.top, + width: cropBox.width, + height: cropBox.height + }; + + ratio = image.width / image.naturalWidth; + + $.each(data, function (i, n) { + n = n / ratio; + data[i] = isRounded ? round(n) : n; + }); + + } else { + data = { + x: 0, + y: 0, + width: 0, + height: 0 + }; + } + + if (options.rotatable) { + data.rotate = image.rotate || 0; + } + + if (options.scalable) { + data.scaleX = image.scaleX || 1; + data.scaleY = image.scaleY || 1; + } + + return data; + }, + + /** + * Set the cropped area position and size with new data + * + * @param {Object} data + */ + setData: function (data) { + var options = this.options; + var image = this.image; + var canvas = this.canvas; + var cropBoxData = {}; + var isRotated; + var isScaled; + var ratio; + + if ($.isFunction(data)) { + data = data.call(this.element); + } + + if (this.isBuilt && !this.isDisabled && $.isPlainObject(data)) { + if (options.rotatable) { + if (isNumber(data.rotate) && data.rotate !== image.rotate) { + image.rotate = data.rotate; + this.isRotated = isRotated = true; + } + } + + if (options.scalable) { + if (isNumber(data.scaleX) && data.scaleX !== image.scaleX) { + image.scaleX = data.scaleX; + isScaled = true; + } + + if (isNumber(data.scaleY) && data.scaleY !== image.scaleY) { + image.scaleY = data.scaleY; + isScaled = true; + } + } + + if (isRotated) { + this.renderCanvas(); + } else if (isScaled) { + this.renderImage(); + } + + ratio = image.width / image.naturalWidth; + + if (isNumber(data.x)) { + cropBoxData.left = data.x * ratio + canvas.left; + } + + if (isNumber(data.y)) { + cropBoxData.top = data.y * ratio + canvas.top; + } + + if (isNumber(data.width)) { + cropBoxData.width = data.width * ratio; + } + + if (isNumber(data.height)) { + cropBoxData.height = data.height * ratio; + } + + this.setCropBoxData(cropBoxData); + } + }, + + /** + * Get the container size data + * + * @return {Object} data + */ + getContainerData: function () { + return this.isBuilt ? this.container : {}; + }, + + /** + * Get the image position and size data + * + * @return {Object} data + */ + getImageData: function () { + return this.isLoaded ? this.image : {}; + }, + + /** + * Get the canvas position and size data + * + * @return {Object} data + */ + getCanvasData: function () { + var canvas = this.canvas; + var data = {}; + + if (this.isBuilt) { + $.each([ + 'left', + 'top', + 'width', + 'height', + 'naturalWidth', + 'naturalHeight' + ], function (i, n) { + data[n] = canvas[n]; + }); + } + + return data; + }, + + /** + * Set the canvas position and size with new data + * + * @param {Object} data + */ + setCanvasData: function (data) { + var canvas = this.canvas; + var aspectRatio = canvas.aspectRatio; + + if ($.isFunction(data)) { + data = data.call(this.$element); + } + + if (this.isBuilt && !this.isDisabled && $.isPlainObject(data)) { + if (isNumber(data.left)) { + canvas.left = data.left; + } + + if (isNumber(data.top)) { + canvas.top = data.top; + } + + if (isNumber(data.width)) { + canvas.width = data.width; + canvas.height = data.width / aspectRatio; + } else if (isNumber(data.height)) { + canvas.height = data.height; + canvas.width = data.height * aspectRatio; + } + + this.renderCanvas(true); + } + }, + + /** + * Get the crop box position and size data + * + * @return {Object} data + */ + getCropBoxData: function () { + var cropBox = this.cropBox; + var data; + + if (this.isBuilt && this.isCropped) { + data = { + left: cropBox.left, + top: cropBox.top, + width: cropBox.width, + height: cropBox.height + }; + } + + return data || {}; + }, + + /** + * Set the crop box position and size with new data + * + * @param {Object} data + */ + setCropBoxData: function (data) { + var cropBox = this.cropBox; + var aspectRatio = this.options.aspectRatio; + var isWidthChanged; + var isHeightChanged; + + if ($.isFunction(data)) { + data = data.call(this.$element); + } + + if (this.isBuilt && this.isCropped && !this.isDisabled && $.isPlainObject(data)) { + + if (isNumber(data.left)) { + cropBox.left = data.left; + } + + if (isNumber(data.top)) { + cropBox.top = data.top; + } + + if (isNumber(data.width)) { + isWidthChanged = true; + cropBox.width = data.width; + } + + if (isNumber(data.height)) { + isHeightChanged = true; + cropBox.height = data.height; + } + + if (aspectRatio) { + if (isWidthChanged) { + cropBox.height = cropBox.width / aspectRatio; + } else if (isHeightChanged) { + cropBox.width = cropBox.height * aspectRatio; + } + } + + this.renderCropBox(); + } + }, + + /** + * Get a canvas drawn the cropped image + * + * @param {Object} options (optional) + * @return {HTMLCanvasElement} canvas + */ + getCroppedCanvas: function (options) { + var originalWidth; + var originalHeight; + var canvasWidth; + var canvasHeight; + var scaledWidth; + var scaledHeight; + var scaledRatio; + var aspectRatio; + var canvas; + var context; + var data; + + if (!this.isBuilt || !this.isCropped || !SUPPORT_CANVAS) { + return; + } + + if (!$.isPlainObject(options)) { + options = {}; + } + + data = this.getData(); + originalWidth = data.width; + originalHeight = data.height; + aspectRatio = originalWidth / originalHeight; + + if ($.isPlainObject(options)) { + scaledWidth = options.width; + scaledHeight = options.height; + + if (scaledWidth) { + scaledHeight = scaledWidth / aspectRatio; + scaledRatio = scaledWidth / originalWidth; + } else if (scaledHeight) { + scaledWidth = scaledHeight * aspectRatio; + scaledRatio = scaledHeight / originalHeight; + } + } + + // The canvas element will use `Math.floor` on a float number, so floor first + canvasWidth = floor(scaledWidth || originalWidth); + canvasHeight = floor(scaledHeight || originalHeight); + + canvas = $('')[0]; + canvas.width = canvasWidth; + canvas.height = canvasHeight; + context = canvas.getContext('2d'); + + if (options.fillColor) { + context.fillStyle = options.fillColor; + context.fillRect(0, 0, canvasWidth, canvasHeight); + } + + // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage + context.drawImage.apply(context, (function () { + var source = getSourceCanvas(this.$clone[0], this.image); + var sourceWidth = source.width; + var sourceHeight = source.height; + var canvas = this.canvas; + var params = [source]; + + // Source canvas + var srcX = data.x + canvas.naturalWidth * (abs(data.scaleX || 1) - 1) / 2; + var srcY = data.y + canvas.naturalHeight * (abs(data.scaleY || 1) - 1) / 2; + var srcWidth; + var srcHeight; + + // Destination canvas + var dstX; + var dstY; + var dstWidth; + var dstHeight; + + if (srcX <= -originalWidth || srcX > sourceWidth) { + srcX = srcWidth = dstX = dstWidth = 0; + } else if (srcX <= 0) { + dstX = -srcX; + srcX = 0; + srcWidth = dstWidth = min(sourceWidth, originalWidth + srcX); + } else if (srcX <= sourceWidth) { + dstX = 0; + srcWidth = dstWidth = min(originalWidth, sourceWidth - srcX); + } + + if (srcWidth <= 0 || srcY <= -originalHeight || srcY > sourceHeight) { + srcY = srcHeight = dstY = dstHeight = 0; + } else if (srcY <= 0) { + dstY = -srcY; + srcY = 0; + srcHeight = dstHeight = min(sourceHeight, originalHeight + srcY); + } else if (srcY <= sourceHeight) { + dstY = 0; + srcHeight = dstHeight = min(originalHeight, sourceHeight - srcY); + } + + // All the numerical parameters should be integer for `drawImage` (#476) + params.push(floor(srcX), floor(srcY), floor(srcWidth), floor(srcHeight)); + + // Scale destination sizes + if (scaledRatio) { + dstX *= scaledRatio; + dstY *= scaledRatio; + dstWidth *= scaledRatio; + dstHeight *= scaledRatio; + } + + // Avoid "IndexSizeError" in IE and Firefox + if (dstWidth > 0 && dstHeight > 0) { + params.push(floor(dstX), floor(dstY), floor(dstWidth), floor(dstHeight)); + } + + return params; + }).call(this)); + + return canvas; + }, + + /** + * Change the aspect ratio of the crop box + * + * @param {Number} aspectRatio + */ + setAspectRatio: function (aspectRatio) { + var options = this.options; + + if (!this.isDisabled && !isUndefined(aspectRatio)) { + + // 0 -> NaN + options.aspectRatio = max(0, aspectRatio) || NaN; + + if (this.isBuilt) { + this.initCropBox(); + + if (this.isCropped) { + this.renderCropBox(); + } + } + } + }, + + /** + * Change the drag mode + * + * @param {String} mode (optional) + */ + setDragMode: function (mode) { + var options = this.options; + var croppable; + var movable; + + if (this.isLoaded && !this.isDisabled) { + croppable = mode === ACTION_CROP; + movable = options.movable && mode === ACTION_MOVE; + mode = (croppable || movable) ? mode : ACTION_NONE; + + this.$dragBox. + data(DATA_ACTION, mode). + toggleClass(CLASS_CROP, croppable). + toggleClass(CLASS_MOVE, movable); + + if (!options.cropBoxMovable) { + + // Sync drag mode to crop box when it is not movable(#300) + this.$face. + data(DATA_ACTION, mode). + toggleClass(CLASS_CROP, croppable). + toggleClass(CLASS_MOVE, movable); + } + } + } + }; + + Cropper.DEFAULTS = { + + // Define the view mode of the cropper + viewMode: 0, // 0, 1, 2, 3 + + // Define the dragging mode of the cropper + dragMode: 'crop', // 'crop', 'move' or 'none' + + // Define the aspect ratio of the crop box + aspectRatio: NaN, + + // An object with the previous cropping result data + data: null, + + // A jQuery selector for adding extra containers to preview + preview: '', + + // Re-render the cropper when resize the window + responsive: true, + + // Restore the cropped area after resize the window + restore: true, + + // Check if the current image is a cross-origin image + checkCrossOrigin: true, + + // Check the current image's Exif Orientation information + checkOrientation: true, + + // Show the black modal + modal: true, + + // Show the dashed lines for guiding + guides: true, + + // Show the center indicator for guiding + center: true, + + // Show the white modal to highlight the crop box + highlight: true, + + // Show the grid background + background: true, + + // Enable to crop the image automatically when initialize + autoCrop: true, + + // Define the percentage of automatic cropping area when initializes + autoCropArea: 0.8, + + // Enable to move the image + movable: true, + + // Enable to rotate the image + rotatable: true, + + // Enable to scale the image + scalable: true, + + // Enable to zoom the image + zoomable: true, + + // Enable to zoom the image by dragging touch + zoomOnTouch: true, + + // Enable to zoom the image by wheeling mouse + zoomOnWheel: true, + + // Define zoom ratio when zoom the image by wheeling mouse + wheelZoomRatio: 0.1, + + // Enable to move the crop box + cropBoxMovable: true, + + // Enable to resize the crop box + cropBoxResizable: true, + + // Toggle drag mode between "crop" and "move" when click twice on the cropper + toggleDragModeOnDblclick: true, + + // Size limitation + minCanvasWidth: 0, + minCanvasHeight: 0, + minCropBoxWidth: 0, + minCropBoxHeight: 0, + minContainerWidth: 200, + minContainerHeight: 100, + + // Shortcuts of events + build: null, + built: null, + cropstart: null, + cropmove: null, + cropend: null, + crop: null, + zoom: null + }; + + Cropper.setDefaults = function (options) { + $.extend(Cropper.DEFAULTS, options); + }; + + Cropper.TEMPLATE = ( + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '
' + + '
' + ); + + // Save the other cropper + Cropper.other = $.fn.cropper; + + // Register as jQuery plugin + $.fn.cropper = function (option) { + var args = toArray(arguments, 1); + var result; + + this.each(function () { + var $this = $(this); + var data = $this.data(NAMESPACE); + var options; + var fn; + + if (!data) { + if (/destroy/.test(option)) { + return; + } + + options = $.extend({}, $this.data(), $.isPlainObject(option) && option); + $this.data(NAMESPACE, (data = new Cropper(this, options))); + } + + if (typeof option === 'string' && $.isFunction(fn = data[option])) { + result = fn.apply(data, args); + } + }); + + return isUndefined(result) ? this : result; + }; + + $.fn.cropper.Constructor = Cropper; + $.fn.cropper.setDefaults = Cropper.setDefaults; + + // No conflict + $.fn.cropper.noConflict = function () { + $.fn.cropper = Cropper.other; + return this; + }; + +}); diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 2d301d21ab9..e2d590f4df4 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -9,6 +9,7 @@ *= require_self *= require dropzone/basic *= require cal-heatmap + *= require cropper.css */ /* diff --git a/app/assets/stylesheets/cropper.css b/app/assets/stylesheets/cropper.css new file mode 100644 index 00000000000..8668c7c049a --- /dev/null +++ b/app/assets/stylesheets/cropper.css @@ -0,0 +1,379 @@ +/*! + * Cropper v2.3.0 + * https://github.com/fengyuanchen/cropper + * + * Copyright (c) 2014-2016 Fengyuan Chen and contributors + * Released under the MIT license + * + * Date: 2016-02-22T02:13:13.332Z + */ +.cropper-container { + font-size: 0; + line-height: 0; + + position: relative; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + direction: ltr !important; + -ms-touch-action: none; + touch-action: none; + -webkit-tap-highlight-color: transparent; + -webkit-touch-callout: none; +} + +.cropper-container img { + display: block; + + width: 100%; + min-width: 0 !important; + max-width: none !important; + height: 100%; + min-height: 0 !important; + max-height: none !important; + + image-orientation: 0deg !important; +} + +.cropper-wrap-box, +.cropper-canvas, +.cropper-drag-box, +.cropper-crop-box, +.cropper-modal { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +.cropper-wrap-box { + overflow: hidden; +} + +.cropper-drag-box { + opacity: 0; + background-color: #fff; + + filter: alpha(opacity=0); +} + +.cropper-modal { + opacity: .5; + background-color: #000; + + filter: alpha(opacity=50); +} + +.cropper-view-box { + display: block; + overflow: hidden; + + width: 100%; + height: 100%; + + outline: 1px solid #39f; + outline-color: rgba(51, 153, 255, .75); +} + +.cropper-dashed { + position: absolute; + + display: block; + + opacity: .5; + border: 0 dashed #eee; + + filter: alpha(opacity=50); +} + +.cropper-dashed.dashed-h { + top: 33.33333%; + left: 0; + + width: 100%; + height: 33.33333%; + + border-top-width: 1px; + border-bottom-width: 1px; +} + +.cropper-dashed.dashed-v { + top: 0; + left: 33.33333%; + + width: 33.33333%; + height: 100%; + + border-right-width: 1px; + border-left-width: 1px; +} + +.cropper-center { + position: absolute; + top: 50%; + left: 50%; + + display: block; + + width: 0; + height: 0; + + opacity: .75; + + filter: alpha(opacity=75); +} + +.cropper-center:before, +.cropper-center:after { + position: absolute; + + display: block; + + content: ' '; + + background-color: #eee; +} + +.cropper-center:before { + top: 0; + left: -3px; + + width: 7px; + height: 1px; +} + +.cropper-center:after { + top: -3px; + left: 0; + + width: 1px; + height: 7px; +} + +.cropper-face, +.cropper-line, +.cropper-point { + position: absolute; + + display: block; + + width: 100%; + height: 100%; + + opacity: .1; + + filter: alpha(opacity=10); +} + +.cropper-face { + top: 0; + left: 0; + + background-color: #fff; +} + +.cropper-line { + background-color: #39f; +} + +.cropper-line.line-e { + top: 0; + right: -3px; + + width: 5px; + + cursor: e-resize; +} + +.cropper-line.line-n { + top: -3px; + left: 0; + + height: 5px; + + cursor: n-resize; +} + +.cropper-line.line-w { + top: 0; + left: -3px; + + width: 5px; + + cursor: w-resize; +} + +.cropper-line.line-s { + bottom: -3px; + left: 0; + + height: 5px; + + cursor: s-resize; +} + +.cropper-point { + width: 5px; + height: 5px; + + opacity: .75; + background-color: #39f; + + filter: alpha(opacity=75); +} + +.cropper-point.point-e { + top: 50%; + right: -3px; + + margin-top: -3px; + + cursor: e-resize; +} + +.cropper-point.point-n { + top: -3px; + left: 50%; + + margin-left: -3px; + + cursor: n-resize; +} + +.cropper-point.point-w { + top: 50%; + left: -3px; + + margin-top: -3px; + + cursor: w-resize; +} + +.cropper-point.point-s { + bottom: -3px; + left: 50%; + + margin-left: -3px; + + cursor: s-resize; +} + +.cropper-point.point-ne { + top: -3px; + right: -3px; + + cursor: ne-resize; +} + +.cropper-point.point-nw { + top: -3px; + left: -3px; + + cursor: nw-resize; +} + +.cropper-point.point-sw { + bottom: -3px; + left: -3px; + + cursor: sw-resize; +} + +.cropper-point.point-se { + right: -3px; + bottom: -3px; + + width: 20px; + height: 20px; + + cursor: se-resize; + + opacity: 1; + + filter: alpha(opacity=100); +} + +.cropper-point.point-se:before { + position: absolute; + right: -50%; + bottom: -50%; + + display: block; + + width: 200%; + height: 200%; + + content: ' '; + + opacity: 0; + background-color: #39f; + + filter: alpha(opacity=0); +} + +@media (min-width: 768px) { + .cropper-point.point-se { + width: 15px; + height: 15px; + } +} + +@media (min-width: 992px) { + .cropper-point.point-se { + width: 10px; + height: 10px; + } +} + +@media (min-width: 1200px) { + .cropper-point.point-se { + width: 5px; + height: 5px; + + opacity: .75; + + filter: alpha(opacity=75); + } +} + +.cropper-invisible { + opacity: 0; + + filter: alpha(opacity=0); +} + +.cropper-bg { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC'); +} + +.cropper-hide { + position: absolute; + + display: block; + + width: 0; + height: 0; +} + +.cropper-hidden { + display: none !important; +} + +.cropper-move { + cursor: move; +} + +.cropper-crop { + cursor: crosshair; +} + +.cropper-disabled .cropper-drag-box, +.cropper-disabled .cropper-face, +.cropper-disabled .cropper-line, +.cropper-disabled .cropper-point { + cursor: not-allowed; +} From 768008f605e59601585cc32c8f6efbfedb659c30 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Thu, 17 Mar 2016 09:41:38 -0500 Subject: [PATCH 010/132] Respond to json requests --- app/controllers/profiles_controller.rb | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/controllers/profiles_controller.rb b/app/controllers/profiles_controller.rb index 32fca6b838e..30e2886caca 100644 --- a/app/controllers/profiles_controller.rb +++ b/app/controllers/profiles_controller.rb @@ -11,15 +11,16 @@ class ProfilesController < Profiles::ApplicationController def update user_params.except!(:email) if @user.ldap_user? - if @user.update_attributes(user_params) - flash[:notice] = "Profile was successfully updated" - else - messages = @user.errors.full_messages.uniq.join('. ') - flash[:alert] = "Failed to update profile. #{messages}" - end - respond_to do |format| - format.html { redirect_back_or_default(default: { action: 'show' }) } + if @user.update_attributes(user_params) + message = "Profile was successfully updated" + format.html { redirect_back_or_default(default: { action: 'show' }, options: { notice: message }) } + format.json { render json: { message: message } } + else + message = @user.errors.full_messages.uniq.join('. ') + format.html { redirect_back_or_default(default: { action: 'show' }, options: { alert: "Failed to update profile. #{message}" }) } + format.json { render json: { message: message }, status: :unprocessable_entity } + end end end From 8ffc04ebc9723bed25721cbb84ab01f0843c7a92 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Thu, 17 Mar 2016 09:44:08 -0500 Subject: [PATCH 011/132] Add GitLabCrop class --- app/assets/javascripts/gl_crop.js.coffee | 118 +++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 app/assets/javascripts/gl_crop.js.coffee diff --git a/app/assets/javascripts/gl_crop.js.coffee b/app/assets/javascripts/gl_crop.js.coffee new file mode 100644 index 00000000000..5d5b2c406a3 --- /dev/null +++ b/app/assets/javascripts/gl_crop.js.coffee @@ -0,0 +1,118 @@ +class GitLabCrop + constructor: (el, opts = {}) -> + # Input file + @fileInput = $(el) + + # Set defaults + { + @filename + @form = @fileInput.parents('form') + @modalCrop = '.modal-profile-crop' + + # Button where user clicks to open file dialog + # If not passed as argument let's pick a default one + @pickImageEl = @fileInput.parent().find('.js-choose-user-avatar-button') + @uploadImageBtn = $('.js-upload-user-avatar') + } = opts + + # Ensure @modalCrop is a jQuery Object + @modalCrop = $(@modalCrop) + @modalCropImg = $('.modal-profile-crop-image') + @cropActionsBtn = @modalCrop.find('[data-method]') + + @bindEvents() + + bindEvents: -> + self = @ + @fileInput.on 'change', (e) -> + self.onFileInputChange(e, @) + + @pickImageEl.on 'click', @onPickImageClick + @modalCrop.on 'shown.bs.modal', @onModalShow + @modalCrop.on 'hidden.bs.modal', @onModalHide + @uploadImageBtn.on 'click', @onUploadImageBtnClick + @cropActionsBtn.on 'click', (e) -> + btn = @ + self.onActionBtnClick(btn) + @croppedImageBlob = null + + onPickImageClick: => + @fileInput.trigger('click') + + onModalShow: => + @modalCropImg.cropper( + viewMode: 1 + center: false + aspectRatio: 1 + modal: true + scalable: false + rotatable: false + zoomable: true + dragMode: 'move' + guides: false + zoomOnTouch: false + zoomOnWheel: false + cropBoxMovable: false + cropBoxResizable: false + toggleDragModeOnDblclick: false + built: -> + container = $(@).cropper 'getContainerData' + cropBoxWidth = 200; + cropBoxHeight = 200; + + $(@).cropper('setCropBoxData', + width: cropBoxWidth, + height: cropBoxHeight, + left: (container.width - cropBoxWidth) / 2, + top: (container.height - cropBoxHeight) / 2 + ) + ) + + + onModalHide: => + @modalCropImg + .attr('src', '') # Remove attached image + .cropper('destroy') # Destroy cropper instance + + onUploadImageBtnClick: (e) => + e.preventDefault() + @setBlob() + @modalCrop.modal('hide') + # @form.submit(); + + onActionBtnClick: (btn) -> + data = $(btn).data() + + if @modalCropImg.data('cropper') && data.method + data = $.extend {}, data + result = @modalCropImg.cropper data.method, data.option + + onFileInputChange: (e, input) -> + @readFile(input) + + readFile: (input) -> + self = @ + reader = new FileReader + reader.onload = -> + self.modalCropImg.attr('src', reader.result) + self.modalCrop.modal('show') + + reader.readAsDataURL(input.files[0]) + + dataURLtoBlob: (dataURL) -> + binary = atob(dataURL.split(',')[1]) + array = [] + for v, k in binary + array.push(binary.charCodeAt(k)) + new Blob([new Uint8Array(array)], type: 'image/png') + + setBlob: -> + dataURL = @modalCropImg.cropper('getCroppedCanvas').toDataURL('image/png') + @croppedImageBlob = @dataURLtoBlob(dataURL) + + getBlob: -> + @croppedImageBlob + +$.fn.glCrop = (opts) -> + return @.each -> + $(@).data('glcrop', new GitLabCrop(@, opts)) From 707be371eecda44b989f672fc12950a72bd2c502 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Thu, 17 Mar 2016 09:46:50 -0500 Subject: [PATCH 012/132] Handle form submit via ajax and crop avatar on the client --- app/assets/javascripts/profile.js.coffee | 43 +++++++++++++++++++----- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/app/assets/javascripts/profile.js.coffee b/app/assets/javascripts/profile.js.coffee index 20f87440551..f81d7dd6e69 100644 --- a/app/assets/javascripts/profile.js.coffee +++ b/app/assets/javascripts/profile.js.coffee @@ -1,5 +1,9 @@ class @Profile - constructor: -> + constructor: (opts = {}) -> + { + @form = $('.edit-user') + } = opts + # Automatically submit the Preferences form when any of its radio buttons change $('.js-preferences-form').on 'change.preference', 'input[type=radio]', -> $(this).parents('form').submit() @@ -17,14 +21,37 @@ class @Profile $('.update-notifications').on 'ajax:complete', -> $(this).find('.btn-save').enable() - $('.js-choose-user-avatar-button').bind "click", -> - form = $(this).closest("form") - form.find(".js-user-avatar-input").click() + @bindEvents() - $('.js-user-avatar-input').bind "change", -> - form = $(this).closest("form") - filename = $(this).val().replace(/^.*[\\\/]/, '') - form.find(".js-avatar-filename").text(filename) + @avatarGlCrop = $('.js-user-avatar-input').glCrop().data 'glcrop' + + bindEvents: -> + @form.on 'submit', @onSubmitForm + + onSubmitForm: (e) => + e.preventDefault() + @saveForm() + + saveForm: -> + self = @ + + formData = new FormData(@form[0]) + formData.append('user[avatar]', @avatarGlCrop.getBlob(), 'avatar.png') + + $.ajax + url: @form.attr('action') + type: @form.attr('method') + data: formData + dataType: "json" + processData: false + contentType: false + success: (response) -> + new Flash(response.message, 'notice') + error: (jqXHR) -> + new Flash(jqXHR.responseJSON.message, 'alert') + complete: -> + window.scrollTo 0, 0 + self.form.find(':input[disabled]').enable() $ -> # Extract the SSH Key title from its comment From 7216ce97f748988c644b1baff2ec42006e508fbc Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Thu, 17 Mar 2016 09:48:47 -0500 Subject: [PATCH 013/132] Add modal dialog --- app/assets/stylesheets/pages/profile.scss | 17 ++++++++++++++++ app/views/profiles/show.html.haml | 24 ++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/pages/profile.scss b/app/assets/stylesheets/pages/profile.scss index 260179074cf..0cd37e7014f 100644 --- a/app/assets/stylesheets/pages/profile.scss +++ b/app/assets/stylesheets/pages/profile.scss @@ -197,3 +197,20 @@ width: 105px; } } + +.modal-profile-crop { + .modal-dialog { + width: 380px; + } + + .profile-crop-image-container { + width: 350px; + height: 350px; + margin: 0 auto; + } + + .crop-controls { + padding: 10px 0 0 0; + text-align: center; + } +} diff --git a/app/views/profiles/show.html.haml b/app/views/profiles/show.html.haml index cd582ba7060..2d9129470f8 100644 --- a/app/views/profiles/show.html.haml +++ b/app/views/profiles/show.html.haml @@ -26,7 +26,7 @@ %a.btn.js-choose-user-avatar-button Browse file... %span.avatar-file-name.prepend-left-default.js-avatar-filename No file chosen - = f.file_field :avatar, class: "js-user-avatar-input hidden" + = f.file_field :avatar_dialog_trigger, class: "js-user-avatar-input hidden", accept: "image/*" .help-block The maximum file size allowed is 200KB. - if @user.avatar? @@ -94,3 +94,25 @@ .prepend-top-default.append-bottom-default = f.submit 'Update profile settings', class: "btn btn-success" = link_to "Cancel", user_path(current_user), class: "btn btn-cancel" + +.modal.modal-profile-crop + .modal-dialog + .modal-content + .modal-header + %button.close{:type => "button", :'data-dismiss' => "modal"} + %span + × + %h4.modal-title + Position and size your new avatar + .modal-body + .profile-crop-image-container + %img.modal-profile-crop-image + .crop-controls + .btn-group + %button.btn.btn-primary{ data: { method: "zoom", option: "0.1" } } + %span.fa.fa-search-plus + %button.btn.btn-primary{ data: { method: "zoom", option: "-0.1" } } + %span.fa.fa-search-minus + .modal-footer + %button.btn.btn-primary.js-upload-user-avatar{:type => "button"} + Set new profile picture From 95cc46a44a2d871fe700ed08850851f863ef2408 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Thu, 17 Mar 2016 11:34:21 -0500 Subject: [PATCH 014/132] Allow to set crop box and export image dimensions --- app/assets/javascripts/gl_crop.js.coffee | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/app/assets/javascripts/gl_crop.js.coffee b/app/assets/javascripts/gl_crop.js.coffee index 5d5b2c406a3..276e56b4349 100644 --- a/app/assets/javascripts/gl_crop.js.coffee +++ b/app/assets/javascripts/gl_crop.js.coffee @@ -6,8 +6,13 @@ class GitLabCrop # Set defaults { @filename + @previewImage = $('.avatar-image .avatar') @form = @fileInput.parents('form') @modalCrop = '.modal-profile-crop' + @exportWidth = 200 + @exportHeight = 200 + @cropBoxWidth = 200 + @cropBoxHeight = 200 # Button where user clicks to open file dialog # If not passed as argument let's pick a default one @@ -40,6 +45,7 @@ class GitLabCrop @fileInput.trigger('click') onModalShow: => + self = @ @modalCropImg.cropper( viewMode: 1 center: false @@ -57,8 +63,8 @@ class GitLabCrop toggleDragModeOnDblclick: false built: -> container = $(@).cropper 'getContainerData' - cropBoxWidth = 200; - cropBoxHeight = 200; + cropBoxWidth = self.cropBoxWidth; + cropBoxHeight = self.cropBoxHeight; $(@).cropper('setCropBoxData', width: cropBoxWidth, @@ -77,8 +83,8 @@ class GitLabCrop onUploadImageBtnClick: (e) => e.preventDefault() @setBlob() + @setPreview() @modalCrop.modal('hide') - # @form.submit(); onActionBtnClick: (btn) -> data = $(btn).data() @@ -106,9 +112,15 @@ class GitLabCrop array.push(binary.charCodeAt(k)) new Blob([new Uint8Array(array)], type: 'image/png') + setPreview: -> + @previewImage.attr('src', @dataURL) + setBlob: -> - dataURL = @modalCropImg.cropper('getCroppedCanvas').toDataURL('image/png') - @croppedImageBlob = @dataURLtoBlob(dataURL) + @dataURL = @modalCropImg.cropper('getCroppedCanvas', + width: 200 + height: 200 + ).toDataURL('image/png') + @croppedImageBlob = @dataURLtoBlob(@dataURL) getBlob: -> @croppedImageBlob From 358545b8d2b41b24bdb8dc581f9541122212ae56 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Thu, 17 Mar 2016 11:34:31 -0500 Subject: [PATCH 015/132] Make it responsive --- app/assets/stylesheets/pages/profile.scss | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/assets/stylesheets/pages/profile.scss b/app/assets/stylesheets/pages/profile.scss index 0cd37e7014f..3831f88f01e 100644 --- a/app/assets/stylesheets/pages/profile.scss +++ b/app/assets/stylesheets/pages/profile.scss @@ -201,11 +201,15 @@ .modal-profile-crop { .modal-dialog { width: 380px; + + @media (max-width: $screen-sm-min) { + width: auto; + } + } .profile-crop-image-container { - width: 350px; - height: 350px; + height: 300px; margin: 0 auto; } From 9ed1cbf2176bcab22d522373b2830338dc5c7c69 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Thu, 17 Mar 2016 13:20:30 -0500 Subject: [PATCH 016/132] Show filename after setting a cropped image --- app/assets/javascripts/gl_crop.js.coffee | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/gl_crop.js.coffee b/app/assets/javascripts/gl_crop.js.coffee index 276e56b4349..4d990a6416a 100644 --- a/app/assets/javascripts/gl_crop.js.coffee +++ b/app/assets/javascripts/gl_crop.js.coffee @@ -5,9 +5,9 @@ class GitLabCrop # Set defaults { - @filename - @previewImage = $('.avatar-image .avatar') @form = @fileInput.parents('form') + @filename = '.js-avatar-filename' + @previewImage = $('.avatar-image .avatar') @modalCrop = '.modal-profile-crop' @exportWidth = 200 @exportHeight = 200 @@ -20,13 +20,20 @@ class GitLabCrop @uploadImageBtn = $('.js-upload-user-avatar') } = opts - # Ensure @modalCrop is a jQuery Object - @modalCrop = $(@modalCrop) + # Ensure needed elements are jquery objects + @filename = if _.isString(@filename) then @$(@filename) else @filename + + # Modal usually is outside the wrapper element + @modalCrop = if _.isString(@modalCrop) then $(@modalCrop) else @modalCrop + @modalCropImg = $('.modal-profile-crop-image') @cropActionsBtn = @modalCrop.find('[data-method]') @bindEvents() + $: (selector) -> + $(selector, @form) + bindEvents: -> self = @ @fileInput.on 'change', (e) -> @@ -114,6 +121,8 @@ class GitLabCrop setPreview: -> @previewImage.attr('src', @dataURL) + filename = @fileInput.val().replace(/^.*[\\\/]/, '') + @filename.text(filename) setBlob: -> @dataURL = @modalCropImg.cropper('getCroppedCanvas', From bc70597908c2aa144472b28c891306a6d9390c34 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Thu, 17 Mar 2016 14:30:38 -0500 Subject: [PATCH 017/132] Fix failing spec --- app/assets/javascripts/gl_crop.js.coffee | 11 ++++++++--- app/views/profiles/show.html.haml | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/gl_crop.js.coffee b/app/assets/javascripts/gl_crop.js.coffee index 4d990a6416a..6ab0afc184f 100644 --- a/app/assets/javascripts/gl_crop.js.coffee +++ b/app/assets/javascripts/gl_crop.js.coffee @@ -1,7 +1,12 @@ class GitLabCrop - constructor: (el, opts = {}) -> - # Input file - @fileInput = $(el) + constructor: (input, opts = {}) -> + @fileInput = $(input) + + # We should rename to avoid spec to fail + # Form will submit the proper input filed with a file using FormData + @fileInput + .attr('name', "#{@fileInput.attr('name')}-trigger") + .attr('id', "#{@fileInput.attr('id')}-trigger") # Set defaults { diff --git a/app/views/profiles/show.html.haml b/app/views/profiles/show.html.haml index 2d9129470f8..dcb3be9585d 100644 --- a/app/views/profiles/show.html.haml +++ b/app/views/profiles/show.html.haml @@ -26,7 +26,7 @@ %a.btn.js-choose-user-avatar-button Browse file... %span.avatar-file-name.prepend-left-default.js-avatar-filename No file chosen - = f.file_field :avatar_dialog_trigger, class: "js-user-avatar-input hidden", accept: "image/*" + = f.file_field :avatar, class: "js-user-avatar-input hidden", accept: "image/*" .help-block The maximum file size allowed is 200KB. - if @user.avatar? From 647f28bd1d92eabe239a7f0f4a65eb100c0cda73 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Thu, 17 Mar 2016 14:59:43 -0500 Subject: [PATCH 018/132] Make it generic --- app/assets/javascripts/gl_crop.js.coffee | 26 ++++++++++++++---------- app/assets/javascripts/profile.js.coffee | 10 ++++++++- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/app/assets/javascripts/gl_crop.js.coffee b/app/assets/javascripts/gl_crop.js.coffee index 6ab0afc184f..137d025ed26 100644 --- a/app/assets/javascripts/gl_crop.js.coffee +++ b/app/assets/javascripts/gl_crop.js.coffee @@ -10,28 +10,32 @@ class GitLabCrop # Set defaults { - @form = @fileInput.parents('form') - @filename = '.js-avatar-filename' - @previewImage = $('.avatar-image .avatar') - @modalCrop = '.modal-profile-crop' @exportWidth = 200 @exportHeight = 200 @cropBoxWidth = 200 @cropBoxHeight = 200 + @form = @fileInput.parents('form') - # Button where user clicks to open file dialog - # If not passed as argument let's pick a default one - @pickImageEl = @fileInput.parent().find('.js-choose-user-avatar-button') - @uploadImageBtn = $('.js-upload-user-avatar') + # Required params + @filename + @previewImage + @modalCrop + @pickImageEl + @uploadImageBtn + @modalCropImg } = opts # Ensure needed elements are jquery objects - @filename = if _.isString(@filename) then @$(@filename) else @filename + # If selector is provided we will convert them to a jQuery Object + @filename = @$(@filename) + @previewImage = @$(@previewImage) + @pickImageEl = @$(@pickImageEl) - # Modal usually is outside the wrapper element + # Modal elements usually are outside the @form element @modalCrop = if _.isString(@modalCrop) then $(@modalCrop) else @modalCrop + @uploadImageBtn = if _.isString(@uploadImageBtn) then $(@uploadImageBtn) else @uploadImageBtn + @modalCropImg = if _.isString(@modalCropImg) then $(@modalCropImg) else @modalCropImg - @modalCropImg = $('.modal-profile-crop-image') @cropActionsBtn = @modalCrop.find('[data-method]') @bindEvents() diff --git a/app/assets/javascripts/profile.js.coffee b/app/assets/javascripts/profile.js.coffee index f81d7dd6e69..2fcc6dfd56e 100644 --- a/app/assets/javascripts/profile.js.coffee +++ b/app/assets/javascripts/profile.js.coffee @@ -23,7 +23,15 @@ class @Profile @bindEvents() - @avatarGlCrop = $('.js-user-avatar-input').glCrop().data 'glcrop' + cropOpts = + filename: '.js-avatar-filename' + previewImage: '.avatar-image .avatar' + modalCrop: '.modal-profile-crop' + pickImageEl: '.js-choose-user-avatar-button' + uploadImageBtn: '.js-upload-user-avatar' + modalCropImg: '.modal-profile-crop-image' + + @avatarGlCrop = $('.js-user-avatar-input').glCrop(cropOpts).data 'glcrop' bindEvents: -> @form.on 'submit', @onSubmitForm From efa1bc372fbfbf0503b7452e17c7034c512e19bc Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Thu, 17 Mar 2016 13:20:05 +0200 Subject: [PATCH 019/132] Fix typos and add a paragraph to urge people to mention the relevant MR [ci skip] --- CONTRIBUTING.md | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a946c2cd882..5d4aa61fb12 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -245,22 +245,25 @@ addressed. ### Technical debt -In order to track things that can be improved in GitLab codebase, we created a -*technical debt* label in [issue tracker of CE][ce-tracker]. +In order to track things that can be improved in GitLab's codebase, we created +the ~"Technical debt" label in [GitLab's issue tracker][ce-tracker]. This label should be added to issues that describe things that can be improved, -shortcuts that has been taken, code that needs refactoring, features that need +shortcuts that have been taken, code that needs refactoring, features that need additional attention, and all other things that have been left behind due to high velocity of development. -Everyone can create an issue (though you may need to ask for adding a specific -label, if you do not have permissions to do it by yourself), additional labels -can be combined with *technical debt* label, to make it easier to schedule the -improvements for a release. +Everyone can create an issue, though you may need to ask for adding a specific +label, if you do not have permissions to do it by yourself. Additional labels +can be combined with the `Technical debt` label, to make it easier to schedule +the improvements for a release. -Issues with *technical debt* label have a same priority like issues that -describe a new features that can be introduced in GitLab, and should be -scheduled for a release by appropriate person. +Issues tagged with the `Technical debt` label have the same priority like issues +that describe a new feature to be introduced in GitLab, and should be scheduled +for a release by the appropriate person. + +Make sure to mention the merge request that the `Technical debt` issue is +associated with in the description of the issue. ## Merge requests From 01b70c6c297c8be013b59c68a0c6b93318dcd021 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Fri, 18 Mar 2016 09:36:44 +0200 Subject: [PATCH 020/132] No newlines between list items --- doc/gitlab-basics/README.md | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/doc/gitlab-basics/README.md b/doc/gitlab-basics/README.md index 493e1d1b09c..115480d210b 100644 --- a/doc/gitlab-basics/README.md +++ b/doc/gitlab-basics/README.md @@ -2,26 +2,15 @@ Step-by-step guides on the basics of working with Git and GitLab. -* [Start using Git on the command line](start-using-git.md) - -* [Create and add your SSH Keys](create-your-ssh-keys.md) - -* [Command Line basic commands](command-line-commands.md) - -* [Basic Git commands](basic-git-commands.md) - -* [Create a project](create-project.md) - -* [Create a group](create-group.md) - -* [Create a branch](create-branch.md) - -* [Fork a project](fork-project.md) - -* [Add a file](add-file.md) - -* [Add an image](add-image.md) - -* [Create a Merge Request](add-merge-request.md) - -* [Create an Issue](create-issue.md) +- [Start using Git on the command line](start-using-git.md) +- [Create and add your SSH Keys](create-your-ssh-keys.md) +- [Command Line basic commands](command-line-commands.md) +- [Basic Git commands](basic-git-commands.md) +- [Create a project](create-project.md) +- [Create a group](create-group.md) +- [Create a branch](create-branch.md) +- [Fork a project](fork-project.md) +- [Add a file](add-file.md) +- [Add an image](add-image.md) +- [Create a Merge Request](add-merge-request.md) +- [Create an Issue](create-issue.md) From 691d5db5986f8f57d187d3da19c69ef92087fe75 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Fri, 18 Mar 2016 12:11:41 +0000 Subject: [PATCH 021/132] Change capitalization --- CONTRIBUTING.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5d4aa61fb12..511336f384c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -246,7 +246,7 @@ addressed. ### Technical debt In order to track things that can be improved in GitLab's codebase, we created -the ~"Technical debt" label in [GitLab's issue tracker][ce-tracker]. +the ~"technical debt" label in [GitLab's issue tracker][ce-tracker]. This label should be added to issues that describe things that can be improved, shortcuts that have been taken, code that needs refactoring, features that need @@ -255,14 +255,14 @@ high velocity of development. Everyone can create an issue, though you may need to ask for adding a specific label, if you do not have permissions to do it by yourself. Additional labels -can be combined with the `Technical debt` label, to make it easier to schedule +can be combined with the `technical debt` label, to make it easier to schedule the improvements for a release. -Issues tagged with the `Technical debt` label have the same priority like issues +Issues tagged with the `technical debt` label have the same priority like issues that describe a new feature to be introduced in GitLab, and should be scheduled for a release by the appropriate person. -Make sure to mention the merge request that the `Technical debt` issue is +Make sure to mention the merge request that the `technical debt` issue is associated with in the description of the issue. ## Merge requests From 4366af51558f667b4d5882e4f01701ec993e12cc Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 18 Mar 2016 12:54:10 +0000 Subject: [PATCH 022/132] Added JS to fix dropdown alignment Closes #14386 --- app/assets/javascripts/dropdowns.js.coffee | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 app/assets/javascripts/dropdowns.js.coffee diff --git a/app/assets/javascripts/dropdowns.js.coffee b/app/assets/javascripts/dropdowns.js.coffee new file mode 100644 index 00000000000..715ac644bdb --- /dev/null +++ b/app/assets/javascripts/dropdowns.js.coffee @@ -0,0 +1,10 @@ +$ -> + $('[data-toggle="dropdown"]').each -> + $dropdown = $(@).parent() + $menu = $dropdown.find('.dropdown-menu') + + $dropdown.on 'shown.bs.dropdown', -> + dropdownRight = $menu.offset().left + $menu.outerWidth() + + if dropdownRight >= $(window).width() + $menu.addClass 'dropdown-menu-align-right' From b3b219dae742ca8ae30569565e8eb8fe48f40565 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Mon, 14 Mar 2016 18:30:53 -0500 Subject: [PATCH 023/132] Display nav controls on mobile --- app/assets/stylesheets/framework/nav.scss | 25 ++++++++++++++++++++--- app/views/projects/issues/index.html.haml | 2 ++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/app/assets/stylesheets/framework/nav.scss b/app/assets/stylesheets/framework/nav.scss index 5f4ce87b085..9d1b7199705 100644 --- a/app/assets/stylesheets/framework/nav.scss +++ b/app/assets/stylesheets/framework/nav.scss @@ -102,6 +102,10 @@ display: inline-block; } + .icon-label { + display: none; + } + input { height: 34px; display: inline-block; @@ -124,9 +128,24 @@ } } - /* Hide on extra small devices (phones) */ - @media (max-width: $screen-xs-max) { - display: none; + @media (max-width: 600px) { + .btn, form { + margin: 0 0 10px 0; + display: block; + } + + form { + display: block; + height: auto; + } + + input.input-short { + width: 100%; + } + + .icon-label { + display: inline-block; + } } /* Small devices (tablets, 768px and lower) */ diff --git a/app/views/projects/issues/index.html.haml b/app/views/projects/issues/index.html.haml index fde9304c0f8..efa7642b2dc 100644 --- a/app/views/projects/issues/index.html.haml +++ b/app/views/projects/issues/index.html.haml @@ -11,6 +11,8 @@ - if current_user = link_to namespace_project_issues_path(@project.namespace, @project, :atom, { private_token: current_user.private_token }), class: 'btn append-right-10' do = icon('rss') + %span.icon-label + Subscribe = render 'shared/issuable/search_form', path: namespace_project_issues_path(@project.namespace, @project) - if can? current_user, :create_issue, @project = link_to new_namespace_project_issue_path(@project.namespace, @project, issue: { assignee_id: @issuable_finder.assignee.try(:id), milestone_id: @issuable_finder.milestones.try(:first).try(:id) }), class: "btn btn-new", title: "New Issue", id: "new_issue_link" do From 748e0b9c546ea9a93efbe039826905775dd34604 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Tue, 15 Mar 2016 13:47:26 -0500 Subject: [PATCH 024/132] Sidebar should be on top of dropdowns --- app/assets/stylesheets/framework/sidebar.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/framework/sidebar.scss b/app/assets/stylesheets/framework/sidebar.scss index be05db58c40..6107c8a6d0a 100644 --- a/app/assets/stylesheets/framework/sidebar.scss +++ b/app/assets/stylesheets/framework/sidebar.scss @@ -39,7 +39,7 @@ } .sidebar-wrapper { - z-index: 999; + z-index: 1000; background: $background-color; } From 9c42c197ce31c1ac9d77d97aec294cf4fee826da Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Tue, 15 Mar 2016 14:00:52 -0500 Subject: [PATCH 025/132] Fixes inputs width inside .nav-controls --- app/assets/stylesheets/framework/common.scss | 1 - app/assets/stylesheets/framework/filters.scss | 8 ++++++++ app/assets/stylesheets/framework/nav.scss | 18 ++++++++++++++++-- app/views/dashboard/issues.html.haml | 2 ++ 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/app/assets/stylesheets/framework/common.scss b/app/assets/stylesheets/framework/common.scss index bc03c2180be..7285ccec797 100644 --- a/app/assets/stylesheets/framework/common.scss +++ b/app/assets/stylesheets/framework/common.scss @@ -375,7 +375,6 @@ table { position: absolute; top: 0; right: 0; - width: 250px !important; visibility: hidden; } } diff --git a/app/assets/stylesheets/framework/filters.scss b/app/assets/stylesheets/framework/filters.scss index 40a508c1ebc..99e49a70923 100644 --- a/app/assets/stylesheets/framework/filters.scss +++ b/app/assets/stylesheets/framework/filters.scss @@ -11,3 +11,11 @@ } } } + +@media (max-width: $screen-xs-max) { + .filter-item { + display: block; + margin: 0 0 10px 0; + } +} + diff --git a/app/assets/stylesheets/framework/nav.scss b/app/assets/stylesheets/framework/nav.scss index 9d1b7199705..2122ee85c58 100644 --- a/app/assets/stylesheets/framework/nav.scss +++ b/app/assets/stylesheets/framework/nav.scss @@ -128,15 +128,23 @@ } } - @media (max-width: 600px) { - .btn, form { + @media (max-width: $screen-xs-max) { + padding-bottom: 0; + + .btn, form, .dropdown, .dropdown-menu-toggle, .form-control { margin: 0 0 10px 0; display: block; + width: 100%; } form { display: block; height: auto; + + input { + width: 100%; + margin: 0 0 10px 0; + } } input.input-short { @@ -146,6 +154,12 @@ .icon-label { display: inline-block; } + + // Applies on /dashboard/issues + .project-item-select-holder { + display: block; + margin: 0; + } } /* Small devices (tablets, 768px and lower) */ diff --git a/app/views/dashboard/issues.html.haml b/app/views/dashboard/issues.html.haml index dfa5f80eef8..1eec4db45a0 100644 --- a/app/views/dashboard/issues.html.haml +++ b/app/views/dashboard/issues.html.haml @@ -10,6 +10,8 @@ - if current_user = link_to issues_dashboard_url(format: :atom, private_token: current_user.private_token), class: 'btn' do = icon('rss') + %span.icon-label + Subscribe = render 'shared/new_project_item_select', path: 'issues/new', label: "New Issue" = render 'shared/issuable/filter', type: :issues From cc66dbeac9754af7253d83d379c6a3b60bc7d6fd Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Tue, 15 Mar 2016 14:34:45 -0500 Subject: [PATCH 026/132] Add missing label --- app/views/groups/issues.html.haml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/views/groups/issues.html.haml b/app/views/groups/issues.html.haml index b0805593fdc..aea35c50862 100644 --- a/app/views/groups/issues.html.haml +++ b/app/views/groups/issues.html.haml @@ -10,6 +10,8 @@ - if current_user = link_to issues_group_url(@group, format: :atom, private_token: current_user.private_token), class: 'btn' do = icon('rss') + %span.icon-label + Subscribe = render 'shared/new_project_item_select', path: 'issues/new', label: "New Issue" = render 'shared/issuable/filter', type: :issues From c75c8409763c702a564e3b99472306c803b5029c Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Fri, 18 Mar 2016 15:02:45 -0500 Subject: [PATCH 027/132] Adjust CSS --- app/assets/stylesheets/framework/nav.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/stylesheets/framework/nav.scss b/app/assets/stylesheets/framework/nav.scss index 2122ee85c58..625a0bf69c6 100644 --- a/app/assets/stylesheets/framework/nav.scss +++ b/app/assets/stylesheets/framework/nav.scss @@ -143,11 +143,11 @@ input { width: 100%; - margin: 0 0 10px 0; + margin: 0 0 10px; } } - input.input-short { + .input-short { width: 100%; } From 8d7ad53561f2e49365827d086bd1c5ec2b0ce5e7 Mon Sep 17 00:00:00 2001 From: connorshea Date: Fri, 18 Mar 2016 14:10:24 -0600 Subject: [PATCH 028/132] Disabled SelectorFormat rule for SCSS Lint in order to get the Rake task passing sooner. Discussed in #14299. [ci skip] --- .scss-lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.scss-lint.yml b/.scss-lint.yml index e350b2073c3..937d3407b60 100644 --- a/.scss-lint.yml +++ b/.scss-lint.yml @@ -100,7 +100,7 @@ linters: # Selectors should always use hyphenated-lowercase, rather than camelCase or # snake_case. SelectorFormat: - enabled: true + enabled: false convention: hyphenated_lowercase # Prefer the shortest shorthand form possible for properties that support it. From ce13cfc6263fd602f31ce71f1e62e7da547824ca Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Sat, 19 Mar 2016 15:07:00 +0200 Subject: [PATCH 029/132] Add more options and missing links [ci skip] --- doc/intro/README.md | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/doc/intro/README.md b/doc/intro/README.md index 864d5812ed8..77be030bea1 100644 --- a/doc/intro/README.md +++ b/doc/intro/README.md @@ -7,7 +7,7 @@ ## Prioritize -> Create issues, labels, milestones, voting, and review issues +> Create issues, labels, milestones, cast your vote and review issues - [Create a new issue](../gitlab-basics/create-issue.md) - [Assign labels to issues](../workflow/labels.md) @@ -18,23 +18,25 @@ > Create merge requests, diffs, commits, and review code +- [Fork a project and contribute to it](../workflow/forking_workflow.md) - [Create a new merge request](../gitlab-basics/add-merge-request.md) -- Review merge requests easily using inline comments +- [Automatically close issues from merge requests](../customization/issue_closing.md) +- [Automatically merge when your builds succeed](../workflow/merge_when_build_succeeds.md) +- [Revert any commit](../workflow/revert_changes.md) -## Deploy +## Test and Deploy -> Use built-in continuous integration in GitLab, or use your favorite CI tool. +> Use the built-in continuous integration in GitLab - [GitLab CI quick start guide](../ci/quick_start/README.md) -## Install +## Install and Update > Install and update your GitLab installation. - Install GitLab - - Omnibus + - [Omnibus](https://about.gitlab.com/downloads/) - [Source](../install/installation.md) -- Upgrade GitLab -- Learn about GitLab Omnibus architecture -- GitLab Omnibus configuration options -- Migrating from source installation to GitLab Omnibus +- [Update GitLab](update/README.md) +- [GitLab Omnibus configuration options](http://doc.gitlab.com/omnibus/settings/configuration.html) +- [Migrating from source installation to GitLab Omnibus](http://doc.gitlab.com/omnibus/update/README.html) From f4bbc6711514ed770151821387a2886ecdc54239 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Sat, 19 Mar 2016 15:42:03 +0200 Subject: [PATCH 030/132] Add h1 heading --- doc/intro/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/intro/README.md b/doc/intro/README.md index 77be030bea1..fa5fb7dac40 100644 --- a/doc/intro/README.md +++ b/doc/intro/README.md @@ -1,3 +1,5 @@ +# Get started with GitLab + ## Organize > Create projects and groups From daf5b10905812a81437977a614464ce14759e758 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Sat, 19 Mar 2016 15:42:24 +0200 Subject: [PATCH 031/132] Simplify install and update section [ci skip] --- doc/intro/README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/doc/intro/README.md b/doc/intro/README.md index fa5fb7dac40..0365713cd37 100644 --- a/doc/intro/README.md +++ b/doc/intro/README.md @@ -36,9 +36,6 @@ > Install and update your GitLab installation. -- Install GitLab - - [Omnibus](https://about.gitlab.com/downloads/) - - [Source](../install/installation.md) -- [Update GitLab](update/README.md) +- [Install GitLab](https://about.gitlab.com/installation/) +- [Update GitLab](https://about.gitlab.com/update/) - [GitLab Omnibus configuration options](http://doc.gitlab.com/omnibus/settings/configuration.html) -- [Migrating from source installation to GitLab Omnibus](http://doc.gitlab.com/omnibus/update/README.html) From 59e51e3cabfb960f5b78b8f8cda7478c79846de5 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Mon, 21 Mar 2016 11:31:50 +0000 Subject: [PATCH 032/132] Fixed bug where participants would not work correctly on merge requests Also fixed alignment bug with can't merge badge --- .../javascripts/issuable_context.js.coffee | 28 +++++++++++++++++-- app/assets/javascripts/issue.js.coffee | 25 ----------------- .../shared/issuable/_participants.html.haml | 2 +- app/views/shared/issuable/_sidebar.html.haml | 6 ++-- 4 files changed, 30 insertions(+), 31 deletions(-) diff --git a/app/assets/javascripts/issuable_context.js.coffee b/app/assets/javascripts/issuable_context.js.coffee index e52b73f94f6..d6d09b36d8d 100644 --- a/app/assets/javascripts/issuable_context.js.coffee +++ b/app/assets/javascripts/issuable_context.js.coffee @@ -1,7 +1,7 @@ -#= require jquery.waitforimages - class @IssuableContext constructor: -> + @initParticipants() + new UsersSelect() $('select.select2').select2({width: 'resolve', dropdownAutoWidth: true}) @@ -17,3 +17,27 @@ class @IssuableContext block.find('.js-select2').select2("open") $(".right-sidebar").niceScroll() + + initParticipants: -> + _this = @ + $(document).on "click", ".js-participants-more", @toggleHiddenParticipants + + $(".js-participants-author").each (i) -> + if i >= _this.PARTICIPANTS_ROW_COUNT + $(@) + .addClass "js-participants-hidden" + .hide() + + toggleHiddenParticipants: (e) -> + e.preventDefault() + + currentText = $(this).text().trim() + lessText = $(this).data("less-text") + originalText = $(this).data("original-text") + + if currentText is originalText + $(this).text(lessText) + else + $(this).text(originalText) + + $(".js-participants-hidden").toggle() diff --git a/app/assets/javascripts/issue.js.coffee b/app/assets/javascripts/issue.js.coffee index f50df1f5ea3..d663e34871c 100644 --- a/app/assets/javascripts/issue.js.coffee +++ b/app/assets/javascripts/issue.js.coffee @@ -7,7 +7,6 @@ class @Issue # Prevent duplicate event bindings @disableTaskList() @fixAffixScroll() - @initParticipants() if $('a.btn-close').length @initTaskList() @initIssueBtnEventListeners() @@ -85,27 +84,3 @@ class @Issue type: 'PATCH' url: $('form.js-issuable-update').attr('action') data: patchData - - initParticipants: -> - _this = @ - $(document).on "click", ".js-participants-more", @toggleHiddenParticipants - - $(".js-participants-author").each (i) -> - if i >= _this.PARTICIPANTS_ROW_COUNT - $(@) - .addClass "js-participants-hidden" - .hide() - - toggleHiddenParticipants: (e) -> - e.preventDefault() - - currentText = $(this).text().trim() - lessText = $(this).data("less-text") - originalText = $(this).data("original-text") - - if currentText is originalText - $(this).text(lessText) - else - $(this).text(originalText) - - $(".js-participants-hidden").toggle() diff --git a/app/views/shared/issuable/_participants.html.haml b/app/views/shared/issuable/_participants.html.haml index 3fb409ff727..33a9a494857 100644 --- a/app/views/shared/issuable/_participants.html.haml +++ b/app/views/shared/issuable/_participants.html.haml @@ -17,4 +17,4 @@ %a.js-participants-more{href: "#", data: {original_text: "+ #{participants_size - 7} more", less_text: "- show less"}} + #{participants_extra} more :javascript - Issue.prototype.PARTICIPANTS_ROW_COUNT = #{participants_row}; + IssuableContext.prototype.PARTICIPANTS_ROW_COUNT = #{participants_row}; diff --git a/app/views/shared/issuable/_sidebar.html.haml b/app/views/shared/issuable/_sidebar.html.haml index 2b95b19facc..5b2772de3f1 100644 --- a/app/views/shared/issuable/_sidebar.html.haml +++ b/app/views/shared/issuable/_sidebar.html.haml @@ -33,11 +33,11 @@ .value.bold.hide-collapsed - if issuable.assignee = link_to_member(@project, issuable.assignee, size: 32) do + - if issuable.instance_of?(MergeRequest) && !issuable.can_be_merged_by?(issuable.assignee) + %span.pull-right.cannot-be-merged{ data: { toggle: 'tooltip', placement: 'left' }, title: 'Not allowed to merge' } + = icon('exclamation-triangle') %span.username = issuable.assignee.to_reference - - if issuable.instance_of?(MergeRequest) && !issuable.can_be_merged_by?(issuable.assignee) - %a.pull-right.cannot-be-merged{href: '#', data: {toggle: 'tooltip'}, title: 'Not allowed to merge'} - = icon('exclamation-triangle') - else .light None From 100e3e7601dd4d3033cd8292814273dd0354722e Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 21 Mar 2016 17:01:38 -0300 Subject: [PATCH 033/132] Fix sorting issues/mrs by votes on the groups page The `non_archived` scope applied here https://gitlab.com/gitlab-org/gitlab-ce/blob/master/app/controllers/conc erns/issues_action.rb#L5 overrides the previous `ORDER BY` applied inside the IssuesFinder, with the default scope of the Project model, resulting in SQL errors. --- CHANGELOG | 1 + app/models/concerns/issuable.rb | 2 +- spec/controllers/groups_controller_spec.rb | 59 +++++++++++++++++++++- 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 20a21abfb69..dc3188e3f6c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -62,6 +62,7 @@ v 8.6.0 (unreleased) - Canceled builds are now ignored in compound build status if marked as `allowed to fail` - Trigger a todo for mentions on commits page - Let project owners and admins soft delete issues and merge requests + - Fix sorting issues by votes on the groups issues page results in SQL errors v 8.5.8 - Bump Git version requirement to 2.7.4 diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index 476e1ce7af0..cf5b2c71675 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -41,7 +41,7 @@ module Issuable scope :join_project, -> { joins(:project) } scope :references_project, -> { references(:project) } - scope :non_archived, -> { join_project.merge(Project.non_archived) } + scope :non_archived, -> { join_project.merge(Project.non_archived.only(:where)) } delegate :name, :email, diff --git a/spec/controllers/groups_controller_spec.rb b/spec/controllers/groups_controller_spec.rb index 938e97298b6..465531b2b36 100644 --- a/spec/controllers/groups_controller_spec.rb +++ b/spec/controllers/groups_controller_spec.rb @@ -1,10 +1,15 @@ require 'rails_helper' describe GroupsController do - describe 'GET index' do + let(:user) { create(:user) } + let(:group) { create(:group) } + let(:project) { create(:project, namespace: group) } + let!(:group_member) { create(:group_member, group: group, user: user) } + + describe 'GET #index' do context 'as a user' do it 'redirects to Groups Dashboard' do - sign_in(create(:user)) + sign_in(user) get :index @@ -20,4 +25,54 @@ describe GroupsController do end end end + + describe 'GET #issues' do + let(:issue_1) { create(:issue, project: project) } + let(:issue_2) { create(:issue, project: project) } + + before do + create_list(:upvote_note, 3, project: project, noteable: issue_2) + create_list(:upvote_note, 2, project: project, noteable: issue_1) + create_list(:downvote_note, 2, project: project, noteable: issue_2) + + sign_in(user) + end + + context 'sorting by votes' do + it 'sorts most popular issues' do + get :issues, id: group.to_param, sort: 'upvotes_desc' + expect(assigns(:issues)).to eq [issue_2, issue_1] + end + + it 'sorts least popular issues' do + get :issues, id: group.to_param, sort: 'downvotes_desc' + expect(assigns(:issues)).to eq [issue_2, issue_1] + end + end + end + + describe 'GET #merge_requests' do + let(:merge_request_1) { create(:merge_request, source_project: project) } + let(:merge_request_2) { create(:merge_request, :simple, source_project: project) } + + before do + create_list(:upvote_note, 3, project: project, noteable: merge_request_2) + create_list(:upvote_note, 2, project: project, noteable: merge_request_1) + create_list(:downvote_note, 2, project: project, noteable: merge_request_2) + + sign_in(user) + end + + context 'sorting by votes' do + it 'sorts most popular merge requests' do + get :merge_requests, id: group.to_param, sort: 'upvotes_desc' + expect(assigns(:merge_requests)).to eq [merge_request_2, merge_request_1] + end + + it 'sorts least popular merge requests' do + get :merge_requests, id: group.to_param, sort: 'downvotes_desc' + expect(assigns(:merge_requests)).to eq [merge_request_2, merge_request_1] + end + end + end end From 72517915f8cca9980128901fe7a64f757f230fe4 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Mon, 21 Mar 2016 22:51:26 +0200 Subject: [PATCH 034/132] Remove blockquotes --- doc/intro/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/intro/README.md b/doc/intro/README.md index 0365713cd37..663b326a03b 100644 --- a/doc/intro/README.md +++ b/doc/intro/README.md @@ -2,14 +2,14 @@ ## Organize -> Create projects and groups +Create projects and groups. - [Create a new project](../gitlab-basics/create-project.md) - [Create a new group](../gitlab-basics/create-group.md) ## Prioritize -> Create issues, labels, milestones, cast your vote and review issues +Create issues, labels, milestones, cast your vote and review issues. - [Create a new issue](../gitlab-basics/create-issue.md) - [Assign labels to issues](../workflow/labels.md) @@ -18,7 +18,7 @@ ## Collaborate -> Create merge requests, diffs, commits, and review code +Create merge requests, diffs, commits, and review code. - [Fork a project and contribute to it](../workflow/forking_workflow.md) - [Create a new merge request](../gitlab-basics/add-merge-request.md) @@ -28,13 +28,13 @@ ## Test and Deploy -> Use the built-in continuous integration in GitLab +Use the built-in continuous integration in GitLab. - [GitLab CI quick start guide](../ci/quick_start/README.md) ## Install and Update -> Install and update your GitLab installation. +Install and update your GitLab installation. - [Install GitLab](https://about.gitlab.com/installation/) - [Update GitLab](https://about.gitlab.com/update/) From 5516b6c47fa493cb792ffe501221fe397d1500ae Mon Sep 17 00:00:00 2001 From: Drew Blessing Date: Tue, 8 Mar 2016 16:52:48 -0600 Subject: [PATCH 035/132] Reload the schema before restoring a database backup --- CHANGELOG | 1 + doc/raketasks/backup_restore.md | 3 + doc/update/README.md | 1 + doc/update/restore_after_failure.md | 83 +++++++++++++++++++++++++++ lib/tasks/gitlab/backup.rake | 34 ++++++++--- lib/tasks/gitlab/db.rake | 35 +++++++++++ spec/tasks/gitlab/backup_rake_spec.rb | 40 +++++++------ 7 files changed, 171 insertions(+), 26 deletions(-) create mode 100644 doc/update/restore_after_failure.md create mode 100644 lib/tasks/gitlab/db.rake diff --git a/CHANGELOG b/CHANGELOG index 20a21abfb69..3e3385d769b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -24,6 +24,7 @@ v 8.6.0 (unreleased) - Don't load all of GitLab in mail_room - HTTP error pages work independently from location and config (Artem Sidorenko) - Update `omniauth-saml` to 1.5.0 to allow for custom response attributes to be set + - Add option to reload the schema before restoring a database backup. !2807 - Memoize @group in Admin::GroupsController (Yatish Mehta) - Indicate how much an MR diverged from the target branch (Pierre de La Morinerie) - Added omniauth-auth0 Gem (Daniel Carraro) diff --git a/doc/raketasks/backup_restore.md b/doc/raketasks/backup_restore.md index f6d1234ac4a..4329ac30a1c 100644 --- a/doc/raketasks/backup_restore.md +++ b/doc/raketasks/backup_restore.md @@ -249,6 +249,9 @@ reconfigure` after changing `gitlab-secrets.json`. ### Installation from source ``` +# Stop processes that are connected to the database +sudo service gitlab stop + bundle exec rake gitlab:backup:restore RAILS_ENV=production ``` diff --git a/doc/update/README.md b/doc/update/README.md index 109d5de3fa2..0241f036830 100644 --- a/doc/update/README.md +++ b/doc/update/README.md @@ -15,3 +15,4 @@ Depending on the installation method and your GitLab version, there are multiple - [MySQL to PostgreSQL](mysql_to_postgresql.md) guides you through migrating your database from MySQL to PostgreSQL. - [MySQL installation guide](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/database_mysql.md) contains additional information about configuring GitLab to work with a MySQL database. +- [Restoring from backup after a failed upgrade](restore_after_failure.md) diff --git a/doc/update/restore_after_failure.md b/doc/update/restore_after_failure.md new file mode 100644 index 00000000000..01c52aae7f5 --- /dev/null +++ b/doc/update/restore_after_failure.md @@ -0,0 +1,83 @@ +# Restoring from backup after a failed upgrade + +Upgrades are usually smooth and restoring from backup is a rare occurrence. +However, it's important to know how to recover when problems do arise. + +## Roll back to an earlier version and restore a backup + +In some cases after a failed upgrade, the fastest solution is to roll back to +the previous version you were using. + +First, roll back the code or package. For source installations this involves +checking out the older version (branch or tag). For Omnibus installations this +means installing the older .deb or .rpm package. Then, restore from a backup. +Follow the instructions in the +[Backup and Restore](../raketasks/backup_restore.md#restore-a-previously-created-backup) +documentation. + +## Potential problems on the next upgrade + +When a rollback is necessary it can produce problems on subsequent upgrade +attempts. This is because some tables may have been added during the failed +upgrade. If these tables are still present after you restore from the +older backup it can lead to migration failures on future upgrades. + +Starting in GitLab 8.6 we drop all tables prior to importing the backup to +prevent this problem. If you've restored a backup to a version prior to 8.6 you +may need to manually correct the problem next time you upgrade. + +Example error: + +``` +== 20151103134857 CreateLfsObjects: migrating ================================= +-- create_table(:lfs_objects) +rake aborted! +StandardError: An error has occurred, this and all later migrations canceled: + +PG::DuplicateTable: ERROR: relation "lfs_objects" already exists +``` + +Copy the version from the error. In this case the version number is +`20151103134857`. + +>**WARNING:** Use the following steps only if you are certain this is what you +need to do. + +### GitLab 8.6+ + +Pass the version to a database rake task to manually mark the migration as +complete. + +``` +# Source install +sudo -u git -H bundle exec rake gitlab:db:mark_migration_complete[20151103134857] RAILS_ENV=production + +# Omnibus install +sudo gitlab-rake gitlab:db:mark_migration_complete[20151103134857] +``` + +Once the migration is successfully marked, run the rake `db:migrate` task again. +You will likely have to repeat this process several times until all failed +migrations are marked complete. + +### GitLab < 8.6 + +``` +# Source install +sudo -u git -H bundle exec rails console production + +# Omnibus install +sudo gitlab-rails console +``` + +At the Rails console, type the following commands: + +``` +ActiveRecord::Base.connection.execute("INSERT INTO schema_migrations (version) VALUES('20151103134857')") +exit +``` + +Once the migration is successfully marked, run the rake `db:migrate` task again. +You will likely have to repeat this process several times until all failed +migrations are marked complete. + diff --git a/lib/tasks/gitlab/backup.rake b/lib/tasks/gitlab/backup.rake index cb4abe13799..402bb338f27 100644 --- a/lib/tasks/gitlab/backup.rake +++ b/lib/tasks/gitlab/backup.rake @@ -22,7 +22,7 @@ namespace :gitlab do end # Restore backup of GitLab system - desc "GitLab | Restore a previously created backup" + desc 'GitLab | Restore a previously created backup' task restore: :environment do warn_user_is_not_gitlab configure_cron_mode @@ -30,13 +30,31 @@ namespace :gitlab do backup = Backup::Manager.new backup.unpack - Rake::Task["gitlab:backup:db:restore"].invoke unless backup.skipped?("db") - Rake::Task["gitlab:backup:repo:restore"].invoke unless backup.skipped?("repositories") - Rake::Task["gitlab:backup:uploads:restore"].invoke unless backup.skipped?("uploads") - Rake::Task["gitlab:backup:builds:restore"].invoke unless backup.skipped?("builds") - Rake::Task["gitlab:backup:artifacts:restore"].invoke unless backup.skipped?("artifacts") - Rake::Task["gitlab:backup:lfs:restore"].invoke unless backup.skipped?("lfs") - Rake::Task["gitlab:shell:setup"].invoke + unless backup.skipped?('db') + unless ENV['force'] == 'yes' + warning = warning = <<-MSG.strip_heredoc + Before restoring the database we recommend removing all existing + tables to avoid future upgrade problems. Be aware that if you have + custom tables in the GitLab database these tables and all data will be + removed. + MSG + ask_to_continue + puts 'Removing all tables. Press `Ctrl-C` within 5 seconds to abort'.yellow + sleep(5) + end + # Drop all tables Load the schema to ensure we don't have any newer tables + # hanging out from a failed upgrade + $progress.puts 'Cleaning the database ... '.blue + Rake::Task['gitlab:db:drop_tables'].invoke + $progress.puts 'done'.green + Rake::Task['gitlab:backup:db:restore'].invoke + end + Rake::Task['gitlab:backup:repo:restore'].invoke unless backup.skipped?('repositories') + Rake::Task['gitlab:backup:uploads:restore'].invoke unless backup.skipped?('uploads') + Rake::Task['gitlab:backup:builds:restore'].invoke unless backup.skipped?('builds') + Rake::Task['gitlab:backup:artifacts:restore'].invoke unless backup.skipped?('artifacts') + Rake::Task['gitlab:backup:lfs:restore'].invoke unless backup.skipped?('lfs') + Rake::Task['gitlab:shell:setup'].invoke backup.cleanup end diff --git a/lib/tasks/gitlab/db.rake b/lib/tasks/gitlab/db.rake new file mode 100644 index 00000000000..4921c6e0bcf --- /dev/null +++ b/lib/tasks/gitlab/db.rake @@ -0,0 +1,35 @@ +namespace :gitlab do + namespace :db do + desc 'GitLab | Manually insert schema migration version' + task :mark_migration_complete, [:version] => :environment do |_, args| + unless args[:version] + puts "Must specify a migration version as an argument".red + exit 1 + end + + version = args[:version].to_i + if version == 0 + puts "Version '#{args[:version]}' must be a non-zero integer".red + exit 1 + end + + sql = "INSERT INTO schema_migrations (version) VALUES (#{version})" + begin + ActiveRecord::Base.connection.execute(sql) + puts "Successfully marked '#{version}' as complete".green + rescue ActiveRecord::RecordNotUnique + puts "Migration version '#{version}' is already marked complete".yellow + end + end + + desc 'Drop all tables' + task :drop_tables => :environment do + connection = ActiveRecord::Base.connection + tables = connection.tables + tables.delete 'schema_migrations' + # Truncate schema_migrations to ensure migrations re-run + connection.execute('TRUNCATE schema_migrations') + tables.each { |t| connection.execute("DROP TABLE #{t}") } + end + end +end diff --git a/spec/tasks/gitlab/backup_rake_spec.rb b/spec/tasks/gitlab/backup_rake_spec.rb index 63bed2414df..320be9a0b61 100644 --- a/spec/tasks/gitlab/backup_rake_spec.rb +++ b/spec/tasks/gitlab/backup_rake_spec.rb @@ -3,9 +3,10 @@ require 'rake' describe 'gitlab:app namespace rake task' do before :all do - Rake.application.rake_require "tasks/gitlab/task_helpers" - Rake.application.rake_require "tasks/gitlab/backup" - Rake.application.rake_require "tasks/gitlab/shell" + Rake.application.rake_require 'tasks/gitlab/task_helpers' + Rake.application.rake_require 'tasks/gitlab/backup' + Rake.application.rake_require 'tasks/gitlab/shell' + Rake.application.rake_require 'tasks/gitlab/db' # empty task as env is already loaded Rake::Task.define_task :environment end @@ -37,6 +38,7 @@ describe 'gitlab:app namespace rake task' do allow(FileUtils).to receive(:mv).and_return(true) allow(Rake::Task["gitlab:shell:setup"]). to receive(:invoke).and_return(true) + ENV['force'] = 'yes' end let(:gitlab_version) { Gitlab::VERSION } @@ -52,13 +54,14 @@ describe 'gitlab:app namespace rake task' do it 'should invoke restoration on match' do allow(YAML).to receive(:load_file). and_return({ gitlab_version: gitlab_version }) - expect(Rake::Task["gitlab:backup:db:restore"]).to receive(:invoke) - expect(Rake::Task["gitlab:backup:repo:restore"]).to receive(:invoke) - expect(Rake::Task["gitlab:backup:builds:restore"]).to receive(:invoke) - expect(Rake::Task["gitlab:backup:uploads:restore"]).to receive(:invoke) - expect(Rake::Task["gitlab:backup:artifacts:restore"]).to receive(:invoke) - expect(Rake::Task["gitlab:backup:lfs:restore"]).to receive(:invoke) - expect(Rake::Task["gitlab:shell:setup"]).to receive(:invoke) + expect(Rake::Task['gitlab:db:drop_tables']).to receive(:invoke) + expect(Rake::Task['gitlab:backup:db:restore']).to receive(:invoke) + expect(Rake::Task['gitlab:backup:repo:restore']).to receive(:invoke) + expect(Rake::Task['gitlab:backup:builds:restore']).to receive(:invoke) + expect(Rake::Task['gitlab:backup:uploads:restore']).to receive(:invoke) + expect(Rake::Task['gitlab:backup:artifacts:restore']).to receive(:invoke) + expect(Rake::Task['gitlab:backup:lfs:restore']).to receive(:invoke) + expect(Rake::Task['gitlab:shell:setup']).to receive(:invoke) expect { run_rake_task('gitlab:backup:restore') }.not_to raise_error end end @@ -177,17 +180,18 @@ describe 'gitlab:app namespace rake task' do end it 'does not invoke repositories restore' do - allow(Rake::Task["gitlab:shell:setup"]). + allow(Rake::Task['gitlab:shell:setup']). to receive(:invoke).and_return(true) allow($stdout).to receive :write - expect(Rake::Task["gitlab:backup:db:restore"]).to receive :invoke - expect(Rake::Task["gitlab:backup:repo:restore"]).not_to receive :invoke - expect(Rake::Task["gitlab:backup:uploads:restore"]).not_to receive :invoke - expect(Rake::Task["gitlab:backup:builds:restore"]).to receive :invoke - expect(Rake::Task["gitlab:backup:artifacts:restore"]).to receive :invoke - expect(Rake::Task["gitlab:backup:lfs:restore"]).to receive :invoke - expect(Rake::Task["gitlab:shell:setup"]).to receive :invoke + expect(Rake::Task['gitlab:db:drop_tables']).to receive :invoke + expect(Rake::Task['gitlab:backup:db:restore']).to receive :invoke + expect(Rake::Task['gitlab:backup:repo:restore']).not_to receive :invoke + expect(Rake::Task['gitlab:backup:uploads:restore']).not_to receive :invoke + expect(Rake::Task['gitlab:backup:builds:restore']).to receive :invoke + expect(Rake::Task['gitlab:backup:artifacts:restore']).to receive :invoke + expect(Rake::Task['gitlab:backup:lfs:restore']).to receive :invoke + expect(Rake::Task['gitlab:shell:setup']).to receive :invoke expect { run_rake_task('gitlab:backup:restore') }.not_to raise_error end end From 57749022b6e07e8c6af37b6ad39dd68922828315 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 22 Mar 2016 08:45:24 +0000 Subject: [PATCH 036/132] Removed dropdown JS to align instead favours HTML class --- app/assets/javascripts/dropdowns.js.coffee | 10 ---------- app/views/projects/branches/index.html.haml | 2 +- app/views/projects/tags/_download.html.haml | 2 +- 3 files changed, 2 insertions(+), 12 deletions(-) delete mode 100644 app/assets/javascripts/dropdowns.js.coffee diff --git a/app/assets/javascripts/dropdowns.js.coffee b/app/assets/javascripts/dropdowns.js.coffee deleted file mode 100644 index 715ac644bdb..00000000000 --- a/app/assets/javascripts/dropdowns.js.coffee +++ /dev/null @@ -1,10 +0,0 @@ -$ -> - $('[data-toggle="dropdown"]').each -> - $dropdown = $(@).parent() - $menu = $dropdown.find('.dropdown-menu') - - $dropdown.on 'shown.bs.dropdown', -> - dropdownRight = $menu.offset().left + $menu.outerWidth() - - if dropdownRight >= $(window).width() - $menu.addClass 'dropdown-menu-align-right' diff --git a/app/views/projects/branches/index.html.haml b/app/views/projects/branches/index.html.haml index 7afea5a5049..88266e21230 100644 --- a/app/views/projects/branches/index.html.haml +++ b/app/views/projects/branches/index.html.haml @@ -16,7 +16,7 @@ - else Name %b.caret - %ul.dropdown-menu + %ul.dropdown-menu.dropdown-menu-align-right %li = link_to namespace_project_branches_path(sort: nil) do Name diff --git a/app/views/projects/tags/_download.html.haml b/app/views/projects/tags/_download.html.haml index 667057ef2d8..093d1d1bb0f 100644 --- a/app/views/projects/tags/_download.html.haml +++ b/app/views/projects/tags/_download.html.haml @@ -6,7 +6,7 @@ %span.caret %span.sr-only Select Archive Format - %ul.col-xs-10.dropdown-menu{ role: 'menu' } + %ul.dropdown-menu.dropdown-menu-align-right{ role: 'menu' } %li = link_to archive_namespace_project_repository_path(project.namespace, project, ref: ref, format: 'zip'), rel: 'nofollow' do %i.fa.fa-download From e8585d29ef7e3695809458eca711375c01d1a1d5 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Tue, 22 Mar 2016 11:49:26 +0200 Subject: [PATCH 037/132] Change titles to be more descriptive --- doc/intro/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/intro/README.md b/doc/intro/README.md index 663b326a03b..8f9f31600ad 100644 --- a/doc/intro/README.md +++ b/doc/intro/README.md @@ -9,7 +9,7 @@ Create projects and groups. ## Prioritize -Create issues, labels, milestones, cast your vote and review issues. +Create issues, labels, milestones, cast your vote, and review issues. - [Create a new issue](../gitlab-basics/create-issue.md) - [Assign labels to issues](../workflow/labels.md) @@ -30,7 +30,7 @@ Create merge requests, diffs, commits, and review code. Use the built-in continuous integration in GitLab. -- [GitLab CI quick start guide](../ci/quick_start/README.md) +- [Get started with GitLab CI](../ci/quick_start/README.md) ## Install and Update @@ -38,4 +38,4 @@ Install and update your GitLab installation. - [Install GitLab](https://about.gitlab.com/installation/) - [Update GitLab](https://about.gitlab.com/update/) -- [GitLab Omnibus configuration options](http://doc.gitlab.com/omnibus/settings/configuration.html) +- [Explore Omnibus GitLab configuration options](http://doc.gitlab.com/omnibus/settings/configuration.html) From 1030ebb89fe299e3327e9ffe1f50d822a85baa70 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Tue, 22 Mar 2016 11:50:16 +0200 Subject: [PATCH 038/132] Add award emoji docs [ci skip] --- doc/intro/README.md | 2 +- doc/workflow/award_emoji.md | 48 ++++++++++++++++++ doc/workflow/img/award_emoji_select.png | Bin 0 -> 65985 bytes .../img/award_emoji_votes_least_popular.png | Bin 0 -> 144501 bytes .../img/award_emoji_votes_most_popular.png | Bin 0 -> 136577 bytes .../img/award_emoji_votes_sort_options.png | Bin 0 -> 162251 bytes 6 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 doc/workflow/award_emoji.md create mode 100644 doc/workflow/img/award_emoji_select.png create mode 100644 doc/workflow/img/award_emoji_votes_least_popular.png create mode 100644 doc/workflow/img/award_emoji_votes_most_popular.png create mode 100644 doc/workflow/img/award_emoji_votes_sort_options.png diff --git a/doc/intro/README.md b/doc/intro/README.md index 8f9f31600ad..820de213345 100644 --- a/doc/intro/README.md +++ b/doc/intro/README.md @@ -14,7 +14,7 @@ Create issues, labels, milestones, cast your vote, and review issues. - [Create a new issue](../gitlab-basics/create-issue.md) - [Assign labels to issues](../workflow/labels.md) - [Use milestones as an overview of your project's tracker](../workflow/milestones.md) -- Use voting to express your like/dislike to the issue in demand +- [Use voting to express your like/dislike to the issue in demand](../workflow/award_emoji.md) ## Collaborate diff --git a/doc/workflow/award_emoji.md b/doc/workflow/award_emoji.md new file mode 100644 index 00000000000..ee662ff0034 --- /dev/null +++ b/doc/workflow/award_emoji.md @@ -0,0 +1,48 @@ +# Award emojis + +>**Note:** +This feature was [introduced][1825] in GitLab 8.2. + +As a remote worker, you get fewer opportunities for high-fives and thumbs-ups. +In order to make virtual celebrations easier, you can now vote on issues and +merge requests using emoji! + +![Award emoji](img/award_emoji_select.png) + +This makes it much easier to give and receive feedback, without a long comment +thread. Any comment that contains only the thumbs up or down emojis is +converted to a vote and depicted in the emoji area. + +You can then use that functionality to sort issues and merge requests based on +popularity. + +## Sort issues and merge requests on vote count + +>**Note:** +This feature was [introduced][2871] in GitLab 8.5. + +You can quickly sort the issues or merge requests by the number of votes they +have received. The sort option can be found in the right dropdown menu. + +![Votes sort options](img/award_emoji_votes_sort_options.png) + +--- + +Sort by most popular issues/merge requests. + +![Votes sort by most popular](img/award_emoji_votes_most_popular.png) + +--- + +Sort by least popular issues/merge requests. + +![Votes sort by least popular](img/award_emoji_votes_least_popular.png) + +--- + +The number of upvotes and downvotes is not summed up. That means that an issue +with 18 upvotes and 5 downvotes is considered most popular than an issue with +17 upvotes and no downvotes. + +[2871]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/2781 +[1825]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/1825 diff --git a/doc/workflow/img/award_emoji_select.png b/doc/workflow/img/award_emoji_select.png new file mode 100644 index 0000000000000000000000000000000000000000..fffdfedda5d7536fbc083cde4efac8e489bedf52 GIT binary patch literal 65985 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�m*N>{EeVR=~} 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 E2kDE#p8x;= literal 0 HcmV?d00001 diff --git a/doc/workflow/img/award_emoji_votes_least_popular.png b/doc/workflow/img/award_emoji_votes_least_popular.png new file mode 100644 index 0000000000000000000000000000000000000000..2ef5be7154f020d0a6e775abae42d4cb7a961b02 GIT binary patch literal 144501 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�oEfjy*BX0%qiLlTjpbQ1i%kUxV0pS-cbvtkr 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 literal 0 HcmV?d00001 diff --git a/doc/workflow/img/award_emoji_votes_sort_options.png b/doc/workflow/img/award_emoji_votes_sort_options.png new file mode 100644 index 0000000000000000000000000000000000000000..9bbf3f82a0bdda442f3e908ebaa4d85a2fd78c8a GIT binary patch literal 162251 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

Nu2GjirJCMIL7V`3^}%J@TzFQ}I26UGnS(fL z@mD&MPQI?o`i~LIWL27pOb~zV@AuEA++4#h(`b@3SLM}8VWlrYb)YF{U8}Js1LU$ z$qrWf6^xA1y4}uCcHrt+^0{v0&nzrVW*R)hH)ebedch0Eh{BLY^T_-!_b{NByE5-Z zSGDfLi!nZq2oG<|FK$|QoDl=#j;r~y%$ly{ zpkHFA3g4tNoP_oQ(txFRTDH^IrItN753bTpO$lx{DE&+al-MEPw1jU^F>4h|DX%cr3ioEP} zzdVnoo2!%AE*K#bx9u2rZ@=QBN7#T%f(!9D9=8Ir&v1}Vs6W*0{PJbtQ=$z_j2VxmI6LFjt(pv9Eajk?Vhcqqd@LHPTSm_;Q$ZtEvp82fR0y3qvjnjLY*pG z3dDKx=ZL<2En4-|OQn{yL?HZ9PU3DgHRd3VkTH(G+CT13E#6_fQ(IdL&Y!81(41V2 z?E6guw!T7DP~FGx;mrfjJL-3u09Cv_6t|tmeX2D;j^F&p0;B8hoK&Kqjj1UE^n8^m z(X#n;0SAn7Boy?o#?Px%%~MtHW&gDP{;M}-uTOL*r%%HBm_5yBUs3F6NCOmqU$u)} zRE%cIMNC2a@}A~HBzbI0T{pBmo8rKla$8tfI7!^Qs-5f&hm;mrF2N%~?Cs$jJJa=K zI}HcXW??TukvYxxShv#=W_JVD?(k1aiFGay9L7qJz(M=Nf){CooU2hraA>I4QM=uI zTgX_wd-1|0P(60Wg!cmJVadzoN7e9Buy*#O2;%pP9oz!yV^CM|I$93_!EKvasYzEf zP0e=QhGw+`nB;UIHd}N4)uZm)P;S+~P`i@W9!|n0rq%7S7$vCLOm7Fh*yIKI5>s$@ zoEu!=(-(EyjLGio=*R&15IH$HT6kmjXi}$HYnf#?x6i3#aaa%!u(?oC=^T74QCQdW zSmFw?wC^o;0Z6sW`jF!FUbEe#z!XSFg_BsleEBjaJslr{cy^PAb4~T^K391yq`$hiud2tr+O1$oedJNtvm@keYK=~5YgwMrcfDRFQ$v%AN`QGB==DA$m1I=ou zC7t`BaO$X&86Py7iAtyBbhia&c_?@59Z9q1>q7Ua*1r;7&$n`&9>15Nsh$xVD*jFn zalF_yefa|!a(!|_Tl|VN5X3e?Q@mD45N$)J)2)M#GPs zF8$r6m#r-Qw;x!@sGvOac$RoN6GJ8#PhJUnOkyvSDFsJo7}<%Q+V^*C;OjM|0<94w zei&JuPDTg2lTKwWRMCl_KUk#_t`fOopu&U<$|xk#{CbP8TCWv3 z-8Zd?x?DL`8)d5-446`5$v6CvxrAV{nCB&FAHT6mz>3S$UkW{YR8%NI*eg>kA7dg} zdUnf=#3ynZE#+yVAgrZ#kBdnF9H!{|--hC5XA5nHHHI?qtUg_#=s>RyFv662ea7DO zy@_gk`ENK9{t)M{k{xc>?N^|_3JxcC-(XP**tUQrL$mq@47Lvy6~rKc=t%KkX?MPT zKP2hVdoI0ld`3-8O_QG=6~h@&r~sfS1cz(^tS|~7%YPnqJ-lzZlLb2MsP{G$FCFirZQZ^As?6M&XrIA0qP zd7Uo3c}$!*UTTg3y*kv0q!#{Z>gDKI0$!%k=B8U2 zxwqo`$pWM|JivN5%?YL~Eh5GNldMANxy{-CA?vNfqFlHC;UT026r?0YMUhnLP8CH! zx=RochVGOWB}77zRvILvJ46r^P$Z6{zY2_d1ptaVv6z*jLE@puJW2GmbCEAX>ctB+X=&_g zmsK!kZtRWs=Q)WuFI~pJezMna+VuD)%hjuRAbSpi6a`{p93$_R_2DP0PDF%+Qc$KK z6&V2tt3IegL8;?;sl|L&oRDgSYf$k~jaA$e?^K%Nf<${Wt%R|jU#QHz2 z6c9Y*9IJf$Fme#Hc`M`Y^9*_}zY&2zRJ@Xsk}H8WoK(G!C-yK13f+5`kPx;yT=Cv@ zeT*woTStdIgachQ3#yi0d|0Ib>e`=A@kMD#d|0oVXAE)BH8V4NbL&aOkz7xe;}g;S zi2y{H4H1nR1v)_urzaQTzG3qIbMEScH_(Bv_{v_ndevm4(jIcMWI?`Nf4FobgltDr z$ayIy5rrNuFPO9c#*ZFZATL??{fP}-v&s+E_Y&w#p7!TUnP+;ixx%dkd2<|8#K?g` zPj(KbLuk4OOU#JHPX>i&nx5g{g8(_=s$v2Pg-1f;2Zb2B2u~GWPHbIKgI4nN7&Z#e zx9pP-r-MZIkcmg9C&#=FGj{`nf&hIclQ`LDMZOnOG#NWX3H|+`A^s{+i+7eTP~7{F zSzMekBO_yfqlFB>FJIU_qChtUmMlSBGC;F9LpUIN44#j0xScu*Z|I`r0RQOE*LGMG z9IpSKET-!d4mmm#KkhKe!I9XljR<+cn!RP}3$3!n?~*HURQU%xMyL3y(C6}c{IMvt z_F*sjl!}r!~LB0r=t~~BWr)IPxGeQ z+5!?_c4Pd@7bfr&ierwRzO0@n4GgXhzW>eq1$_yPeJ9TdpNSx7q&CLa1xz;`o?eLh zvn}INYVolkI!r*=*_v%!{Ov2k7p<2X+9ESDg#tN(^?f85*LDgYsqyoYo2*wKxa*K=lhmB(Ao$GZ{=65UOsqZpBC&0Dlm)RPKr;i zA5yWHQ0fHgPZxcg{o!hAwDRzq(30Dgc1}WWBfAwxo_iVBc=uZOzq~UhFKBpu`R<_l z2JhB`{_c#n*8*wkZoULAtoSaiHkBX8R0q9W&WU$>X_yV0Sx|1>JnTy%3RrNvaKE8C z(%5@f&AP++tZFVpe4YuTtocEMR>Dxz6;XTJfY=57dE+XD=ZY!SuZt=+Zsd#e>XEwW zQF)7@Um6Am8VxA$jJ{w096Un3Vb*W`SMsC+&~*jZmk5Rz(3!Dvb9YaUOszMZM!bdbjz`Ut_z^y>BN z0C*g}9uqAO6t+P>4{-R4LcRS~qe2<+@cQYuF`5w+Sr7(?Ip&40Mp6^!N}Y$0FGiSv}y6{Zkw*4oGhuYfx+c~gMlSv%$3{}`h zj*RHRVr96-G*s(;>tpSfLhC?qMfZIRi)-fJ6M~=_HH8Ii%Y6}_$&38etA68X08{`h zJoYinv4lDV2pLjiotI{Q;+qkd(Tlo~vpr0V!la^}GDQ?fbPbEs!=}M7R(G&KP!g~C zHyWq)F$Oqu4M$rqT1*S|Yp7huy(>B~8`!Ku$HcK1zOIH&zCPEH_@s}{`18{JpPnco zQx?E9{!K=b*47-EitmEq#F|Wfe(s=9VA$aEM$rBevTj7tm3bReQc+E{QX78W8~2SI z_dSKwa+_x0U3lHM9_Q=VXgF$bH#bW^NEW4?{u16&X+LeZyP_Sr4EcTJl*mewsgx1{ zy-TwZPb%DKZzO!{kBrUu-;JK|!2UGw9h%{$>nXKV4Gal+53r?HrCnMJezEs_!R32y zFl)_X07`7NsTjSAuR+Ie9SVI-hoLOsDg{=;53_oa>8*07U-#U_i!YEx_&Hm0RAIBg z+Xr`Hebssb;K!DhTAjyEGc2RCe)rYXC^KQ&fQ196NTaVvf0X-PG(88(Z)WB(f=+Pi zluEj}L7d`iUH}^USZKXqN05{4l+*UTvX^(xX!!~j=xPelw|o~EhfTV#A`23ju@(l4 zSq*#+%>JzWR&~C(xw%Or=5agO_rx7$P8^$|QYrXIpbmMQ7L-XC^@K?LyrXaP@~SWn zO(UR}`__lfazHg_nD7;(NWc+|S*uYZz0sGWiq9(lvJs{fyVbG*D`7m?H=_~GL-2rs z=UI3xnG$YWLTn8AFZe+Uwudo>z>dvwWqes#S9*I>?!+H2zwn*NdM$ER zHBN^U{1rn*OZyzCpZ9>V5I~RPVy6`gt5fSth z8Ow<74w{l?j9NdV2JJtL`R<2sL#%IUv)((8Fm4C?BATBFKg3KgB6AC>KdO~&y+CsO zsmCQSF@plQ(sF^h_P}bE$;P&Ro5i7fCI`)Z`!?>fgh99ny6#-@&QiLMwb(Zw7rF#~ zG(n@zGv-y<;9-7F{S9n$(Om*M{=2eHYM155d~U5(eY#myw>OTX?!ZCf@_f$p`eKn7 zC-C-DCB$(~!hx2>Z>A%TH2fo(e6Y}5XV^^e#{)$B5FZQ6p8=Rbux>Xtcu-lN-$iM_^)$6*ENB+%W)_0?rB_#*4hwXg> z1ZHM!@3~>MEOoz@p`v=DVt(Dv>4eQ9lqN{!Y=4X0$w2W#0vF8wJbQk3j&`o-$Mbr= zID_4;q^}lmmt(Q?-=iG~v{8*;OB%d~l=#ZqmdNb`=u5JrI*g@)Y9G9g>g0X@o11hw zDD=nHAw`09tPB-O*<2`OIs-03eq2qDu$Lcw36Dg)O zg@7mG0s0OE9C8e-)x!gmgQcF-pqt&LQnxhd&+O>hy=Z*R<#OeUB_3hEQ&P68wv zNNwOIRX=r_;(PL{uoqNI~cW^Zlu2XOw#_`QZITgNHd0fhxt zsZ}45Um4M}8gaja?fIHNSWt1kWSNSad?pz2!K@-{oc``H3`_BQ$57y$b)TieqoGx1 zbpb)I-n^mt1qdYwqua7o-p`ov+m5{q3+vdX=$g-u=hU5Z=o+fOxdSN6a<9zLjcVHe1*CJ>_O&ddD{kWey)k`?IDnfVN04jtr3 z4aYUtfK8un!e{!NulX+kPaIB%22Q>Cxb8Y z*bLo9^$)BgRsGhJF1>aZV$P$ljJUTW$rn=PQpr#U*MaYmfB$2)&A;GQ6@s8IU!YWT zF@mnVD@o-2(}9nqoq*&CkQ&actqfNvJrtz6aKRX~S z)Z>3AVC!O0Q@8xFh7>M)P^S|_bt09n{937*b8^Po#>d8fl`$I>-inR(E&q@Olp0_!fN?4e4uQ%x z^TFG6E%tVC6>0)tG+s+=yiZTJ>r>aX)Uk!XZ;@qXXJ3miuCc}poJbS&tTFvtAc3T!nPFwG}Ye7K~68o%|=nJzYG?hc!QarF;XMT@4 z?LGe|wA53dit6y>&i&L0*`F?K-Z}ByI+`=Cqin&se59<;p2u=1=iiMd=*!@FMi@fPFv=3n=7%xPSwXMd5p zIr-woF*abkUtONBMV%WMD9nEY(vEjiR2_w}F+ayQXIRcfu0=LpWD8Cmv_Ae$dyX;$ zb5SGNV%c5%F^g1l>AO55E($#S2-3A!FTg)Y z@B)@%cfc2obhMP+1;fH|eS;|h{B+@A)CFMY{$vaHlaWoQ`cr62kt@qqJVa1>d_`rcO2C10N_FdSrcu?*vhQG1BQ5<_9)6<;!mZa0c zamg?pfOV?R*ud)mTT@j}@1^-QIVuYqZs1TelG=+8)rlkDnzPVKy1uUtieci*>a+uQH00f1v*f&YlIq3i6Sgu;w%Z)IRW0e_^07rFLv>v}Tq`#T&D` zgK?`-_3{}EnwT*9Qzu_#stzIex1GrAPr43qGTRj&35be5u&-{KNQ?hd>*2hdop0My zS}(y7ea8ILPGv}thIsN1t%E8NuR(HI`CKmpw$EvfZ7zeKY$X5=IdZpY7_Hab1BHhm zJLT9q(C<*DUWYUj#02gOhG4XRXU!6^qU;WxxPT-lE3A0;HrBLa{lu4R|3*m|_PuA9 zB^%p6t5>rAu& z5y=!74vRDPPNn!mle}@2DvQMK_wH$z_sfchBl_;5VJ-luNV$o+lR5b_-U}uTCBrM} zeD>}<6|>%xW6~}@21kOrBX2Y-(SrdaolkY-=K{+o2hvR+bFbVO2_{e4!HobBRLVi; ztaJIici5_XN_DBFeaD5nw{JIX{=Ds;@B=&l!E)Gd&dxN7KiN$AoQ;2lH?sAcvm@!h zt>e0{+>w``g7&QUkCxRl;&(?!UWtPC*uYoAjMml^fUhqsnpBa&&s3CL0X-X_qsl9S z4;2)mF(~Wd;&uGRu{x2Zfx`8@ldAWn>sG^M4K^36o8CUmk^wW~CX8aJqFrv-(YlBG zJPbC_WU_yRFxC~jt|5&&*_^Xhm{l}wMufXBJ8q@Oc%k#~ZfCasj3tvFnDtcjzSI|X zjQZ5PqrPwC zRb9&%*9sd2DKpSvqdgV`fXn0&!v>uz8O@gr!68!g}1=Npr>;g!VB%p~|qW-6w zb{8p=ILEk)=2uB_+)|riDyRt#*h-vQsaHX#104tHjY09xE5k+R-|3(W%bZx_Ccj=nVBzlGCj2zWB|84l`UfZ$l3Y_i{rmf;HpS&o&Ck|IFf^+#Lx zR|eDSSUDhK10Lp9U6hagTUq5EW&EnJH4IteLFCGSGvCnE7_4@_QH~xBgXYy} ze`B(8D(uEcT(YV#mFMnC(~}hM;L_6DipzrvZ=ukl0H^>I%K2VSF2jqJ73%}Oei$w* zn%?l+47E$>?16Ry8bZBoA9o^+-=`ZT1AtZl%s>St7kYEC!#|5S5Il76Jp4YQ#>0>} zN1;+lcFr3u<28F&DE}QP2-AXZ3R)l_<-w>MA>p#p+(I@+oW!*e^d6fwYD>dhBSMe! z{fE+16Ms=X^}1`<~t6POB^KZ<2o*m|7J;W(;IV$X?n=M)Ceqzw*ypt>+MgB5w^0;``3pJ^{i4K|NdQs2F*^I~B z)kAllgPggUL)}-7?6q2$lG0hnw` zZ7nQs5V^s;y#5i|hLEVB?|WG(GTT?*v0Nf>-U-*6yC1b-`=f%ZH!_Z1^5Fr?WjbMI zEs{I$+Ev=cx4Cpe$YKUCV!mZl9&HNcX=YkXC~T8}VeG-+PqUU5j~DQgQrk*r0tP)? zX#1atWqIVkq!J9|7?S%VIUH)7ou?Fh#(W{wHJkE37UXC1omH)giS!{v9b<{_oz3~* z6}xYn=NmRKf_fNhv|?DTMzkd-S5TwM=n?A;ZPN^4iCNkGj>q**Sc@hi!XrY z@x7p48$wKLi9`WwlV^!3kJjU^HR3F=F$|Z4Rh*nh4{l+3v^QrpnBa5B=^P$DCc*F7T@D>>;WFlb!_Uu!6^0e?;n0Wln*Ov+NGz;TI zCTz}AQ2eO(_PlM;(`ch?-sp$56J)=I!u22iM1~u+ycb!0@mzX;_p&D@2+o>V6(-g+)&)7JLR< z!x&KHS2X`*6QwhE7(WL=Ig6my@uwT$Ojda{*)FEKro1|7Vq(ZSpD?C*4ewsUZS;c6 z#qf(&DTT3LDJuc{Xlb(EHzxkLrY-bK4H$QH-J(ZfdDUb{N+RQX^ZKln(*>fRIj1Y1 zju%KtNq6_@HOh|VF22(BA@Nr}I3zkxa`$=x{m?!Coox-a1zy&Jg#(Pg=s{X#o4$H zWBZ>SF{jr=)sBc2zR#0?%nP}u4@sfT22t5Z+UOW|iv995X=~#*L|;QsXSp@>)*mm9 zThR97W8(@1Zf)l1_LQ{J1}-jLl6~1cG5B^t)0I6U#=0phE4ZqZuqgOOa4Wa`bkrKD zG1FgABe!lPk?#C|XSEI_!|!nU3c^Z$C4u&`hOYUuX>*uyT2{dH`$%sEH87l&q=Q$BTe zNs-{)vU&wF$u|$K9>~BRy|RpRjT#4lNngHlWpbp-F>G44%JgFN=Zmnoz`eF(=?gHy z9FP2~PaxQ8h=}(VVwV)+;RU1)+TO<1B0_MPliE*3LO1syMSOI!?e&mD7b5k9o(;cN zksn|cp>pfr*o}v25>LA53q|T}B%C;@h(Q53v$<7UY(Fi3K>Uy#_azN4_AzEJK7|ap zFCb*qc4)3%y?RMVh!$4#!8%U?(ElTFIiNE*C_qwY_oBq4$nAO+1pswGH-h-82t6u% zumc0i1~6+TfHI=@?nPe)#f_d%!;+IQNMz2z6Y_feDPRJ*614~&fdHA%`3Hgi!v73$ z)SEY<>FJk3J`@kRx%llkr)zvUTNHdJH|)`Gu6Hal!HDz&D7fJY+qTt;@d)^~oy&uf zW}1DZ^rA1Lf8LbMCONjh%FT2psGn2{V?{;{oBtH8b#@G-4y~86wms@8t~+FM4T;Qb zOag7c=@_w6^MWx=cIBW4K}_Dqg^28S0!m69k(a(h)n}`obX_V>w!Pp2nElCi&~)E{ z%*WOF-twah)VfNH=qtBG?reH<-8;X_B)BroiVLlqNOxVNjeANq7mS7;Qi`*fCX+YA zHcNpW#_q|M#W;%6?1ku}RP2KbY$|H@c;Pa+Yc)S9GK}CM&{mIWCNE$OuEb@I8T4mP zXO^b?gQ{)VYQp~1VqbjMTuY6yS3KL)b48S5<8zwFn~^`%x5<{zVque*2nx%N`0W;O z>~pT4^@`dItsTn_ww=y>gU?W|tMw|JzW3a1;?)eHk-rt(>H2mCchkkSE>7%5SmKEx zz{Pnm9d1-0;^Rb&UcY|5*@#1y3aHFh)rEV}*i`)4ir%Qcvi0QT8p*^@ySwS*k{f$o zrx~f$$<)4Mnq5bW0YtJ)4>dHXfR9qgFau0C;3E3o{s)h$;vAr~_pzwQ0AuyL0e3A0~A~`?l+iZf~*E@_)FR)bZ`h!1yr= z)w3u|LN})BvTxkW`u z&P`4tOf!?n3FzWo+*8!m)F$G`^ZPuZn<&_v8B3 z)xc2LmMPUW$-cc%@R@DNe41v`tIC^mSXHYvL?;1Cx7H=c4l=pXuY=lC6PV7!>;nH~ zmy6g<_)W>hJiBID=z`|Gew`4+{op#3k&=3*B=w>|x1xg~6QOfJG^y7`Q6=&uPtIl) zCp*GB{xTuL;(1Ac$7c2o?o^^PNHr7`6mn;B6Z zS;T1}b?{ltKYkDn{97@D>@+Alk*iS>E5k=XezJh@w3xjSYzi}E*D@k>E|x9A)BrNV ztz%ecI@(%KI&FdQL!ji`RbnI=?%K7xCsOwN8^$RLeyfAUIH1c3GwnMth4=g;p}N?l_^`?Ph(>n+F`?d|oSK}?t%bnA& zap|iiLuMtg*%do2K0<8>o+KPoZxk7~==nHdt@*lTWM+1(e}&^tSI^S`WJ4a*(g1&C z9U7GThR4Ron*uKoHa!>{6Eguv7Q236D2k(l=dJ6oC+Wl zmqh$!Fo%H58@njju=Za4N%1uI=hnVEpE4t4s^F1I?Cp252jJBtiT%p2Jl*-D?Z-_6 zr^i^4FYCt5h5@zh?QV!$AIPDY?&Hl}1rH^U@lx;B@rkzw>-DrPXEPo(mybRm9(LPr z@>FK~vQsl@(P4k|Y5Wjhxk#KqYTkEcF~Hx5pd4*FZ&+hLV?i`jidHGWxD9WlX<gag>P|1+cG!*K!T5v{N z4Qs|swy4B|d5l)3duHjj44QzH;gJ6%qpfaOiIXFGi^)6b{aQ@G)vOM$noAk(7Tm3i z46KEBvbpe3%0^vk^yxD99+Q)2*%CGiKWHyLKOD;lDb3W)lvB@ z&tswu_2({fHZD=X5XY!A7T7@I)}_mL_jmvF?qBt+ul*>c#^fLL z_fezIQ4bw!@NLN4@fNGFzA($e5Ke zTm=4B4c~w)n2j(8ovUFZ?Sf;!`6uno5fAXE{Os-JV<5B5LEgMuwlg5>U2-_^>oK?QL2j2MZmswlb~c6k}KH+(wq_M|RWmR2^6lYtTM(h0=i# zI3^n%yTw8*do#a27kL7%05+e)9ETNmR~e6eRwxWm1yDxESuv zSo#Pw^6g*0+P|%b(aGIVPQ@u(G%6D!02t zW-*|<*0h!|;(TRhXr2eZbPGQRh!G&8W`C9g?tJgo8 zu}M(p8+&+S!Ue{nBK5&*gt&daV{o(#Q-G*(e47l8C|H)Y>U}|5$9`h54w3=@D52W| z2@IPi?P6aZbtyn5T3buHZ}#^;x!H}F3TjSh@tF;b`4&G(*`dK(z9DjiwakR$I&S~M z>ojR^z+`XCSD$gZCLHF{Wm^=I;0sB1ZF#0@7Z;o^`3LBqS_~cxph>C^(23vLW8yCg z%o&7G+68>ZeOYNngF?6$?r-`eu+xsW)+3#;93@fiaVCK|aanmCiNYNZvCIegN6!S& zTNDoat=eC5IO1*arCUD8iVBa}hx)0n`vlIk=3W%a-e#%{0lH&Q^?t{Go_2qrm9*s@97=?J^0GFhNd2eXU;o z_})@-B{@AuiH{Nixt;gQc0&IT!v29hTGcR_c5IYRAemq4GJ*PK+u|ciasH^ zrulNP+~%EEP|bNv#P9rkj@C(BD@P_j2@KlwFA5Rw0?U9AOc7hh;3m*n8zB58^mMqm zM2iFZwUCxtm@5#GI|ONI*wn<$D-j!Z?HPVM@-|4UKxCTn2ryW>kwMn+j~mDivs%%) z2W)KEXpL(PM+FQ?RqL9C1JgrK3wNwitauHBiF5inq*J+Cx5_S^xuLCwjP7aBNdpZV zcEuz{;d;i04-+uXq5RGeQ>B6ml}6N!CptP>Sxqev7QN|;ai7=maMM4LRM@)#xvH*X z?pa61h*tEvYUV^eW=#h2xqzV9T&r2{_<9dOii_whG_qej%{FJFX9CqXOK3SKIdRvYd`J}XK@v4ud3z&PBApl=Fc@(G2e(inJo z3lJ7JMl|sa=mh|Yjf|g=0tc#Fc7&m%Lpr%?9{7Be0FwyBi5r2D6*ve4A!XA_T%SaL%Oz^+*=CumafMOvn zEN)};BmwD_05Y*oO__N8`EiHzN^W62?mCtHgJN^=a|nnKf>g6g zHjYMGp-IOwI{SXatHmh9=1<)r`)!*M^0r>3boiPr=msXGhe@Hyng*nG;sk8BZfq&?w}gzHCCr=c%C3h8lDe0LZa-|a`$qT6tF@3?5#cnw(^S`(>fRGJKqN7naHyWXJaibT%4ZeXWNtm31{~wye;|5oRZxO zAw`87_iMc!C{c}GK9ynn6Xi5-_ld;6dXb!!F|oVzbKZiXe|*}Mh`gs}&COcq6XjRq z(I`p>A)gL!3b{Gee!K8g8Nich`ZjE8JsobN@4X54an5RH_Ru`jK7Rb?Lqt7qT;! zcfVQT_DwB`am7d1`_0C3-K=f1C8#-@52v$kIlg)#9LTa0pE`W7fsZ9p`>(!AR*@p4D{8l!b3;R{uKY!su#KGnyU?#j+@XeW%uP33y72F`*4Xwg`hZ z2m*k0;Qs?8hN4^TtZ#UXv5}GhMb!9v0v}qWTSl6_`y3beb)apL0pl>(Y$A~oHPIAc z$9DTRB|u}X&;&wkXEAsJU()dr!RUl}8jTyUN}nsxsr2vT!v404XY=#J^CK+gd(nv} zYD9*m*1yjql?PGZqWU*`!TXw8c?_yX(W8wP^=dK@CAv*LXPa@FhLvP?l4fPmN%&im z$iO7NUjk?;zq4?dG)RErs?g+Ovilq@xaaWw_=2jyWYub8J6e5VZ`@EQ-!HDq+qDxh zNx_QXcC^_BTO*k>Bv14zUGQc01{FPxpj|4xMde(=(+$8%jG%u*%^rgOz@jH2zCQumq%g&bxUM;A zT?M5j%#&NYeZX!5)~L*zwbFBoq~-bRnm02mv0+Njmw zBi3JNxLyQ;R~tK+OYCZU}oFI^aKXqe;u0=|P0ZKbJQPbO(_ zcOnGRY(`-X2lY9|U=g%B#$;gvE3B*VEYcQKV3wDfe?=Z0&nA;FuBU@XPc1GgAV~GLN2jXD|I_-cPh($nHHR$aevzx zQB{2fiAKKbA8Q{?J(j;p#p#JtSbxGrC!io5@BtShUlTjNNgsYyy~e@e@cSYB6Gwso zvGIIc{2$rq%e9y$9V9NJ^t{MB1mSVeRpjGZ)_O zU*A*w5JNBbm(~Ij9;EgVOcvW#@$HcxIdAUJuIh`>R6&wF32KmFI=?~3Jpc$m|`;r9YJ-5tBJiffN*OK=SJey@GnW=KH{lL!;;lgbypH7`vd@UrEai!sG z49Qyi0>%Jf+e7;VTK2z4ROY)5IpNx7M&hDMNgME9&F7f|nEHJ2>uICK^%l9Ixq zVZ%YypPqPnfzq36d3SjLk$g6td3gT=b8oIJrpmFZH7;ByxSiHJ26no-L@X= zF=GHq0kO({jlQxKMcV~WV3OwYh}INfV{}C? zFxL=KqqEuKFj!=am{hIWY-(IqAt&c%pXqt13VhCRd#fGc{kZf{JL;i*kesua?aQbu+o2hsY1x^vpRYFHBv zv6C}aMh+6gq&9iMv4%`JrtMKIVHk*tM%V3VfWW-P^bBYcc$}Bi^xS7-xwb)1%L~#@ zQQ#4CWuiddXZ7$J6*aXf=;TSSbefo&7DG`7Mo7{=36=*a^lf>Q#^CgaMh^#t2-nTK z5_1HP6cF|hn(=t1-Y%VT>+4zKuv3k?rhY~hCyJbw_SsHKZMf&1u}s0!YAo-K9pC;+ zwHrm}h4@_;!|>#A_qZkl z`*eh^?Pu2%Uq29Khi#jhq;IZP@A29vZp9u5Cxu?8_%hW}VOUTii6qJx7z#7(jeFO0 zikeoPyAzRN0@jY{wiKVH27J;R!5kkKov(=N9kWBTnLW#5mPRK-iz27esIq>KcaJoZ zuV}oFE9E|DCYzox)jo&0Aiz{#xU5YR!r?%&qz09Y9Ya)METwSkaqNxAMI9hgm>lNY zlSc9$js$?-Pe1Mke@fGxw_q%N#CXb^F>|dvQTq}ZnTaX+dvf2CX`{u>2tiW?XKjH3 zYc_L+=fU?J3=Mu>%E8a59aU0-me0Pq^1i)@Z3=ya#CF4_r)d+D*_c{wRAZsRK>X|;!0TVQ$0|B9ic#pgbfRNb^bdD$^m!CWD|Y?wN7@@Y28w8 z9(@43CsPhjtP3r};|VOf?&j18 zjDM!ce80K7ccAJ~e+1$JBv@l>S#4D`{n!yKkfs&GAl?NHB5Cgm=4|X3MY-b%{4KYw zz~}hTK{pZ8ioIDo$kn5<6i@gWuyzS=<&)h>@W+FU=3$wK7x+2A;}{5&tegI;+Bkd7 z;&crvYjT*{6I0GfO_taACfPncR&uIOdiBaaJ(G+;=;qr8|G}l9wA{T*0D;<8E8#j| zjt4ssAm;=yvO%agI!_B3apxW^$36$4Vzc+&C@kYI5upM=gMf+LRZ!Ss=Xs=~69(AE zf|D@x8t*~F!J?yOg@&gcD+Js) zR)^_0`Q1t&uRdaJ9iFEy%ESWZ+8fmfZW2U6U(xyQyLqCxHyt!x03F~3VA3Q*uyqpJl^wIgAPti} zI7flTQZ6(QYn3qZg6#4jh{=EiBXGFq;5|u%e=r7&0bmz-5d0&x`+yAR2^cooJG!1_ zQy8-gu<(~NnxvN*+5nka;`s1==`W9$EiEnNni3k@hw)($1(Yc6NF^nlw6iVDGL{h* zBmx6vNr}Tuw+Kkh1NRRTB#5z%F)61l5H|K@%$L+cryjC>zyVTFxs$n^ckKC7%OK+0 zH*4VJS+Dbst(L%S3qefMlybQE%RefO1K4fWWlq(Oi!Er*2cUmMO8ODh(S)(W;eb-F z)vQKd|Ha&-H;a@s`atE#Yfelt(wO|2)J{q;>RjvGr~RE31)3!6!+>QaDSdC%Hy<9+ zbDbEJo$V`5>9R=~7p9)9_V|ww@eZavujkS?kCIEB`;pyP#8-|@ndH@!Mg4JcBI2#v zK-rg7Iii2>{*Q{a$9JQklNue2+atsqNbzT8p-CqXTvzIL7W$$vB4jNnr2Mhi6kK!H8l-U1p}vF{;%>q>IudwN+_tNyJ+E<@W~k+o zy4wgoXY9?tNITbKcXxLP9gGp71*m9dQ&d)4n-)A`eh^9l*U%W?k-z%3_Rh`#u$6gv z)y_G-fK*9v5W}Pgq1ljOxx3`w4Er}7)aG)}-(T(4Uf%Hl{jcH9h`r4+GKbl~{q-t7 z9=}oN%%4#DSbljY@4XO~qPe7yTk zq`?NEP`esH}uUtp>^GYx|oQd+ybZGI;ePXztNs3n6Y$YLLKWnB*DG80ibSQp5%Ey7%o!bS>UK zIhFJe*%`4(3C$itoElp+I^b(5=wl&93A(N&dJXr!c?tr>3NP5(X82t|ax!|W{G?e^vK zCbG|{Xul3H|KC@taxLDSR6D0MNt9t}wSDF6@TPhFCBp!!WV$Jv9pZF$KwVXO6;pM% z*x2rTj5D%r4kQeH{yb-K&ixlG3;$6$3qsflVu^(Q2$A)G0Q8(vS{FTUtaZtVRnyoM}^gM~Ua%ro-budKrtSIU4G-G|+`GdX4pB!rLMl3mISHFkik10ZC;Af?XLId z(HBeP&G_Zy`1q8{`|Q1vlXGu1s>?Fpsjemj8qhTG{jCPMy1;${2nu^!g9yS3Nq`ow z(Zbl}MrB0>)ocXCMNIg)P!U7Z-8JxtkP$t6y1Z7Nbt*fLp{1o|!>MwVMM10>3I%x! zGRn&8l=f-F`fzbC-vbE%vH;*tHh=RmgC`Coz7QlP2|+cer*t35at)`VN>%uv!nfBz{n*{XVTUMn&?a?ED$l`=v zB;+SXR+c*VMGjdOJBapDIrF6mh}lCuXLYCd-c-*3cM+(xT(#`#sH9tf4!2 zr9z=Z|Iclo)S8o|-RIx_aCze)$f}hT1^$K?!>P&E5M(ONUWy8Gtd!<7O1o|`Y5Ca5 zw&ThEBdY*YA;iS3Kl4T4gtnkX=mGXQqqEvCZI2*e>Hpr(pOZT&J<%qNj=xZ+-xLze zo*^3(hisLZ{zCZ;7hWXWdJ}S7&TedhZefS#^&d;iK5d+O7M!=?w#E2QBKE!i$ggE( z%fcPejiWZMRXDD{aeas8BrO-n8;_${%7@p2$$#8@8M+|K$;vvdhH{PjdsYAYr&Teu zaHYZPGC^*1;<)HctR*Zm*S_1Lqzu>sH|`s7-XhgkKxu%dWKGivS z?nqjl61~eW+SK?@jQ0OMp+7Rdj`lDouX)xS`;p@msZ?CKmFS|eRYdZCKl0Bjec_lA z+%a5^+V8CUNv{ZUgK@A?{_m2=Z=+xQ_iO%r!SzrFn|dv7r}SZ?1+B2`QyedbhR>=c zf&afBvzjEjXI8b;&Qp2iurhtdSSa}FzkcTK3(24xG3CqX>VE4$9NQ4mSE-`ELXMp> z%xG%=lg{!FhKc;~#Hx>DB#3L|c-|6|JT&ntE=}f0jG5%$r{&f8f+ix{3QaTX3!J~$ z)g`CBGG<2#S~mW5TF$wvzLoBD*zLSAy8DYNa{D;PBF*{R`HZBi|NVu3UzBXR+$GQ0 zDHSKJ)fx+`fkXq-*LTrqe21+6XRk2iuok8!6f-54OLq5S(JhgSKI)}*19q-tE6alH z|Gh*0zHqYN%!m$(GnS7*;|F^8NcU>7viFMejriOdWkCJw*H=5a5$RYE8eUV}6PQjF z9#@rnAsO4HOsvnN_y2C?1t09RxMglZp5dIBmB+~xx`@g(Um%~ycdq~5^Y25)O1|@D zgYvUovPMQrFv<^Mxd+EJb>wI3C(IMzS^Vj()a$K1p#M&E^+i7>tgR1|<^R7I?%G7D zMre=X;B|Y`U{&n*`In$t<0{TX~8e3 z#)_(*@rI%laYlHqy05Zszj$RTm5Cj7;fe-}QNIpC*DEur52`SPBhXwF!H zn4vk*QG-RZ&2h41wZt!=|zF}+?n7RJL-kN5~&Wn3+2 zr9bOeHurjSuI@aspvb_{ioNhZyL`Yk$qk!n74^;489X^FyCB^e#gfeKys!Qpdqd13 zO`fx7!txDifibb|P->7nqOHd`TzNDGZe^1aqFVctFRd?{qEbBGO zppJjH$#A!dT>XAhP5i1-O#InL3u8}asp$qkhmGcewm)X>1ua2E3IDn`^+R*3bAyg; z3b2SXEXUOHH~1&c@vQk%J{h;{6GHt%y3>wjOzo3hGQL3PziL>Ye02PFX)s4j zraRFcH;Q(H25LIwIbevz{0{i}ee*r0Z-qut{0Ek(C=%Qxx#ii&N&sz9V^Uj`<||4Y{jvSVFFOlOGaK^nd^T z2ukCRh@Mb1BUWO8+vORl!L{SOegn=`wc&{2`D}J}o&B4Ep;<+8>b*CeLbpXd`52tC z!);~%_gvPFyy7M5wz@(Xo*keMT))NJ-O!M9E6{<-hJM zY5`xFGs(HK*^0e%mC6Yk7g&f3Fq5i0Eh%ACW27u5zBQRQw6a$NhHei#T{M)Y$QSAWKe9;-@9hoqToG+8;1#-;6u2%8C zYJ=4++ruI60-{Nq9%;)2Ze!wtiequ{6SdMJvCu3QzS3Y$)VlNqh3#K)dzncJ_$p7^ zKT`zr{_Bop$F+(%^R?4mCr^H#E@6W|KW$cP-#OoZLbr^_wYQGp(dT$nu$Upcp4+X* zp*D;YzRLbB|JuwMc3xdTLe=rpe+Fe)j+K9XcN`zTU7jwd4&MN_-0%${+jKcyna9b0 z@UJsKjnC=5{)}E;w$sKi;DS0s2})VWDYQSAYHWkw+SqqkKULbsM?Hx9*Y5XvvHz_* zveZO|^5H!<>)6@#_8o@fy?=Sp*A`e9>#E#WNABoA&R^)Kgc^d~+gAf8Z59I4{;W4F{jpW~#Aoy+c$5 zn2hRtZkZ54TMlw#;(3h1B=NAf>vp1RPkfY|dJs=7L-fB^`MY_!9Q@>=ML|Dr`$|*x z3G0Q5Wq_L<8%w8!%CFoH_NXz$zQA{`M0v>YfA8<~+()`MbgwDq|o<3Pwr)vNe4EN`sTvF|9^}T;J0=f5|E!6B@u}|#K{+%#;SKjQPYFNmPhShM@)Uw_ps8N@D^_FQcy+YxzOWSaI?6HAkX8O3HNK~ zGR(w+t{)LOk;@!w#sujkeuIE@@uFv6G&qo_gx|(h~b`QT(C_EO86=||D{dr4vXJjt?>n0k4 zJ;=z^7McfaENwtnXhEnm$Umbv*xW0;)=V>o%a!Q*sB?qy86EcL;pu-JpxQg!TmmU) zeC|?F^VmQR)T$KmFdhzV`Nsb@6MKP!T=AsKhG;(iE-4e1n zAUce*oekx>d8I|(GxxW0F^Tr9Sk=(#|N5s8P}2l`M;6`JmBObAw$IVOsD zwf}`f-wy0+6WYS2R}(81x8`xCG@1oVdi87HT@~H%p}MxdS!^5Ik6^|{tDHsN@d;>$ zqqa>1E7z+X;=39f>l~=iB(|;Xhji2jwSt8u3|WhcSevC#%`H(})j3hFruK}(R#S!B zoFNwu?Q=90+!0`{5Go72Jxdu?wadCJ*RP!n`Ron}&0^npd0Y-0yq_g{?smbkEDYUqg^wue97PwcS>*$3k4};w z#$c88j{xBPFsMowaYu%J-yQz)+iI(f#Qn^nq8%$Fi6R83qjG4o1c=IR*74KsOi5KKn)C@u6{1-oD!M< DVcM&k literal 0 HcmV?d00001 From 05ca1096dd57da44c3108895f77d03d007422306 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Tue, 22 Mar 2016 12:01:13 +0200 Subject: [PATCH 039/132] Merge Git basics into Start using Git [ci skip] --- doc/gitlab-basics/README.md | 1 - doc/gitlab-basics/basic-git-commands.md | 58 +---------------------- doc/gitlab-basics/start-using-git.md | 63 ++++++++++++++++++++++++- 3 files changed, 63 insertions(+), 59 deletions(-) diff --git a/doc/gitlab-basics/README.md b/doc/gitlab-basics/README.md index 115480d210b..cc4372ab792 100644 --- a/doc/gitlab-basics/README.md +++ b/doc/gitlab-basics/README.md @@ -5,7 +5,6 @@ Step-by-step guides on the basics of working with Git and GitLab. - [Start using Git on the command line](start-using-git.md) - [Create and add your SSH Keys](create-your-ssh-keys.md) - [Command Line basic commands](command-line-commands.md) -- [Basic Git commands](basic-git-commands.md) - [Create a project](create-project.md) - [Create a group](create-group.md) - [Create a branch](create-branch.md) diff --git a/doc/gitlab-basics/basic-git-commands.md b/doc/gitlab-basics/basic-git-commands.md index 2b5767dd2d3..c2a3415cbc4 100644 --- a/doc/gitlab-basics/basic-git-commands.md +++ b/doc/gitlab-basics/basic-git-commands.md @@ -1,59 +1,3 @@ # Basic Git commands -### Go to the master branch to pull the latest changes from there -``` -git checkout master -``` - -### Download the latest changes in the project -This is for you to work on an up-to-date copy (it is important to do every time you work on a project), while you setup tracking branches. -``` -git pull REMOTE NAME-OF-BRANCH -u -``` -(REMOTE: origin) (NAME-OF-BRANCH: could be "master" or an existing branch) - -### Create a branch -Spaces won't be recognized, so you need to use a hyphen or underscore. -``` -git checkout -b NAME-OF-BRANCH -``` - -### Work on a branch that has already been created -``` -git checkout NAME-OF-BRANCH -``` - -### View the changes you've made -It's important to be aware of what's happening and what's the status of your changes. -``` -git status -``` - -### Add changes to commit -You'll see your changes in red when you type "git status". -``` -git add CHANGES IN RED -git commit -m "DESCRIBE THE INTENTION OF THE COMMIT" -``` - -### Send changes to gitlab.com -``` -git push REMOTE NAME-OF-BRANCH -``` - -### Delete all changes in the Git repository, but leave unstaged things -``` -git checkout . -``` - -### Delete all changes in the Git repository, including untracked files -``` -git clean -f -``` - -### Merge created branch with master branch -You need to be in the created branch. -``` -git checkout NAME-OF-BRANCH -git merge master -``` +This section is now merged into [Start using Git](start-using-git.md). diff --git a/doc/gitlab-basics/start-using-git.md b/doc/gitlab-basics/start-using-git.md index b2ceda025c0..89ce8bcc3e8 100644 --- a/doc/gitlab-basics/start-using-git.md +++ b/doc/gitlab-basics/start-using-git.md @@ -1,6 +1,7 @@ # Start using Git on the command line -If you want to start using a Git and GitLab, make sure that you have created an account on GitLab. +If you want to start using a Git and GitLab, make sure that you have created an +account on GitLab. ## Open a shell @@ -59,3 +60,63 @@ To view the information that you entered, type: ``` git config --global --list ``` +## Basic Git commands + +### Go to the master branch to pull the latest changes from there + +``` +git checkout master +``` + +### Download the latest changes in the project +This is for you to work on an up-to-date copy (it is important to do every time you work on a project), while you setup tracking branches. +``` +git pull REMOTE NAME-OF-BRANCH -u +``` +(REMOTE: origin) (NAME-OF-BRANCH: could be "master" or an existing branch) + +### Create a branch +Spaces won't be recognized, so you need to use a hyphen or underscore. +``` +git checkout -b NAME-OF-BRANCH +``` + +### Work on a branch that has already been created +``` +git checkout NAME-OF-BRANCH +``` + +### View the changes you've made +It's important to be aware of what's happening and what's the status of your changes. +``` +git status +``` + +### Add changes to commit +You'll see your changes in red when you type "git status". +``` +git add CHANGES IN RED +git commit -m "DESCRIBE THE INTENTION OF THE COMMIT" +``` + +### Send changes to gitlab.com +``` +git push REMOTE NAME-OF-BRANCH +``` + +### Delete all changes in the Git repository, but leave unstaged things +``` +git checkout . +``` + +### Delete all changes in the Git repository, including untracked files +``` +git clean -f +``` + +### Merge created branch with master branch +You need to be in the created branch. +``` +git checkout NAME-OF-BRANCH +git merge master +``` From 2adc874fc8145b82b2449a9970a02f3cfaf69ed6 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Tue, 22 Mar 2016 12:36:43 +0200 Subject: [PATCH 040/132] Add docs on group visibility [ci skip] --- doc/public_access/public_access.md | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/doc/public_access/public_access.md b/doc/public_access/public_access.md index 6e22ea7b72a..20aa90f0d69 100644 --- a/doc/public_access/public_access.md +++ b/doc/public_access/public_access.md @@ -35,6 +35,21 @@ the repository. 1. Go to your project's **Settings** 1. Change "Visibility Level" to either Public, Internal or Private +## Visibility of groups + +>**Note:** +[Starting with][3323] GitLab 8.6, the group visibility has changed and can be +configured the same way as projects. In previous versions, a group's page was +always visible to all users. + +Like with projects, the visibility of a group can be set to dictate whether +anonymous users, all signed in users, or only explicit group members can view +it. The restriction for visibility levels on the application setting level also +applies to groups, so if that's set to internal, the explore page will be empty +for anonymous users. The group page now has a visibility level icon. + +[3323]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/3323 + ## Visibility of users The public page of a user, located at `/u/username`, is always visible whether @@ -43,14 +58,6 @@ you are logged in or not. When visiting the public page of a user, you can only see the projects which you are privileged to. -## Visibility of groups - -The public page of a group, located at `/groups/groupname`, is always visible -to everyone. - -Logged out users will be able to see the description and the avatar of the -group as well as all public projects belonging to that group. - ## Restricting the use of public or internal projects In the Admin area under **Settings** (`/admin/application_settings`), you can From f4a13f0844a44ec045828d2cbe3feba45410bc87 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Tue, 22 Mar 2016 12:56:52 +0200 Subject: [PATCH 041/132] Fix grammar in intro guide --- doc/intro/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/intro/README.md b/doc/intro/README.md index 820de213345..fecbbe6317b 100644 --- a/doc/intro/README.md +++ b/doc/intro/README.md @@ -14,11 +14,11 @@ Create issues, labels, milestones, cast your vote, and review issues. - [Create a new issue](../gitlab-basics/create-issue.md) - [Assign labels to issues](../workflow/labels.md) - [Use milestones as an overview of your project's tracker](../workflow/milestones.md) -- [Use voting to express your like/dislike to the issue in demand](../workflow/award_emoji.md) +- [Use voting to express your like/dislike to issues and merge requests](../workflow/award_emoji.md) ## Collaborate -Create merge requests, diffs, commits, and review code. +Create merge requests and review code. - [Fork a project and contribute to it](../workflow/forking_workflow.md) - [Create a new merge request](../gitlab-basics/add-merge-request.md) From e53707fc9ea65f7a547c7b70d0ed465acc00e7a3 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Tue, 22 Mar 2016 12:59:28 +0200 Subject: [PATCH 042/132] Refactor award emoji doc a bit [ci skip] --- doc/workflow/award_emoji.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/workflow/award_emoji.md b/doc/workflow/award_emoji.md index ee662ff0034..70b35c58be6 100644 --- a/doc/workflow/award_emoji.md +++ b/doc/workflow/award_emoji.md @@ -3,9 +3,9 @@ >**Note:** This feature was [introduced][1825] in GitLab 8.2. -As a remote worker, you get fewer opportunities for high-fives and thumbs-ups. -In order to make virtual celebrations easier, you can now vote on issues and -merge requests using emoji! +When you're collaborating online, you get fewer opportunities for high-fives +and thumbs-ups. In order to make virtual celebrations easier, you can now vote +on issues and merge requests using emoji! ![Award emoji](img/award_emoji_select.png) @@ -41,7 +41,7 @@ Sort by least popular issues/merge requests. --- The number of upvotes and downvotes is not summed up. That means that an issue -with 18 upvotes and 5 downvotes is considered most popular than an issue with +with 18 upvotes and 5 downvotes is considered more popular than an issue with 17 upvotes and no downvotes. [2871]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/2781 From 09cd4351fa17ffcae3b5ce960e562a7ced6facfe Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Tue, 22 Mar 2016 13:11:18 +0200 Subject: [PATCH 043/132] Remove redundant word [ci skip] --- doc/gitlab-basics/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/gitlab-basics/README.md b/doc/gitlab-basics/README.md index cc4372ab792..3aa83975ace 100644 --- a/doc/gitlab-basics/README.md +++ b/doc/gitlab-basics/README.md @@ -4,7 +4,7 @@ Step-by-step guides on the basics of working with Git and GitLab. - [Start using Git on the command line](start-using-git.md) - [Create and add your SSH Keys](create-your-ssh-keys.md) -- [Command Line basic commands](command-line-commands.md) +- [Command Line basics](command-line-commands.md) - [Create a project](create-project.md) - [Create a group](create-group.md) - [Create a branch](create-branch.md) From 73a8088e2cc8e7d9f08facf28d23c6401fa2ce43 Mon Sep 17 00:00:00 2001 From: Zeger-Jan van de Weg Date: Tue, 22 Mar 2016 14:02:11 +0100 Subject: [PATCH 044/132] User has to confirm deletion of issuables --- app/views/shared/issuable/_form.html.haml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml index 551f0cc0b51..b01a36265f9 100644 --- a/app/views/shared/issuable/_form.html.haml +++ b/app/views/shared/issuable/_form.html.haml @@ -131,7 +131,8 @@ - else .pull-right - if current_user.can?(:"destroy_#{issuable.to_ability_name}", @project) - = link_to polymorphic_path([@project.namespace.becomes(Namespace), @project, issuable]), method: :delete, class: 'btn btn-grouped' do + = link_to polymorphic_path([@project.namespace.becomes(Namespace), @project, issuable]), data: { confirm: "#{issuable.class.name.titleize} will be removed! Are you sure?" }, + method: :delete, class: 'btn btn-grouped' do = icon('trash-o') Delete = link_to 'Cancel', namespace_project_issue_path(@project.namespace, @project, issuable), class: 'btn btn-grouped btn-cancel' From b4f97b93a926d4c71d0536675a0af19c37af2e30 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 22 Mar 2016 13:56:07 +0000 Subject: [PATCH 045/132] Fixes issue with signin button overflowing on mobile Closes #14477 --- app/assets/stylesheets/framework/common.scss | 5 ++++- app/assets/stylesheets/framework/header.scss | 5 +++++ app/views/layouts/header/_default.html.haml | 7 ++++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/assets/stylesheets/framework/common.scss b/app/assets/stylesheets/framework/common.scss index bc03c2180be..1f770876464 100644 --- a/app/assets/stylesheets/framework/common.scss +++ b/app/assets/stylesheets/framework/common.scss @@ -292,8 +292,11 @@ table { } .btn-sign-in { - margin-top: 10px; text-shadow: none; + + @media (min-width: $screen-sm-min) { + margin-top: 11px; + } } .side-filters { diff --git a/app/assets/stylesheets/framework/header.scss b/app/assets/stylesheets/framework/header.scss index 71a7ecab8ef..6a68bb5c115 100644 --- a/app/assets/stylesheets/framework/header.scss +++ b/app/assets/stylesheets/framework/header.scss @@ -70,6 +70,11 @@ header { .header-content { height: $header-height; + padding-right: 20px; + + @media (min-width: $screen-sm-min) { + padding-right: 0; + } .title { margin: 0; diff --git a/app/views/layouts/header/_default.html.haml b/app/views/layouts/header/_default.html.haml index bfa5937cf3f..0f3b8119379 100644 --- a/app/views/layouts/header/_default.html.haml +++ b/app/views/layouts/header/_default.html.haml @@ -6,7 +6,7 @@ = icon('bars') .navbar-collapse.collapse - %ul.nav.navbar-nav.pull-right + %ul.nav.navbar-nav %li.hidden-sm.hidden-xs = render 'layouts/search' %li.visible-sm.visible-xs @@ -38,8 +38,9 @@ = link_to destroy_user_session_path, class: 'logout', method: :delete, title: 'Sign out', data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do = icon('sign-out') - else - .pull-right - = link_to "Sign in", new_session_path(:user, redirect_to_referer: 'yes'), class: 'btn btn-sign-in btn-success' + %li + %div + = link_to "Sign in", new_session_path(:user, redirect_to_referer: 'yes'), class: 'btn btn-sign-in btn-success' %h1.title= title From 21f5524926c3d3ac750ab1bb3781d320cd3e6cca Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 22 Mar 2016 14:08:27 +0000 Subject: [PATCH 046/132] Auto collapses the navigation when resizing Closes #14475 --- app/assets/javascripts/application.js.coffee | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/application.js.coffee b/app/assets/javascripts/application.js.coffee index 01451830653..3c83450ce18 100644 --- a/app/assets/javascripts/application.js.coffee +++ b/app/assets/javascripts/application.js.coffee @@ -218,13 +218,20 @@ $ -> $this = $(this) $this.attr 'value', $this.val() + $sidebarGutterToggle = $('.js-sidebar-toggle') + $navIconToggle = $('.toggle-nav-collapse') + $(document) .off 'breakpoint:change' .on 'breakpoint:change', (e, breakpoint) -> if breakpoint is 'sm' or breakpoint is 'xs' - $gutterIcon = $('.js-sidebar-toggle').find('i') + $gutterIcon = $sidebarGutterToggle.find('i') if $gutterIcon.hasClass('fa-angle-double-right') - $gutterIcon.closest('a').trigger('click') + $sidebarGutterToggle.trigger('click') + + $navIcon = $navIconToggle.find('.fa') + if $navIcon.hasClass('fa-angle-left') + $navIconToggle.trigger('click') $(document) .off 'click', '.js-sidebar-toggle' From f27210d54b98ac6e3113369b6a94c50ddb5f66a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Tue, 22 Mar 2016 15:43:53 +0100 Subject: [PATCH 047/132] Update CHANGELOG [ci skip] --- CHANGELOG | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 20a21abfb69..9a102b8f7ec 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,10 +1,15 @@ Please view this file on the master branch, on stable branches it's out of date. -v 8.6.0 (unreleased) +v 8.7.0 (unreleased) + - Make HTTP(s) label consistent on clone bar (Stan Hu) + +v 8.6.1 (unreleased) + + +v 8.6.0 - Add ability to move issue to another project - Prevent tokens in the import URL to be showed by the UI - Fix bug where wrong commit ID was being used in a merge request diff to show old image (Stan Hu) - - Make HTTP(s) label consistent on clone bar (Stan Hu) - Add confidential issues - Bump gitlab_git to 9.0.3 (Stan Hu) - Fix diff image view modes (2-up, swipe, onion skin) not working (Stan Hu) @@ -19,9 +24,11 @@ v 8.6.0 (unreleased) setup. A password can be provided during setup (see installation docs), or GitLab will ask the user to create a new one upon first visit. - Fix issue when pushing to projects ending in .wiki + - Properly display YAML front matter in Markdown - Add support for wiki with UTF-8 page names (Hiroyuki Sato) - Fix wiki search results point to raw source (Hiroyuki Sato) - Don't load all of GitLab in mail_room + - Add information about `image` and `services` field at `job` level in the `.gitlab-ci.yml` documentation (Pat Turner) - HTTP error pages work independently from location and config (Artem Sidorenko) - Update `omniauth-saml` to 1.5.0 to allow for custom response attributes to be set - Memoize @group in Admin::GroupsController (Yatish Mehta) From 07da8651132e2b622977039c170463a57a209a47 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 22 Mar 2016 14:56:00 +0000 Subject: [PATCH 048/132] Shows error messages when trying to create label in dropdown menu Closes #14495 --- app/assets/javascripts/api.js.coffee | 2 ++ app/assets/javascripts/labels_select.js.coffee | 12 +++++++++++- app/assets/stylesheets/pages/labels.scss | 7 +++++++ app/views/shared/issuable/_label_dropdown.html.haml | 1 + 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/api.js.coffee b/app/assets/javascripts/api.js.coffee index 2ddf8612db3..f3ed9a66715 100644 --- a/app/assets/javascripts/api.js.coffee +++ b/app/assets/javascripts/api.js.coffee @@ -74,6 +74,8 @@ dataType: "json" ).done (label) -> callback(label) + .error (message) -> + callback(message.responseJSON) # Return group projects list. Filtered by query groupProjects: (group_id, query, callback) -> diff --git a/app/assets/javascripts/labels_select.js.coffee b/app/assets/javascripts/labels_select.js.coffee index 4a0c18a99a6..f3cb1e3bc09 100644 --- a/app/assets/javascripts/labels_select.js.coffee +++ b/app/assets/javascripts/labels_select.js.coffee @@ -14,6 +14,9 @@ class @LabelsSelect defaultLabel = $dropdown.data('default-label') if newLabelField.length + $newLabelError = $dropdown.parent().find('.js-label-error') + $newLabelError.hide() + $('.suggest-colors-dropdown a').on 'click', (e) -> e.preventDefault() e.stopPropagation() @@ -27,6 +30,7 @@ class @LabelsSelect e.stopPropagation() if newLabelField.val() isnt '' and newColorField.val() isnt '' + $newLabelError.hide() $('.js-new-label-btn').disable() # Create new label with API @@ -35,7 +39,13 @@ class @LabelsSelect color: newColorField.val() }, (label) -> $('.js-new-label-btn').enable() - $('.dropdown-menu-back', $dropdown.parent()).trigger 'click' + + if label.message? + $newLabelError + .text label.message + .show() + else + $('.dropdown-menu-back', $dropdown.parent()).trigger 'click' $dropdown.glDropdown( data: (term, callback) -> diff --git a/app/assets/stylesheets/pages/labels.scss b/app/assets/stylesheets/pages/labels.scss index 61ee34b695e..3c13573c8fe 100644 --- a/app/assets/stylesheets/pages/labels.scss +++ b/app/assets/stylesheets/pages/labels.scss @@ -45,3 +45,10 @@ .label-subscription { display: inline-block; } + +.dropdown-labels-error { + padding: 5px 10px; + margin-bottom: 10px; + background-color: $gl-danger; + color: $white-light; +} diff --git a/app/views/shared/issuable/_label_dropdown.html.haml b/app/views/shared/issuable/_label_dropdown.html.haml index 87617315181..186087e8f89 100644 --- a/app/views/shared/issuable/_label_dropdown.html.haml +++ b/app/views/shared/issuable/_label_dropdown.html.haml @@ -27,6 +27,7 @@ .dropdown-page-two = dropdown_title("Create new label", back: true) = dropdown_content do + .dropdown-labels-error.js-label-error %input#new_label_color{type: "hidden"} %input#new_label_name.dropdown-input-field{type: "text", placeholder: "Name new label"} .dropdown-label-color-preview.js-dropdown-label-color-preview From 33489f29f331901bff4551a874e78c86a4f6683c Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 22 Mar 2016 16:00:47 +0000 Subject: [PATCH 049/132] Fixes issue with assign milestone not loading milestone list --- app/views/shared/issuable/_filter.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/shared/issuable/_filter.html.haml b/app/views/shared/issuable/_filter.html.haml index ac20f7d1f7e..53952e608ea 100644 --- a/app/views/shared/issuable/_filter.html.haml +++ b/app/views/shared/issuable/_filter.html.haml @@ -42,7 +42,7 @@ placeholder: "Search authors", data: { first_user: (current_user.username if current_user), null_user: true, current_user: true, project_id: @project.id, field_name: "update[assignee_id]" } }) .filter-item.inline = dropdown_tag("Milestone", options: { title: "Assign milestone", toggle_class: 'js-milestone-select', filter: true, dropdown_class: "dropdown-menu-selectable", - placeholder: "Search milestones", data: { show_no: true, field_name: "update[milestone_id]", project_id: @project.id, milestones: namespace_project_milestones_path(@project.namespace, @project, :js), use_id: true } }) + placeholder: "Search milestones", data: { show_no: true, field_name: "update[milestone_id]", project_id: @project.id, milestones: namespace_project_milestones_path(@project.namespace, @project, :json), use_id: true } }) = hidden_field_tag 'update[issues_ids]', [] = hidden_field_tag :state_event, params[:state_event] .filter-item.inline From 0a14de843c9f47482521e3f703956ba2a6c89f1c Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Tue, 22 Mar 2016 11:45:23 -0500 Subject: [PATCH 050/132] Rename method for better understanding --- app/assets/javascripts/gl_crop.js.coffee | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/gl_crop.js.coffee b/app/assets/javascripts/gl_crop.js.coffee index 137d025ed26..78dfe43d24e 100644 --- a/app/assets/javascripts/gl_crop.js.coffee +++ b/app/assets/javascripts/gl_crop.js.coffee @@ -27,9 +27,9 @@ class GitLabCrop # Ensure needed elements are jquery objects # If selector is provided we will convert them to a jQuery Object - @filename = @$(@filename) - @previewImage = @$(@previewImage) - @pickImageEl = @$(@pickImageEl) + @filename = @getElement(@filename) + @previewImage = @getElement(@previewImage) + @pickImageEl = @getElement(@pickImageEl) # Modal elements usually are outside the @form element @modalCrop = if _.isString(@modalCrop) then $(@modalCrop) else @modalCrop @@ -40,7 +40,7 @@ class GitLabCrop @bindEvents() - $: (selector) -> + getElement: (selector) -> $(selector, @form) bindEvents: -> From f2ad7aabf90b4f5a97dd9dd329488f3aab7c6fcc Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Tue, 22 Mar 2016 11:45:37 -0500 Subject: [PATCH 051/132] Use _this instead of self --- app/assets/javascripts/gl_crop.js.coffee | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/app/assets/javascripts/gl_crop.js.coffee b/app/assets/javascripts/gl_crop.js.coffee index 78dfe43d24e..3eb2eaa9a6d 100644 --- a/app/assets/javascripts/gl_crop.js.coffee +++ b/app/assets/javascripts/gl_crop.js.coffee @@ -44,9 +44,9 @@ class GitLabCrop $(selector, @form) bindEvents: -> - self = @ + _this = @ @fileInput.on 'change', (e) -> - self.onFileInputChange(e, @) + _this.onFileInputChange(e, @) @pickImageEl.on 'click', @onPickImageClick @modalCrop.on 'shown.bs.modal', @onModalShow @@ -54,14 +54,14 @@ class GitLabCrop @uploadImageBtn.on 'click', @onUploadImageBtnClick @cropActionsBtn.on 'click', (e) -> btn = @ - self.onActionBtnClick(btn) + _this.onActionBtnClick(btn) @croppedImageBlob = null onPickImageClick: => @fileInput.trigger('click') onModalShow: => - self = @ + _this = @ @modalCropImg.cropper( viewMode: 1 center: false @@ -78,11 +78,12 @@ class GitLabCrop cropBoxResizable: false toggleDragModeOnDblclick: false built: -> - container = $(@).cropper 'getContainerData' - cropBoxWidth = self.cropBoxWidth; - cropBoxHeight = self.cropBoxHeight; + $image = $(@) + container = $image.cropper 'getContainerData' + cropBoxWidth = _this.cropBoxWidth; + cropBoxHeight = _this.cropBoxHeight; - $(@).cropper('setCropBoxData', + $image.cropper('setCropBoxData', width: cropBoxWidth, height: cropBoxHeight, left: (container.width - cropBoxWidth) / 2, @@ -113,11 +114,11 @@ class GitLabCrop @readFile(input) readFile: (input) -> - self = @ + _this = @ reader = new FileReader reader.onload = -> - self.modalCropImg.attr('src', reader.result) - self.modalCrop.modal('show') + _this.modalCropImg.attr('src', reader.result) + _this.modalCrop.modal('show') reader.readAsDataURL(input.files[0]) From 3ade8de55a3d83b8c4b5d3111251f29c3c465237 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Tue, 22 Mar 2016 12:37:54 -0500 Subject: [PATCH 052/132] Explain regular expression --- app/assets/javascripts/gl_crop.js.coffee | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/gl_crop.js.coffee b/app/assets/javascripts/gl_crop.js.coffee index 3eb2eaa9a6d..172f796a8d8 100644 --- a/app/assets/javascripts/gl_crop.js.coffee +++ b/app/assets/javascripts/gl_crop.js.coffee @@ -1,4 +1,7 @@ class GitLabCrop + # Matches everything but the file name + FILENAMEREGEX = /^.*[\\\/]/ + constructor: (input, opts = {}) -> @fileInput = $(input) @@ -131,7 +134,7 @@ class GitLabCrop setPreview: -> @previewImage.attr('src', @dataURL) - filename = @fileInput.val().replace(/^.*[\\\/]/, '') + filename = @fileInput.val().replace(FILENAMEREGEX, '') @filename.text(filename) setBlob: -> From 10ffbb85592612a17b05ade7772efecf41c2fc1e Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Tue, 22 Mar 2016 12:54:51 -0500 Subject: [PATCH 053/132] Add comment explaining why we enable form submit button --- app/assets/javascripts/profile.js.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/javascripts/profile.js.coffee b/app/assets/javascripts/profile.js.coffee index 2fcc6dfd56e..ae87c6c4e40 100644 --- a/app/assets/javascripts/profile.js.coffee +++ b/app/assets/javascripts/profile.js.coffee @@ -59,6 +59,7 @@ class @Profile new Flash(jqXHR.responseJSON.message, 'alert') complete: -> window.scrollTo 0, 0 + # Enable submit button after requests ends self.form.find(':input[disabled]').enable() $ -> From d5479eb06235559a3cee4b9da68952b87b0cc1bf Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Tue, 22 Mar 2016 12:55:42 -0500 Subject: [PATCH 054/132] Remove unnecessary line --- app/assets/javascripts/gl_crop.js.coffee | 1 - 1 file changed, 1 deletion(-) diff --git a/app/assets/javascripts/gl_crop.js.coffee b/app/assets/javascripts/gl_crop.js.coffee index 172f796a8d8..a9bee3cab77 100644 --- a/app/assets/javascripts/gl_crop.js.coffee +++ b/app/assets/javascripts/gl_crop.js.coffee @@ -110,7 +110,6 @@ class GitLabCrop data = $(btn).data() if @modalCropImg.data('cropper') && data.method - data = $.extend {}, data result = @modalCropImg.cropper data.method, data.option onFileInputChange: (e, input) -> From 0a8c9f72127bfff265059c68c2c19bc1ad4bd5a5 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 21 Mar 2016 20:20:53 -0300 Subject: [PATCH 055/132] Restrict notifications for confidential issues --- app/services/notification_service.rb | 12 ++- spec/services/issues/update_service_spec.rb | 7 +- spec/services/notification_service_spec.rb | 88 +++++++++++++++++++++ 3 files changed, 105 insertions(+), 2 deletions(-) diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb index 3bdf00a8291..eff0d96f93d 100644 --- a/app/services/notification_service.rb +++ b/app/services/notification_service.rb @@ -162,6 +162,7 @@ class NotificationService recipients = add_subscribed_users(recipients, note.noteable) recipients = reject_unsubscribed_users(recipients, note.noteable) + recipients = reject_users_without_access(recipients, note.noteable) recipients.delete(note.author) recipients = recipients.uniq @@ -376,6 +377,14 @@ class NotificationService end end + def reject_users_without_access(recipients, target) + return recipients unless target.is_a?(Issue) + + recipients.select do |user| + user.can?(:read_issue, target) + end + end + def add_subscribed_users(recipients, target) return recipients unless target.respond_to? :subscribers @@ -464,15 +473,16 @@ class NotificationService end recipients = reject_unsubscribed_users(recipients, target) + recipients = reject_users_without_access(recipients, target) recipients.delete(current_user) - recipients.uniq end def build_relabeled_recipients(target, current_user, labels:) recipients = add_labels_subscribers([], target, labels: labels) recipients = reject_unsubscribed_users(recipients, target) + recipients = reject_users_without_access(recipients, target) recipients.delete(current_user) recipients.uniq end diff --git a/spec/services/issues/update_service_spec.rb b/spec/services/issues/update_service_spec.rb index 4ffe753fef5..6b214a0d96b 100644 --- a/spec/services/issues/update_service_spec.rb +++ b/spec/services/issues/update_service_spec.rb @@ -151,7 +151,12 @@ describe Issues::UpdateService, services: true do context 'when the issue is relabeled' do let!(:non_subscriber) { create(:user) } - let!(:subscriber) { create(:user).tap { |u| label.toggle_subscription(u) } } + let!(:subscriber) do + create(:user).tap do |u| + label.toggle_subscription(u) + project.team << [u, :developer] + end + end it 'sends notifications for subscribers of newly added labels' do opts = { label_ids: [label.id] } diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb index b5407397c1d..0f2aa3ae73c 100644 --- a/spec/services/notification_service_spec.rb +++ b/spec/services/notification_service_spec.rb @@ -111,6 +111,33 @@ describe NotificationService, services: true do end end + context 'confidential issue note' do + let(:project) { create(:empty_project, :public) } + let(:author) { create(:user) } + let(:assignee) { create(:user) } + let(:non_member) { create(:user) } + let(:member) { create(:user) } + let(:admin) { create(:admin) } + let(:confidential_issue) { create(:issue, :confidential, project: project, author: author, assignee: assignee) } + let(:note) { create(:note_on_issue, noteable: confidential_issue, project: project, note: "#{author.to_reference} #{assignee.to_reference} #{non_member.to_reference} #{member.to_reference} #{admin.to_reference}") } + + it 'filters out users that can not read the issue' do + project.team << [member, :developer] + + expect(SentNotification).to receive(:record).with(confidential_issue, any_args).exactly(4).times + + ActionMailer::Base.deliveries.clear + + notification.new_note(note) + + should_not_email(non_member) + should_email(author) + should_email(assignee) + should_email(member) + should_email(admin) + end + end + context 'issue note mention' do let(:project) { create(:empty_project, :public) } let(:issue) { create(:issue, project: project, assignee: create(:user)) } @@ -233,6 +260,36 @@ describe NotificationService, services: true do should_email(subscriber) end + + context 'confidential issues' do + let(:author) { create(:user) } + let(:assignee) { create(:user) } + let(:non_member) { create(:user) } + let(:member) { create(:user) } + let(:admin) { create(:admin) } + let(:confidential_issue) { create(:issue, :confidential, project: project, title: 'Confidential issue', author: author, assignee: assignee) } + + it "emails subscribers of the issue's labels that can read the issue" do + project.team << [member, :developer] + + label = create(:label, issues: [confidential_issue]) + label.toggle_subscription(non_member) + label.toggle_subscription(author) + label.toggle_subscription(assignee) + label.toggle_subscription(member) + label.toggle_subscription(admin) + + ActionMailer::Base.deliveries.clear + + notification.new_issue(confidential_issue, @u_disabled) + + should_not_email(non_member) + should_not_email(author) + should_email(assignee) + should_email(member) + should_email(admin) + end + end end describe :reassigned_issue do @@ -332,6 +389,37 @@ describe NotificationService, services: true do should_not_email(subscriber_to_label) should_email(subscriber_to_label2) end + + context 'confidential issues' do + let(:author) { create(:user) } + let(:assignee) { create(:user) } + let(:non_member) { create(:user) } + let(:member) { create(:user) } + let(:admin) { create(:admin) } + let(:confidential_issue) { create(:issue, :confidential, project: project, title: 'Confidential issue', author: author, assignee: assignee) } + let!(:label_1) { create(:label, issues: [confidential_issue]) } + let!(:label_2) { create(:label) } + + it "emails subscribers of the issue's labels that can read the issue" do + project.team << [member, :developer] + + label_2.toggle_subscription(non_member) + label_2.toggle_subscription(author) + label_2.toggle_subscription(assignee) + label_2.toggle_subscription(member) + label_2.toggle_subscription(admin) + + ActionMailer::Base.deliveries.clear + + notification.relabeled_issue(confidential_issue, [label_2], @u_disabled) + + should_not_email(non_member) + should_email(author) + should_email(assignee) + should_email(member) + should_email(admin) + end + end end describe :close_issue do From 8ca5b33175ae809fabc0d88bf16b0325e59f7203 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 21 Mar 2016 20:21:23 -0300 Subject: [PATCH 056/132] Fix issues count on labels page --- app/models/label.rb | 8 ++++---- app/views/projects/labels/_label.html.haml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/models/label.rb b/app/models/label.rb index f7ffc0b7f36..500d5a35521 100644 --- a/app/models/label.rb +++ b/app/models/label.rb @@ -97,12 +97,12 @@ class Label < ActiveRecord::Base end end - def open_issues_count - issues.opened.count + def open_issues_count(user = nil) + issues.visible_to_user(user).opened.count end - def closed_issues_count - issues.closed.count + def closed_issues_count(user = nil) + issues.visible_to_user(user).closed.count end def open_merge_requests_count diff --git a/app/views/projects/labels/_label.html.haml b/app/views/projects/labels/_label.html.haml index 4927d239c1e..0612863296a 100644 --- a/app/views/projects/labels/_label.html.haml +++ b/app/views/projects/labels/_label.html.haml @@ -8,7 +8,7 @@ %strong.append-right-20 = link_to_label(label) do - = pluralize label.open_issues_count, 'open issue' + = pluralize label.open_issues_count(current_user), 'open issue' - if current_user .label-subscription{data: {url: toggle_subscription_namespace_project_label_path(@project.namespace, @project, label)}} From 1d99c8fe603e8c3b80b59aedbfa5e31a51ce61b2 Mon Sep 17 00:00:00 2001 From: Drew Blessing Date: Mon, 29 Feb 2016 14:21:37 -0600 Subject: [PATCH 057/132] Grafana installation and configuration documentation. [ci skip] --- .../performance/grafana_configuration.md | 118 ++++++++++++++++++ .../img/grafana_dashboard_dropdown.png | Bin 0 -> 29419 bytes .../img/grafana_dashboard_import.png | Bin 0 -> 40974 bytes .../img/grafana_data_source_configuration.png | Bin 0 -> 53402 bytes .../img/grafana_data_source_empty.png | Bin 0 -> 44058 bytes .../performance/img/grafana_save_icon.png | Bin 0 -> 16024 bytes doc/monitoring/performance/introduction.md | 3 +- 7 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 doc/monitoring/performance/grafana_configuration.md create mode 100644 doc/monitoring/performance/img/grafana_dashboard_dropdown.png create mode 100644 doc/monitoring/performance/img/grafana_dashboard_import.png create mode 100644 doc/monitoring/performance/img/grafana_data_source_configuration.png create mode 100644 doc/monitoring/performance/img/grafana_data_source_empty.png create mode 100644 doc/monitoring/performance/img/grafana_save_icon.png diff --git a/doc/monitoring/performance/grafana_configuration.md b/doc/monitoring/performance/grafana_configuration.md new file mode 100644 index 00000000000..416c9870aa0 --- /dev/null +++ b/doc/monitoring/performance/grafana_configuration.md @@ -0,0 +1,118 @@ +# Grafana Configuration + +[Grafana](http://grafana.org/) is a tool that allows you to visualize time +series metrics through graphs and dashboards. It supports several backend +data stores, including InfluxDB. GitLab writes performance data to InfluxDB +and Grafana will allow you to query InfluxDB to display useful graphs. + +For the easiest installation and configuration, install Grafana on the same +server as InfluxDB. For larger installations, you may want to split out these +services. + +## Installation + +Grafana supplies package repositories (Yum/Apt) for easy installation. +See [Grafana installation documentation](http://docs.grafana.org/installation/) +for detailed steps. + +> **Note**: Before starting Grafana for the first time, set the admin user +and password in `/etc/grafana/grafana.ini`. Otherwise, the default password +will be `admin`. + +## Configuration + +Login as the admin user. Expand the menu by clicking the Grafana logo in the +top left corner. Choose 'Data Sources' from the menu. Then, click 'Add new' +in the top bar. + +![Grafana empty data source page](img/grafana_data_source_empty.png) + +Fill in the configuration details for the InfluxDB data source. Save and +Test Connection to ensure the configuration is correct. + +- **Name**: InfluxDB +- **Default**: Checked +- **Type**: InfluxDB 0.9.x (Even if you're using InfluxDB 0.10.x) +- **Url**: https://localhost:8086 (Or the remote URL if you've installed InfluxDB +on a separate server) +- **Access**: proxy +- **Database**: gitlab +- **User**: admin (Or the username configured when setting up InfluxDB) +- **Password**: The password configured when you set up InfluxDB + +![Grafana data source configurations](img/grafana_data_source_configuration.png) + +## Apply retention policies and create continuous queries + +If you intend to import the GitLab provided Grafana dashboards, you will need +to copy and run a set of queries against InfluxDB to create the needed data +sets. + +On the InfluxDB server, run the following command, substituting your InfluxDB +user and password: + +```bash +influxdb --username admin -password super_secret +``` + +This will drop you in to an InfluxDB interactive session. Copy the entire +contents below and paste it in to the interactive session: + +``` +CREATE RETENTION POLICY gitlab_30d ON gitlab DURATION 30d REPLICATION 1 DEFAULT +CREATE RETENTION POLICY seven_days ON gitlab DURATION 7d REPLICATION 1 +CREATE CONTINUOUS QUERY rails_transaction_timings_seven_days ON gitlab BEGIN SELECT percentile("duration", 95.000) AS "duration_95th", percentile("duration", 99.000) AS "duration_99th", mean("duration") AS "duration_mean", percentile(sql_duration, 95.000) AS "sql_duration_95th", percentile(sql_duration, 99.000) AS "sql_duration_99th", mean(sql_duration) AS "sql_duration_mean", percentile(view_duration, 95.000) AS "view_duration_95th", percentile(view_duration, 99.000) AS "view_duration_99th", mean(view_duration) AS "view_duration_mean" INTO gitlab.seven_days.rails_transaction_timings FROM gitlab.gitlab_30d.rails_transactions GROUP BY time(1m) END +CREATE CONTINUOUS QUERY sidekiq_transaction_timings_seven_days ON gitlab BEGIN SELECT percentile("duration", 95.000) AS "duration_95th", percentile("duration", 99.000) AS "duration_99th", mean("duration") AS "duration_mean", percentile(sql_duration, 95.000) AS "sql_duration_95th", percentile(sql_duration, 99.000) AS "sql_duration_99th", mean(sql_duration) AS "sql_duration_mean", percentile(view_duration, 95.000) AS "view_duration_95th", percentile(view_duration, 99.000) AS "view_duration_99th", mean(view_duration) AS "view_duration_mean" INTO gitlab.seven_days.sidekiq_transaction_timings FROM gitlab.gitlab_30d.sidekiq_transactions GROUP BY time(1m) END +CREATE CONTINUOUS QUERY rails_transaction_counts_seven_days ON gitlab BEGIN SELECT count("duration") AS "count" INTO gitlab.seven_days.rails_transaction_counts FROM gitlab.gitlab_30d.rails_transactions GROUP BY time(1m) END +CREATE CONTINUOUS QUERY sidekiq_transaction_counts_seven_days ON gitlab BEGIN SELECT count("duration") AS "count" INTO gitlab.seven_days.sidekiq_transaction_counts FROM gitlab.gitlab_30d.sidekiq_transactions GROUP BY time(1m) END +CREATE CONTINUOUS QUERY rails_method_call_timings_seven_days ON gitlab BEGIN SELECT percentile("duration", 95.000) AS "duration_95th", percentile("duration", 99.000) AS "duration_99th", mean("duration") AS "duration_mean" INTO gitlab.seven_days.rails_method_call_timings FROM gitlab.gitlab_30d.rails_method_calls GROUP BY time(1m) END +CREATE CONTINUOUS QUERY sidekiq_method_call_timings_seven_days ON gitlab BEGIN SELECT percentile("duration", 95.000) AS "duration_95th", percentile("duration", 99.000) AS "duration_99th", mean("duration") AS "duration_mean" INTO gitlab.seven_days.sidekiq_method_call_timings FROM gitlab.gitlab_30d.sidekiq_method_calls GROUP BY time(1m) END +CREATE CONTINUOUS QUERY rails_method_call_timings_per_method_seven_days ON gitlab BEGIN SELECT percentile("duration", 95.000) AS duration_95th, percentile("duration", 99.000) AS duration_99th, mean("duration") AS duration_mean INTO gitlab.seven_days.rails_method_call_timings_per_method FROM gitlab.gitlab_30d.rails_method_calls GROUP BY time(1m), method END +CREATE CONTINUOUS QUERY sidekiq_method_call_timings_per_method_seven_days ON gitlab BEGIN SELECT percentile("duration", 95.000) AS duration_95th, percentile("duration", 99.000) AS duration_99th, mean("duration") AS duration_mean INTO gitlab.seven_days.sidekiq_method_call_timings_per_method FROM gitlab.gitlab_30d.sidekiq_method_calls GROUP BY time(1m), method END +CREATE CONTINUOUS QUERY rails_memory_usage_per_minute ON gitlab BEGIN SELECT percentile(value, 95.000) AS memory_95th, percentile(value, 99.000) AS memory_99th, mean(value) AS memory_mean INTO gitlab.seven_days.rails_memory_usage_per_minute FROM gitlab.gitlab_30d.rails_memory_usage GROUP BY time(1m) END +CREATE CONTINUOUS QUERY sidekiq_memory_usage_per_minute ON gitlab BEGIN SELECT percentile(value, 95.000) AS memory_95th, percentile(value, 99.000) AS memory_99th, mean(value) AS memory_mean INTO gitlab.seven_days.sidekiq_memory_usage_per_minute FROM gitlab.gitlab_30d.sidekiq_memory_usage GROUP BY time(1m) END +CREATE CONTINUOUS QUERY sidekiq_file_descriptors_per_minute ON gitlab BEGIN SELECT sum(value) AS value INTO gitlab.seven_days.sidekiq_file_descriptors_per_minute FROM gitlab.gitlab_30d.sidekiq_file_descriptors GROUP BY time(1m) END +CREATE CONTINUOUS QUERY rails_file_descriptors_per_minute ON gitlab BEGIN SELECT sum(value) AS value INTO gitlab.seven_days.rails_file_descriptors_per_minute FROM gitlab.gitlab_30d.rails_file_descriptors GROUP BY time(1m) END +CREATE CONTINUOUS QUERY rails_gc_counts_per_minute ON gitlab BEGIN SELECT sum(count) AS count INTO gitlab.seven_days.rails_gc_counts_per_minute FROM gitlab.gitlab_30d.rails_gc_statistics GROUP BY time(1m) END +CREATE CONTINUOUS QUERY sidekiq_gc_counts_per_minute ON gitlab BEGIN SELECT sum(count) AS count INTO gitlab.seven_days.sidekiq_gc_counts_per_minute FROM gitlab.gitlab_30d.sidekiq_gc_statistics GROUP BY time(1m) END +CREATE CONTINUOUS QUERY rails_gc_timings_per_minute ON gitlab BEGIN SELECT percentile(total_time, 95.000) AS duration_95th, percentile(total_time, 99.000) AS duration_99th, mean(total_time) AS duration_mean INTO gitlab.seven_days.rails_gc_timings_per_minute FROM gitlab.gitlab_30d.rails_gc_statistics GROUP BY time(1m) END +CREATE CONTINUOUS QUERY sidekiq_gc_timings_per_minute ON gitlab BEGIN SELECT percentile(total_time, 95.000) AS duration_95th, percentile(total_time, 99.000) AS duration_99th, mean(total_time) AS duration_mean INTO gitlab.seven_days.sidekiq_gc_timings_per_minute FROM gitlab.gitlab_30d.sidekiq_gc_statistics GROUP BY time(1m) END +CREATE CONTINUOUS QUERY rails_gc_major_minor_per_minute ON gitlab BEGIN SELECT sum(major_gc_count) AS major, sum(minor_gc_count) AS minor INTO gitlab.seven_days.rails_gc_major_minor_per_minute FROM gitlab.gitlab_30d.rails_gc_statistics GROUP BY time(1m) END +CREATE CONTINUOUS QUERY sidekiq_gc_major_minor_per_minute ON gitlab BEGIN SELECT sum(major_gc_count) AS major, sum(minor_gc_count) AS minor INTO gitlab.seven_days.sidekiq_gc_major_minor_per_minute FROM gitlab.gitlab_30d.sidekiq_gc_statistics GROUP BY time(1m) END +``` + +## Import Dashboards + +You can now import a set of default dashboards that will give you a good +start on displaying useful information. GitLab has published a set of default +[Grafana dashboards][grafana-dashboards] to get you started. Clone the +repository or download a zip/tarball, then follow these steps to import each +JSON file. + +Open the dashboard dropdown menu and click 'Import' + +![Grafana dashboard dropdown](/img/grafana_dashboard_dropdown.png) + +Click 'Choose file' and browse to the location where you downloaded or cloned +the dashboard repository. Pick one of the JSON files to import. + +![Grafana dashboard import](/img/grafana_dashboard_import.png) + +Once the dashboard is imported, be sure to click save icon in the top bar. If +you do not save the dashboard after importing it will be removed when you +navigate away. + +![Grafana save icon](/img/grafana_save_icon.png) + +Repeat this process for each dashboard you wish to import. + +[grafana-dashboards]: https://gitlab.com/gitlab-org/grafana-dashboards + +--- + +Read more on: + +- [Introduction to GitLab Performance Monitoring](introduction.md) +- [GitLab Configuration](gitlab_configuration.md) +- [InfluxDB Installation/Configuration](influxdb_configuration.md) +- [InfluxDB Schema](influxdb_schema.md) diff --git a/doc/monitoring/performance/img/grafana_dashboard_dropdown.png b/doc/monitoring/performance/img/grafana_dashboard_dropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..b4448c7a09f42f3480f8bfbd513cfb8bd7dbfe3c GIT binary patch literal 29419 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�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 t>4h4!7cXxMpr?|U6xVyXk=sD+mPy256zujav z`AA6SnS122nM>z~oQxrnDbSur16DbU>(TLEDr(4qC5k|-DqRA*&BTt2Mp4gj5*tnjkYnp zAplK%P{bDtL;)UH5AojsUaehdbitH?#s>mrtc0MCAwhKU_xJzSF&pSbj5UcfT%_Th zai^Qtvm2xa#Has(tV*~P_PZ=WNeaowU|>EJd^xfDkc%OjoOG<-!ks)VJVC=@(@~)OS{ajtR4+_<6;|$XL(_ zsz06UUDW;3kSt!EEJdo?$5bN)b2f|wHI+p5HhyxyHYAoX@*2QXEk^OP({_6reX(Y# zc0>>3Dh4%hj4^^cjdzqHy0cK-_=m@)Nz&*wT)L6CM(jK_lfT3GWl!jUI;wHN@S%f{ z*Qe@7Y>}YS!0TQ{ncW8_V|F?cM&tMz*U1nQ^;pzTTnSr5AuuEx)#)+*uhke#LJng{~TG$j;b2r)YjQ=o=+@?XCnt25Yl8nee?AhW2F zN!9b>Bjy4@t%I_x0}+UUB;n%(0mI#c;C=)Kz6^tk+#=ZB4lW2dA4D!izHFrUl8j~_ z!uA;=!-zS<*urY-L+4Cd>cjAwe8Cx}P#X{0@F7rV(+4Q~y)ROrKuhVsd=Ksqh1M`1`Clo{$ z!Dv}pBzt#oDw%K6ft`)J6O)BkWz`L7-!bM*)KX|pkAmY8+20M z6qN&}4YdtL+oxQZHHR+iEE96lVE+uAQ3S@o$F7T>z6za|6jCvWqFc#8#(>t~k-j?- zL5(^-n7NBXAGFGDLFt(CSmoHu5~&_^IRxit_?9i3Q!4lv99po!W>2F4KnEZXa0OTa z=ueS!;44BJdY`toEwk=iK;^m1Y}4FO`T- z`AIs+x<~8_r5$%w>VjCSl!uT985vmt-5zy=P&iovohq%f)@d;y6JQd}IGDOED1k37 zwk*b+3qR#K#mSgtDRoQSAJe;SwasxUe2H{P<{I1@$0e9f(;?HY(60Vk|7-#7>l@{p z@YCL(%b(Fd2D$-RhXN5f48;>UDcAyq3S}7?61hK)T!KX+O9DeeGwv|1oFa^TD>f|d zC3bNLd?+xEjuJs$4jD8U!C!b$j9s8f3PYu*SQ#POW4u12;_@ANP+{ zf;Q_mC{Lsp@)x*A>Bk7TAP7f4Lq7#S89xR=?QY?K5;!baJoHbY`yvz~?xD@0JeVoy z{pdC<)(p4|@=W@P+ex1jxfn@O+!BqGRFYPiyOSqJr$%m5ZW6n9;dd!^<8~XU^P=f;&CLPgjWo^N=ff@cY#PSOXHUc0{JHyIzrAon26qz%j>4zGuVJTQ z`-g{x=g0)e{E&G{h1jROrhim2=)cU57Zd~p1u}?S_H>{ zdVs=IdLmCx!B)st_M1p`R z5soxXDpW4@P0UC^R2(E7)T?*@YIIwWx}O@;B+>K?NTC{4wN`)N8s|ORQ{GoDRZc6p zQK``7ZtSxd&8nMN%B@Q~f}KMt#Tr8xsL+O|Yr*f(Gga)& z4-j||(BJ4Zo*#wu=6maW%5o1`iEq}cN7F=0K=ED~T5@|4O~D)XP6fobmbtfV z-GXvfa^7=3I=da0(#TT|QeiCBnW{Qal+_kqznr49RKzVN-~a>xM2kc;2oyFe7LCsR zs}(2|D4ubvanetipfB_;F4YpX!4VwfTkq}V6yyY8iRlhqe;NOeW` zY;3gbubT-yx{tD88T(w~yo)YF`!ns+vD3n%a#usURq?T?W)@l&HkxvpCM_0E2fAfm zW$Zc5`In`KizjEoQds|5QlPCoAXg$}}d-62(IXF3}8MNjtUJ0+^m6+tx{s>5bikHEb`=m6L@PkKqFqiwFl<_p_g?4h`Jax{X`z zdqdiND_EW(Pi{{+k7sbiuwrLbXJG)@j<;R@TfZNH4-xbc!MIdBwC>qAxrfd*Ybm+m zQ#F3=eykZHT%K$_m~Ib&`w`aHeOIKeGLN*e76ObyP-;^F5 z)-0yy3tlguk9O6L7tXOZQU)6|*NQqyTy5Uk9k?u?2LnS9knloyioAgc7-_-i6 z_nllk&|Gx?Aw3VYNw#dsyVn6EF2t|o0(`uJ;Gr~|#`=m73?)FAm?;fNE|j8Ftpq^5ai5XO&@fh9MP>n$%3BTZRmfy{~jSm-pNNvfWWHoKcoNd4nonx zN3rW zMiQ|oerEtMbm&JPez=n(x*!E7Ojc{`sp;vuLpYX~4-EPYf3OM|niv^f2|tdW%sTf^ zF4BvDp^Jq@1sF3I7~Bv=Y+Z<|7;yYC*)|l!fH*SQFYMI#Gi(2YJ?odN<`#w{bb_rD zuRY@i?CG$Uy`E+B(iA6FK(W^8s8}pDKRlVP9wr%^(p*g@cBO@czMFdGmo!hac zH3$3+uom5M-whgeXSuT?!+d$hbjEWP%G(8LrEM0@BiLI;=FMWu`OBd(n-<;r#Sz_4 zGVf|$@FxFK*8=DH1ldgPT0+o$&iWA!ko;M&J&o;C$S#AGVVl3-u>mpUWcscVq>B6=X z=mo|pfi{LNJ%m+PJ8l);tU!%B|eN+(QB7 zvDdy^S>Qno?<=l1v`nusngnBu-ycE=LQa&El^lk7%1(E-ZTQ+)`m=@H@D7NGssm9G35k^pGBoQ zZE#KP7TDx6k&nJaG8mj$qU*^@GS$%uMX~h-D$e3>lm>ksTnfv6!c-ab z5=q~auIOfUN=z*Ba>X-aqx~(;%6lu)sJgol41=;bGQo%sZOzOm#A+O+>2)#Ik8I-W~^EK zhiUn3QG7Dc*+Uk?=2rzU()K{WqvIK8WN40U_5seq$ ziOIFp{XsLd%E0Bl0m^>9DH(J1x-`pp(I+sfEfa)Q$@O5Xy?$%tKRe89v|NtbjxGw` z?g>)kL@MH=LV16?0Y&ONGeL@eAdziGOVWxj5Z%ma+H8z_zt*T6y&r)hC6RfFzS;-G zs?;J#d1JaT`AVm-(L{<1zaD%j#rf=ZQDQON z-qQ!pP<#oiw;cp;pII0x+xTnaq~Ws^^DumgIW{G_1nO#Dw12g|&m;+bAzyK0BRWe8 zjXs>oczReMo)fuQt)X)Ryd{S(A5=PL?RzR1rf9aZ6!c z^>_WOxlADBDHlr+wif4&H|8X#BbiSWMw)lDxCahaLfqdckSxDFx4C>(0kxj(cyBNg6-`2YUA!{a_0iu;_JoTyc_8|+A8 zQTwIc$tb_$sR!yX%^kE;n{itErXof(8M_AU`pvU}iYaiyQoe2rmg+e-o@M~(q5Ek< zCjz3FI6s8aS5LYJTK=5XioCh+Cc8%`Q=naP&GWi3^fo**1EO_Yt;Z(!L%S&qil=)L zg9AUMZsNSbZI4D59>hzZlZp`4v0jZ5tOE8F_tPJN`7t z%*;ibwAgm&vBm51vkssMOZ#w_6iUqU%BFKA3sMo>ZhP7%R%*orrOD&5s9hvPcg97a zE>~*GTcbV0Js;y798%@0!J3|pVb{n~o}n=KNR44OY+Xc@-cqUT#WQGc@}O+G7d)r) znQ%ls4cwJYJBhtoPF^agCkBp?=Y7EjRCaWoog*lX@UtTt^)p62Z#$}Td4H9A*oYFr z@M?a+da>0MNO6d@3-)q`7gz+>E68f`L_-6QDh4l8jyN58>CX=C%}qbwEh;;j|Jb+a zQNQd$5koi#O>!m;`r8%}<1UNV*+eP+fKhG&B$9+9u}+FNIvn#!{a8#*IxG^9=|HK0-@<5F{N4-@cNG(#=B zparR-<32yV0hR>dvbVEgX|nPI>+*)L_-Hf@l(MDC!SIuAZ%UfmI?GluCy{R!r%iH> zbEX;RNY@I&N03V{BQtKLS+eBke83}&^)rgg`+$+KTDpT0Yfmz0>G4R~DB9n5wgc^d@R3$}1Zyk?uO}rDGoqb&ZTTfa;uIL=F>f&y&sWj(@-voT_ZB z*FCC-_uRYyiCMcfYO&ziw(u~*MOeklL^DL3Owt@cjR^G75NaKbr24cJM2lP5`1#3* ziTFD-&1m`A78Y%ipnw~N^72a&duv&q;#vN~>>u|c?&tXL8!ckPTq!tQa z62FpM{-?907Nk4m*iERdxy(JP48KWszt2$dwfMyiSZUgQaxJwOY&*S1_cuB};tj>4 z)rqQ!(?*mDaPYVnUamnkbogD%m5vGd+YsJLq%c#@!lztlL*r%07sC@oQ1=6$F>( z{{elI44DN1%7cF=b}~yvfMgsL0Vc08>&|&m3zpMwA2?I4`gOA%PgUQ=uW&&HeF@Vw zdS-1P-9BQ5F2|SL!ixrxk6F`~{D`GJ|6kwe-u^>q%lS{32>4n`XMmk(hGK^1mCJEe ze=WrXWXfuCznBZR)f{%AdIy_*B{9>?eQG$C_n^Y8S(Z@zfB=ooVpj7V1Uc1Ta4z&GEy5e0K zZ|BBqPRT4V4vb?xx#Ag{TQ3!x=q1*;ZbGk)N^RfzD`Z4Qsjo2Ph^iB*k^emdo%Ar+ z+?c#tm`eCJHx=GEG6gl`dWQp1L@qBk^BZ4V>NXKrUg+nO7UlnR%-KkN^r3RYi@*R$ z|GG@ShIEo6?Ndc!`rV0zRmU6H{o#Q6d?M@QGw)%Bf)V;xtG#=up^opaI8mFw8qdFm z!utTd9w_=qOgrhHAb)O7r2WljM$CpFKH`t9(e2*-d=agfO1?kB0-a)Ldicy!nn61` z|FY{nAR&_a?&yD-C#L@RFE!o=&`-Sw5yGxfzdZaV+V8=O|F=Qk64m;lh7WyB5cyb> z=4rWM{&sTp<2Uc!76iOc+hxOFRCfKsh5QdXeFMo6S>K<$-8#s*n`aw>+Rlkd>*@M__Yl{yQN-)Tvi66XJ#=)coa zCjXt5F-7ABihoE+j>0>m3N2YslmB28ThcqDWb%0;r2muxiFYZ;sa{kw{R6vo!}nkh zN7Cc}Hvr#y;=GTgP<)j9dGZHkfWX@wK_C%uk85OJAQa5U`S2%9AOOGd?^knum^3mq zHMLR#dnq9@@V|pIJ@0r1GjCx2f&DiSsCNdDY;TDCS9jGr4Zlb?2K+(UOg@2k8bY}? zM*UZJ={tYakjnonBo`_79@G-R{qGphN2>Q&+}!uyZLD8sf%u*GasLbUZh^ul3OuyN#lC9B(tn!Am2ma8_wPliY|*nZaG% zNq0%%SidVS`ed-aTW*Ec&IpI{e1iT@CQbn5udy`2ctRv(2b{#h=%TGZQi%QtEbD## z5PE`JG&v#A-xk`nK-8m-k|I{dkWDfyBD)N4xi;yuy2@g85`MxNNi^t7X;lfjY^a9! zn~(pl(7(Q4Ln1IsX?X*~GX84_xjzG&A0ayBp;ZU93=8t`DbR%?8bCQ&l)J4)g4d~? zv&iYND8$7-K)7$*)aFdq0hi6y{M_X;)2CG+(Y+}vE5|L&=(cJ-JAw3p_`qM(+mqvWcbDgz3VhL4vufN zI*nn?j`hP&$S7jsUWk%;!{a`(lmy&5$}-!#hD6dQrFA}#EtuM-L8_&N$>;w%Vee`& zJfSl&!!lceG(|3rxcqU29CkbysAGgH0h6ISV-XDac(EC3a11NTBu%>uK+Uf^`0NvN#(tvLN6$==HdCj@|<%X`NR%Y{Rr~yNy2he28pXzm=P+;tz zTHA)^+d)I(RW-v05`I@@=sZ5Jq$%jjcVgXno=+z6Mf1iV1CE;GaRe zCv=SE(GiMki%_ytEy&L^JE|Kb6`&|Jf-VbnmDia5#th|4UMJ{w3ew1`+Iu{V@;gjy zpFpse<|FJo@%Ze`d+zIkxSy-Jncdv&QK5nu)fMp)t~bGGmmQC`MYEpT_ZCd!3W8nGaq}k}rB@w5)~{$5{NNSX!`4-Pu=d zrKZDr-sLNg(eLU0`mndvd{o{|lAz`5c)+bR-s`p%#`^9S(5=7Rtwpp%G)>8?fSafU zhYB3`sbK7~w~{bLAU;eJv?Y#dvFF3~I*NZ>dfVjlAExLg@iR@(kG|OmA9-~SlhAjF z*Z)Bz8PI;)c~U&-=1df`VCb@oXqY$fFmo#6BGLgjj;Bx9Z$?LW2ic5xOget#i#W<_U%2eJtEyz2K zxGeNVb0xmcK<=`Yfx+SEjgA$CSGa*_mXR2Oi8gKfvDq|$gSG9=7xTX?5_IWzL*&tt z2IJ?QAqwS;a()i-&7Ot;mGrrV>e zs_lQ~b=N{pP2Gdz4DhLE@gxjepj@ysxB%(y_A{Q>JB17xwaT=B4o1~059WS30ENj- zl|e=so2`~Ti#PEc?2Zg<-eyZBPc89<=WX7EP+%ulll#!-f~b|T%~#A@GPNX9I#A=$ zSXEH5mX{R_XUl6x6MZF3gEJ-4&lzdYh9<^YTs3N+v84i)i}>=&iRM3+F_Lb;>0JvA z|Cj<-7j|T*^sOle!RrC*v#KV+U05?mWoDtAyO%cK>l{NQW7>VpUnXFH=DUf9mklf% zg8P1UX_hArbiZ*))^6F@%=wYmwPk(MHgcc=_Aix;#z5Vq@qwR7d_U}~n?LilUDfim zLoqoG_c|%)n6{CWk2cRtVZr6iJxx|58c(c|cfP~K$Hwcg^jG+bcs6CHS0SHD$bx5g@q>mEYAmb?T@DfG-&$@i;mU^t#mV7}sBG#V&t? z1EsVvT%9~CecyZcW{4Oc@$<{c+G|<761Xbw%Yp0@e7@yZLv((l&gseVg2zcwyhC?L z`%vR^=LQ6Fq?VQIs~iK-Ybb_HYJnfei+!%A7NUU2ZvBLGNzVg79YO8dpzCBt92i~S ztZV1I&m0TFl1AW052k<-4tx!n2G28F9}DKd1`d1QS{R?|CccEx+_E2hgy>_A`(*RW z!dQk+EDdRx;7Ueu#f?+#Af({Qz6dQBWc?K^n{=XcWZqiP^ zVuYbn_#+`alW;{kY1i9 zj)z4Bo2%|;vu@cVN~{1|(3u1$`K}r6JAj|}bH8^Fny!cb3UN-Ay#RLz_oqEsHuWNl z99aJtb?nh^!)HG3f<>@+)6;Av=JGo9g7rsGAixI)W=;m`ak$^vhAiZ&$YlfAicc7? zrIyxU(^{4d#t{x=gl~4CDUx}>nAWcbgbQ3J0cF~s$#{&nUyEbCY~GbRt*BrDSoEfMJ)D`iAxLn{ z5IE(!yDYtcZ6ia}$gHZeQ%of*Q=hh0m4Lj_NPX?L{iw;pMMi46bu-@*W}{A(Tj;^= zBsBAm?Q3cbmR;dP4%Q)JmE)86(7LQV;3RrsH@<{xZJin}^F%FYn`qdzS>F9~r_Wiv zDR6rL?6P!VvnLT%3KpR^{z#5xhtPAT2{@GDMM>>KwN1W!yG<}dwq?#!j?&Mv*zOoC zsx$)O>;ToVlyDYy8_Me|Qah|=L2rxA7tg8W&dah^Vp*PT@t90u9@EI`IAxnYLZ{Qf zrM{4O={Q^FLj2Em%K>F>6SFbjv8}}NFw5oxFb{sPc+m)m(p6Y>X1AV0vK^?iE8A(0 ziEg878==f-z!JdZTlj!J6;iqbuA)wlQdEOZa+oa7Ib9`}2bECN1% z6Fr3t))|_qWMD>V&l?ylS|rz)4pI=eq*^AAu^i}a{X|^EM9I#M!tNls9=)#yx1*)W zxcnho>6B5qO$x5Ugp6O=;=17MD+WlNO8yAKT7P_MdfA#Pp*v(V_xX*(Nb#tBMMisIdbiwOS&YQl)p8#e)JY2^JK!`WpUO?+Krb z(CcHaQnONd8^a(A8q@&;2uIX5*ukO$Mjwf!+bka!$OG2B!hno>rt1GceBd5kDbBHGTOY19t$aL$nFd*VphO@<)&JxR1IxzsL% zoAt3}frM|?k8V~($L!9D%Frcur$<~yMpS1Ka|U^M^%lBuo(2k1o>I_hb%ZwR)6X%l zaViVWul)~|q}3jXj*Hbh?Q#rJ5$@5&ECxSj#8GJUQt<|hlE}53GHSy(-XP55Frc$* zHw*T%as|@x=6ZcvF;tuvNxje9qKG2O#S$0?4RE$?f>w^TVjBB^y8pysAZXs>Z4-w5^@8{;sL`h6l;eC6T0lZ&F%9DKf-g$J={iYOKb!A&6kU(p zubhO|P0F$Ld5!EtOmRE7QY7Ijm^zkd-tRp3i4E>sH$%-p7>Tb*Nl8lyL+tr`;&Z|U zst3nec0YI=MaCc2ZL`=u;}*fiA?B8?8sFj%N<}E!FPbS5*z)Cftq}oh0Yl>ga;oEm z!4bZeQjATn^5-wC(M}KSRjiU$j0n5YW^aJr$2_Ar4DNXb@tB~~PBpzmH%e$OkH2kdFlhahYtC*UtBADveC{B{EjYe3k6O_>cUkC;sk$|&y@B+3 zeZ_AmPxhxlEbVIqmmx+aHx8a??Nj}1@k)1qD@?JR^6BR#eqJ4~*Btti=rohFf-q$+ z%iG*yJ+52OZv%`0!@F?=PT)<9U4HfVJL#Pu)GJF69kt4x^C1{7^;Wsc%k>haUQ=9q zI~NXsaS`#nmC{@{s zsDz*W;|uyBzQ^sz%MD~xQ`2B>2&$bZ;&eW2*(>YP*eGmgcOlIV$E9iNtw_7KiSZOg zs2Mg&r=n96ig(y#=OlSKqvwOAS?x2F8;xRfI#c%##Zd|B4(~Vxj>HzymMSagx)X&q zv5sg5?Ck9%=)xCB4bh+XGLDR{h2y)bD3--%l8S?@xHUPKi}y*~ z5bq3th8dv)k{7eIeD~1shuOrrq?scJF?{CW_UX3>F{;r#p|moM85AWu{gUI{&c*_` zwI4Yi%H2j0ahdkvA&ZLG)oR=uZZmh|rH89b)x)$hQ_v=PJ|mZK3??NQA}dfua3gde%pIWi0%l zl#RwXGV+0A#ReP zRa@6*tCZR&YQHQUQ(nvvDnmA-`y6=P2*4Fu+rV_?jTf_7&MFhpk~S6ud5mA8z@WId zpO%4(QD(OlV1Du2)K1C8eon+@S8~})EkmS9y^jYNQ4TN?-B_vZq9M6iNwbN(rb3n8 ziM3@^wR4@NKv(w8WsvXd(wzD1w>UhiEBx>b@1B#2WuD2_Y&i!@wYL%Jq1LzW z`KASAI?rSurC@qOF-R@sDUBcz_JliRRD9Hw6eWCpZD%86NIBe+Smns5HKI%_7&$ffyOjpone`gN_RC_q|x`1ZxaFqcS*jk3L3_KbXZE=2(*6ay071@ z!cWvX9d86NW|eV7TKe&$b~-@Hq0@*pc~p$GTZ`;&op@Aq>$C$#I~U@aa*3X9sbzwl z0STrS1Y+WpWjR+Zz~Lb8)=60Qv%X-yUAH>l5YkdNYFU-34L{b|r;~ z6(?XQG3rY*Skz~4qOZE?B_@<>vs)iVu=12TrwP$+EyBvqju(pCst370Hv{;}3|Uil zK(tAd{>*E2x1Bn+oClT zPEr&D;0{9&GKOrj)DyyuYfy}uU5WhhOunB|eFlYj_m)p4NV*EnQnS658#4j>h<8pz z^`HBELh-^Ugh+TC#V5|J$>Y*RhdsRq8B1$y!4LfyaXK(AU$oKL2fEAfv|u zx#vRkGIRZiVY;eR;aORu(X|L3+0fW%)iiq4uWQtH+K)UEIf|ya<1T!eQ5CFAVu z#>H{iNfhEt=aPx$Rb?3uTHXkt^73>)h)isB$1s+bb{<5hvwBi(^I*u5H%9WQj`O8s z)Dt5YIyQ&~THAL7Rk_=1)CaQ~QN%d(1vx%zvl&HkZ!nx-VNC+G!dmsHpa}yANr$=R zN+J!w%)OfQ=24S`x?w-g^pJ0aSU2$w?6*>u(@y0Js2;Rv=<*j{QIIJ9G^|q_Uic9k z5{5ri5WpEcEaANWEXOZ)kIr~f$Iz|wm|1oW-I!rbLYCj zmnj({L441cmW!iIwTNSEyPaT=Bwy!6eZxK8+Aq4a-=K5Vptz(RkX@8ln@?=Ha4BQT zW*H1<$wv(YG}IccaFoVWK$Z{6F7(mFuTRkVm|d$I(v^sKdbW932_<2#Mp@NXUN^rI zRA{(;NU0*G3yK4e5|pmFvJcQBVc8|diuP{J99w$IMKG$n<#XyJ=${oNOR~&S4rs^p z@Hs_A9;lq~_2ozcA|^NHcVw}F13$yW?)WE12SGva6?q`)WPhcoWkE6$B7M{x^RP5u zkD~l|(}FB`3T1l|bOl@DLK1s0syz(htv}HOy7G#cM2^og-gxKGONzD1TsB*{njTgs zyrC1+4xbrd4>#ZKGV3XKx8kh3kD;Jbp_=llg|qzl_#TFxo)TVTHA+(=P$orD(;w3* zLs<>9l9i~;0%s^9Uz!T_<+C@n2ldt@(vh{_w5h8-ATL@A%?`yj#Kg;Y&r7Isa;F2i zv^B1yY%qiY$Q=1)&ca$vqHUL%#;mqsGsEzi)7Fbc$nm+sgi_c2AcZGM61>{PtI^Jn zr5%zMu}_CBDj64)4aOiHtO?^u25X5@ZxH4E>JrfYO{=H=r#z}mMuULw8&=+V7Ko$X zbb#&jymjccpg9 zmX{&TjBr+WV{mx~Cu!04-Nq36lM}Afrb6~))pSw}3=CbV1t&+Kbbl&_^|zog0*>-X zlkcTH=~T)h)iFutQ=^@tPEKvQWsfi`%_jv;?pV2PppsX5KS&=EbnS(Bk97rKDMxKK z*tKTayMbSyfls;T-+g?V+^vE2j@8N69fE`?nT5q4bY0jlPf)*82+frCGFj4`q_B!F zv@$3qE`&j-xbDHpPE9fL_=t}{GXE+iac;f(Woee;?s;)moHT@CIjdrr%qVhDWt)F* z)cOaQQ8ereGVDO@fiXfxJ50y_n5tB^Lwe5WqX+J8BeKq68u#u3NKDrvqd{n~`gn6B zlKLiSJH`uE#!;cO4VTW!hHo-Etc{p&6a8W1Bpcm1nW3G}ZTJ|!#A$LbCehEu(G7ds7rTq zCAMYsP}ZB8!oZC$f)lqa?7U@pLDPVH_*_7H=l(UTZV z;=SSpX3d?v&0U&NGTXHy@gnhuTN7*L=)HRiHgxv(^V055JrZmQL)`oKx>50${#6K(u@)IOD3Ww!)1Yw`s9W5QYj; zN)AqMo-5<3B25@c&U5kItE^kKbc<q>4hbBmx<|&ruH>l&&BdwwEAA^E-bkaAu#0j?gG)8C>y(A2GG0t4fRUO>d z`ePYO2vjdOd^lGfqhGLf*GlI#p>cT;4w@*&hWKnMES*I&CSQ)1=Pv^FW>r-fj*#M6 zNpC7kZ3ni=4(pp~lRgpZOfMU`$HQ8LI$K{a_r1hU?3Q*WGZp}13Pd?ta7P-hQmQ(_5Z({w%4yt^H-jsJcKp-byyh~a8?zTTB6fx}%K zDEppfHVtqVw#1+Pe9TSJt@&kFj4(;;V2+*ZVS9=~WHoZv4X@R^W)g-&qj7XQF2=tYZr? zXt&w(w0?Olp_D$!#c?^st<=wukeT>cz2c!Ye6OdF?xPM z{RIIzZ|n*%n;#!jPZXK6A5@v*hfvmQ-l9mtr7g|^+k5y7y17M{m)91|68gT$RvLr zj4LEZB9-cV4~9mOLp69FfLGh9+flUN%tE<1d#egr^_zI2^}?8R-Q6zlhb=HpuujX} zw_&ZPo^=Y@puLj5acJ2d0=vKic{iNDb%P_l!j8Xrn`S26WSrK9Y-l}4usuz@_2R*U zKgy2(&R+usz32Oj`{%3ir_!f;o(5Y`a4DY=s!ErQ20P65up-FSpNcl$K~sv*IM44A zGW>`*k1k*;nz}o^QCF4yd#7V+ai-eNfMNCsB`+VWc5H}Uo>=moaJp>Pyxi6?ZWHVe zEw$Vq8hp$GFEZY$^Eze#zdhsN^J#n+xy@=@qwk#?L~MjqGBFjBHpM?}Y#u%lZ%-x= znM;1mNIHYOabRpuC*hyTa+a?z#`Nwo9N~IKF~nWU*||g;d<=?z%Vd;JRXem-%R@i) zK*EdD{7v-Q4d1tDH-vKolrUXjKkGR`sZ=bZzR9VRH0C^W-Y?CFFWq(r@_c_9G;h4~ zcdxp}G1&@FPPwT2ak%n%hDSRjW32`kZQC0L<wJ@>TCt00eg$C=qJvaBL7T*%UPK7MLH}>D#wXt zVe?zOZ9CGqz+8`@sl`c;50Q8x%bPiyGR9L$cW=YStv{j={}6$zvp7)h4oz2HEbj2! zY7w}6U>lyq3-8on$Nj5lWJz^88wOIrQZ4>a%bE7G?0i8rH`ZHi_Gc~H_UzwKMFBC$ z7d_mc%+c_BelH62ce858Ln(7ig<-b_uoYG)%1myV-*CLze@J=TVI6RPlo(OB!vZt_ z3J_wL5XV~&pbdwP%F|>wUQIM>>-JE2zqz9sZ{b-}cG;A*sRh2WdTA{Ba;AI1qB+*B z_an?oKANfFuNjD}h}+h%>AJZH2m+BzZYz|!UrT6dI5M+zvST5+|q_M+U(x|g0cUgOd z^LorZ?22xke+9z`gx7l};qAl*X1nf#QETHrTj4NxZFAX%z|q`I zLAl=U`E}KSWgUQ}zhTkX(_Wr4OxU-#i$O-T46ma`6yo?L=f$pbEk*>GX z{kGLXS9ERC?a_JYi}`^#=eM`0A1tTdP2dK0P-5$r}2+S z;y8oe7Omh#xxU}!2GZF)3YCd0jXnRe1OB;%=_$c}k-{yz{jTjSD?9s((&v#M)Va`< zvk8Yk+^#1@?cVcLq+A|PHAfe`w~!Y%&k6u?{@|v4g4w9TA7nf|WYzpPN;pUMLZ=}d zj^x;lu5F^WOHl|kB$e136Z{@uTtlX-Z3B9&0_&1Um5z3*(jPr$pQ9q4zbGYBsCodl9e@Lg2>&yoqDnx8)@Nnserus#~%&TU>Y z|EpR%2T;+Od}1+&?pDscoDCcL#A(wm)jPaifFvgUZ?IlrWLIyjw2~{_w0M|r<@E>H zZFfyJ+EzrICwk}CEf8z4!!asYzjY^y!(-1u^h(EOdGeNf{L~5|;q?MbTJ?+qj#(-W zj&l9bjKUiG5-7^qRdTFcXIEp$BB*T4IZG$g_5H3^1+%W!i>>!!e5f9 zCdy4MA{@T04TJYp*SKQZSx)^*+hr|si&m*k=`Snk9|p9;f*4RnV(#1W+^o~w?9<%P zZ$jw?sNm}1#EySE!&$xqdwmHDvE3q3BzA6d-fI|tg`Y1^3#nLhq_a+$^SuiflXGhF z>X@=vK7v#WW*ZE*6r6sgvOTG_F<6O+Ilp?_@0q9V0CC8dj>>YHJh05GCm2~r-P2N^Yh|q$gwXpo|-$#>8FsT&W7J?B_gHu*iRbe z`gC*OK)#RP>A!5+vAtYR+vR(t(F(52br7p|S9`SE!1Rr}>%de7wAuO%*sfhk))Bbu zf_+*VPtx2j8h)a;0Z1LkeXw1NcTH3;NO1qCZXu4ujuQ=qQabEy?E-yTB0GAW8_CgWF>kjwC8+?&lRMTpQg`s7K5rudBvejJR0}4qup%OxMY~rj!Y;u8pY2 zeRE4tWPukKmtGna|*- zK3Ps?W-75r5XAj`nF4VEzr_TA)tHPHqKm_KMqPg7BRK2N|C(d`z6<2!@hXk0J^0Hx zH8N7hd2RuTD&%YAOnlI)`h?pK-r4&YV1!R$rV2JA$KYja>tk{)s;eX*?XM{9W9Ld4H@=ze*U;G`L7(HNIskm z1U|>u0*FP_PK7Wz5-)iG@BYWm3l|vl5KS*%L-rJWlGy)NHRqSW&?7MVEg*p497s(! z>^6UOzr!t})=BTj#dwkS?-g@`J%&n26UR3C4w2g%sR zW?THsX8AZGSnx^ne{%s?;#KwX)OlfApoPw*2kIOEJ{mFi$2PcQ6Lh2ZxI-#9PXxMKOO9sM{7O1Tr5ka>O9 z8&9s&T{%qh$l>dMIdSIbJ|}ae@%bk{T^JRU8E`Z`BYt+mN!h84(tv2nJW5&`|3NTL z+a}{rxw75~VYh3(T>qoE$-C+9<;{8}4SBs{C=kug$Yu?Hd|bg}eDLK{D}uSZ69VBv z2fD+a_fYmppm;VrtT zBGqtH2_CG>!I+`BAJsKC`f!_Fb23e=24&nCz)r$se#crPY5FD%PWC&^6^HNj$Jd98 zjewM<#GMy&zpPDOEf;njPL#Q+x&9`mM+U#!Nf-h#j|Di-ddSha{2ClfYkH(hW#X{)>n$>)ET%VWm&P=QFXf+J_S9@ro|yn!BVHR5e(O>BAR|1aXONPR-T!Y^8E}p8rA_K&`GX5!4sa@zTy1~HSxy8yUulb8d8_{;Q*-^aG zre*?Zs&+3O#Otcfy3w!X4=&QatlC_WCaaw%$fOe)ym%g2>SKt#dE&e%Op^(9yx{@L z#a4bxPUn7e_kt#07R5VT{wd_KwlA*|QO0e}#~zzZYD&m>PN3TENY<6{wbKdFD#ckB zmL7pSt0{g5caBK$`jk_9(@n;YstYu)<8_-W$(GFX%x8<9K(&<+$+cU_!R_7a=h-K&H?fr*6z~549W5cP}I@ zIhLjF#3eK9#16(_@RI2Y(3mk_$-lv@I+-e{JJ9}5wDYg*1dyDMElW!JhsPG*LgoBt zzJDH70BpWW)%O5OFJbE%lfoGIDiwz$j!So&z3HxdO*UzlQE|@i|17~rhKWq`D3s$o zKz##n3`kXc9c-p1IQSLxkKBO-t^H}CWP(mud}($hL)Q~Apy0Sx_P)W%#btLoPdJs! zx%`2Z8rmBey39TQ<6i$0ZHo617ufHMN0FQ_C&J&-8H{ycgE0gQuIr`R-**{|5An+i zZhmXu7y0*ff81BEs(Z%QHmltWl~pUt^Qyw+b9C69XMt3F{VPxsC=~DkAbZj@Usdc4 zyhV|(v#5H$j3#c&|6Mnv{|cr?dJKC1>jwpcQs7KYgHng}|3dE61GbTa)^qi{|1?Ae z0Q3P)HTw0R@E>CU6~}z4jk{XrKeU8d4oI2gjeh6q=Z8den` zpTa>4!Cz_v?5!Bh{s3)Oip>Z9wtog>o$~(3SC0GmPjJ%UAHc@fwYv(Ae>S25kWV;i z&-eS5{v zfA%!>-ZH459N!AVWN78EH{iL*ek}RelUEiYf4->69;-s2!F1?hK|^hhYuP%Qu5%;k z&^ZV)hia$kl40-oCML;|sBM#?Xye5S*Y+p!^<=?!{3!(v`X;0~nSJBNXSHnbF$^wM;{^=bm0nY{Bx9_1MO4q?} zD-mOgJnRT37LpS2zCVZ7{O~f$cP44YG;O)wy!n-sm3J(D251jBvO!3}IL4i(EZqQ5 z8hS9d;WRp_83|D=t#wz+AA~w^hbFKtiK-lNNpbWEq=f>yPmchMM+y`U*V=li6=Q%1 zx73)mfRvNE_P>xAv>Ea4s|wX<#5(fknrP4tj(0cGvK|1u$JRn9T%KpY1;h4apoBR83H}0LPstD+iiF0d8ItD>oHM8Xs_2(Zmiyd(H zbj1Z}n>Wma7i4x>2lTYDdD#}TgMzj9E)9kWxD377vygQqm6%m^t;2Ha{isD1dI&D8 zZLz77emB$<4h~F>dsM0TIS_c26GodxR66HlyLHfI=D|B8YaR!w-UJ<4HlIc*(5AhJHL^>5mh?+Aprw*i{W65liv-3lWI(M%U zwgL`M;Ushlmbo1MBCq0D0c0HeW`Xh6OpF5H%z6~V2RCST#}~~nw*`x2*z)MV=-#(0 zerrt{rAd%Q4I$5{8F|oJ$+o=w_KX#)T^Uaz29^HGrNcB5M5Zi1=W@3i5oCVH%=73r4WWABQh zE<^A37hYm=tC}Q3#|z|r4OrSD_|9|0Pg5cvD40>pZ7n98Fqd0b7Q+Lk6nxZyb^gPU zrIf(&yC0Bx*4nzTw+&(0PC!6Vit&2{EA?lRiK8auGt!#Qoed=if#Gu7S3PP=O!H|a z<+U4nYIOIR88z9y2(k$D{v#-Em*6#4+At2%&?J+u#iO1rTEUxuQ%|Lw6{u5^gR5`u zN~^Ss#BHaZe;oqJB?|Z?$o|Hsl9o2H=zqOKYr1Jg!bnIq`N|Mrc?dOTbfHqV+EE(= zs2WAY5-DTN^Acv5*CK3ZWC~R}Q;9da$mbUCltTh{5# zxJv~4&!$o=q~~cyaU4ZiinXI!240mypUh=XXq~4a9ayhe0C#@3V$eTx*~^ou0fuTt zB4$hR>$WiI4i07bWh>;<^x`Zu!>obpxR?lqlskE5FS?Ukr-YM% zEs3jmc~7HJs@_6qOXP{!sul7gBIfewl^_5qLdvQy_cc}ci7iae(Fyo${#1$zs^k~- zdI^LN9nptUckt=j60nOptEzs#%uo~}(HspEfxVMLS$Z7z_7%tc;Gvh!Wx!#wFd1{) z(Qw4^$v73IUu7}bwSr_l9r%;u!}&_f!>ZMHz#*^EY@y`u(bjIOC3+SXmS0(uESZ&X zrmE7hWWwSB8+7(Im_Kr?IAY=+%Ns_6bjpW$|B3xdBPx0J#RKgIa(wWr3Qrid+Q&vIdDc!L z{As+pPnqC8e5KOyb=q?HdppiTmZm+OlJiB-nkw&GzgbdH@+Tr)4Al0rt6Kj&9>qb2 zQ?3*rhjKUb2Ay_oZBLp zxyJ{H(KC!hNNo>AOHq_ZMMT%FiqVclz<$Yh33WTOSPNR@y_iLc zhtiiPw~dsl9czSCJrs?q{Db8QWT+uSKewsuuQP%|D`=Li){1~t{K@vwgrUwZ0!FWA zt*aHu<=76}uVsqmo|=9ZOSRAbD@$mT*2r1WC`PGuSqljd6Pugc!GsCnjJO{GgU&H% zQDvC9FPwN)W(&1Gry7MnDMGRn+hv};I>5QPu=Ht#$JhBdr@*qFM_UHW@-UwC6L(^% zmVd3OYEa4;SI-)cnT*gOH*Ym!l}wQj2%(9d0WK|Ngnxppp1B`FA}30#b<4(7m%Oer zDHe5;JOwt1SuPMeW8P6(gttHKmj_v|*}pJLq?__WlSO2TVZ>8=%Uo$Ac*B#B?+z9; zURe_kNYqC;TGlrmRdkC-&Sf7=Xdm!X4gmIrJpk#{0+R=TL*h38;IZ?tW;X=KzV7>n zA@J$Q=fnJIAHT09q7rfdCbG`W-yY8Bx8?dI>( z0$0G>$;J@6#7GD{4D^v@i1fuO_9K43zdu;&Pdr+*c%$W2*6( zAyXcWLI`X&RZ{9{LLB8IkLbS_m%l++SsZ%Yc&}zT=#}rj%AdPgFmx+=o8NunWambX z;VTfLIbV+C{Mp)0TF7!`BQ57i&<+r?=3G3)3^LY~^B(}fYqeBp=O`3sTE~kX29Habg?tQKnz&tvC$L%lm}mf; z%c~Bm2pICAcQ*d_T3hL<{^X5z(|8bswpH%wx)Z^58WdU)9jj8GI;05DG=%hCjA^A# zxNNXR7ilr~ zoqzzm&(DNk;fdN8fUl~r$+a(1vr;rfM}rXE=MM=?Cz!KEDxpQ!+x3>SgaL8tDh{p$ zV#mJFPt~e1*?!kSw%pl{sV7gt#l=-~(kqp={44Tp!WjQm-U_kE;q3feL|Z#UMk@a` z)8n#Lp;uMEH&J%drhYj)`p}qRn(@dWWkjvvMiN0fr`us>DDk%Ut@6?qfz{rr9H`TE zc>*EHa~Y-i%Pfo~?)XwG#iZS!FFdn#*v)v~Q#&}8$Vhj@NSYiT&jH!Kr62ZmU4=`4#Jx z!p=aI)1u4-m|*YfHH?oz_$U`N7jFXOtT&ABakbq&u34fR@!Gi&uimId1{r-UG$J>$ zMS@jaw(!V6RhSh!{Aa^wW8T!S`Cp=|1P`Qzrp0GIA^V@@%3@~C*%kUx#>ocYsF-a% z%kYJT5uNU@+!{5b$V4N*yQ0YA1cT*2{2Gja)L=(Bn^N+J*3gmyaPYFjQ#S)kMPAkf zLhcd=^xhg+=KB>7`{MI;(rOvttQJ#Ke7-wkZA-O6LccG}yGl-GN2tDkImWp6dN+?c zRgCu`x4Aqvgv$Eu1koVRZw$Se zM#8HcJUXJD?RnE=A{sQ_vlK2nR=)el4cb;fkLivCD`AUn=}4J(k9q3s>T&0jyv$Wx z92P|a5+?-oL#tp-JDAi3%!IuAw;!{^d@GHgfiwu0>9YJpJTX+ZN$P$&>x?MYv`056 z9Kd!ikTt3AsqT8#Wchr*-G|n?&Dfw5VWq9Kt}f}cKH7-}>6?)_8EY* z72;Ji6FXa~X4en)E;q0|7)`Qo)yZ={jNr)-DO$~6%>#S5(ZZT!5yqik*vKFyfIe2N zt}cM0+qC8|t;1NL21D-}E@rmR(%k-2nur9maX{}>CnDvTE*#zq8FxylFY9dQpZ67B2xy_c}?!m(89B!(Q(5yMFV7<(G!2-XfL%PzE z8147r^FlG_#2k-+C(Na^$#ShkjPckDv5^C#>Mk91u}qo|6y90+_eBT@z(VijLoV^i|V&*HF^XejeJ&k++F>kj%mbW6O#k8 zejJ&g_Ew?QMs>cH*eMGWmoeWGC{=Do-=@U8xs6#wEp2L*w6~&KRWlhn#^9~d=cW>% zA~a`rB;u~MI8)DM9GJafQh+mJ|Q0WJl41YVy`HEz%h1uh@!N{WcE#wgcdtBd@j5 zE9$G=rgNQnE8kF(JF6e6EeE1hBZMxh$=^<5)2vcdhqo|1^o|*{+A2j>zXx5v?hHg@ zW5pq{ch&Yc)&j%3l@=1w^jB^P>YhkldBXxSh0Yzk8Gc5l!$&pYRzA9VX7+Rk9!^RcEtfBNDC&h0P%vE1zf5b@BJx z3kHyt?0B<}wP>mH#9r0*rF=$t`ksTn;usZ0?h);0^IG>a`X}U%tQ45n%vL4~u})a| z$a>f(gWA_(Ol2?a=Ht$g9agOwEiS^Zg{E;-V{}*JDUx6L+S=0R4Ifv@Qt2?<55b~Z zrwqIwh6faXIYeG85(*A1>f$++r5nU)!Z{u$=eBN=r2q|e>3knRLrPnBS+g0Qnp*1G zbU&*MwMo%+!6KK-#H^L;9GOTy7S(p&$0uyXAD?45Oi-Q^25f*b=@SxBu>=#{b28JT zkkiQZi80f3l_r&;zQhCS>DTp0ZA??xo9eVGw26c-#wmp^ax$Yk@>yf8xLS{CdSIQa zBIMnh01R^Qd-iRhii^rjnwPGTAKdxDa4F;P5Q0oJunznF`r7jlAYBggqasXZh()$Q zs)lN9Z}^F03d*dWsuQ5);po%sQoQ@U2LK47wB5-GO95%4Jmqw(_sKf&g|}dPCVL)} z)bqp=z+j<`l`vEX(N2*N4#iY~uW6Xbg=>>+ex-xC4Q{cr_LtqvOrfQCzSyLEq22gB zp(dDE-q%uAs-unE6`HJivT`U|?pd>QZCF3HPVa_&KRHeZC}z0|74;X)D6+N8z}3sf z&C7u)JJn&787i8@HP8-MFQrorW_p$mgH3~uVn`WM7*8G|6G0QDNm<`B)eEOE-_L7O z1I~zgSvs6(EVUoCiaUm9QGyT`vbuPS*#sD+{Q}p;ZfAGhklkm!eGF_r zOTf1Y*(~OI>4q>b;z?QS>G$GA`S5!;srIALDIi zK8d(3*)$~e%7kwSm797O&gGf)KXn=@6Y_#q*;=n0O?A~o()tLVM+($d-^C0+^*zi% zR2G~cUMa!^h>H>Vk$0M=Rb(2X*}mE4F=wxf**Ge`T9#nAGcW7h$>x(UJ-M(j_p(q) z>a)7~-*%;j5!h6@M5u}`gvZng!>?AW_NVw^pihQkMrCG1wI zlPFG$S{r#ihxnkfwh?LEL5y*-V=fQSPRY;64e-qyzc}%1bd@>VZATWnzY0Gcd#lAa zYT`ROUGdKBx;7}DTKznjzU-ep?fg2=$#o!j8GbquZ84R+P>1P1UR()rAmT+LGm=4Y zlAB0Mg;F1|!xh`xORQ&_U%%t5si~&F$ypM84Cn+Hjdv|w7$nS)cn|#=ja)HSU zkBs|L=<-Ou;zcabP~E5&9^nF$sH=;i;3e!+{J|L5LR@C+GMbeL#EO~2lV)euw`M4$ zzjkEk6k?sy=>+rgt9Y)^TOsdfRr2YnzQl~}tzN&*yBbeQ^J+SlJ-+CbOML~S6~o$@ z>CZZTlWalCQnSW#e9FwpFBgOF0}*4tD$yGJ1{ClbbW?EYG-*X4&Wd1^#P!>o*h?YP zr{EXA;Zf5=@8+F>by5q%EnnI0^cg+k$&RLi+}9(IJnq+WP{ttA6VC4&km{O8w53~J zzZq$EG%k)LyhjaRS7ihOg`SRDK3h%6-f&VRW?hoA>qh;&4#)tx(zJpb?Ub}6(kVkk z>IlV;o3}~m*tLArp83&&`MgXenT^rdiL{k-+FW$xsGOxjvSg}%3$=neug9q2TB9+_ zV>22?d%SI<4D3gO6CmYyxa`CHl{xAHOp(>>P{3U2Co$u%tC+Nn!DQ&7R5WglE$iBE zk2wi&ZlXXgZDio5-_Al5-s>ES>eDys;KeA;r7MnTg|yc#e~<}+(fL3w>ccnq6zT@I zV4$mW*&tdasUL_AbEmtdzVN$R#INt~%WusE!HgBIJWGxQe$TU>Vy?UoDJ(tCeYKH+ zW0sh8@wU#LY!Y24foKS^EaPxm_8xuT1i;MM#(-4%gh z8;?>cCze3i5oqNRp*}`RGHt+ESOryYMQ-;r(X4|X$V4%LevYG|>@ZEme`+k*L>K71 zFqYhh90~7syU%mQbLNF{$1_xL$`599fsc7TGMN7Th=z*7r3&r?ob&p(0Pvn)PvEt} zu!JdXr8mantV{_xM??92S)Gk?bwv%|%`9HKCy&8Vb-x>aA1VH>xfJUjO)V3?(c ziFUyUtVe3D5k=94O5@t<#Al2d=H5S85+i!t_N5TgR%j4|v`IJ!D0!OM_rxozWLHhX zN_a^P0ojolcW2of;mF)v`E}Ss=G%&y9Ra<7D8U|yuBSzaOT81#`TOKs%*8;#`_a7B z4JC>o95wC{V~`VM>o1igg|@-OtP1SgHF8dPiP-7Wg1)7h<)0jBr+qT^3EQhkxNWD8 zBW4Y^Z%Vh9&XS@ZX7l#hrq{}Qc30nohx+3n^DNcc^5&%;D8aGU-}lXo9E~WV4o{WL z3F^2SR+H2`Wc;NJatoFz76z7I$1KF$$i&E+*3#)<=#(do#&SNU1JT!l&SsdNJS5bio+`qzzM9xTbpbsW z)onoOAgFd{X;3D_6kBqSZxiKkW?VE&sctTExx2&B={BX~a)sY|6>r83*+gsQyC`HG z{0Kul9L?KgQ+|x<=jtghFYs%`kr=+3^6ySC$26rH%zwh}xO$DDudUmWZEh;UJF)bR zZ3dZOx)sEG43XCMzjv3mR&8pu+K?@&gv|8etYU=e%@dQ=-Ecs|Lln$b(bx{F3OZT$6rd!hQ^ek0aqtZByF&C zwytqdab!&$*NEqwtjdY$nBd%c+h3mzZ1!YRhdZn1dPg}7KGmQn_nwmRGK8(=C4X(0 z)YnLdxXPTXq{$HRmC&3M66G1kWw&9vYtYAwK`3hqP3Mkx@i*{J9nQo&ctR@X6I;s# z5eu@;(G#$cIF1>#ROVxCUoth zO$b%JHA4Zk3&Ev}%QDRXUaH3Uo!?c72P zyD;-uPdvY`bCvEoOXxPOwjRnBURi04&xk-OC!^W_`e@sdfL-R%Omi$YJ6@#JHQ|Ks z)W0MMD(z%O4#5lcwQOZ>uE$%Qa}uEoDj5>xBHuXb7)nNvV)RA%_JP5gO|Z~%N>Gr% z$_bD5Otr=0#efRVYF9|<{M%fkBdZ1j2CYOP-3o0{sqorK{h1J`J09BLOBP`x3fu(- zL-v~ujc|5AaXAuw)-nXYj$r4)vnjGl0qp1ac~RZc22Hu#Lt^PR<4slT3O758)7$&| zyTj#rYp#IaJ%KI+FwSOG&4zs+zKp%#d;UulnhT+)?W8QHeW*Y?d@ zO}|+@Y3P-55&mQp;#FQ4kNuW=u<~5yFLii%3O+8xsVK~AIf;Dk5uBFKQyQ}hUvHuo zf>Rz#E}z;fjIp4KrNlfsXxic*qhFlHlV9L6k80$etLQ?p838wAqq-?`EaEo79D%J^ zdK)>|t!=?PIf~94cP#4~tqEat0CyI{hL;G=%pE#jM!ojZ`AQTF=LBS^#+}%5WdU=g zhTnh>=_FB5CSBpYP?B4GJFg8t`%f|>ASS^ zPgY$*gd0J8?LV-K|JMLU$}A7!?>%f5gr*`zaUvT_Gb~i}kbFFnHPwSw7+|7NeHK2vN4i} zxVQKA*?kC$y*-a)ZKXVU=?~`#FKFDr1Y~D=@$2WO{T{&jgBEyVEddXBLM87es$j5e zPGg0z^~HTS*G}hDfr?V^qCI+wt6|RIsFecDDX7Bh{ zvN0@G!?D)fZw1dI>7Z_t();_amr*1PUUzq>R$kVyT~R*np5mv8g(C!LaV&3l1tVg* z^R30Wh{zs&`(~lmYMTMuDu~eCmF(5y)tfx{ZP*v;GLmwugiteW8*w=mTWr= zNk6t@E^}p8dRYA4c*XGx*;-|SzegrK9BA$-Gx6j4PgeyD1;6c#CSJZ{k#d@-pv7p_wqV z4an7xWB|hz)>@$@&dq!j*r`I8P2afD0K5k*AG1g8{*y2mCj-Lxwj0-W0&PU%)3!nX zx4E1%VYki8+mWS8Si^4a{aSL;7>olK@!wVrQ#>S}5v@#h*%%G-lFe;e$pR7g_L=)X)c zpB3RrJ%P@j8FchxQCbagp{|K4r?^Cc?an;pduO}DHRCVNrK!T?oIx*1<`3PJ6HsS* zD8z_O$e1hDt3L&sq}DeJN#*jbyxW4Q*ul^RP;*z%ai6c)=WKZb(k~#3UmBJ1zdc4d zjOP$dX@L!;6V2yI-M0aCcDnBJ?|XX0d)gu{VxdHqLPnHoqr(iU)a2kV9+(!`I5$Z2 z4`Ds+{=^Y`Uvh521}olhYc4OXE{B12;n)hub+0kAuMo-dsmxEWNPgHWWN8qfBi`K8 z5y$QaunA#+1V9(_{xGhY;=L%X2C3#UtKN|JqhoPfIOk$CMyt9AGiNNsf?;<|PQOxW z)>sH|9oMLCG^?2QmZr&W*uqLEYw*bJ^m8x2*@v1ZXXyQMI?JL#{vh~1Lq(9ySz9eq zmwfK*Lverf6$bdHnUCCNx-Xcf7lkY~Pkavt38NuT($d>-FwL!81qF4gqx^K`V%w;I zIN5lAaRlm}!n7#f-T2rv&@$%RSI7Qi;8O!<@JBUN3Rdx2TSJTD*SLE88L;W6h~wPy zrNyAhxRL~`?34PtwbL2|#Ud3OeE=;0)IP6Kn-7IdtGLtj>!xy4(72hO#fVPOSn3SuGbEy_U36bgjILL+pRh!8}a!&vF3 z>0G({oynB6(!#(V#CVNEB?x_!DmKj^O1Y_Jbs0I3Rf;oe5&4FVLx+ji+s@ss{O`*w zIomd9aH+i^YYfxBIo|WFob-jpmJr$c{O*Og0YG%xl3!IqXX9+0Egd#e1wP00Km5Vw z7y^GKl4+VPW7Lyba?Cs~J8{Eu3998_;6W9f7)3g^SgNlojt=`r$q(i2IjDfC#q@@~ zgabLC5oXuM%!0djTFqo$vuC(Eg;Zi0l2xB}P+5uyy!_pgu{0|eNudtzih%!B?dcqH6@#W1=jpk&bmcSAqGi&FIP~zcx%`LCb_`_F(_SrBLe4z zxwQCH-XNz(>8Q|j?%%1Dz2Of;F^5>Y=^!9K&3u-Z{JGt6e?F|JkPx`K&v-W5=>DzJ zS@4&JmGNpKD~x3k`V)r6D=2?yU!@koOH|J`;^MC#dlH#l%VC5({orXNG)LQy6gZ1# z)A-yx5o!zJk8HugoOiz1c)vG{}@_ zynod0H~?<7W9?zuUYjG8#S9%=Adu7;S_euv@JdZ%rEBfVhh5xx)VdCRW?NP#`UGK? zWOSxvRluYFF4Vxv{rtN;_Ea2#S>-aYVeX-Wxi|GZ;TIWs8jCdDt)yd^F~mG7`;}L( z_kjI|{Zoz1sJ4Yo!1t+iWZ3-1)_UzWkF9vsGhX?%l8FUV#FpH*C;!{`fJYeszS?RO zsESVl%&W)7Jyt*mrG>9b8bgVren>8~*()q9Q>?xEVEr@W5pUBo|c(WS0?r657tKE>+qOT@l383EnTAUaq1Eqb4azA4;eZJ$b+3Txiy zqMxW#^Db*;O^T#K{cv)St|5s3+0IPp0y||?>#UeI?=f#6B;3fJ9b3tm5q@Q(B3Idx zq$>0U76Th*>Fi9qe+SA0ie*hNh^Fb*OKd7=dv5!sIqeN;KJ}K zTzk>imbwYqZNUtfR`!+jTE~DEihzk>UE5B>#(G+MK9+Br6@hu9%KDn*L6@rp?A$3{ zH}yI10$Y=cHTODq`ROo(EgF7Atg5 zq6Vi2sFfI!x0c&6Ci({B*Q|y_bw}y|G}Zk4;L@*g-hxUgQx6pyp}nt<&tmK_Lc`k< zTGG-=$y~-WWBxu~!ATaEOkTuOL#Ht!q-poVIqkqgc~ZiA(8Roldb;?$<>J#q%y||7 z$G8d@xfzUQLkTlfg<>Jsx^Qt|#x&O|u$1`xC3x1Z60k)x7p{VM`RXK;D{E=qZBcSw zVQt@SSA__M@|3}rGB#cDILwAAP^(RJx`p)PMeEEIrK>;g2EXeg!=!&w>XCg4QqhaC zRlmu|F;}bor(?M?!fu!bgHG&8JJ%WVF_;y)>f1xb<9)89JnL1aP*@$IU%Xs7MUp zr47JYL=K$l^8CEYSooBJ;SUBLzluJao4yy1-ymgXE{3srm0CCcTxZWWqa#s^EUkC} z^wc5g!nq;1e7lTYd=)lIa7lwMsqR_+ldAVL(a}z+Js=%U%GwpeJ=pO4TuK*DNmz^= z5DW2dWXBSa^LWT}CQ{rF8qREMeDPik-vG^LTLjfO(f(n zQzw1_@3_;J!at&5(r43F0QGBuP>wb?HA!PX0M8OMsjml-?qp*@@yoh~HFgOsxi|Ff z8meSW8<|xgMuf~&$hkX3)_FcNBJqRiD0HQTEqV*8njL$RhWm5S|J-D;u@T0MlFgVU ztNd2tZvD$zD5<^6D3Iwmj2vUJsOvWCY8b$IOEfYvQu?UI`F%IA1K2RXzJ3nHVP8&q zG^S4hBoJbpmM%~sac?Z37o~J7H!H|P-_y-a!`06jw+0^3M)kyO%wpKVihFaxK5kbJ zeRg8d;Kty(?NMK_%`hT|j86k7;3lQ9_m*%Z(2Hri?7M*(M7_t(Ry}S*32fSY6f3Xc z)6)$j6aR6&pNjv~omW3Q@Stfq_%mCnd%O!`yJ2q)xz=%SSYT&cW*aQd45Yi5N$4Y! zJQyqNBAh42_1dbR(Q9w0SN%`T;gIq|Q{;-|%3hUr-f#P$exi8CI*kJ5R)oV~2xa~l#gA0j z|10DFNE$2P`vt7*3ru$0zh(dT|5ZSVp_KMU-`rGwVTS&rFF?PKI|e)+ZbU+s`0 z0?txYD3SF3SI?lpsD;E|c5VKxzkfFcNhTmjod{X|zj_7+h>G;(n(d$Z_yQG(3>ceK z;L`u<*$*Hpr03Jdn0Qz#Gx`jd#p8$m6FxNX|P_S~o{`1?` zKSKU`e>eS0P|5b`{Y|a{+IX-!2$VuB_HZEIUp*r}f_4ZAxAcj%5nQHOP1sQyN{;c* zzgtySj9(3-Y-5+jnU7-rH8KMk6i5ovpj(`|Ak3ZdAQ~TzZX~(n8Qp$R4iaZLb^Ln3 zy8ZXO^phb{;~qDrxj}WZueVe;{@xiqJIFhL>g-w^9e#_(2WY2YDEaGOdhSUjMx^Gz zBqGZEOdWlqG#iABOAkyD=lE0{2QTOXhf-*~!meO3OZ#hhRf)bx*d5oUInT;ISFP;p zjh>fu37ks>OJ#^?r$?Prj>rnYduC$gt*vRSf0K-K8M3Br1ySn~IrNfv#=F0u2-gf&68)ooqaFcN*~(yZ15r8e_h|0r8F` zq~CWkiJ-)+l>aD;l+hLvvsVD7qR(%#=f}pn4;Mr8#>&|}Hv3Ud_fH%dk@P7&y9p_* zoe^BLz?)mW7#t4T<6OWJh6@j7mmqWjwQbn}mz0vKaVwNT=YGfm*|S(P+n3QxR%2=IBWsK~D`q<|X&kx@`gcYlTD z_n`)r&Y0rG)NcLQi(+!SF=;(1&M2&}XU2~hW&#**aCXBT8dF9s z9F&%=&oqwrofMmi6JP;7oXoH)^MOZGGcW%5cr;F8OM5S};>Jb4enElWC?UC+*ggrd& z9CAb^^vnBW2k8h`@jaygTVyT&u}6M$u=SFBtX0Z=)u9ZyU>AZerK%pLv5)ne!RG(? zOGs$}^P*!3LTrE=$j|%5_(!GoNsy)6PDd5o8}lhXR&F9_{OpYK|M8k)e{`WJJQn(= z|Lsx8QmGthIlYwhbZY&H=kle9qyNmly5E<_xHjnNG}1pdE+W0%sNachqYzB;Zyys% z1hAH`ffI%Q(gO$R%gak)QL7tA3?uEIH-1I;?0=G5U20LiW5AD%`Ml`YN~ci8^QK!(TZ}_0>3^(V9du8nlXdgEM|6x&?K9FO_J&CN`X>^xv8tmV z9**|tdU-l*xkl{Y#WAhuc^~-yng@FfV_?TCGn1eLEd%=Melz2<6C{otO5|tPyYB|QDC(v=5r!fpI4T|ZN2BUNJru-?znPF_;x!zSe+J`NZ5Eiwf0|YU777y><6x}yAkXxjKj?d%WBI2rl2nVaLQSAk7$tD3yP5#9J!cfYF5am(V|pVjwe$DqqFv1d7i z(s+vHQR2{_jSJ@TnR0WxZPcwhbEfD~a2uzL#T(d4412GQFtE9yToR~SLwMx}w!-RH z<(~wt@h>0BxCkjD5y+Uxf+v(H;qj_XoNyUW#qOi)$!?t4@)+6S^HtS0he`J`^)_=n zfY3B3$G)I27jVX?NAu3UL8hPjBW1n0LT}TDQ+qS*&8}{v8U7u#BJ`MxO%sn&2dzE9uAqA{od^+8Wy6;*D6*0w zf-0Ji%5$b}*N#R5vA3Z-?=@3s`FGw%H!LIXmk6e}ox>i#c=B;mEv4lqPze^TH0y0g zP)x;k=IXeX(DN%eluMw(Ia`GJ@U>Xh(DNB1Lh`kqHEKKycvwJUL`NwGiS<lJDX(TgF6Ciz;o~L5_G#2)?Q@U*eDcW)lB1$oW6&I`NcHwa=VtopTz7q7vNBWn zDEjeqroF$S@3X~q#E**^}ec#4PeY>EFEslncSkSFal z@FC}C!aV{X<&a!XNKX(4c{;a?Z?Q4MC?Gd4GskFel-Vwh#4gZgApcQ?O$p<-^ z6#qV~8;M>|D|G4o4qUfGAh&G@e%HNJbzjYT2{#ez@*4AYd`?{t8NId7U|Nk-Q;+AV zktrYFA36Nwe(@Q<{q`bPu;lne(&h1EAqYGb<#Mh>G(E_ONJt#`kdj71IKhpEjuV`b zTIN9d35KFO$bF8}y?&kZ;Wz8F}uX69JT=FdzZJzXsSIr{?KDYequZ`W@26R!WKS0d7ahDdAh@<(! zWx9GFWKvBoZzO;V!~yXzgt4J8?=r{=8Ed9>2h ziLp{ux+h(=^mE41dHivOW+9LJsArWK#{3TaaNgbo(@Yu~*W=;O8?O2D{du4=W~J;S zEJybTCz!)^>y*}G#l(BX)am0S)n>~V04L#cTu)>U!%3r9@4|5D7(hO*={^~dLELKi5>7>R;gVl3CoJbMD z{FJXU!%JtEW@d<**Bzu$YrjJNi4p)rgyN|)s0~)%XY8hsMU!?1q-|?rD(j_h5SGN{ zCx-`et>U`9F=<`BC&zK#mxpGA73>e30Z&Qre&Z{+noiqtxCs$SG?XE;3@K} zYy%U?jiMmv_@?Xmjc3J~m6esPZk(?l)OlF?CvpLB5LWJyJxSY;jCs$;&h^)E+>Rv3 z8aOi^JN~Z{S71|^^1pb}hu$0xm%p_8r9v}tGVg$ME?&e#AT_lRiklT0R$}b8?^~S2 zx4(TKAMM-+WbpVl5Qp0n-o1?@`#a5Zp0uah&W6?rJ27+u@G$7_`s6~eqYz3>%SZKn zd=ONCMBTZ*6Xe{2Qo@#Fq7!1oD?~Cli%I>T_O3J@%C3zULncM(u~kC0#=c}4`!Y;T z$u8SivW=}sDl;@8OHa1OWKcrCvL-}+PgABrWj93DFoYrNjO7(s-h1jnZy(>!-Ji~v z`?}6`&i`EJy8hR>&y7CvsaahFi~>hEhbgnJ<0LT=BGoypU@PK3F2(*+K{*S$V2@v}C6WJ3t`0alTQtt|3@^HauE-bKU=|amCDW0} zX*kq^pBK_KP#5whEoQJa%NI1^?X3o)6h!AJz|p|6&=GPnF;Kwwra4C#UH!z7K1KJ9 z$~!BSyLQ(R#R;CZ$KOcC{e^;!AB1YL@9I}KQen@ zEJUw!?iG{(p_uO;(QDJs-*v&J1nEbKUjo)l zy5v{M_XpOm$vs-$sMHL@nr6P8&zkgX>4wJe!d>`;#Mv_Nd)b5fDvjqEmG_RAE66ED zb6);{G0axr}1f!*W4P=B%SglppD@PL+wg&)NOw!HovJql0f=VK0~7L-%u z-rP`3jj~pwbwbojjuEWL++!}O?mAXM#5G3FKznbNymUS3lna4^9B#wxdpK%8aUv_V z2sHtbZYAC_uGBek`_hKaGOR~f`+rc z2G#FvM#ydSkw;v0RR-wX;G5h4Qh6exs&gxpWK?y3B%B}lCN7tQMAW)`92>YZ`9)87 zV7!tuf>-r26yGE?Sa?_@^n$rfRt9y()YqMmYL+-s4hQb76m`->M zcc%pG?TrUGg&Cn&naSAH{+saPX@aVZ^S|-q-TF^T;|~Y#v$xKc*);J~%I1yhNtRo6 zTDlM`W*!y?SzHvm;v3WKjk(a6=uwYIGqFv1D_^fQxu$dAJZL z_%kcoQY9M=GS38`N#y9Kj#Is_}tv`RsXJ}j;Tv;cVF_(|K)ZUzV zdHtnzy-N$3P#O}}PEwBLr6`$^kJb~IbUX-gyXx9MzzKIW+_rnwQwVt{Id!zFa|e_kNm>rmy3$$v}bf*QfRIr1DaF zo-H-waERUm?U*Kuv$gxuqmA@5tz^(o8lm$l5^(9rx@Z9|bM{PO&8%cqc#xO4PIJ%x zRKjovmTsLE{Mbk1MzP5Up77^GC#m_vRdAce;DKsg| zZA6OPHBy$`vtfyw`<&I#ZP{9Hw%khWQ?V4;bBv74HA#0HLv%knjHb4H{I(!O0|oC7 zMdy_x>a466cr5PC>kmV~?~{RK*{d|DM)Jp}Y*(PRld-x! z)7n#wJNjlbc3$ofaKeTN45Bwu<>(GohdU0D=)9wZ%MHuu>oeu z9RVf>2eM)J2@py*?Hd#J790p4WIAoi>ukMW1(V8-jIhmK6)L>66npt9+Ov5&UZeJq zbcy-XaeANQg%LrsF)w=rOD}$`q30J{nh%+aSIZe;)QXmaz38h`C88(ePpws8FN376 zehLan4{0swR8^%tIp>N3Th5V}2PfJ+rX_*PI{XRmK(#|Z&6O~%;^Mp{)yHvYId4mazAeXDIxsp z602%+#Ne*YugtNlG8o+Zn$ju1Q7_YA;ykh~2%8K~LV$N`r$x`CmOX5f4&OsK* z#Ma{Ro18DP!0di2I7f{7O)&!K?FX)tgx}?e0+9WZr)bajn_{7Z0P+3DfIlUe9{2-5gQ7X-7!FFzW+(Z%wC05k)oOehhK20XkK9l8y?(YVy=fh`9^2n5Rf4T3R=4A~;Lm7;j={Kf22s{XYDmOz#6D(G zZ7gdnKO|XRhg{@LS`qs4fO?bCWr#3os-0!jB*tTJvWOiE|9b>=F>wo*YbvRgyhzIu>O6Hl5HqZa zZWcCn>@4DkRR4@C7Eu*``-55T;EBbIi-C;UEVaRNI@(+_86Al?ZI>h(mTbE|H!1YJ z9*af9xvMVSnJ+?_81&F9I_0kS;PH86=ao{k`|~MXC6xq1(!TQysEMPZTga&+sei~&%n0Wb=X+`T~QAkqe~xPdg6V19&9A;d`of%^fW z<4J)sUqID@@A45*gYgVF%77rh8!EuY1)}7GX9HvOqB(%x2Jl}ZN_=PZfFA6HWCRvO zgeMk8mB5<`jUj{`MlTdTPar@A2^Dr!ARY*POaRk@vki$VKrRE}2Adb``E2_W{0Msv zc0C-TK=Fv~7F_H*sRsB$SnM`9Bi?;b@V0~p)_7>c7H=!i21HuF>ZM{URyWXQz>5LZ zD>A+~a58RG)QqrZ;SnW)3MDmuN(^%0LSdAGX&JQ&Nd?|~XnXLNLcIe1qB;wh%&=yW zjzZ9BMGJIp*e>)gG~K`&QH~;pf{T2}Y2%{{OlC1y<3PvnjEr@d^yHAr5mfyu#&X8= z#?OrX=?EIMsZng-xeY<<9G6s1sZZ5T{cKR0L06;k`r>vSI9;>BC*d%njCTfFh1T@e z6xTf0Y}XjiQS{(zqg#Hw?CxIqyh8Y3b>sWP`{R7z3J5BYVj}546@alDk{R-BLlxvW zL^H~y6H+6|M%WEV7*RX&)nzY9bjtXM_)t(#lrkLBwur=0q%o+|yX%}+tmUtne_H0l$2PNVEYO`<2%E{oM9t#Pdb$JW6ySv`&#rG<(k4XsxyUGIG3(Ru3M>F^S$}i z8ayZ{F(|FiDU>&qIW!5T1yzp<88sHo7d0cw8jS{R6%`V7D1}mrU8+C|OG-QCIHiUv zmU1^aHsvjOc@%s!JcWT8K~Vt}GzuY9bXkH+s7(e-?R!Of8Ka7lYLseRxl3hCId$bq zrC8-bg<3_fYKoGgiZOL?rrf$5pWs=kUq&h4lr_HjMyhA*jos8sSxNap`Jf_=lC{!_ z@=Kwd@`JLx@@Dx);kyQCwP8)22#NS^z@TZYdM0&dO(yLG@dQdHLZbnlbG1XYs#bWD zomH&$i3OwuY~zEK{+wU2@ch-B^@R<}@4Ab{ASkrl#$+EoC%`((7HrVj~?!>Q7$(qmxMLF_R&45|U& ztj4RFt&Z0aXjE*5u3t8owYynZSW7k4w)9?%vpKYHnXH*VkL?QO8+s3T&A|K4Q19t&40tp6nhk$2n z#G)0$Go~G;vXK2*Y@p;I;vjlCi+F=*DDgta{r6@Hv4vEe+Mxo5)JV&3BQP!xLv#trYSaAjoNBHAeMp znE}#4(gg}X(=g`B^j*oAufCGTv;+(I3)0OL9m#y7j=RYYxfC5_X{7NE>#ZHFMO64y zrc|{a{GBixS#!N}!Q}+ALbFyg;zSC zlh`N_u$7_-78zx#RYB=_S;)#Gn-fpJ%rP)W>No`VXuWMN}6Y6%FPrOqC7l*1x zs#U5vm3L~j`h2Z}))NIyKUcms<(zz4K&!%;L>R8smDkB@es6(Wz>#9_+{A3C>-yY5 z*kfR!+*=YR^dw}s-D|cu0qOtwqxYr2J9<5}OS>DRF1iLo8zT+Pe|>bt>rFh1V9Y;z zEw!`SyJPnrl;<1IBhRzD*J%}`UXl?ec@8fcM84Xf7l+f)xQR|KmQzhWrCOIIdLyw^#F1Bv%`o(m`T~(DIS3hq9YI2KySk`XVJs{=sJuGJuRp57pKep zO7+)Tozv@MZvXkS;|y#1#g&@b+Lkqk&S{_7?So&NxPCnAXG`loW53j_jbg2S&rQS?e!FX6kpp9J~ccwntQ@ui&KZk#d0jLa%1!>dOIyB z4W$<5L*?0d(|UHX^!@tvNIg&>;0+`r;Y z=40)S>|pFBGP}05c7JocyU8En{oR7u*h#4umASMU2u9Pvi5bY=8i;U+Xao3aUgQaD zikHq}@K7G*ktg?RepV=3I+g-R@d+q|5Pu)2KIYoI^Dfym>K5!fT&($sHDnbCh3%b83EAjb=^2UnVF(Ecd7VtmxRpf2{;m$V z<0H0kadF^gU~qSLr*~(ew|6pUVB+H9Vqj!uU}mNRNYFWZ+PN5d(AhbY{HKwB+7U5z zHg>XfaIv(vBmCX2p^?3-3m-A@?~eZa`H!Ba9+rQ4vUC1>SbzaC{C>i~M9;|Z-?jl& zd4HF3D_DA%+GvPa+M3!q1Nz`+XJzC4OaA|O@~6jt)zth`lZ}(>-!=dB*^TR~#rlhIFbIV9iMqSdfprZ+{{>qP! zshQJnx27xhmabjAuB9EnW@?7}$M-(T8AMH6bh3G*@(8$^PfOBrJjZ`4;^V9{X1bON zR~%0cPwHTv-V_ptYc{JE&T!@(fBaFXgNjfzI&J2N?>w=pU00KD(>Pzx`%jwzX~>tK zq_;itI`v8+N?wRmM7f3@fO6h6WhuGaVBM-$f*T+gjJ2m9HEv&n8u9O1{CFTsazvM! z)|T`eORs1b4sA|aqV6d!|CtDh-d!k%f)U$XrL4!37W@jYJ>i5Je({N;_=qJ9-Qyhp zBLbwrk@;PoJSuMq5Yo@TFL!F-_$E}hVO}0_#S#HAFQTW~7 z)vkz?TfLO>1{;S($68sb`$Y$Fyw)v;Z$2A}x~As;T{(m40p?MCx!8Mrq|WbRpJ>3d zZk!TKSR*WMh3yYj=X^XcpG-j`xj?;eCd!VRhN%Q9Z#Zc<)M>+zpqv;{nQ5J*R)`w9yEPWp zHG@1s#>1~LxJNRT=v3+9#zU2Mvo9oX4|f*@w|STeft3!fHaW3iAv1KbNIVHWv zbIoDQ{E|X*=*|uJF#0~bq~{ER8`cqxQ2t7|g;&X;6e>TsiWii#Bmaa|~N^y%&GZPJ@2@@(QK68w>iP zq-o)#g`U3@tYzVZXe~FUBjo)xt7w~6LQ>FA5r0Ocw>1o3BK{OspEUSsfFU8v94(Ux z=khq(8u6s2tfn5DszGiv{n~`y@L-G2F1eHI3x}yN|Mf!ap-F8!8in5#qRo2UPzMjT zO?LAu9%r39%5@y~sr5*xsCWu3wN@=1 z^-SIg{ta}p8#xinMl-ptl?890D3_;GLJ$a-d%4|IPI2)MF>%PZ79@|g2m60m+Bo{klzq|tx;-`&evcFA+6awml#se*+YidM@ zics0LhS{!t6Ll?$2){()oz;G>0q?A+(rN~!Xf=YB^@OTdg)~+qjaP$|Nykb-@I(v+ zd7RRf44fg~6`Z*fu3!@H;+_0(Y_QvimJv5j$57b758DjBu&PHlI9i}`ajQ|atQ?bH zeecv2XFl#471)5_>!t8fNc`4z&tWF?;r#ioQJluQPx?m(qCf~C$AH-mSzrSv#}xOl z4lZAp;^|m0nEwye5P$Q9OSK6ECA6f!7g28pU`U7c8R zic}q30~<$Gzy3))tR*p~5jBHgy@i1j^%H8So^MCb7MY_`-=3sqWySF!_oYyyK}Xvb zO`R=h!1TnR$)&0{xn)fhv3Wryzp4VM;EGBjc3!jjt3?^D9~B+FXsk@kCpb9QiVpF$ z9N8nZMd#i5%34UzNHX+G&3GVnUs8fP?9!7I!H;s&p z9t1KBQv@@ z9uYcXlUKInce-)y9tW-%)z8>Vo(bILsZX#+(`egaU*`;1okQiBt*dHfCD2M+BxsSn zchUJp%PDG6J(hxR?~N8pWBhVcSc?DD*4&ms-s!cX*vpnXjPlUXqzul~SMDH^oluV{ z*Cl#3qE9R@@&$&fUUU+F9i3|hjA#3K2b+SQS$FI5Sw|zL+NW|4N8wNG z%gjsSoX17*&S+B7G!F9&P=eLK8V%EmE=5fs+5{^mIXxL`(iN&5tn9Ll==Yn(~FAo99T%P<-n+5)dbeu8C2QEvRvjXOdd=v0Is z%e?8zg+FOh`AoNutB~A{Wng6LuIJK{S!vzSLsH2bdyuSDgZU$Vjcx2Iy&4VaNzAu; z%^UGlBEc4U6-wKvAj@P#i<3jC@|enM5!@-USjrN~9Y&-yH{-LhRZN&G+GzeVJkvxM z$`SFI;CXolFBo-k&<0kLJ9k9XFJPH}a?Vb&sJ?98#P#QuU@PG@;hI|r-hE;hEJKdE zilb?{k%*g6s%a(Wf{ zd&?^#+^Q@5spF`o)9BTDQIWV@3>qs z?w+s$dy#NL5={7D63Y}goJkMesY)l<7B7~PW+Oc3Wq{gJ%CVmQzLz#0&*hV8S^0&d zgX~m{>cWrh>PNRK>wI}U&L`L`w&gEF`;cJ~9ZID&DF?OvJ3d3)EnUyTLs0%CYWB-V zn1{EPUS&6~JIR3rf5+AaAz-}9sH3T@FYLAr_HE2i$sR@P=XXXv|T#Z2enhN6jCDj2=jAmH|IO*wd~Zy5}LzS zcgRdS8uQ{F9zSLLl?(K~KzWo~IT-=YpzlH9sZ`nH^<&qW0Upnm|aNl(qIrH3A!L zMVB1ro#-;yQ4M0xJ1Z)1D(8+(r@g$Gs03s-JgE?#PHq~h5UIF$>YT@%mLx|wO=z-a z95rP5zHBoy{N*3gZbY;e+I+`c11_bGvKIi#F5jmUdNTPEG|l->zJk zQnPCNFYS#(+Pa&nH2PPl0sukEgInDl8;wyuE3BE-`gt$Mx@6yys_ry-- zFDlWf~h?pA4ojulaMB%2sl!g)FFu)Z3>y^!j4dNbKa+#yFu>8z2 zdmk38So-?_yaI{G_c=|{UvEuly ze?epg$o9V3FH9?~qBQ!)8Y@`e=w`dgE=C`vXhaiQJlDNO3yMw$}`;G zS5FOTHe_+Tij4$5`>--#c*m=^VleW>)*}{7+fE1FWjPd<%-dq`QPHu3u&*xwH(RuXUkkwRN z+)s85HQZ5`m)e1JrvxhLbZt=svEkh-s{vcxD(Q<_;}A%uK0UsbNx~Q8=23Rm<1Qhc z%1Q6HHWiwEr(&Iu=1-oFF*00j^@O5>lxS|FyLa&DaHq#^md@!&RGM58i9eXxjQC>G zx-ce8ha6poVW}ZBxiTVR6S%^w{fyXb@fuDX($~${|MMzjApNX(6iSgJ{CA-GJ6tsf z!QbY0!$%cJ`U7M^$HV}MZV!7far^@Z06}|@0!InO^H$@c{we!kvHzzA3Ah-p-}G#o zFuTcFq`Hsz2Z;;->jnW4E4pgd&bcjAi1nGw=4ycp0JqQUJjyr zc1zf3p9?Z!U~K|me$}BiQ8G&?Z$lb}nf^f(dqc@P{|?mu6R!V%f}gc~-8TIT-~pfr zyCR=gvmB$w=di!$)@Whb$`5I8(SO@@G192k20*ZOb&OyB6Pt;BJ`=ZM#B^BHb%$%! z>_TSdu-_1|wx(&7Y>Lgc5Hw_Wtsw9zl|%F6zsA-%Snn+7-1sankMJ%oL)+cy0gTK< z=xo7_LSd758Vcu!{kc^>->x= zW_V}34Ard`nHDX_^9@$c1F@|Hv9qTK$`zjKmC*`>f7^qQ1j+Y6D!bASU(GeJ;X?e` zhs0;~SYZJ-fOFIARr{&fFa?h?N#284CUX0;ejZ!2&NUxh>#ZgDamQ)#xttGBLKZ5zG? zRyDz9SOF!YogQ`4s^AGjW_s6LX4u6r>Wf=aX3)5Z*Z)p(7_K^~OMcct%!W9m#~+k< z_ZjQS&I(HA)^;oYNpb5xC$6Ywz#0Aw?NmoC-Sc)lYMs&qNqw}_s&>J!3mxc@|r-H zFJTlgpcg~W1hk?73myp(brQ7c%OO)DsD4aQ@S!3U#)eW~rQu*%Qj3buNl?4=K#Jjt zl4iec;Xi!frKSt?)#}kWmIot|Zoz>iFDdt3494O--sFAI3S>VwPO+Fz&V_Bx&3%O? z(AU=&5f!zxtca22jZ0V5phhpQ@NPDiU^69jzXM0*Z-Fg6YjGTsX_r@Qo7xp0i%Cu2 zN>z*$I_u~o-9#&m+uCopI9+N1MT#XbxTzs&M~CEBp*NloqEr*gif~KoXt?P?%xzOa z3GugUe6_OW{lKc}eDR(RChiNR0fmmC0DjmE+FjleS)}V>pTCfG4VD~V4@~}YM%i#D z_(HZ)S-e{K$S(%g-Z5QWaXkADuURgylT8lA@b1U)UVII4?!RZQR07EnM$07vQ5pKJ z?bH?3Z!RVw00<1*tUoys*!Whc%Kxh}*e2KQxn{c%*XP*0RP`nlzG~ z%phnOa(2OY2dE{PdlL|;J*tOq$l+4A>%I@`D-IvK0`I~o0n~5Jq51gP^Fm9j4(L;7 z++pR0%1m^$FeRqT60sT41ZRE_u{e1+GaX6Tc;roP+Y_=lR~w8XU%O%Hhu}BS7MWZ# z350?m-HUk^3-+>QXQ{$Qt;!Ja@IFF2Fc=&WL%Qx>~E}mbR zzl4^0XGQz9Lk_3H)TR5lR}FINJ7wgi)3xtOi{@UYrfrWyEv+XOSTPsn5`YS>TL}j0))T8Y0t; zma_x<%jL!8w{@_K3Y+wkT4YB9DbC$hU}sYVz0Afjt!YJ9H-+3HwHrZn(kO_9>kZ!1 z3YtM@;O1=78*7MTzCQE0!V&jxK{AQwURK}gysMD_+Y9FS;(ZO_q|>6CR59}IsU*Ka~E z)cAjpgyuvS40G>C&3k-OK^ z6qRZ?&X)JetB=)GGFKZB-rw#Z4AjE1c=d7S&BFgD!r*W0PM1 ztU+Y`kLSgvG;aKHGVaufxSaa&BS4Uh9fV=~yy44d5$m28Kd}87 z-MXQx)vX$Daj)ljw}U{q5UTG4uBoh3A)21B|RJXCU=RmPbS zs(D-Mh3!_0rKyFr&&GOG%^|^^EH{OXaW^mC@Dzln5=*!3Q7^ig0#Xmkpf zvlsvH!?~%xvL?=3A&A$S>>owi57wFs=lmg`OhrEVAyyttA(D9kXR)8p_#F{bV?gR@ zgoT`{_Wlx*PSJZ@^f^Y18i=Kt)O?+9K8t{j7w)$XuUqVd5O|Rzoy2`)n_LfQjc?F7 zIx05G+pCip!FlZe-hz1N0#D3>|0Bt=enuX5k*pSf;ea?w2A5H%0tF=`g5S5xajYkv z^AI_WhN*p@eiH4P1zJW9WR$O}Dsc2}dDS{mEcFLUQMxcE2^x2Wu0U~~!rO5Y#ys@1G3*H8)^UIwt8?Eb3J#ktc zI1DBsTs{b#Zldcq+vyvx_-|h}Y<3u5z=DfQw^z{=e+QO$6n=CJy zPpuRqZQ%k;PZjq0G6*PzRG zI#E56wL|vOHooe%%n1PxND4s;n&9(0Uue_^c!BFJ23fWI_IulC8NCDhj5R-7{g}%H;`@oDPp;rX?5?|4x z*vsofFCBSraqm@!*Q{>al4_bc?^4r|pz^0{F|cdO^(yo9wPtkVTiu3*4MDBGbt7JT z=Yv~h<#y)V!psK!&=>zk=UiRvOc^ApS4)(8mD2frckiAsxY4w#S!W`mor9*Zd~dU{ zX$6o;$jB8Dmp9oK1h{(DiKq8>)vfWNYL9CQtokJrPS+K$UU%e684#(*@~03Mv+*PS z$NZhSW|~np?hPV7RoO|!@6R7<2aYZJ9cGbVdRF+*7k?7AXx+Wc;3E%2Jt~i@7AlUi z4uix!TTZ7}^74R&Kt&(p61wh9ODXuv`h2(A9$x2pckf|roHuDeluJq(RrY;z=$d+8 zHyrDCN5-@V(W8JNiVM*VHFrFUR3V*IcZZ4wk?4|Nw`sq8pT$x9Dyv=B9{)1o51Iq> zf}8w~OSj0HCcM=oU|2cdR5gRY*#(J2hauKErRv|M=k;^FdM;0=;_X@X;Ek%MTNZWH zjlE6Uv_Q%oc07lu-b19hMnfT%7|Esi=i=dGD4X{PNqT8F8}~_mJ()HO0L6rdomL}u zx2{aGZMw<<>r4umP&%T3<*~VeqI4Y-xzrvo}eP>QuGHhtT z1Jh!6@z6=@<-?&S+PKxY*57akCtgadW%r=lbYZ;fEUFcCz@O?Fd~D|1H9<{Vy9$2r zdW7|5>YQdqy%dkuC4n0hW0F?oPDKn%1nfW)u@Q$L(5PwdQ+>DGj10^jQ;ZUb>A{ zTT2U9q#&xHI37EE9%mOLF$Qmyc#ay;RvNoV=9gl@_9@b`Q3?K?DO@^DQmen$mS;A% z8+wGK=%7!V^{QPxydGZkJe|V%VSKe8;vz|vXL0vS{j8!#6;c<%)Q>9Bctcxls*(x) zFqL9xGENoa$eH(N(XR$Wsg|6okIbWC4j*e@#23pcQr6npL{WT?ew|~4RWOqwr-Uj% z3rX{j(3oOM7!*RUu}#DIsh;Ut_w4+<_3qFMYul8CLLHrzTOl2)5<$WD)42bZjEBzV3~s2R;;p_C&KqH;xp5>>!m+A#v?qh93xO1vB+WS8$@lxl>-EH>SgxTaIPy5 z&0_j_msyzPxp1Y?-#67cp4s=%yMd{IyUVlbc2#9utC??#nBvz8CBhKrdgB8 zuk9?l;dT%SP0ifde4B)ua74^-RN#?DHn_B9L#yiv=2)Apj>@}V>%MTZ*(*c}-YE@P zO%_NsbduI4E1F_S7!X6tFk#0gJs(Ca+YDxNISzZ2Y7WVlP`ah2~TTy^6*RD4ohd%8Jn@_D{4;)ahCYUCZ2v#YPq z*+%5hboEzfFttQI$#wJ3T?x9eq5y&Zel3D-o0!k$tMXQl&ORP9;IC^to$K$jsC&%h zo(lG3Y)}GkwNJJVaRXIwiQ@d%FMWjm`Gc|MuSi{$FAdxTpEgAE+uOBD6h;ufu72A1 z#g7k`dbU_g7QJRNiLi}<`ISCpjvghm%enXp(ZG(RP5O*_0)PxKZiCJFDr$m}5D(<= zNPN>ogdAbMmn7ag4)acG(&DgncRhS@_V#_V#Q}oAPWO7%msnbVtZxzx+3ThFR8r*W zxE19;Var?|jd}E6VWgcf-Q?O6dQIxA6|a3~r>WF{^c`?IA}O5a(z!Sj)ILFDeIGiU zlzf!|*_GPr9Shx|6B9T+9d5F8!NAJ8#yL^z<(;X0e3*Ktx0g`1w=8=geAPSX(=bKXM45p*tqPNIa(@GR@~p zv>{2=o2P*DlHLJis862;061GdZTN4Bj63;nshdujOg$G!ms);}`J z3lPx<28h%GwNtQ3y4O+U$i{_&4WWZDgZ-z;sHkf zDJ>w=>f0V%yA|9{}e;lLKbrd++kU7-4IX0O5;)hCcqp|Khs6U;yYV+hEHk?vK^a zMF2DAzN2ZF_aD6P_iuwBK!SlRjgFO&^44?qvAOa^MJ<(xn=`v4EG~2~pT4WlV#LqmDV*x-yj9qs z=9}@iPhyYF^95C0K#tuLk1f~I{nR`PB#+o-Tc<*ZMWW94!>q$=G>R1*K;0$ zko!STmr2V@OHp!U(;VKFD*1}CNC<>c53t}aMKS38wPG3UT1UP{w|l!06ZiZ4TwDma z={G5&nG{BDErRmlpnyD_%n`o(5$&$hvxEgO+cwIjjUr}h)F8tHYobgl#i zM|a4HPM=+zu+i6c-+O)_--tiXTa(edmPK%B`bS?(=2^;XZ-h_zeIR%M4$C=h%lR7; zUy?5REwH|#cNDJ1aKOMDyUZ*u0BuSd7(tImMh9Qvh=ojj8mj$xHGd+SXQ{(8um)J( zSg7}{WiwsH7g9y(fjRfRL)nN5OshuRV2DMakG6-#Cjhd(^`w5DO()xqim|v9(;NFsM_j?7N5>ykT8d zYoEqowa+5=odq&iP{f<7*?zP3M;UD!&%J>r>*ay{Xu?%dary$iXRtY;0^dPP3vAQA z_~n{k)(=Wx?Ogrnr$MZWGE$Depro8d{_FUZfHR^05fNgxA}dU@@87*Db&wNRNSXL@ zb3KHi-^W!6OmCPnfVFxxdNMJr+oCY%&*kS^rh$^^T)$wn|LTw)PtXT#&F8Co);c{O zs&;2(E2?-$wr95rRKx^_02W2rcwlXB7iuzH75)W@>>%_}PY3AL^{oyMyGrQ3!QU7B zaGbgsGrYg(vP^^gaKz!bsr7x0F$5|$RsL$UBXv5*^Nq2v`Ar}qE+$w|>@=UNf40su z!Ldv8JYjVK3gAk8P?Shz1Nn5c8s9$a49`2Q^XNP_n{)$?de**!b@~*H^6Fe|IBw<# zn~)jI429_ZCIV(i>eIncG$6?N8hvlBg7TS=lM{2> zeGH*iAPY~=dFMdp^NCFm;B8k0-TGpMeZqde^}OPEItTuhpBH0fnTm2nKdcN=7Euz) zd70_Sy8iZUl)}U1L~qRTRtwjQ9h50r%~-GBbv$ic7h_{!Q1`;}mttk!ci3g7VZE$? z*-%ytt^Brkwmj|-V#nPmXLSE2Tb`Z1-Jh2$hNo<`->14!B3U5)Vx4zbx<3+W)B3#1 zmr9>fQj$9Z1#o>}73B{JnRgX=GY)8A`P&t*j}2|<3%}TchDy5{L8DKX)^gZAJs=(G zY&jLLa`|`jQyT}6ThWz><~LQq`%2TP$q!krh@48v409xAy<QH@vtE3Xy3 z)VlrJw6wMBRF#z{0eIUqMq?BoU2aF(CRYQNTMP~`Lknt@^+lJm1!5-)GBfKi7P%>K zXV63R@pA!3wmQf(_A!iN4Gb8>F23uZrvZ8iDuPzz$tZ}%ffU?kxO zd5x=^TX{V&e5%-^*1PrHFCO#i_rYSL*IHeS#HSo^sI+r-b>EnpM^y=q=EBKXZ!I*O zr`D?2t5~qX!~iD(^IDBS?Q400?#CTidiH71Z6;_LWDq@jDwV_XyiQ^#TpMy8VmifY*r^rzMh65p*|LzmiJEAQ_38EvVxsDE+01#m(TwA+@n z`n{3gyeH>2fGSh%>+8+lEy znLxbLTs`5K7+GC!7&DfdazVK!3z80k}-uECtLE5K*m54aV4VIkw_PZtd)c-_GPqFQ>ifhPBu*2IumO9_Exi zdeDb8QUf)KnYEr5nRz%4O!KPG4RV<5fq>8-u3~|+Ybt({H9*lij`1fnAm{9-C8jr{ zW|Ak5`XWaB9|=1~{KbC~_Lk5{8NJYy#P!Q7xBwz%WJ5u88q=qX&3R2~(1hFI3!!>T zdfTSfADDRMcP~nsZTB@Fvv-zcE2(4nwwqePDZ2gxrozOjl!=SF;m$Lrd0aGC4f9t= z?0H}4%qR1uBUke|d9NhcrAFzE^}=l2NznA@1&ZzrNhrIOcoG53#!f<=erfo(V(OotHS(oa$bL! z`{j_I_na!LKgZLvqQV#H`q!}hj+paA1qCDb_~Y{~d@j~X>~E!?rTW6^21k%as&A~E+lfo(9^f=nkJiKsglK*NJ&zoUx}XhZDubib zy65+?HHa$bXnb^fJ%{HRbX$O(sv!t~uc8b&ho=+E25pGwY1Gz1fQToK} zheD&qAnuaRphfQ&uxSNrZzAiRz}9oSe@--5T$vh9dYOW#fTK#_{gA%U{QOZZLJWw- zd-q5ge^{_`%RywA>@tq&X*eH@W4YE6tT_VJLt$MAbRmh}EgTn`6kow&S@7Po`uTmu zn}$|w)$_-%pD2)yh>A;vv!Z<=ZkKc$xqwE>^M7wMBT7H21B1}IxBZnG3$`xN7ZI9)U|c8IUZ*8WKYZ|6DZ_o32U2qctQf2J^W0v)b5x+06fZ=`6sa;Cjw^Bv0#RtLhks7a06K0yE1^pFB`bQ z>u+uzV1VhL0G(6xYa0DS5&fNkWCJpgI2Hpn`9B#*QXn8dG~twXcObA|&zxJ;+4yd< z%!Yi)3<y)~oA&Wj%B=Nh`ib1@_o8t30`<&I<3EWd8e)uL8FbA1^-M?H`{;8g{V& z`@*@z@1$qXGJ`kg_$;Z3OG|yE&c)G4cGY37f*HVn;+kKyWrFPyahx z%Kx2p3Pbm0ao7`+0{(@@Zw(AU03?lh(0r_JY!H)=c?a{#-;%#ms|7IfE=pGHSmTM1 zyFa;Gz#`ICwoon4J}%>*bh{NfpVGy&5A%;PFS!9K>$#6|8T=`8AOo;|MnjnX?f}ro zmMg&IUFXTpz5gnc3Ml-U0&V>Fwh5So-V-PVRIhca!+<|PKyM0=XaNn%;6Hp3=mdab z`INWq%9Fr<2t)xi0IrZaIe>BcUoC0@V8M}VX*TE|6aZKqplgi`rtqIR))NOPaU#bB z`7f8L0qClm!5H?(wL0SfN-X9$!KeQz(*Zb4JG0@ZKgRLE11Ryo2K#NI|2GD^bdAk4 zVPeu8ekp+VI}%m?Wq3+c(*#clfpfh;IEr9VK{?o6WSV4S5VsyXvJ%5qlJVIb?fNa~+II~=H}+k3xeJr3t>-=5Zf z+)>E=4D8_N91{JS-sosXuMa(DL0;x;^Isq6rGb+1lQv}dNm4qhujh1x=v58Pw-Aya zk)g%^82R)Qd+o>a4Egc8E?tz8wr7Y1laqRLk5f)g zi3*n2XssH`(Ce)SQtsxkk&o=^*N=reep0wvPTbB zt%v{lXAA&M>YXC2aWc4xzSt`86l~SfkKf2pWRz=(DQY_A#MjEJZOW`CBH(eJG5Gm~ z+n}Z`>SqSa_M&!lXZS)969q!Yz#YCJU34yfx&V#Xc?rk~=cCv^t7wZ3j8_U3Tb9T1 z7H?YC=|0(!ajr0F@5nkL#}dWnc<#C1-wUc6pHbEK8w46g6yYWz*wa{DXG}Zs`)sU6 z+X>}(w3EY}+Q4&ek9850&{#M=l3GR8_wh;(oqG{`a2aelBk$0n6I;mP?pI3tF|A)njYZ(y zY)3+hSNRGdtBvKfA`3gI_YO4os%90Q694g;USVjNcdpQ96qfY>s9<0S&+-R9*$A3p z-A<^XiP1dTbF&+0TCLSRax_Ma}|q@7K;tsv}|fl}Pp z{8#}cu(ESWL1kq@+E4Z z8A#|z$I>Q<197c*BrRj2F?0Q6>7U3Zbe{xmzUPL^2EF3k+R(S%ha9s zjot^W*73TUi=|gr^gyrE$q^^E|H4gOdkBDjDyR}dwk$x6pEp-}_to`xG7c#t6{PE& za9mF4^Rg)x_Ll)2&4{KZ)3DR=(mQL1t{MQp$c&{%K{^>gz#4|tT|wof^+O+nc`NPH zhc6tNqKc+`{<*LVm8{#t3n-!7crXFu7g`#w$N()5rgi-id7Fg1wOM*E``M~mr>BJZ zGl|kBH1sZ|;0X(w2DhNWdNx<;iIRwV8w~}c{=v9&!n#fr#YO{m6`>-P4CpJ8-%Fh@ z1+Zsj463Y2Skx)$`Dn(Nt$PrJa&xtJoS9oBUP|HpFI+*cPE)5f6{!}`(gn*7{1ec| zYO$9ZKaMZ=J&S6iZRhAM%|3t38Na1LJkEgr&m(>c&Kv~mB|0+26+%*V&oYr}kmKyl3VS8%9TuRDTMRg2(tAysV*KRjs$c2~X96WS4a`6s|)Y?cd(jUk+9n&{g2h;#I8*p=~x!J9M!6mL#Agfm&8SwZ+WPi`zzz56* zx?NY?e>twdf7z6KY=55ruLBvPs^9(1n9k`+|DN^9;LhoIiV@ z5QrC1{qOHFawdreu7qUd;reTmqO&(-x$_{%w@@-eZ~6t5Gr0p8Y+=*w+P@qaSNKuo z!&kL?53Yz3cD@c{gX{4F+_Mx|eU$xWbav-kOBX*u!LV$t-XKxayI2hgWh8JaE%RnZ z!hdN(ILpL~9R4oo+`yLo6ssiQ37dR9K?yDmcbWub%`PA2e+)K~yP*Yt`nr8pG;cdu z5-%SiZ2#ehCdIy1#wfxJ3y@$Y2u^!%PNGR2y*+F()dI8WG{yID*VGl+;`Eak7+pO* zJ#Dt%27S8-5!e!VzZUq^+vAFi`3*Fa0lM!?OiU`Ys7{~9Dh!@)@B{}Dn+tkn7ej9K zB$3o}c0n5H>l{-13Hf>hxREuuaBf@;AsKRvPSV9{bUJwGC~9&b!K*RV3NWCawqK!H zlb?R8j=T}B_O_j65LPqKK6AhP0C*G!PhnVr!Jdt=h7EX}ijmYy4m{|bvM=eE?K&Y7 zcSH5xi})C7eT1T@Zowr^T1o>W!NtC43pX-BSiVRnkqp`R_Cqy9Fsbh!ZAbmzTo;N#|{3*i|Z7UeKiE_4c+e&q>RjeECvsHiiFkDDQJ5zY7BOnG|Fy zOUd<>+dZh*y#-uKiR!3ol~K8MRXAb}^5#}!lY1TP@J=igvlPs;?eq`?83p-+P6VF~ zxJ2+r7^GnScpv-9uDMr>OGi&EAKLdXWnEQ80v2oVsQ#V&W9Ic7VVI{&YhS-Y+9H$> z{{YW?VrWwgwT-jcEWf?O=xP-@ZV#+IoI{VQas+a?nnc3mz~dQX>1r@9Rtk z$umLeeM$)bI!jeQ+?<|b&ytYt<}ban}*wIQZl z8u7MlA(yV25lt7d?kCH_GV+27R=!ac-Im<9UZuw%Qn>+aPDmNn8kB@EY9B)vR}PSpFnQYXnimg|a=Y+lG971~t3$+`6i8Ki&3_ z6m4BuN?Gpd{PAD{c6vqaFe~H943|bN;d$##CAu3GgK9@rM%+vZZG-cs(bTW5|JU17 z_y><0s6egbqn9a1R5Wxgx{!c-qpwf*-}wZvg;Key5NzHxf;bASXGjDFK`CtQ8p(GY zwpY#GK6JTtAVX9rpu8z)=QOw+=+PLg#P|t{FzO>(Rn9GwC-yXr%_kpUt}gagU)Ow0 z&fvwNM3`x=_tcDluB+Y56dKrPFm|*}=BH5d;$$JMZB4@-pbaaMRhM07I zzSSv^h%~bUt>ib4!GsQO=*0f7)9W@3DPd3*b=TxCUaiwMA2-&Q!|1v0;1Gp~RjU~< zJ#;JEAf045Kznm9*R#rzEGT*q={RmbfCqwy@zz0zU>}5e17}s}H1ZanbyCnmoS*zZ zlmT=_?a%uA(F9_-kiv>i#VmT_S@jr6myq~!s(O%qv2UT|kZoGy4=1@AGVwNzJx@ONJIw>An1$ih)wrZQbLYpWw-oMG)iYyg&PjX+w zisTLi9$I0iXMCh=y2_oFV0>J@3il2uFU>@-bHP6^V3&WE?|o%fW6=rwkvO)(yT;{E z`tGQEP&E)IFA$V*hS)4!iP(*j|;`yY;67_*mCa)?*Age1x(M&iH$m)(>sJ*os0F>{lkN6 zU~sS{)*Nr|`1t1+;A+y}>GiD7oWcsCu3?c^hghuqnPMw8ozr1%Z9tE8Ql*pMq#fHyEVdOwPR z=rE>Yn3;Vny|+(+>E1^PAighvwzWhC==Tu3%EyTuju)e~Q}qrNsY*fmvA$-PBBP#4 z8>DG}V3alt6=?DHIgEM;OQmFgs7tkG3b*D%xb2Y@_0T)Fvb6;*FP=PqBjPj`&4mDW zTf@!S`wL_jb$x2&&+`7s`AbLyj%*!`mnZtXi+5Db6@<@2?=K_5GJLl0U-S05@zWJ` zuBCe8coIo?ZP`6nh(DbUMIg{xwiKMfhS$4!6BBd1Uu+&os1OY@4J*)X zQ!~m8=KvPBDL$UFl z3pMPL_n`-GDFcu8KA)1U!NHdmO~5rYH1yY0c6o4_YDF)QY@?v99RbYl5gZs89J~V( z%%-xMA}R!8Kany{f;(@5@2<^|mUIfOp-3Y#N5J_V0KOit6>vMWgu6n{X=j6^28}MN zwFD(-D#>iqCFMys4uno1n3el0>~mcU6?hWS3JQKNSi>;wI0@|qn`Y*b3pDpBXM%J1 zlJhthQrav6S<{+dChw&mZAUNUHY-ev3ea^;E)Yl>6KE__>xz8A*l6^8b48$^Xdx(+ zSlF=*05L${tmLb@R@7rDwb8s4?|@`*NPHe%8zp*TDmYWBSr{1M?Lu3ka(Z3qcmG!M zqSJm=V-iolW?P^87F$6C=D4U4Xj#`hCBttcW~kYEK(AM40Hs@6A9~6UV=og8X4a?Q z!Geiij)aa(x9}sHpHj%`dpY$~sKn9>uIF=I*Lf2}qmC!WbF^kTE)2CDKt(Y9l@O#< z(O)k{5_MB3TSvCCTwllE?+eQV=5HXqS<<$7B!ABBmAMd&pqCeFp5(C4CV3N#jO;%=2dKjQ6qJRS z6lw-#NSsmIs8#1-&}oh6KE>(xLJuR{wt!lYQx_<~5y{d|!NaH=i0`_Cev@V86Sd_C zjWqQVC+#KatH@Q*z8<0j4mM7oBNpQUy1=)!GFJ#>Omq+jIEry(mK^XdtUBYw8v4Ms zka?(XHo7BhY}~I{FyhMbFYk5qM;#0Fm3lgmQQ>ztY`1-kCcupO(314an+swrJwXF`7N&zW{sb09GP`PuT>2zZ z(+o#C5E4xzok^mw!h&8cEF~kRcp2rnye#dsz|*)4>+$JVJLIz*i>05GuV{u-TSAZx z{4Q_Fbs+6udv#=?-XJDO;+JXv(zdK@vtuZsqDJviuNh0W35 z-b5Gp+HNK`WWGs=-1adzkg=NuZY{l2#hc($V;WcPLX5+}G>uo(t6Kgvja0B>Cp#l7 zuxS+A>N*}Lw%A4FXF&SifujN$5j`8OQ;8yDTwlw4H(&#MCPq)-UKeb&mVx1I6%ntER?=Lnm!KV z!-!c_LBAD0l+}Y$>oY;|{>4yAmT?5OXEya2i+T1U1tYUNqEY_BG%wc2??Gu>^`uFq z>zBic2A&^GQI*kZCKzNHP48V6h9zH=ZU@+u>6Do0xTm#N0*jy~s{M*;it6}&w5E>d z?a}<3TM%`?iu*xD)5eVU&=cAab=K&VASjA#_caieLyG614U$rIe!c0oT|O>F#lRN+ zo|*xFiAYHRwt=y`H8&R~e!hJQ=V)S)+DolUjIl?^bD@Nqq};8hMTZ=Aeqfw;Wt8@j zR&Z_L80o=}R-19W4><*==m6Fdw4VY=V1?*-I%aGu*ncVl1a?jw0{P-2CJwA?ay z7Rhzxl|XO%jbaKy6R5zGH!1beQ-6b{hV1IqVMy`w5(b@2BqTt~Z;jR`-3q=(&zMw( z%R`zWj*3@cIU`*s)%;zP~ket9aMZ%8@-sP{vEmSPMh>@@p z9@>lLBwPG?>qhHAjOIk(jUOG-9-U|rre11ezT~TP-X4C;EJo}ysD0x7=77sH@85q? zu)^CLd|h<0QDUWjTYjSWJPVfWUJBk2+Fcv*NGw`499~wEj7|&q@?~-7vBb%tu@TQH zPVB;>=i7Hyt3;uVIq98%PYA6iiodi)>3WqOo3EBqUTan zk7`3|Y}c7JbPhr`Xc}By+RUs&xsfo&Bv*bVieaCL5VR_Pu_EJ-oA2-3>HYk&z`+Jk zGjU6hgwqop^gpG^JtdtR7e+fU1_}YqNW0*e zyblN?G1#cQs*20VO}v@&S&PSLd8uqCei9-w`gk7kE+u9#A6*0JLtNdlGy0+ z@4gf~oH-&zfOs(`b&yrgsm6P&Q(Q5AaH#!2A_Hz9D1&0GSVQ|uauCdLy*|X&xdmIa zVebqFdT{IY*VBWGCn-&+mx+r>>kgsQlYf7&=Hv4>w)+Yej#XSSnP(l>Yn5dW1y%77 zF@|m+T>;IH@|xb{IK6KLG#khDxdDN&2y}aMygR&L6SdH*nCBK^GHkKE>8+zl&gjf`ee?Uk#Jh-lDgHI_8rTI;AUsxxWp8Adnu} zuW^N%9V~z0xcw<0AI_Gn9!^99V*X%`k1tV*6@l*t(fht_Q>ddX8+^OU`b;F-94vEJ5jX*qIrYqn2S+vC+=>#?cJ=k%sSNj zw6A%Fz@=YDU6F9-;w`VZA z3V7->hK4D0a%#5WdN7qY=G#Fua6RZ7DaTfosniK_FJfU*M$B=pXM!DSxng>Xmcu(o zr62E_os(p%u9l)T0J-1im~i}#*{A^F) z(VueHE95-(7172Js*^7*4Fh!d`)@HURB(voH~w&Jjd<|E(C)`P28-)}!D4RJKae;h zB#0*TC%-<@e`32A=s?(f!?BP{?w>NuKp;1Q&_4MOa3Kh~Aq<4lwI*4Ir2Yvl2LM_8 zxZv==1^xcQ__hAR_{UNXIRC-;^$~#;1auo9{{|R<;vX=;fU+IeEH1@AWw5{s>=8LX z6aN#5wj-#&iEvX=p zpF>eP5j3%X4wborUx`JcX83I$yG??{*aA=^enz{|`Q2HoabDBANb5?yrL&BE%q6eU zd81GckD9VIAUt+U6r@Gz{d~$L11zLZXxo0b#m(y`-AO0wdFtB9A!G6OZ4DRM90Aw| zr$RAq&8Q%3ctUiXIVArz^EcuxAVXuJg}m`UMHB98W00jhhzamL=5r&)Kp-Ts zm;i&E(c;Rue{i719%h;KzZX_V16dhfYssTfP?SvO50xOhXE>iUVKb`1G)(?;iXS|X zh_aO9n$nVos6Y%%N!s`H^!)Dq6EEru+d{y9pAy&Kw@73zH;-mJDT2Z*!e9Q;jgS%Z zt#sZ+h4JhS$FXzx6R+WAz|XV3#|phZmP7b{aImxu%_y79k>SjAV0b86wXgJwW$A9) z(waqgP$!xnupQH#+0Zq(8LhK$_3-9|f~2Y9yKa($iL2>{kXSLuq_pZE%pXV)5ia_s z=L3koQ*(9(q;#Qykbx#(vbN=jgb)ib5Cnh+axf2nAKh%$w(zsrT}@fEUp1hll514^lGyx zdl*iyuY6+MtLdr$rlwODPfqDiv=zQEoF}v&`);X|N{8x=3O zBMTJ5+Ox%-hTTb)3H>MYpW^Gw${IU~dl_j*tR>>BHx7TqYA=u(UG+s1ihuSc8&ryo zL|`uD%b#FSZqc6Hgv}FWF_!BkRE!~W(=wO=ECgM&2S62X@9x+EF4xb!o2F&xSpU52 z$UmT(BPo?9ZkddCMn*_tFnPe0GE<8+UM4Y4>Zum)yjvw^0ZjJ-K~zS;21~Haps|^-$wwK$w!5xuhrnhSp;VJ*HWLF#wgNwwfMji}3Df zInwG!0=+TNT!^;w$qb&Bt7eqPI?BIWJw&mknyX+Vf`ZF|dT(-A7BLpda~Xo*VijZi zT=%PbM)skvs3r9yqp3YP^Oqe~hot+*tc!0(l=#?X-e`HadhKm;GR|A_=RK6EB#gGC zXVCN4T#amc1i|!Np*m|pgP^uQ2~^e8jMg`AI=}2Fgo*yKwjTuO0h9wAKfQZCw&lx9 z)9|uVQ1%afVA`X8+Z{5sBvWZHawro-2KSN0n4CEd$=*iIF0lb*48;z1K z(Z)z~n_3jMar6g8nu(bJFKUhfbBcm0ncc?7a$rUGdXAz1P+W!zk|&;#9iqTO23hL_ywg?qq_SP(oXI=J9g!f6fea-R{C~!y_QnuKul6_n-B!f)KcXTpZ00c3G^3-?30bu@c!oUYV>p$H}}{ zuv*~o{kQ6DE>QZ*iK5Q_L&@w8NbOcpW{2{CB&%dl+N>S4J3wKX*j&2)hb#=}FhH^k6{TlM4LGwPX0 zw+VZd>VhyC{Css*NJz-tz#0GgaAISEV8Y8$ByylyrM8g1zP?tS(QoFcJvS&l5%l%- zbp|{y&A;e^QKH>sq6XI1d-ni4#)3&p^YBrS5(<&Z!gAIVixk#g_*!46) ztw>{frlKDm3?Pk}{}^pW4rs?y*pz>z8glXh&0TaZ%no#!e*gZTI4xDwi*c^N57Sxb0nqh9D4OS;7(bV;h(I@(_`HJn}5 zfx1X_T+B3Ulj`ONtz>`(LuO**!Ap2vG&oJ{6^{o+J{SAiO2F^oLRR12Pn+QV2 zel*=W18RRhXC0Wn9x6r>o2PaIeDY+*6rq9>(ht)$_0|v_yYfQ)B}aGlI!M4#daDZ>6*r zN3$duRJ-k_QR8LxGxwQDlP{_BtJW~;Da8099xWulx4k>{=I4I19%A&u=P>*}M6Lbn z71H)P_M++=+sK-&TxnOGc&<+s;e&J~hP1r??xuH$$bf9Pd4R+>i`4+Zvv-4`5q53Z zM#~@J$0|mwd#0Xm+j{oXs=9PHPW@J;K`LfI56KTlu=^Gx6}*U;g$-?YFw)ka!_}Vq zi_#Dgi}=R@{f+PhbtZ-~eqH4S-tw1SXk)AG+l{Yy#_}1&CQ^L0bx8B2xaG%a5jUSL zX5+0(Y69A_bDF>PD@3&Z{0dmqNsfOdJa{+#h#zsf(Fh^=h9bTe6mlkGF2dh;xir`I zoonYS@7?Ps%>?--o`W4VI|d2y;!IjfgXTRa419b8AFsLZHKs(UG~2Sw>DK&>Z}qTk z8;nk6*d};fv~pInq+{$r!Pk3y%<%C~_@#Dj(&$`7gRfF6J7kL?W+ha9BgC3otL!jwweJna8DZghJ74p8 z8i)`Q?gL3EzZRp$m7$?=wI`KGGTd~rf#`V_K5r%>(!M1ub)I5IWj#V?8c<|oT~c=- zlIGL9rM^LEjg4G`(5AB~OD^uD-ER(*Mrz%jIb~J&$x*9{|=*}*X)9OSH`1};0G<4s1B-QPd4~#Fhx4~-s z`2uksuHY#B&45Nubt7m=w}Z88lgdK$sA7AjQd-&lk@!g!36M(pS#Xo_uw&F{iDIYx z{X2*x-1WfVuEPTXl5?qE9zk;SqBw3JHPY2+L%h-`N)w7eb`f|LYt;!WzfR4EG&#_tC(KQyr~76G=6xaw z1cv@kRqYY$2J(hADs4%x?b*|}M_A902mIbV?y2~qRx~s<=Y35zqfhR)xKR`s!`;<{+MbZASgrk?mi%jaUdbKjf1Z64KGh`V^27v#EEDfd1S!)w8Ij z3=gW_W2LSdo@f$oVzSipO+br{V*qXM07`#>R*e$lavO^VH4!}J%k}k|4ke>7X{JC~ zL4U8ilSP$g_x6Gyn$TvTlb=ooIcSv>v=3F4^ObjrbH_TaNc1L#?6AN2L4=x7<)+g!C8!3+&U@;{?`2~TJKgXwp?_tMCLHKMY4Ak?w3RJuJR(Oht zgh@Aea_4>1^E0B*FEX!M`Jk}&P<(#XVB&;^QMJG%2KV5SHFtxRsY0tq1+H$Mu4+`T@tT9SEL-jSGxD0V-+@Z4`<-en=t&Wk%vBQmA+$^7((M!DLBVL7i8_T!LrcICbl zOd_$aWqu{X<`$+bqUB*woSh&lzPBf|ZR4`-*s%-b!DOclI8pY@*;t%_bxWe%nD_9J z=3!I_I&UFV?~IY7tQ1Z@Pz%#LkoDdzf3b?76UgLq<^*YKt|-Q7*BjR7<@;6*mreW< zF3{t@tW|Blj}yw>0ab^wXMPD29fT*Z+dt>%(_i~vWpfj#q?n#B> zHB*b2PzN659`SVV8!^ooDpq5D&Hbne=J*x!Qo0ZXsHLqxcI5x$8VNs+UhjzYHRIJ! zrDIP<5}@rDDUbm|2k@nBza8WZ9LkrLWN~As&W@Ash1d##flx=I7V*Pr4A--}iD&qs ziDj61KYCuzxh~EyIP=NBA*U{rylnFluIz%xge;cf>SNV<5DawT2$gmw7(u^{;dlw} zoqP>^#f%8V8)R1smEIMf3B8uLQknFO*GQ`CQZk9EghSTP^=K&vFvc(aQy2s8=tmtw zgMy7diu?^r_aR9G(2a;yW+A(?k99Rts#<}j@QQxK%mc!=0Jar}Q5Kqu4v?N-4A}Y2 zI>8(b);zbTX?AijNtibnM7Lsswd`x1cE@_ve6(07#Uw^;Epq7i-at zHoigtn)rMdH}C;*J|42=)x;aj7?uv2gC$AyqXRonSx;zm=wj-)3sPO7%6%WV1>`U9 zaRWYf#Q<_?5vJazte*Un&y=e78e%Yc&%F0GW6Jr`ao?XAYEJsJ>54k9INtM+TIZ*n zwu}rFu~oXs+PNzg=M%UY@~i>d{)v z*gE@&j)}Ad3h(|9nUu4AU`s5YAH#oq(dt!#ncq3I>kvID&C|4Yw+b_@xx;10kg098 zD$o+$Bl>IqQJ>1G9vD9s}LX? zqHDP~EF6f6r>;iu>0?<<5hY3q5(wkZIYda~$g`phi2Jd@odHYl?6)8kCUas?Rff9p z1>%%_43SxP3nVM)>gDqH(XYGCz?kr*O>vu;DaT9o-RDf$sW+_@)jfbF9M|ZNT-YI5 z^=iydKFuGh1n!MUP51-Nvh*UVtM#21S8`Ys7IL6Eb`g0@_`RSr5)ByKGr%O-mix-sJ`Vn zIOCWJ6?Wmv-xk;q5zD{Hgz2o~jibSQSLbH4%8Lu{1-x?yOCt&Mq1Z}z+A~(VxWR;v>n2(v$S`HVM$JKS}c``L})aZFb^oKl%9rK;o% z>VCIDZ-ar~F=qICi(^g``B;hWMvu+G4Tk-mC>_M$2(J=aNy^tULe#3BwW53CUB8&* z>sbjGnxfIkD=1MwGT^kuBs9UwWyXpIIEhEe7>$$^)RFcFt?ESqmsUq6LC>CE9 z)Ap~(^IHUxQ!A)mE&zJPg%S4;B{bc4~WD*_^+-Vmf*8dUp+0O6v zdje$pENM(&$fse@qy?^9FGK7TTb*9HP#rDRP`XuT8348Im^cv7Ehp}2reg&`F%<}T zlg=7p+?B%m!hg7`)rdDu^VMP1%Jpd}!p?OjP$za`Mw)|% z;PBx;jtDTKA~L%@C~z=-&^cjybCN+*ywmrMX(~W<)*${Gm6_;iv(L$y4WAnB(>TS7 z7vaku`Qbz2-~yG@uhz!;S&CYQtYcKt$%Ha-vYd~o4A385%r(CbhqRa9Xpn}_Cq8@s zgUa=BKW0UHWV9AJeS9Lo&N`jl*#^&TNUQEL%P(4gCKTks_FP{S;kyb@eaYxK{O6^u zZJvKc+*SHtTWU?QZZFXsIHv$96jq4Bil@4((yXDP=TG-CNdcfr`K+*CcKg^-HNsD# zixd4YIXZ(smLVkXj8Qt@3AZ!1B0xm8sU;E}mxXrFj>=+L8`)-yxq6Aqc@m1F0+WMY zLvpJidq>+DjE8T%D#TVU92k%Yu1?dh9t=N!S1G?XzUn*>HhFm1uQ42mAu_-@vd*>! zTkPVQP9;Im-XQkRpMB5j01UIrxd;bx_#eWhkE~ubx?+daR~2 zuz--JVs7V2cermS>81pVdQfDFL9AH4YAj$b9%9*F{GjOUUDGG|BK{-u=tY^R=RR4- zF2mj^Sg1uPMl*_&H#@|@bN>}yVR^{nx5gDb>IFv?xwmJ5`QSMfdJ;Wts%xX$+6e@d z747A$Nil^D4|UVjSVU?qBD!&OkYy!&SH}s}QLDwi%gPd~#iSfy2!|us_ZT3YHd^Jj zw6RTv?Xz%w2=lpmnF6J96#{8}2lWR&S%!ug{>Y>5P99@CI; z=nblpCvjPmT<0Xk@O$bjnO)fpidc4<_F7e2@{Y8s*p}JI#b<}F8kJuxfeWb`9h_6E zWbI;$>~w1gr(lqpownWVL~(WXE&qjU!$(_=0zW6pJ!@1KY#4v8T`W621W2|ihyF5X8iP0* z6~Mh8wSOplqSUQzmMYX~4e$H9jF!{ITTN+pYyBmw_o-X4it5}9uFu}0o z@m8iwSm#pja-_?ow{W~cISo(#dqS?6+^@pr%x@c!FKFjG*|7H?!xTJRj{<5FWSdW} zh_!~xb@Li3bF`WaN3MK?b4Q_fVv;lIRwEu3h<*Az9v+O15Oex=>RU`7^?XbWT$l$& zbfP`CkIBl^pMB_tN-aA+4Vw;>k#2YFD$XT|p-kRwp6!}Bq^vnsyx>&wn?srABVA=9c$*k* z%KAWs8}avkjYq5PgUJ|!gLTVcc6IcEwK&*!Qv=qaLrm{$fv$dz+E%sw7%mgq&Lpok zNMVL}{ME1|x^mwI=|e!)JNEOWa&8-MvZvia0CN)C2aKrG0lT*ggp|2v=&BBeXU0+5 zzE%A1yabrOX(p6S+fy_cRSd77vD&Kbn?Z+4CRX?@4C!l6RH`G@HU-+7>^l1&GZIwV zM9|2U{CB3_!UM<}R{DPQDGfP7p4py8eee3-?@*`8ao_^wTcL)iuB67KbKBr!a zACIn)#h`ULr8&)^EK__QKU6t3nCO<4QiR+d>Vt>?nPm z&((RJuEeeO>gx?evOnuzK(G3>P)VV2s`QO$Q9ShwQbnYu_R!VAVVA4qAk_ut zw1Q6(b&PG^96FcFKO-yCaeeayhjuYB(~cv>=va%|rCu?#XgnG&_PDiHxzY+}yRj4) z^F>E{it#;02D0vxVk83A;cn`A3V6s_v5eY50Zi$lFpVWC6Xca` zgnCODM`GF;o>G~$=^_kidKg-8x9mxaVn}w86mJ|DbtZ3`-gJPKLiNndOi0)__%|(0 zV&STfg<@0_vtu|-lGwLeBevUnt(?SF3$5gfN_nuNu$k?5Ywdv38{g?-b*_@QlLip-L9R~g zZYqLC+MvO%d5zoJUvCh5oLf-d^*q!_=XYoqyTlslfCR>=tKLklq_Qi3u(y^-wLP8b zl=^BaYJ?0Z9l5=VYBVYu{;V#YTz@F3JsfCzVI@e25O95yg=~Hkjw6>X1P-h}a(cdO zKv2MnnD?L5HxQ1$KClv;F-iU}ErkCU&hn$b>Kjq3;LA8%1L~V7xoD{U0Wgt&F@okE zpG>YE`W#f!MK+~jqx{Ws_^VyM0Hm#p8h{IB+8+XnAm|;CG*TaeJ^QbQ1Ariba}B(S z(;qNIvimRP$2$ch?0;&qX95<{FXUMNjdlIUZc9Mn#~=8XpZ|4#dU0UU0C)VvZ(Ip@ z2M-`CWkn>?;$Qb402Z~XhtzWY7lQ|4S^5aT4)7>ug8Qdant`&6!WhR2>>>XEH77*C z;ex6D8stV2#oUaFV#w9BBAl z*tE?3p6Vn~Z6F5!RbABPUWDa5)k(d}9E-ik*l79z+@c$+T%#V8E`RfE-Z1#j5U?TH zddX$v{rGLuAw+!JIWn{|F|_waY^i$B)|sv5mawyaqAG(Hy5tGLYi>z3tSQ-w7BgddAU+|iIl0mDk;I2N7 znLOQC&z>^aXtZbGgSx7yTG1ms>IIcJs;{(KGD88i7Yl`IMRY zxlby2bFSD$GBU@j0olf%Gp+MJ0NC?dHLtpszKd%nGTu?RlC(uf2FiB4^!2f#zik*Y z+l29C06HWh7_prci&rdc%j)ym$quppyl34+P@G)_Kd`MvaXnv-FdqQ7RTrP(a-XoB zLDao8X`SN~`Po110tuikm5|3qf{3&s&VKyzbbUB+aoalH%E97AMs@K_$C1%Yom~Q> z(Un6_si>dNHbp$gY7Ao3U*)EHvNkaT@N>&XqrD?c#GMLCYYd(++byw`GP*4J2JcSE z{e&>PEaAO*Dh#rloFH7SSW;llXw}~B1lD(dC@zmq5AU7->X5 z4!c=`!wQ*dl|oLE-o9#QVRt36+B zmW3Z$EfEL)A3YyuW{{svsO%sI2=A3T(+ygjPpKbs!e`lVjm$dyLh)No#?#BSniy{& znX?YFwhgv_6<$Hcwtp6S<9nG_dGUXFyE8t6AR}+`ndY+X!bYe#<>{w!lU%G^|5M)?~k;b*Zg3MvXUdq`*7dM>8 z#7F0AjO|2!js=DuJX4|KT$j_}z&0~Nvp2{aI3>{e6Vy8V3y$&Lr>uwyjKJK(eiyN( z3uE2{7QHAB!g4JRN?S{QQzH&6naqw=QpmCdB&A(r$xPpLF(Yh=eXQT}v#$t}y^!Kk z_x(-`0~4DKbtm+b^YCvi0Cvk!2*l~@=o6&m`-0_ov;L_W@or;tD@k*FWHf?fB1O8Q z2|)G9@vQqxcIPjv+G4CO?P=DkVD0^4#Gjv4EcPnoTCu*nOHhANiZfueYB+L2d|amf z*4m!qYg>meQcG3UVP!@lTfGnH_ILtWzC7)e2M@mx;VGPlPBF6JNgWcvWf=6cHUSLYa7PtNe@d-R3f zdC?6vQ9ZBzW8CsA0j$*tRj#lyQI)&g!M-1hBfZqks2)vrLmM3)4tqCZeC1Ypw6QsQ z9y$V82W)L`yLtnOaCW;<_OsQti};f4pESMC)B~BW7xX>Out>)>qT#d}371D>EwMVL zFAqo(qjyf4(#-Drf##&^XaS7Soi}r<$<$&2CW66X|n{<*m5Q z8Cx~Z--wZBrYCys7aAm*VHZ}CU(JXFncUhNdzV`=T`Fm^C8`|lBL3r}X>^Q`Z0e>x`!SHl; zUCfi!D-ibQsMQ2~I!zKEUi8_3W`qCWUhAl~)cy?0IB`9yUBSr3W%4Db`zdv@qe9rv z-Ca1RK(uP{;EdUs1ENLin+Rz{EZILY$y>$X+Dl)|1+Hd)jxRJ-HhYXfAhFa!_A&F+ z6!IBjD^;+2)6sY;*@vkAY9%u>Sl*MrtPxw=t1)D&<5UZ=EPhPEZ6M`p=g+r#z*FyR z?GZME=geqZ^fbR_p?tI*H`n~&{XTA2po^i%ol{lrauy6##-T520oVHRP`XibJg5|6 z;~)_zuxfwqezN2-sVs+xKcW#-^QH*rgln_V-K%sphyLiyrau@Q?eNWjD|fv2@pENk z_$o0w!XNrCZm6$}2DBA6Tmid6CDVIt=zx7Sx}}$`w4?LDdCht~p-4shDK%Kt6SX!P z5u}}fDY{+3gVUYo_|%)zYw6Bhk+;9P62C0J@l-F#sz7h(iI}W^s%vqxURBTDqmM1} zTzklgi>oou|IyxGMdh(|QGjT04GtklaEIU$+}+(>13`kjy9IYAxVr^+cMb0D1gDFf z|D2?I^g}=NeYoRZ#y7r)8hll|_O4oc&9&y5%Y%gw+l6w$W7k9{ThTl}NVyuHdO6f6 zkG*8IMJqRF!Fh9IG19twYhq-)-UGcVWP*7Z9~4L(ne*FH9xKFEZYohfFsb0>#m6mN z7q`)3RT@JCMqrQ*5m$8PG8Apn^l-7NuI{o;q>4uWpY!M)0eFt{ zHWo>Y|Jt-SFl=u@60o=(untPd|2p{Uh(aAADgU=YdVyPl0~*@cd}&61dECCQu5<;0 zp8X$JcTE`ZxLc5?)ky!p=yWnr#WKak225BQX#p^Q?xh_a1`{5#Ib|DYXIRV0!ZK_5 zM$(kWd$TW+h=8Eu89ot^0(sNe*ccQMLHe7}ZOZ5kaKBl$*8yso6nJ8T6nK-}KInBe zka0HU@-9{>uj58mcr|joP{7O`;a8kQ(+FiXUokEH!*gFd0B;!Yo^ee){+BQfWU4WM z3AF$r7XAwXsE`2&;DBrR=D#iZ8!sFHG3wr+BQoC{*L`+uGz@i-`eerUY9$^RSz#s=VtAAt*iX8XUSc~cOOxfh`rFG0x> z=|Gh)U$_uxr#Hr*!{=*qDptzf5&usNsnrrK64ppr_@Se41?>8)v#(Ra?qp_|_pTV5 z#aw;KkSrJHyc=hdw+W|xbx%Fv{7(G;a{tG_zVfns6{6ykVXdf03-^=yN7?;mXlXm* z8H#za^VKfn4HTVV;)m6JK(W`ufA~bDCxrxMtA}*<>SB$8J`fQZv56l?0w-&;&SK?y8d3(n-Vp&>45!HQNUXweN=UOl-jbUmSCQLX^TKELAw1~NRKO2 z94&spy0Quu18uE6LW*4D5knaJzW?kiJjPZmzUwHb;Z>+t{XmJTTn(O8>lwo2J6fS4 zK4&Z->nx7u)(S2$%ks|i{j^slN+b}|R()26pF14);Lz zCZ#fd8*<|r@h-kJt^p*G-Ri^S#`lk31F&E?@b$`z>1^oLR39xM;k`W;3$Wp5ia@*wV`O09V9aVM^|5$&P(}jp5zA9BQ0!eRLzq2DMC5|6N zG0?!^H|aA%y1n#Wa>-J`5F;(EPVR7O;Di`*_D+al>pB6N(sVm5AU6 zFGlYvh0K`ncq+5Tet;npnjzw{`&FZ_K<~#yIKx%fo+U|S@J2&-E@tPmypwGSMu;ijwoN> zke`^dcod(O6|raA{tQu~J#js2hddh=jO3IOZEHI#cM!EBU|s(CTY&W+XInGI3tJ5~ zjRp2qo-CzQ^&H7>IBi3}SC@eXQTh8(@u$b*BvSq!;P1*87c^*O%t~i z9bt<-Yt`%F?~T?x)3H~O_&6v#pd?m>TODwSl~?n1k@OOeD&br;7$CpIVaxn)e{Wxg zZm1;}RJ48qjZKAMtl%QTMt%3OM-e%Qz~g?r4alu`~BX|+mXAtEXlKQW1lbzaW5<>(2Wjk*gX``f5Lm9BDT z>4bt4EnS~{#RS#gB1DJ4Tej ziN9twyQ!Ad6uh%LLDBAedBZWORBi`Q+)k|_jg5`6brjk72{-8P2UO@x&nS;3^rzR{ zl6tZesu)H(Rh?#SFzTkYlnvVL3+gH+?-KnoX8n{~-a6l!g@wtvEBHq<_ViQT2xv-L zZ{pNkV6}WqP-0Cz`>)gQS`+wB5j1s}8n2q9e(A|lwG^H!p@XlV%GmtgnNUx>^XWf3 z$J2q~E1iMW*P12C&Oo7<3qHkNK@@jL7O@jSWaw9W`Dr>jj0IL)Bi_V+a~#7~%%uwZ zu1p3FUifP?-o>xOy0&L9qH+zA%Y)5;psXNf=))q=mewP#ox1cJCZHEY~yxRHxB zin6!g`5%#0$;x6!)C_lEwVicO1a+oRCN)?Or~ab8v3L}RGv|IbN!~_SfgIN0M$9N* zid>tP%%$wwyaT&EQ>2;P8mHw%mN8roT|84XM3^1%d+IgHRDMe)BBguZm9pa6pX`LmJujoOVd#BiT7dhVsjhcvICr*TSV#h7Dc{3$`td{j1^+XoV{3*ShTGb1n!hrLdBK;VCSylJ|Zh_3Eh_Kq(uPp)Kuw69^hT6LKQ zb+2J>=Ta9UK~@%^f5VqKyjony7V0@LOU9$|Ln`|DT^!f_`s^OG-+O&zstndNnogl| z%QLtmnAIn|jp{+u+_!uF?cbnpRbEg%pJXDL24Z_9GAlwfb?JQ5hYr2N-351)??)xTq6|(0)4+5qOeN1W= zdUjWyKv1uX81Zn^^^F^O4;?oYL|z52GUM3e#lFRHt8GMoFUae1cZ^6e(P4k`yV(u; zOUDi4GbWM=?^uDU->#JNitlJ)7FI!83XewE~Jn-i* zHbJpf2ZQ0aLss0p12cI_IfyW9DBiDyI`u!lh7u_S+XFtHwLIwe@86NMOdOA!0q-;a zc@dCP4hj#i#pd1g1AzugsH}P4!@?RF0qixDoEGafUfZrJnqWMyM9c;8ygJ#jsVZIy ziMV(84`c^DJ@|vg;83tvNtWl>9{b7c;vv=>4sstev<(jX`j5FpE%@ z&XK4j)(1Z>Pgg`J$=RlrUs8PnV7`^R%NgsZy|c6PU>`nw#!jJ(Rn~+Q-0~!whg!wZ zNCxHF0^v(kjN7wO*8ty);Uzz;wU#rW@HcgF6f`=xlrZX*;a0V}2% zMeIC+H(`8RVI~uvI^0EIIpeE9FFRycbsA_T^N*WVs@f7G5;5DiOZu0=jkO7K>WdYN z3r9mT|GKK)hkz^G!cEj$;oH7#fTy>eZ=Yx_f};%;Q@oldkp>s8j#?pMXvKMwc!C&1z62xOG_%kd8cdL`|R zFLw?8<@oOc_}~aI}0lVf)wHjSkQwN z0prp)y#K>920?5w@yuy*a z6Pw3DIW%?;yvlzg)#E6jnx>N|;$eU1Re&;<@g9!Ek-vaY{3{TGA?f{VKHj|op$**O zoxkQo;uQ$_p=|y)-#}*Q^~&c6#+QF)9I*8O5aJKE`E#hf=M@M!K~+2dwFoG$Kq#x5 z?a!gL4RFnucT%9g%S23Ach_RTjKZ53@z1pl^Px7XS#4#<$^FP!eY`|WQ6>$FDxA%^ zKh{@)QhpKk)LqJZDlj!t7bXJskj8WnG zCFY@)swUzKK8Og}+I==18+uY~BRC$SK%1K>Gyn zF2*jemW=h{$=MnFiWfTgA6%I8ZFo9$3||h#^(|2L3_-slO2oJ()`#meikRpxhgMh4 z8pZ0-O)^d)Pn6dUJS_@e?gPbE|-bA0d}W>YDA=n;S%cHzChh+)CJXM{JswC ziOGYRYe`aNUCzXVK8e@r-`+&$4!Fwk>D(>Rf?|)YKj< zU;(^5$1T~WJS%Q`?-BaddaEU(aFqh20=LI#E}j7#N`1YJ*Kk@+BaC7F7V1P)SlT4*R@^!`#}- zU#C0}J2NpIy#=31LPTn!nnC>yJuN z_Xqhr2T_tyFrIhsIejYcnGguHt`R-a^+4|LPp9-YQ@zcF z9}wRnv{lsw?;S}BEHL-W%9WpVArj78Ab%GZ?}s!I>k;4)E#8Pp-0SzImSkQY)9Vw} zj(!C+e-I{@U5#ioBq8^u+0zFs3*L(QjMPY=>!ssB2!o=-NT+-uz_2li{Lo2Y@SboZ z1}W=MxfHw=c((060@4RkEf0be&QPf<=Lqpz1%12J)H=!D;uDVVZAtkp?b)uL8C5TW zTUANS*EKNbOpr(i6~30Tyg3dJ$-$=I+@7Jtu6N|i%F+iZ=^Rxm-;@|(!1Oz9yG7$i ze;-KwRNJo%x1j9_LH6HE3OV z+>v4Fi&-uE7{WtYCjX!{*kA3ww%WX!rm4{VT5GWajEo-aa3IV*J!9Xz(TAXbo)~-E zp}ag=C>SRTVTs%dwNR7CO=XWv}hw1iIJg zZU&U=(BCb8YI+S*oYRGQz<3T9v@b;S9}TGaq|*2&Chr$3(R*yjw=hq@EmHDMy=~NS z$%ZE=Zng{W)+z1T#FlNcee0o(6dK0yp)-aM3Cy?Wf=ssv4d=bjuc*kco7@0mOYdA# zji9HGPcTG}*k*~hCJ{zHB2{r*a5Fqqm^_)9E&$gS*0Vw1fKMkx+!t-XgWdz{_OkMN zJ}Xj}Rj|PbtS{+dV1^8Xa58p)d7$BYX%x3ORpy|soQL}^ zT}ftXFkjFzQyqHMk9T}Lkj_085^|fwME08oya0a~Dg206kvJAyYY3&$adi`MoJ+~L zLczDs>nr*uQOaZW(pv<$Fl=PrSevArE5km~m`O6X(eQXwDmHb{5D#!YRrwjkP-P^H zt$|^Mj8RGRi0cFdK{B}ED)LZzGmO>c@9WGi^&}<4g?QAaH>d&zrZl*_%*we%!w0$> z#4816(KZ+xPo2LXNK%zPb5ogP)4r#mm@gHHbu@Ycr?jb?$guO@S+zEqB?S6ZiDt$? ztGa_Z$^-KuS^9D7u@g0le4B+c22$598!NA1B3=A6tr~692abNzAHwC>P%k)H1QTgR zq&t(v$+xT6BqhL@SbR~EdJMKNiv}WS+%l-@v$V{BBf&VwNBNbZ^B!8AzK>GV180>% zo#R7EsqFEhSi8rZ_8X)sj? zZdV(~uQkVJl3jfVdTio5CnFL9dZX0Ts-^j((OFA2=OBAA-~1;cSx`xnt)?PI=(wX` z1zehlOFDW-IIPLp;0k@A1eR|o5soniD1;I}G@1G<{n{(*F$8lBhD>F7={l<8`;>M-9V#fdw{7dAnN zPnlDj5^qO1CCjI3SHRAX^T*F&kX4fP&*fmqG9=_jMGBpn_q;%WKYj0uCz*zyqJ)k7 z=@FsZOd^D%st||!M6_wR*%!K|-6HQ$h=O4YV~7XIGbsWFwkBY4pv|kEs42s5w{l98{B9b* zJSjulOn7zKtUe{t-Nt6#w#-Ah6WYuHeO_x_-d>0ot*tVG7*zEV7UoBmEMlN$4=5=y z2bb2U3l1nSsl+PYOFY$*09)i|))Y z+6=2vo;l(4=V9RNF}&}5JFIIN;Ve$8!i0(R4Gc8mOG~mPqV9YSI+~AaTtF?El7z;H z@L}mYvJhm4X`_{6i8Jj(j8d8xKjUEvcKUaf+Z_fheDbZk+2Rcm9Fq=%aL%)`C( zvg=~#!nK3}Jc{)P(7U_4S2*v#EP=Kd9t`sZ*)*8ECN9DQcv9HCZ!r8%I^(j(wOo>q zEoi*!Lip=3xh-iFd;cQlIldCUEV)K+{z|>Q1#k&V=J;O<3O|7s#97VPY)caV=1q7( zSzf7VUi`Fw0a8}rhbOa}7C^_}f60LJfB=sv80?R~pwRLwVND~l`o|yKqw5Qt|1J5y zX_40)(ErncdF4|v&Ckuvp(n4~eGwHEZI7c;NiAC`u~q>6Cw*p##hZaZ#(PpKB57P| z(u+n6U_wA3q51zldj_;s#Q_qO35W75|Ai!h%!!PbEv&{^7{y<=vHf}*nh8~}G|2yb z#$A93_LD)Ea3l{CsRN)p>vke0QS!z>rcQhKhAx(K>9OvHR)aw7GhKP z#sI=?zyPV8Ta#j4&OM&n-`vb$E-Na69n=AoL)|&GirW@`vkU)|CyM4JLy_&2c`A}A z*ZzTog9A@XOIv!ixTqc*8@tvWj9O4ql1q2g&8;W*I`FkHV2EjzbE+mNbjY$kXYm@A ze43g#k55lF`;#Q8Jf7Nc*O!-5e%Y{NfCx39XipCBy#3DtGf4nZ2{k5oe2_k}Oh26r zZg(cW+l-e-sF$Zx&#Zv(IEAi$E|)8>4&CvM$A{IIS;3sm`VeN~-$}j(WZ=41;P&xi zpvSztBdB3PLF0a_l?Hu4mjq@BT~X1X_=kmR6Pxu;h~oyw)0LpGFhM>(Z|alo2?cBL>6rSVGyMfKnmGtJU>6 zsG*?&Gl5noAU{8!6nrL?pE;}qJo`eS^K8kgO=zx6s}_QSg)xWh_xgD)p<17>Z{l+T z5->>b$e%Qgx|5B}WudV>_yp)|d&&1E>Nc(&S=X!Hwzc!c(79WrI!s``+ zV0lRiJY~eEaCQ|q#eZW-?a^N58nC|6NI9|TU%8|9aEUWm9v|UtlJTc=-V3sT);;RS z=qsX)2=(su(Okj_$qNYS?%`59&tEVajUu8nAb?27C5*5>om1M*jn=Ie4jfSW<5fSe=>d>gS;4FMVWsKKJw# ziV89AD!)4WkXjz|GvsES7Vk7bP+;h>Y~$?2O;kR0<%Q(=X5_t?*-*I{+#Vn32#V}1 zPi^-6(h|1GXzIi>&ZYHSyE+7GZ7G*YQlgI-#s()x>Y$KtRt0>0qurgB1SP=_;Z=CSgtTK}X?~|UOu(gAbSDuC8LHo6Jk*NR%$Grs}|c2R>ek%?Ozd}e|X`r zPonK&&;Nb3*`(Ce@PL5GBBwxYpq`i*jC2O~+v`J8G(X%Gbn4#{FsZK*LIp=W zDj85fHHx}~rBoSCdfI{MbA###%_qkb%_j#Y!+&*m<^amN6Ae2&5eOMUW{KD5L^f7d z6%Dfz!EAM>&QE^Qlinr2*&b|fUTGtH;L6_Mi=kfXy4lK@#a}*8$1~$FSkhJv|0a`Y zW_X!fX&>J|^3Ghc*>tp=FebYpd8mMOXB|;a9+@n z*FYd7{Ez==KcekvuZCX1s=D+qL;wHs$r5gbVz^vyn5H;g0D^o?tk-?1;r|kNzev`u zvd4Al8mvw$xBnV}G&q~vPig$5zc}7(jKCb3oN&#i{kg|Q;2!ljybW3Y{B&*j)!sM$ zQg!^Z|Co{i`_D0W^um7|_ct%b*U0A1iox=qxyXE-i#k+MUzdJ^tN!U8v>E~#aMkPD0>`&7McZUQ`lY$ zqq=gX)%bl5_036VN8H1$%a>|2=Gmvx(Q>}LCU#ct;t}BV=((KK3KzGbL7*ve-TKDr(n7j)* zmzNjxb?;bnZdEf_`@*s-fV#-v4e^VDysmkJ|Bc8&Qm7tQXz?;RaG{JLK{&|yTi<BqQVE-8>5H-9z9Sa`n*SV8xApIn;)5Q*wcnFkJ;f{-?6L zd7M5ao{=!chv~|%#vc}gTaunecIO^)$y+`U1iV(=c!43yvN~UeuRazQnLHCJX6&%V zuOm$Rkt)euE9u+}Cbe}Z7rRD&;IbZ~sc&CeY8K;Swz>*vQi(z(E< z57R@-a8hvQ~bp_**ueJy0o7Wwrl^U~529;>TE@$V1 zN{2*5+QPuEwgQdzh6iJuM^2>LgeFrs*x_Sk{R-D#C*)LA0$N&WjI43?Rv;j@ZLUsE zrcY(jz^3yU*Dp6Gz{~rl9BO@If4`7kUNhE>Z|`t0b!TA-Jt}W{_E(1vNTr_LQi>EwH%|+}be&$6ekOhs3oR?) zSA$dsr=LG0c-@?kpz_27HuFXsF}zuhUS5)VS4*8+lqKTJLs<4W%e(v69o4G~MHY16 z@$0;J-FN+L*dI;Wr7vI2kKbu%gcz&$kz|%R+tU;zu;-bldnLt$=o!yMw-F)Wv5v(O zyjt%yI&f;C%Ahb&nTVrU|+w9f&sK-07R1{uNg+8vnW7 zA(d6<%oldVvA*_r&0UxLVyK%poZQ zXsKNf*d5pmZbz%LDV2 z`+<<9&YU7GX5n^MM?LqzKOq+^QDT3=hspWJe z_h`m%$1IiCp4RF;du+`BrTlEiQxD9GQ^}GHW*l2w&G+i{^k0TC!(cx6&=A6MXiKwp z0yT*dKWU@Pk}&B>QJ4>f&>SwVJJvTHeher6rv0-qczfSYl!_xM6TF-$4r|T`xw;#3 zQpX{5S7dp9-5RWKvZT^Uk5H>N)|v(-p5$pK&X@jh9W zUGA@5-@4hgwc}HDhsC2wivR(G>_6ly`I+hD*q1oR&1)=R*T-4)c{4t8)}ZS?GE;r6 zWOV)Eds8D-(Pl94fSiY^f&N}hXm5>)AH_w3?=4nu0`J+~Th2v-(k_tsX~DR9ei1`% zOt`LeeOZ4xpb3e4*VYMzXPCLml^^vU)Z&pC2QM)oMd6gw@AMj>i)Cc;*8S0RL%tg_ z!0c{L881F-->Jp5rnNzuqyJ%-C(4A9#x~5udVRw~^`2@KqWC!kM!-ctK*1fPdG-Zo zN_+ZPmj`M6#&_6*)Uw^*p!sa$NrL_vU<~pzzPagLdRYnYIvwlD?TI%|W8>uZ$lTJV z!RVN9s`S92Lu_+#Kp}i-LN{=MG7wFzh!tlk^3DBJYei&iG!}PnLTGYm9`te1pYxOe zb5f)D`?Nvm^d^Nxi#tfGiz}#j-I33)Z%lg~Gi-H6G$)=1yDmBOABvyvQ*+Ugi$B|~ zW6r)jdL$+XiD;|&Cm94Vecl}V9-hRq*iifnDObp@OMO7361PnkJv~D=>Sp?5%O`WJ z*#eee5_^6-n7S=z1HUsR>9`*bCr`J|T!J(s~n1^{T`;#WyL&;Y;VJD#9IRqx4He>%ObD z$4ggZh^o#MnM;J~LIf8PEAy856)GPHYkiiFVGcZPKIZ=GZWwwnowm9U!SKlL zL}=5)6^D3d5i`6(dX>x!oMBr&3{ASD1NU`1>o)?m+8jKl?dixruMe+3I|yBdcC&h? zjGijIG(mE^e~uS|5AGp5<9|&FP1M%aUu)Zd3=+R{ci#C+r#Ft)5)3Z1;(%5=!skLS zZHa2B-e$W>kdPIx4t%{k4gY!f#{O=MSi5A^`Yo-Xxe0g7?mdo~MxZ1}F@BgI5)hcRUud-!}s=zOVq2RvggD)_ zsL+{dwc9AnR|aiC`NjsmK_Tn9Nb5mxmO5|QBYx?$)62kv+oMOSq{zE&S?p_;{1&d8~5J;{Nf z=wM@@0P;}Z>{L1F6}^=jf#yk^th3tWPw&~0I(!`T=D@DWS*?I&+*4lK<3ZG+iy!g$ z@DNZ)XkISIUYv(XjZ6<7pPXFkNuaxO_^u>gsDM-Hg*|V>R1uTutx9U7(^|)K6$kk)!S?4#w7MP+W{K zNdR^9SdGZQd9rPBc7yQv(2`kODGhEk`#o9v3Cm|*wPgoI zv_X9|v8)bDCW|k;_IDC{i2le}aM_i!k!6_$M(_qEjh+nbhRoxL!5@pPL;QqEbK+w9 zQnB^BNNYiI*eddHYTv#kr(F)z`()o*4_O|>QhS{zj3dz#QHoN?{uxHTUPVZcNlefo z^0uP35+pp0kHRjiAy3>d1sZ#(M>_W2d;;I$l&z=_PHwIateJITVwllYT#jnD?D~cI z9^H#NWIwgHj~^()sTGd?D_f$*BPsYkbpfABwErV z@_NP3qL{kKg_}^-y}G7t_`zcT!mF3jJtAmn4Wh2)&RP%+?4k*?a46Oy%2+9evL0y3 zB{KWbseJd8sXjB2QMgyPfR_}eCH!WS-Ci>sFV?c7D7%*YqiX1PiMi~1e`L1_xv)&9wI9=>)-p9Rj_*-F(xD zVupRh<#+HSu%xL>NLi}cqvqNW!~G+*OWlBewVb?MU~(0w9isS_6l~Yia>ZB?bHtjg z%$w4xd3+wqX(c9yl!g6JcgzlBr<}Pt4CG+r1=JOW(j{y`;VZ_v3}iwv?Do?&xT>dYzVOhw?nE z4E57qfa++qLkTbxQ~zR=LUpv%m;g-Fql6nlR#`BQcD+OOg+MwHPD<(vZdZY{ZG?_c z!Kr<0`M$ss?N(#eZit-f9-omr9CsOYm&9}4zE+e`PEM4I6X)2vRqjqy!=krVX~8ei z@gp4zIeHA(o|#0Cxd^@914;CZh#v(3!G4AzONw}KY6|0^d^7vmgvbaq z3v)ZILXP?Dqr2T_dlErdnY_YEB88v6e8C~XM_o4&#tN7tjvXEn;he>{84l)-LL+Dt zvgJjRr4nuz4VNUV;etIU^X=YZz+R4=?f=p5K9H_#m(~rT87H6Zc2>jbFhd<#E5!h} zaV{)qSvj3xn!+-s?n`+Mb7o5kt=}UEqz)kk_X8neRlW54Jk;GM%IZd>h$WOho%Mz5@$2N)7%v`g{pskeBs0aH+ zRF$k&7`BEwgW@BlJC~LNE2xvnC;Fp^<2W4*`+c=e?fOHu-JP@&ezH%lJS`VQ$94D{ zEp0y>&w_f9$WsKBowsHh1mD3tJMEVI}X)jLW`;ngU{t&vu@)=~9bi zg+gI8zB^~WQ9yigK;f0$$6JT$bg24+nkgzMqXge$_L9ir>{%3CFG`Td=k{zEHp-3c zZ2b(v#(+MAOKN`Yd{e{G!$b!2+73d+;WEJRjU()JJrrPTfO zMt0t?9GYtguG~1*Y0ws*930mB2!F_E$?Mq-!xh##S_-}3(qafN$v?~D*3A$wngXaq zo-t2!>5Jp#3bTZm<_G3$w#~%ypS;|kGek$AE&Wi5Lc@lW{+~5gqW`(j%))-9o-5)Q>CX^XTBRyt+&s{l|5~Q_3HEOi)lb`N#aH5(1ZTFu_s6-A>$J0ff3DP;nlw+&b zJ4kyg%^z){=!ynuoQMsA+9bA{mv9U-?`ap^oU${aAtcI{`f5Bn^iv;>x=YIH4+hxH z-*&|fk(JE-9L|esa`}b5W{w=EBSYO@$SPDKu3n+*y?uEwQw%g&sa;5=+-4_1S2`OE zS*jd|3Et~rrR7tKgG~>@Y2MX!+xB}P!Sbe_6(T_fN5oCKhtDvRlk=vedS;`XYcv(# zr7kZhsv?Z-NKY>u135sy`oy0k@6folc)!sd8$GY}oj_vUmbN8!bgRUow{hpb+U@S^ zt44ez=LNLg(cw@#o*n1#JS_Ne-^iCg6gIqW?CXm&ie-GB{FHu>Yv(``VavD z0o1~af}W0&3`?Y}+oP%3<6^!`uekb~5qK)Aut73~E54kmbi9x=sgNFqUM7VcsBx-! z8P5w|Hr<>qPXYPXl}%YV^!;Cv+FyVU{uy^>7_+W<6Ut%8py(m`F>^OrmpcQVrNjcwQ+07?`o^}WNT=`O=-nGNE1EL z!kAb*Qt9UrnIP{8bp0YCz_i?lV^h5tzIx~omph*#x3=7ClTyFZalK2(tlM<%)lL(! z$UChGtGrlWoF~-w87IS>!|@rVWZEB*jS{7FI2>ZXa`gIWyiO6_DYWK;;dx87GpR4L z>g|I>C|Q2kNca~wHypTk4Ds}+ZJL~APu%qMdf_nPXa|UWUDN5x!h?bfiK|J4%*HD@ z=C7e}-d^avgl4gwa?fSf?ROFHc>UMA6B^I$%T~1CtNO@1Z_=BG{FFp5YGbup z>CTDd7S}U{>=uYFo}chQ4D5>8OyAV|yo)Vdf8B=8#k(<7jQ8e4%5RsC9h$8tQ+wbI>ysy%9B748+Ts6Y&rWb4wzbv!* zwEsM+m5gcJKMWto3AHkx+uC&_UOQU76(U*OHBL=wb)022YUKW~;m-18@yOD+t`{*D ztAI8t7}WO~BEs(iAC?+V)VqQ|AqGj_w%coomE7AD z9}34=dZSAcR#w*Qj$1wOtSOyMnQR8zFlS4oac&j^KCZ9NS(y(mVVk^S-O+j&V3N}2haVQA7-Yf zy1J^Xy059Z?l3tSQCKKUC;$KeSaC6-F8~0*mH+^No)BOkcWOx3wgCX3TFe9m<-`RA z@#XAojLj^K006|o5|hE@5*9xVoZo*B3H%i5C}8972qabsh>{;r6i6H>Cm;sc8yw!~ zZ^17FG8|5$)Kxbz=dW5t?GLrUI+**dA_5eP@*EgxAPB4`tEt#+Z&6;lQZ9{`x43XCp+1j#ihD9E>CHpH74YZ7O;SluW4 zUgvx7UZ^SnpB@BRwQw0spe#XYItfBJARj8eT>y5qZny=aG9n=?p{H?p6XObFpE%>o zfTN6IBYbx@KxaaV6ag9l5@y)+4>iqvxFG~R3!d}=Q8pw!7iFk~C|io|Yeoi!!bV`d z>3pB!p4Wyn@gHeYq$>T4HB!*$!^n_Rsh{7+PaoEQiY1S{1@rt6qv-Cm-I+#TtXZlZ z(Z#q<_!Kh65W}6xJ4zAXS)^th=DB5(I(h?}WhActb)Jeb$YK1dH*!$zlX39yk%N#o z;*Te6kph-4=WF-W>{lH)pa%ihg zao`SBAOzlbk4U`j+3UGVNoHI zs^`T=$_Iel0A|?$AP@se#m5N+gna$mG0G?L&a6%VW& zaQh7bB>+d4wFm&bOHU3u+7I~~Xa*o!C#o&*jW5pyf>;-wD`bBsI2|BA0vw?riWtsR zP$WL|;HO-{vsgS7pddjzIl|tchgcAGSgXMB9Hb&34v<;?4nC_1&;!gF=+zLg9Qgz4 z8&HuhVpY(&;HXVdI-EQIfK4%1jFF(44X#FjHL&C!r3?8+jCO!^-)CKl7bIL!z^~Zh z;ZuTYxd-HUisY2IiIGUTbGhMiMn#m0L?t-0LCpd2x!O5AdDW&+X~FeEExEvx@}{3S zpxZvRp=$Y62(#wV=A3^6pENi)M`sX$Ht@6SqNA%ury&Jb2&L#zG>|c%F?gcuNr6|T zN(yK0;?M)Gwp&m5ksEWpl~^9fL&+H`wZJ6j;$-kza9Jv09-! zL)M0?jA-b4-rm0Sd;#;sXvg(|^TB$@=H-_oMn}|y$N^!|BhlmBgviOXji8fC!KXx& z4z=zT)2FoKuFhBxYnAd8@+2c8E2Q10Y7mMhOQuz!anU?0S^2hN63;M{u_GvfFD|w$ z#+(l~&Of=^ zK8P!bAt(W=0Y#ev2_*{E3new&0`)WMG731#Kq9#Wi$snDhJ;4qQDOx}6#4eosKnQ= zi$6hsh9uHb!pqB{0Efc|2``GV3p7b#D0h{l6wxVuQ3_XzE_N)9ET$}7DitZ+D^V`V zQcC6 z+N|3ky^vqYUtyo5pJHG`!5jk&1HJ^v1kej=^#})-!eYVTp(92fh){@lL^enAV5XxF zpxdxm)8o?1GwP-6q%x&&F_5IYrx>Ryr>-&gq)m=ajohW*ru6K=?NRI{?ln;9LW@FY z^?66EJ*GU4T|Zuz?!l|ZQ?*gmP-9Vnmlr7$C}WkWmub_|X(Dv!?)z7Ou9xGKO_#^0 z^47}NL;hIQowmN7n_EdT(lGOwkG9;mX&9@RJ&S4!;vRVOedPuZ?;#8sh0BCn$IiqK zijIoTlL?jylX=bnJD|Lwds2Qcv{HOu$;qIm$ixO6F1=k_A4U_j9|r(2s1nX6d>qIaQ@(UcPdEZEj8Ae0mMf zOVe}i!SNy26WBAtv*q>cYwio>OV-2jv%@Ra%K#8IkTR$vh(1sNunQO*T`dNc2#x{O zAcd*)#CP2FIx9#}0vI_h0(c>*fkr{E%^)qr zmg2kdCYvmqr9CZ##K*B)=LB0-4CGFC*)N2~JJzdp&Mp33y$&l(L?kAoj z^EL`*C{5WGkIeTHH=x3s!=00?Cu{l2{nKvyt8Erp3rR9@jO}V;OJg1dE` z)LQyX=S)B`-n789`4s82!BjfK1x6T#m8X$6=KGfd8DneX%1!|}@>t_0!_zTLWH9Jb z;aJnuBBe6_l!&BI-S~R*0 ztW}~?pn4^)B}zZn-dQc)+wpq5p8{urW5S!`QSm(NlC8IOfgh$4U;3@Vgd6jx!xh2^f zz7ET%Y^>Z}A8D`ifq#25WiYV+(uu-QSPlTCW^2y?U}FJ*KR~bscsVQdh%wGZZQ8#t zi~PWubvZjNkRcgG1|a_k5QvYv3-BZI%B1!7t5Nt3NL6O0<*P!jA?I?cI&rU?K996a z`!pE9JX|O1=FU#<+t84WXsq!$@I)N*_H1FG@S3iK)QnTnQkz#t!21j@K)oF;JL?eK52J`AM&)j~^8Lr43czCT2{e%mt;(8L?*IMd>P)+%}{I9p?*)&zv>^ZZ-5e4f%(`#x~L#;?7X@B;wZs7Ip(1 zVNjQRCCu^!lqj%i5a!riBd$+p&b!8N(M50#(CN3OXn%00^WS<&~#y(&F!8PiAS zI|YD<`Tjg6jv;Q&ofx+Q#e6~jI$(fMEMNHX0g?VV{In%}{mYZR=`ub+#sd6t$W>jM z{7*0L6o63m+D~1!>VK=|>*~+`t8+l4gYO`o?!&DW+HK*I$uwQo4ckj~7EvK%l{y{X zQ6WQy-JO2GlO4Qu#x{>9Z18^#EnV>20O)dG1X@l=IFpwPGz+S&yQ#e0-Y3%lFj#+F z%B_`sR&dzz_& zU?L~j7K_W(HvLtN|4%RS0W}c$Y0xYvx)yJIu~}NIF{w;XU1IlnYqf*HVi`g3dV6~d zj%~5dI}!U^ur0Kc8r70=O3`q3ejbY;cD0W`C_9`FHV2!*Fm%)Im}a?F@NXGz;f*At zGr63C?vjd%3h8PVw?P0HyoK{-)dNhnx^ja9RjR+8ZQFv3j)0Dy;#Pwv06L?h<27py zVc4(LbFm)BkIp*?4sMlf`!uDbd7ZYf0r-l*zJgX-2%C`RU1ZvLG7A(1Ddp+u8EF|$ zjd=m~$DDtJzzQjdwYyk;Fh2_u6FNbJ6+H%}ce_~+SoeA%9&S1t3Nko+r(~keWdLB-c0eSn&^Gv2`tD14k@jG z!~J~|;;Bg&*z;K*-lyxb_h2Uen5<(wUe({@^$E-`opNC%jDIYHeVS%eJ^)O&wzwm% zM8|;1Km@Lv4bkd6yVgMN-TNXjJx>bwq8uL?3^o?!eM+Qn^}-KW9o3Q}CHnC0hna}@ zC!_-_5K@_p(9lo_sVpuGmlZqF!otGb)4@2Rhhv@h@SYHOmu5Vy-@|Cd8^pRqcbYaS zO*cO;7qo}=;9Y{1DEIL@cB^{BE0l)(a0TgL|0_P(dBhw&mZNv2FGt!AAQ-B zLY^mdQj>ktkn=qESnv5tp-^FAdD|Gi?V z_i7I3)pKhJPvS+}MB5>R&R;D0BHTHhH=*D{@t1w>kSHya?QULBGg>^A zS}kAc)LZQZ`<9(=x{Wfbbohrm#rBJiw5AOYxTJ0_pL|bp3S44(h@OxN12+0k6Dug&znO4hjA9t`h_mSeCw*ws5*@w zhsQ26Jx(8KrxDGM^y+w=vT9YSK_+VOdu+1`Z4^MTj6xN!F^}gC3FZPxp%Z0Qa}qnf z(;-^yV^RYsaZ#F3T-h>{al;Wk=^Ifvo~ade5fss)i zXfK~OGQEn!8PX44&WQI4_7KM8j2{+_q0MeY(sc0CWwEbz%3ogRGg|zw6r6jm?~Vwt z?j#y_uJ70U67S)9Iy^m>ATljksx%KgXSPMV_M{7Jv|IYp&Q@KXZVolz^ai4FQkcx* z<52cRz~@J|hJXIFo`HEz=!8X7&3J>tO=U&p|8cjl8Jo}M@fKRB((WzDQdxSv8gVJH z#C0;{_Q?jfl?J-4CShFF(?Smf%u6jS9w!lJY|_LMWG_Uk)A-oCcI8E+x#eWh`5glf z&!$c|#GnfBUq0w8Cz?3*m+s&@Lem>XI8;0Ps`zprc@-2xj3Vz>5I>^oLP|#2t6gf{ z`P7ju81T8mZj2l`i|N_GIhM8`?v8%0e6ezHZ{de_`Iou6#L$q_2GOxipZ3o0!@%%Tc(oA^X7X;B5+&0K@I&cft_E3uW`$Azmrf!3YRh1N(pyXxcdrX|4&XQY1s=m(t?iF!uDY$osf*$X1-bfN zgfGh@=Ub!3%&d?4D_m6Zb|#ArTcalHZ9@U89M?IJ;tzMPd4`>bY+7$N3yXgJP!Q?B z!`-?Y(|CD1hM%utQlf3fGb5HHcL^7w8>W04{z*4?WIt;(OU$hAYgFe~&w2Y7oq_zS zj{C93dJ$WufP>Ejd%JsvUqS#ND*^EBGs{ z{ejFL?cD>n$rqJA+)+L)ya4dhxc&{4nD~zpX{fgkhbxZUSd#0+8`N{*;ojw9f}#)^4lZ7Nbh3(3g(j-6NLj9&?Fdqg{68_Tu*eA3on=IkH;{ zhW_HxGzw zisu=O#eBF}pW%e0u_I}PoXXcN1l3N3i(F1CeEn2C=jBxMX-p3QxVTo}fkSS3Wa~5g z*A$X3u5>!Ok*8m)Un3$Gbk<*FV>!q&u|PFsUs7&gQrd*eC?IdkyzX1p`^GXkVRM`= zHuw)F6Om9*0&Tpn(^Hr&KFtJpGJ>S%Om1{0;nDU=;;vP($8g0I;>L8LuOo(fcvIKY zYDSNl*MkW@nk}r9!wa86tyd~6r*)`ov%bHA;l93Yt3LJqI77C&R*oP~;PqXE-#C1X z;jc@RhqLalSzm>*e8c(_l^vyY$Q$T&sgUBw?W*3J-m>}`%SBIqV&7Gw)i!~Qx!6GdPR6%sByHE1K=DE>HWBjbE%U z@llAl-0OE7$zqyHNqap(e4)1>P{tkXtY7DbJ8=Vcz#EQlc5`)DrlniHVV@h(gn-@4 zNPg6KVKAd~ZoOo}9kw4|qI0m&8TllINoCR6fV!zK1Vk#W;~RHgA(*f|0>1v#rGNy4 z0W%upIiwu$%G|8oa_F+5wXPi=vLD>Fz6g+gRxYg3@$zcygEvkZ*}LwHJ;1sr69Pjm zBAfTJs*_i>!hSTk2ybxMZG*2{h1u%6#C=XwsLOfg@u0@Vh4b(_T)D9g)=5hUIqq$P z8EvBxGasR77~RYJoi|9lsQ2?CXe{Z!F;^!3#N2xg=VaY2DJI;adfZOT0?B4XM+sZR zJ2E5CD~Xh7hS9=(5U|HF&V)NP{0cid;~CTDNvFlb<%C;?{C(P2s{z{Xr$bMsD*W2B9JPEc7cR`BK7QI>1S9WLY$3ImZ)+A%fkXoUrx8_Fpi ztf-82-e?M<3}$2l?cRQNvWxy2$?8qIi@|Glu{1{E6Xv_#;xukor^BBteH%L=Sv?No z4!s509!yLbY=QpS`4}vjtOnKYrwJ+a-_2xT3(c!uKbECwX@;t=g+F{^NTz)WFF&;} zkxT94Ki`k*rDgYA5VnUGUZkTT`@U*awdpY+?aBC6ZXN{Nt4tn!IPLnnd*zygK zyE(CIBU6oSal?bl;4FoyBzH_ac*1ihMCGTLp>OW%<8R&d=A1r=FG<>t%~+KlpW`KR zkWFRgTD`d#^X<-7m!C6*(~YOLwOl(OS|-q0uAs5$vUV|fgMAtYuMbb^S;a_UHA`_^ z3mX+1sGpDDDdn=g8U$Q;A=8V8XiIKriw1UJ)ol%Jj3YwR^V54N6Vikc+!(C4gzd2? z(5s4pp5hk@Y>QmfU+}(yh+cT1SDK6Fxw&G&hSUI0m-3#9R3n@kcc`tP2bZk^Lt_y?9234~kjg%mI zad^m27l9tB+KP_%wX(n7BV%U5;!Er-KcfxwX7s z_u>6SrRv*vwR7xn3n&O0l?e``@Pf z1ggZh6!?OwSpy@!qGo4AkLZq&zVA!eV>W{8M z#B8u0XZ6DfmW4qi>^qB3zONQ9lj zzTRr~omeJh4X)diDdTyZ8bVVra5^jg>!>J9b^U%6IK9iJOSSD8tDNmdnP-y^!0=wF zp?wmt&kJi{&}c9G)pGr=xw+?hy|6;mqv^Z&Rt~UGr!*3vi#`00=DinXutvlrQ_uP7G_3MPHBP5kG0J)z7D_FB}@1 zZ4>$Q#x|K@Fax>_EsH(+q`05l*?gXF`M-sp*j5rWeXKb9;RbAN67N;9N}O%m4ABM_ zx1x&i2mPH<*q-TuPx-9Z>`edqxF&xWPr79ZHI&?mRGd!PdKw3ap!BOPzqh=Xn@n#i z%MCe-B`)35U@@tN9Bon(ZO01|p63OBrR!D4+ij)mae0GnURHGinJnh- z)5xKS>_J-)JWpr{o;Sj^&OGhzQZ+2|#?=g9;YCDH1<&<*(q{_q=_(<`38F8IDqqbuAN8Jm8b9)|F6#x`>A zP$FZtPeY$1Ma1O=T}1_82Qadzb^D1r7~dYg`S^;(M|P_h&@`{Rs+>!W)!1O}pDx-n zv#j+;DP-f&S@sh}Ir|V0M5`+bSuY%+cr)&e_asb{g)wji10!9s+8@D$g=iADvtT&w zXGh*~-!j}Se*ziY0PbVF-T7hUdUXjQcmb1z?f2~X1<-q9Lv%UL9(&#*54$Uxh-JRX z^&k_rs;wB1=V5TWdv@yi^r7$>%SK7r)C2DU7S6YWk|tHja}W9<%r3vD>|SVMmDLrT zau;uNBkaBt-ndBn`G)}Sqx_Yq65eHFRN^&eYIbY&KNUB}G`@xqA!nv5gvAi6*a|%? zN`ko8=bU$4M4PL=rBv200t&sQ&H_Tq8Ha)wqnV^9v4O;BMuPQ#z=lnAC&0F2-l%Ys zW_WmY2FZbZGA$kmV4)llvFqr5oZ}L0j8ge|ZdGr`vV7bnpOwoxKUcQ;Pv(gljHWU7 z*9GI;8Dg;86H`)BMjDKy&`%H(AL&g`h`LN6>cHpZTFfvBeYr=Txi=Vy-n`iCd3bTy zN86Rp6T$GmN#ad#_Y-1c&fo|f5*2296_`=!K|_C|?%J4KYyZN; zYbOn4h~^z;{jkZZmXYsE%+1<`Em6dI*K77#?Bb|LbeM@mH(DVL5@))`LK>@AhTXXF zeD?I{LNl45074<5!&^cMkM_+Z;Lr{^vkWB3qW|vt_vLi37Fd?Yz?j+0kT~C~1;7}@ zHLGdm8u7-+McFLj=?>SH7pyN<%4CH0@G>;%QFep}d!S)_U!ClIxb(YcKwY*IMHO?F ztM^y4Mwkvm9^=M%jrjyn$fTXga3>4D#`f97^bOF6&VoK}N12#4e(M0|_HNUOU(dsZ zrCH**t9pd7JhCxmI$Ss1o&w!|7q(6)bn?s|W~10vK6^)+-v7x0k^~_hXAii{YTe_d zmw@2@jva~3iGT)oev6Q74ed$xuR^YA4Bzy7+_J@N5C^IbrulZ}oR0KE1Y3*G5&jDO zmzm^nro|X)T_K+bSR~nH_Ci_97>H`8<*|*_K)y0Bb8PS1E{R{0~ ziQJ5z#AzmvSdGB+3tSzYGmo(A-)~4zqP%hK7)d3H4$!62a|Sf2+@|~lHP$+>l38j` z7Wz0T=dx7q1XqyXU|XBsR2JGK15T{JwKf5QD|6xJ1VmiyB^+O*ls%hM#m5?^(%>S~ zEFraoiw>lmB(ax;w&dcCEptO^td{K zxO<6NEi%9~Yh$w%>T|ZRVmV|xW62EkYem>isV3K>a>kU!nht`dPm(rQWzJV8Krqy74@@kE@1l7Z&64py zdt=J_)(wG@d6#0K9jKAk++z?+)Vw`;f!aZg*E{443r?7-tVGEM^cny8BEagWLAn5T zliWcg`mlLO!jA;U-ih&pyqVfCS6o0JEL_*&%^tN7V$PZ)fEKG_3w#}}^Zs3r4T-v^ zs`6*F&f6o(n6@nxr&S?$g@m#=swDwI0G-2sm?5WZmku)f=Yqp2JfM zRg*DBlEGnz9#iJMNHQlArXr5yaIzBN!eTYxaLh_rv3edXE4GDzXmJGs8*iAOZ^(Iv z>n)08$3?3KY_Q~3F~rtj0gUU(td(I_?W#XUC6&pusw&B%F9DO~^Tvi93~T)rqZHwDd^Ma>dA~)_^3rYGmutJpWpuu^EpJhX| zhYHAA326L^U|@z}l4lRe#Si=Xt+@G5n|{eIo1<<%Uss|Ns$3^65uL~~!*De`x>+pU zSXR?+!J@g|7)YsIF|gJ%Lhg-lp+89$<*`l6lvq)mOIWTEE;7paq+>ti71fNoZ0~f8 zIg|3mjf9*PV@26q4wnT@lW2uh+#`+GnV2m^cX*}xF6ND>(j9fkYuE5GkcDh!XUlXy zYeehnj{vO@35=^@UhK!1>n61^ed2vb0b)7p>O6qi_$Ze4epVEKt37nt5KyO9-y zd^tW&+mp>29%1tZq`f?=Q$ePHtqE3?Hgo}{VdeXFHYVZKbQ-NuJLSB2wLu4^*r$Jr zPZbD_6#nJRvU6TnKIcBt7(vzBX>XAgSf)PPSp=adIZkq17Ri-tg*1q953lt#57TF0 zk?=@L^Obn!eGbN)w5S#Om<#ZJemobK$VB?4q4|$KPagaW4m*TDKhsF~Bf3cLw~Q6n zxiQ=Hl~#WCTO(d#%CL(!ES=8P$yaJTv}@aq4Fq1BnIbpO$m6;hG3Uyn8+Mzl0 zlv+(jMS<}64wE=160cx1gJ_XK$2JO#tHzlKDgV4UhdG7(dAbj>6nWX(PgG|CV1K)J zi(5QRpG)T256jANZ)Y!*d4Eu&1~=g)wQ_rR058^d0Mx$GBp-+zeBJBL=^oZ?J=~=p zx2J;!owkXqo+XIQ+WQl2DL_Ca5a$^H=<{R{2lJ?Pwx!O_{32dg%(=_h6 z{$`Ac-ZJGPjqV-cb$Sj#qj~xdp(hi#O2w(OiT1UnRvu(#cS$REJlpC_HUE?tAx)t0P>VNYD{Z3 zZC7}wexPlVMj_1&a>ih3>VxvKEabWWrYAF=7JV?IcEI}$PeNjRYf;6b`dw_gQr%^} zeyxZ2_I+FhgvdI2;VXhTbMbTYE^2mnjJG$Cj)c0;c&;|ot&}Yui!7zrx#!73wTNqe z#q*cVe2W!#eQ6CxMHgI#+o|7c%D_ABLa0s%y zwm>$t9w?RKOdCX{J~3okGz|*O%%&4`!b9kXG|>vrmrpU%bh~c1jm5Cl6cNo5-gP+i z@8?K`6D-_d6|v;3BY{JGMIR=KdC%CN-xgjS)%aPQCdhD4&)}j$l)9gk zJ;>t-S2!@ovp;EoNfrImr!=ktfn`n$c0_lKxKTO@TojMU7CKY*<@X%nqoN zI)F};UkgaW>y6;CHMcEV!OkX=*$JtJXF4+5xr(2G$Hc}8yYg6bxfP{#nV0B#9My^i zA7E*+;1+?`v&v7pa2&lc>XNA!d&*?<{m5Fpe@pYe-tGGK#-=a-c#ccl6`6P+yw_UR zeRL^nGiv_fA*xqw(zSk@Oe-f&o5kyeP8n0P9%n$@?(tKEjAYC0iMsBn+u$=D0seI`m!ue2`35Wm3U{(4hSVYE}_&>>o$~> z3&AiL0<;>)@jPw?1R>wQe^23bsX$aF=Y3zOw_2t)%CVR(DJl78vC#go1#OU-=FWe! z9vu@So6ehuMl;BQW-^AJZdoelao%=s7_dRqug)qhHPvQBi1bDQM%3Fy?akMNT;wpb zg)n*f*nT?beS^{Ju+$hN%c9ejK~e*g!>roPc7BoIS`>`TMx0fL=<=Z7xeeLKPITOz@!YbSQ?CVNDmyeD zo76U2<$Tk_Ar+HO1Y`~XwoWgwM-yd;S0|`5z=m3HKhT!uv+f*U|DriccuE}*!TBL zn^m*bTQWqC{aNh>jFTsng@9jtlP4%Y>-#DSw%0FeIy&oAmxD~=ZFp$hFbSj&gsO98 zL1LymGZXyihEs<4ohtFU@5$#g+jZ-6+k@5hK6x-GdUvZSdJpTo*Z~(+U5%uAUte#a z<59Rf$kXe%ucy_^K9{+yeN}ly;u2^lJ`C=mBK`(4Go6%_WK4YAIC=A=MUoaD?_b&e z1Z8AobfN82kSon7e3av(D@U8=Jv0Rqw-)B<@9!U(PqaM{GvM<&@8jfz$@=}(5b_y| z$lavK(`uzwYYX=KNSGId;5d#|tF_n0PzsS6>TcI&Y?V;n{tmmV>64r|CgFUD#`$*_ zlbHp?^Nb|<_Wo3I7A`PmjBTqd z3G@nVAP^xAh48~*yQf^P$I}~H|3`cAtHkh2CtSFZG}h9}eAz7@8s6L6E43IuL-%bF zF8fXjy4Ce=(#Y1|D@Y1Erqk-rYtyiKdO!Zn^4txZd(%{NzQAIxK#Y90yQ$}5;T=;i zw5}8hs@P~?eJt;#(=CI?15{^*{i6A0ah*V$+hvlr{b|>E;v4^&h9{XHF408*-b<$# zM=rA5c}NAn0~yYwoW9Ey;_H1LZ%vwI@AU*PmubHw?B#5(c5~Jsk{Qex+W!sw<89F| zU7~Z}SaqH@^@zY!x~e#qL)%3y8cefFN7y(2sA1%$M@bx;LG{kmgWQ?Tc#RXp<1@`h zEHNRw_f>pg_-)U_Brt4@W^XM45)Bi83JFlzd*|E2YlFk!%Q*4^4d;z^qpS2uttVk7 zbf3B;P3trx$V^_L8eyGj(V5r%s*519-T8pCpvXe%Z?vaxDo7ttOgdW;G~OG-iZ-XG zLUwFh-Qmyk-cAh@zY<<~fr~e_S}6ueFiW(6nnK zpNRg(@tGKgTw&@e2t#Eu$PacoY*#2x{2Xt(GfjjhcO3*wfD9InFx@GJXt<>L@l_{y z-6ph%3Dv&BL%ovlOje_#+vjDE*g5>bL365wI-&yn%jV!nEcN1r%sApiovE;}@WVy` zJe@&53{k86y^;dry!_-2;RjEEF+S>Kv1S0``$-Y}vG{L1E^8eiR_Q7VBrTUbZ2+zD zIc0W>79fp)#*s)R%Q0mWV!$x#;L}13eC{&~E8eEM_Y2{dm+}N8utoc*jA{RCCFH0B zY*n#utVnX_*B>=UQ)~|2SE7)L21lFt^7%B3FUZjccsw^+m1@89N}k|;@p+hF8@&N% zi6PV2f7IEF^r{C~hL)$B>LlURNJ>~e^aUqu3AY#<#$(eI*Mm!R$DNO01=|QeVC2MR zM~GT?SjMhuPX@wp)N`V`d04550=4=1hSPI1^-x0p#?k$z#@#F78inQs$e#Ob1 zEg4TolxvhcQHSxlyyx7Drq0`D*w0(>)wIi^@vnBit}{%h?|8gi5qQ)%LFZna0MBq* zUn66YWEVx`E7RO5QcUw<`C6rao6?VM(^lgH=bOE1c-W7k7e9;F?V3&VP>wljX=oTd zRK20IuYhOI*0#x}yU!_>nXzH~ImBNyt1%Gk=8#cX(H>-G$WUwjasr)l5<)ZCvf@m} zEhSEedZ+4wdZ*E}Xut3E?i7;-jTuq73g z^{n~ly#I=UjbpKI10d;G1yD5HiW!Gbj19U9lY83x1zRItMXC-VO3hXmnSW~Y1!<24 zao4PB$|(Vt?n}Y_AO0I35R#P`#P7_Zf6m(y_$n`}Ze_SKP=CdQrx)bIyXElw{ib_Y z!r~iA0osVa!aw}S##P9bA5k?nE^-;Xe}vDkxiJUgF&WEfnl-TJ`fZK-hu!EWgRp^F zFT@+?yWs}pgBP0hZH)e}Ko$G;OFIW(nDp<=U1(HStz9uI(a7mPtYo>!rlAStMq=G(vXHYiN<8)rNx>`1yZklXvNlaJLOZwg- zJ&pTEz}--M#JbjN<0;F6WkruQxYQd&RHUG@8zcj@7V{jxhXVMmy46*X4q4i*RKgl( zP1a_Y{2%6gv-pV0=6-0UbmeaSYPOgIQ=$9{(IDw45CQ@R>JhEld3lGpK%Ar}IE|Gh zu*}r!@=QcgqTkcRZ#jW4#xSg`xVY5yQXd_NoA>oub$G3`Bg3x2|v z*Pb{eP{Xf)m!IbesR^+8NgL8fqDxlOW2?E46ZHuwNuV((K7l-Y%p|u*_10R#KfkGF z=>)D+>CSUwIir<#U5)6+u<(lw)5fvzS9oy9AR;AKTAL#$hQCA#1%f`a))%ju2rEl~ z8J36~nznzwmWZXR$2<lliTzcDp@C>Poc2MKJ>>ai~EZa2SYlUdI6P@Wfh z5cxCpCd5AGZFz4r-R|~CDH4md!j5o_3>*%-v)$`Ca#_pj-0HYMN2Q|wY)PmWBprcp zjWv*}tE5-VK(!@Uwi}I~&{Tj3IX2NuSl=5&xv;M*mKjt3@B+1(>~?Z!P)99#N2DAz z@Pdxspj0r^^}_$<6*096=<{_%wYpNa{0rhI(xhIQ%musXgwXgpmR{;{(2+y(A?c(w z^^>Af2Ym8Dysk~VLF!9UAx+HKuhVayMq{MBJ}Lf$arHBF#I(0XwUvR)8i6Hx>iuZ4 z26A%bggvWPJ6ioV?`q|^QEn1{8oMF>%h(`jw2MOC*C7Yo(=3-dua!g}pS1!SYk{^`;*|nV*e<_5J`tFU2P*8$ByxZz)P{~z_Lelt1qMb$R7{?O z&Lmc#VG*|G8=@u=(kOzcm(`k~Smy3iO6ZD@(JcvmuMj?)5(5z?C0wO?WkAZ%FSll$ z+D_^zDW^&$tVP%vWq~bOrS1G&C=@E9Es@ z7`sh!EU*G*D`Ja&G3V$O9D#^IsotYBGMeSfZ5$J#OH_}5k=0idr}-ibl87NNvSqFo zgq^H9jU}8t6Rry#q+|O{leuweLGJ4ziiLX~l?!`)Z(>A)Y^%vo@zy58iw^myT^O^K z;b`yD6nR-FoPd}R6BI{ErL$dfc()Xyg^|5k+`j!1&A7|QQ;HdW-GQc5QI2y?FJ;!l z|Ni*&pXKC&bb`oVI>GsazC7qbGg^W7QATRLTe4ttJcy0k$oqVnj?pZP=2yY2d7GG6 zl@y|@Cc}^fma2}on&x+_ArOm=Oe#(qfQV5pno+BCu9OCmTVQRiR^XyuXIv@VL~zCR z)Y#_L9a(uk2)J-KUrS4$9oNZ&E!dX&IImZZ*T@_2kHU=A`BL76u4^V&u|Ir0Fasl%9CLc%3ahKN#_ukX8)oh<93vaV%< z(e}vv_L3Wo#T*qb>+a0Xaar}O_K9nImKL{S-n4&N$8}?&v>*)pw^9Wcp3;3TSD8P; z-OHCR2BO~k^~nj!>iuo((5cR=FjB{cD8#)WO+xVtsf2PLTbs_0BnzkS7=FR=)dmWh z3=BUUSy#%X^RW-a!P*W++-t`I)1J%)H(f5R=10A`^S@$+cQhSr^LjPMc-Q-&uf~? zul~e-AIyJT$gtMT$>9Eq;MpxtARV2djD-WOlD?-KnBq|TAc8am3+mp54=QW0u*8yw zN%lmql;?BItUV&7Lx8*rDNF?#&iS?o(he0uL<>#B71s+GTia%d((NKNd}1o4y&IaqfsDtXerK!GWE+#awR;q)%|T_WD)J_718J4 za`dK1SDNtB%S1nqh_ToUanu$|wjP>U^qCSVo0DWsnGI0Pox~$vflAL;3dj5ASJFC- zi7K2$d{d|{*i2)m7>Z>g!x>}cU|BO8ey(!`ow{~uu{?HQvs$(sBXeTIluK=B?J>D! z8MgQfO_BL|f9&zi&ZT->w=)WvOKi`yK9A5JXkv2quHngT36u6GQVd_1Ob5yDFkIqmI8Mq?;(R;d>E?P`|kMpeO2`n7}5TStdkvH_7sRz_4V zULMz07D!1Cu02=_3k`|EtG8w4DSOm^4CFx_=>W0o?&G5`p#YM#qvD#|K91#bJ*<}1 zdYsl=!tXHpuv3y7r=qdjJynjhp34Igg zvTQ)alS%v|hd;ondn8|s>w^1<89Ut{xZ|Ub6_F3*V4Vjaq43w7A833uJk9No7XH=H z81(^kS4HqX75=pYO*H&Mz~$rVvXXz~DzPmV;y2xvC?2Z6NA}I;qv2R1n>G8dm%9xX zLcT6%EHBjz%0CCpw@$b*-GH0?OT~m4kTGK}5b&~7@M8mB0zY0}RMq0UorBc<9hzs7cE%3M%LXhV(;#r<)N@s>>dB;mHF@6iERtghm~5q>|^O5?gW0{ zEHuM*GWd$!wPFL=fv(-|`ALC;J6UmWAaiBPdBe?IUR< z<>+7*kzK3*M$m&hlI~Po<^KN9LPEbYGTq9~pN)oJ-BhC`)WdFSgX)b~oJhI_{SnboAbfb6CN~f+RYJB=cLztPO>42U95WBVDwAiu$WSfG8Hks24D73m?^Pe?w2*RR-@ zC4Fl3Q#7mYw9Y*#-?3L?1mX@pu(A>uE(CTq@wtkE5pC`hkq7|^Gmtkdtm(yd!u`?S zILYa@!WYD?LV;O$*xPLU%1*OBOL2jdHa|LZ%x7T&?$2uI;1U*C;f%>dm3Ae@#NP`$ zk#Gr5yf%+*zjZ0cgnN;wW*&F_NMtWCCdFT&TJiECfDe3HGFPifnPgF^0X?LshPZs- zQrwxxt3-iYEVnhKC%5@erZhs(9YXk^d?bWA$ppip7^-%tn9y+L9R)e1te`F9XXmf^ zqC`DMtr&^TV5Q0Zp%508GdVj!Y=$VqOLbS4f%WqrtV|(2=}q(AKxf^iToAhSCOt-*atmztplOmQWuXmFrY^kaxxhU7a)*9QW_rubU6$ z67r%BEgB6{Qi*C35p&k>Xdq@`hv2)YxY3Ho(D4MoWe?GuI84QECNh!oFv4RH2DUjm zY(qFbha)7%FS?eK6|)DaVy?1P8#|pvgvVnOo9r~vKK^HmoPYxi7ODphQTm9^QAj4H z4o9tBJuC5Yl_*H#h(0%3GuR)TC>Bdh5O$>!v0EpzVJbDDNhff9X_!z@5y<@UQ`ORl za*H^j%*lcz2+aO7Y&JGvotTogULNR9Zl~TN*(?kS^)& zhGFPNKoF$6q@}xNVCe4dp+Q=@hlY3XSNeb656|a!y=$>%vEZIN&b`mx*LCfE_W8sS z@v>V3V|OjRJTs#L(a(=EFYj1^e0h>pv#87}|2+_>jhf_yl2%kuECQUc9oJN7ZyTRG zGb}B9FCkAVDM_z!f`$*^TpwEqriAWrs1m?{ku^9yS^(fc?WMnZgvA_-VX^Ns$iX3= zeK7zk#(dp|SjEyGHMke?SDZ8pkl#X74!5lU<^ih%Yx*NyYO#L6)$2Hg@zp0y?g!VF= z;Dd4SK%IlecqaMG;$}|=jz>{-JW}Fu!13bf55HBm5?;Qdv>yO+sz%d1x3}aW<6C*z zp#u zX74m#Ep^){kEmSPR$u1Jc~azS%EGnLmBhVG^?56b4vqmXDcH|rtiC0bz6a`0a4{?` zprx`xVq>gxuR(GeFDIp6Ry8rYvnkg94Sc=%rQl-6kmt!K8;qZ#2&bHRMu1yK?On~t zgvQ4sq(>=DgPZ9E43O5>*hu!`hzz#21BekYGdi7R3Hnb-jmz;8M?oADWSmAfv8&(+ zwN^>IfoH)TA?}$B0l`2FfDGrXKw;d58E5);ajb5B8^=oJyaj65WW(oY5>5)6`c(Yz z68=u$EWbqiG6t<%CabCtS7u}qjlCnTgm}is4f8H-$D4gltZa=Rqu{RzMXi(r{nLd( z@Ir4DEYnr;w>*zX6JH}WelEtqHpXE%bjvC@k`&I(A#0&XD{COCjIC_#`C=`{Jvy+h zXCELRPVDo&I~x?P19Dk!w=zb8HbjKIySV-@0`Po<55{rP6g*yiXGDmSkZ;_p(x59w z%B#rg&6$)E&O#zLnEIH< zmh@qA1;q8yif7|0F$Tb+r{oW%D&kcKbyVkt0%Fza^>JIE>49?Z zIuec8y{G$Dl&=EM0y@MYSX{(P&=p4O#5{Riy41dk_2T-HYxGwPK9CB@SFXr!GhgxnzrvkFH__hk@UpEnCbNNYk)b3^lGRw z$3mlS16WuLP>sSJve-|kFyZF_gtm+@#ZpB-%D$^=6mcmmwjie4N^;w_XV=~gcy1Px zg|l(_p(8$s5@iG#v(&;S;_L~fp@ecnfGqsVtkg`v#-W5D z9DpMuMr&g01DSM__CAlH_ig8t=sG^7&y9^oX(XQykuBuD9NNxP^JUL}HQ^5PmU3UUk z?@bzp5z7QwTGK+N56eeJs<|{M+A<$N0cSbW?D3xlijV*0ugx-_Nh7T=?&-H#+GpBl z)7jZHj>J(RnR>AS997MSKeZE^TC0PezJQ(klvM5HLGYD3rA8Ae8S4S5VHxXD(y$xW zE;3qvl>B^pmLB^0Q61fRBel`#T#ZEG7!`-ttm^cS5PQ5z$k{Q>0jiuc41)t79JN=B zR{|?5X8LBafVUZ}#Ak85feDckpS65deCvOT4#)>TDB zHB+`}w-6RJ)xtuf6}`1(EhxJLGBJ=j(#)8%=%Chldrm$k846uqHE&cd>E48Bw*|enjPO++*oL({hC=N0j%fodaQ!u97G99 z%UOx?vH$CY0)1Lw=_jfM{p{s(?9l#y_4Z-@hi+3d8*Oj~21fi;y3$h!DH5AIn#)Nw zPLi8$Ena5UcS|o0sLZh%WXt`0)CkZDR+&}K!AN&KeDM@}7XF|0ftmVVS@kbZ%jb*E zpWt!wIRwZ9OX&n9of2$Q6TbNc;S5dpORk8B$bS{%?0Tnm<_I#(^eahLGajmo8gzwN z)tl*rF0q?{ZPmRv7Nv6m^UeN4jVX)VG z3^3F&72%aptm!!e>0gIZUA~Jt90k3Wz1Z9_)lTur;-Jj4;NT5{M4nu09-;5{2zCa^ z4p|=`J3TjT+soh(?|<{jb+G09Um7_~^%qr#nlRG;N~t6ve-jyQ7e&ly%+MKKPBLOH zQNXHNrUU@E=Ph~FKCn`z=mS0Q=m;9v;8dYqh#_-<`IYx6_LS1_C;M%PCB#cth$fn% zPv3^b0$@DY;t9H&p{Dt1vtp{+6j3h6oZaT6CG@f*dOiQE27wyqm26;Gv)TabW&}f0 zc1>$;ZRgEwv1KVi%Jd<9?VTxP!^yV5X5I34jDGlplY;3-#31U?*$w?^GBKiyp|im81o z3a)NZ(AEy+T5x%!>v1}PreWaxAOHLd#{J|&bYqY*f_K}f3g8gI!@%%?w=+2-DoFl6 z5@-&OyooR^1qB7?-`r4Pl8c2|*8afzlgq>NnP|u-Q}_^gD-}n2e*dTBIzEh;}h7r!69YKh)9w3zF(4Qzx% z#!FhU_Np_dCA(WY^&y~d2D0CsszlF7%5CLA;0g_M6113orYEZ6`Fy!G(VaoHsLW7T z;<-ZgTcG=a+V7* zocjFb$%}>YF68o0ABE*VTh7qWKGm{$&*!!^#+LAvgv90PavZau&6;MJinA4doN>Z= z{C_0mUgz9D1YX~QS`L2FjszUc`!A<-@o>>X$o>@M zekvnc%{4ftglC#xzaZuh;adEJ3BQHT)t>0kRnl7Aq`ju~gr38N#%z7f0&Wq@K0 z_2rQKqETU=>ERpygb-|)#y=2TETy@iV0sh&T27E)1Uknb7W+s`qRY`Bf8}Qnk9b+NQ;8`*uRoQ zUf6_NA>;G25wU*~Ov{^gIJ^Z;)9x&oCeNc7eHckK+Y_Z;;bYS=v0e1_?I021zzVp_$o32PRm#C zUhHnyjKInb`Ch?PYw+s;nCO_6LIE9QSI>T>s#Z3-nTGVfF#8Dm`ifGK(1V{pk8bi+ z;Jo>kaQy|HX+A@>L@28qYapzahv1qrI;Tef3#AaG$0%#*5t^*uMclKd;u{~=ssTcA z?NDh>M3E9U86#PDh*_m-d&4YLTr%kWox}^#zl*f0ofzHLd=#oHL@RQ4QG=8MuCryt zgiY{7ry+w#C`!bgrXedX#*_+^aU|1kU8gALCP<0I?nqLucqDubTDCw+SlA3AWw6mQ z1^?0|kx*$h?@w2@6itNQ6Xv$8kA~dzaZ*CAW7ouWfD`!tV)tKG|5FjsO}fnE`mk%b zOx)Sl|9x#~-DL^P4a7c$ri%ON<|ZQbrM`4_i38fQmTgd65t&g}pw?lrD2Nh4KB}EU zHR_uZcD7VNwz8dnk#K%`&Q=)}nQT2!V_9CU@oBo5 zs7j!rOuc5dh--H@BPUO`DFt_j#=KQl7o&5KfD~2HvfuHGpw1aAwm4On*|U1+20(|7 zB45Hpl!#8`nZ}sIkyFfi7763fCYqL_5)&DeI1Ukgl{WCJ8dy1|IVxHI6{x5m*IN5k zD@NSX6T7aL@H7R}AdbYzt9D2>7qf9C%egPE=_ z9;kt_gr!*t6)n#>Q#D#6p(jPW z3c{y&H}SW2#Oe+zjE@aYq~8p{z3Q(>mdnRAd_AsU=|vQ{`K~H4%97as zszJXL@e{#&S1%e)1T+d9myTTN3}veaIxo0Vzl#n#zr5u1q^K1gAf(DqkMe>?F?rf_ z7kJkcj+qcVw#U@6$!3;bg&z^Lw@bE+WuZqe8TuqTN56}zLk}J3ikm^kY7htW75uVJ zS;iF25;`z)tJ-(1RuWZHk|7T+IwIP>v6r|^`hoi8-65b_i!He&hw7RVZwr(U*s;DO z=&?W?vA)FGUQlNeRrIm_=uoygE#`}~k$xY_lAs^m+@@+q;IFNl(a(w&F??2EsXwA7 z&4?UvYnLeGiCN7eZCk4ZKtpl=c*O@C)We28z@8{dQKv3=2bkfPI+_qmbMG07?VLGv zGG?9nsSF*YdA_r`FE#cX_}jC$H;Z=-B1xKd|}B(h05^=fJt+xILgbS!q1M1 zw31TxBQL3!yioLkvR%n^5|YA2W@`E(`PfO4Qjw~|pRY$PeFIa?i`7`cWkP3P!HAh8 zEScpJ#_HwB*#?Ljedx5u!f-Dv;J6c$xH4P*k^JD``DQNzz}SX4AH=E^}I znkrbc&CaC5mWw+uKlr){V-w@(XI?Q2r?(;cD&T`eG2ZER zRAikH5j8D#`N$HymsLy_qacP#qMwW_uxQEtMdzQ;;~f82547DG4(UYp9&U#f!0ES| z=&-!p&J-8n=rA)o^dVpJ+67>H0D33qgT2ry09uPJDnDr{`?b78Lbnz=IfAexkXA)C zQQi#s6)$H8CHWXfc9BEwD<2s?4WbTXW^V4`YV*<=-_;6f(=X=?zOOWT9>yvzbQBO+ z73!geimF5zSrIMWe)Mew<39sW&2WuUTGItTFP}y!e~my-y>7TZ~K_ z-hS;i)1#x$4`q)61u6SmQHX(%Q-lpN5L)->QuVO9wu~bj<9)`s(OP zFTz{wq*JF`>^h}DU`hcC(3B7Rxk^XgJ~GMtiZs1N7TtU{l#E_(-Be_UuBY|YuS8^d z=?rPlyVmwEl$|@+YE`w;vSjUIG;K&7%^KhQgWLqv-KmA7_bN4mCexKL(uAc{`c@It znX5GUgY_h+46^pCT53xk6b_(^Yhja1jl(mdK_Vi>Va&5c0s8LBl(*K#-$|!JE`{<- zodZz7q);O;&r-|3)bCe6L67j}&*>lhO;fOZLc|&0yZ=%O9n-_COq$M&dP09 zI!l~(6|P?PoxQ}xd2s$sIP2{T;@G;VjK;0c*vuXqDA$8>*j;7&L3p;{4=n9idK3>) zUUn!d%lnZEK0Ii7`3%=Rqr!GVt;HgGgNBdwYT| zPAXGfeztsh@}VQ{EBh7?yUZam28Mwz|5j}!JVjs0Qw*=mBDex8tE#SmhxpkzXPvlT zcj^EwO1WZbq~0M=#+5c!zcS`2r$Jq&JSta!N!UxJ;2d*^kuETV;?v0&k%lWUfIbp# zQ6@;#ZDI@rd<+r|a45#*oQP`ADqi1n<)|=MT>p+4I~UVYo2#iBbQofo-F3)$g})*d z{dLR0H7Bk!lL2RGothLBO9R*@)o@xN{0FQ4f*9vB=d0>?$mZ~tH?_eoVKBD-CQ zSWpm19c+Tv1@C8wr2S=GmS&(-V%ixR0zY5?zWxg*&ho<;8e zoRGDZ=nJKwpWAFnl~#ircAfKnC+~j!7@5|Q8xTbNzZW@qe18!KV#v+anc>D@%5Vde zy(eI=GKcn-moA=J_bV0QNMqB@u5~$Jk}0S%?0b1CVy!gEQ+jY}i}Oa3e1oegxEQBkxF&mgRwlUH$+9H@PbY!8!)-FXhbA9nXj zbe-L?JXE9(YjGx$ZAa8}_K4GI(^M#@a^$y6f~0GDD%JNN|06Xw?!hT2#VDG}WGQf= zewzCvwM5mP`t?YqMIws=SiqtcU3)fXd&W(ZQ~V4JFT`zBL1aJ?4+&-=>haQLio<2+ z)ApsrVHpA42sxr3^=e3*PLEgEo32xe$CXR3KQ>ygv}U$2h9m#Z3>v=YoiOhdf+fHL z-P1m!%*!{5$ehOOEi)}+>oG-99+)YiqR-NNZ81fgwH9U4vL~lD`=Zb>snqo|RivP* zrII@TQhf(_%`j5Z*)!#kP1~bYiG4a9xEehtgdiUm(K*r@Z}boePiB%7^zr)+xT-WS zsnJ`^{}n-ns)qsab!IW9l&?BW$e|f3^P!4kaMw`)!JBG>>I51_Wu+5{j1GVWVF*+A znHCV0o$IMBHokp7(85z5q*8V8)2!gXYQ_lQca&fCiyGv5EKdlkfKJT5}um2 zR$!h|zEoHwPaDRTaF$V!I1ACE-2q;r3#c-338N3?+p+1l7L<~9nDV+YVXN23F{_M% z9Vs`sm>gT9S%Wp$nf9N;C;#GXY{Dg^$^)@lTbb^jD?RbV)aRsE=~l}J1edYT;bKob?`hq>zK%7$1qp9x&A30tn~qBT z5-W8AKEIo-YntLNIo?|dHx2~csPnR#cg$3vZD#dRp?{gAMD1c$dz0d(I`?uWJzW;%KQT-vrsN=AXQeR zlQFea2TVaF4wQ1{YT_E#w#0PjO3U1_PqCVu@Ya5?-_$idZKz+pE~LI+=HvDx*v!_- zvrS%r_Y2ZP#Fy_MJVb;(we*67R|3nQJVe~X_f|nOhB5Er)vy|ok}w<&mbA`q#@A`; zM2Fmv*MBGpOFM4W;4f?en8<>a)HI?#Zsy6PUv4ehG9#<2fiI)SGz8{I7-#TOSFHL_sh^MJneb*gF}D z%#C^n`x?7SdTX-$IMC?WW^_4qk!!!qyD`p35t*H}COYfdyQMgW+FiC{2TB$`L!09B zr^wtGs5Xpeswq(|cKg`{xFgn&Zw=f^)aZMm5j@_eon`=!ZOiPvLXc%l) zuNlRTofEREDX!PCS6Mf;mTG_j(kd83Pw_{E9Cg&d02a365a%ubnms-ifcKm}$v~ z68g3_x!~;9+xiZ9zkZY!EioMw{Q*O&Ldvv2yS8M|g+H{sGO&2ppbFPl>xM057o(0{ z{h(hbegrC7x?5w)ELqP-nGY{^)9(CM&9IA`cDgmFy&dTbqbhz_u)#~#c*Kipx?!- zh_PQ?pvpLkHHlsawpdqAji<&$dCPW@$SmjBZEJnNNNu>0G@-b^)B{+kfnHvo4U^9A z;^5m~TBR>Exl$YSc?9-<4A;P9_-nLD%FrGX1G=?A|~J1i%pTYj?i1bwAdE5M>CWp3sZk)*s_;DW|}W|s-j zG26@p2Od#=tc$(m=qC7*JB1QY+YZ&Bl4lv`DfGN9&+B|l z`4hO6P8wo!c0A}}h6*`3vOROF9OjegEQF|0>4#&rOkVSTHgVAx0H-^MFy&S#_n_;( zLCO~7dtSI8%t2B^s(3#4sm=-yX%Mf7Xm-Q2PtaHJp>K(ZhQb%t)T5wFqSSd!aSQUy zqq+XK=4O^LxhLp-VEbr0i4U6A=`#h3d^|qJec<>(1_7wKrXnapfYDLv7!<>u&bXy8 zN%m!h$@1&dt1QtM4wB>itRBK6Ol&3l&u5mA=+G+A88>povYg-QR`TcUqi!{J_&Ik6 zR!`dXxChLHq-!u=?O<<80rXva7=G#sri9r%uj4C1zjrP#-|H13gp>i5LoShb9(qG^ zRu;5%(k5PJ_Z`%*SYzdqdWz0$F&6z?ak>n*u{JWZlDxhn3a8qRf8^s_u&82-LTRY@h$m`{42@?+ zREKz^qU$A)HY6lel5T;NJem!^SZH)O1D=-3IyBGR_H-sqHowD+v#6(3d1afNH1Qd7 z{an{d#k8B@HJTsev%vnaE6S%`!sFydYxPE_k-|xvP*30=S? ztUt-20Q%)PNIo|^A;ExW!h;_kc-N_Zr?hCvJ2=-}Vq)I@tSmbw94$Lywb^`&?wMti zC)=iM8z^ZFlBjY(hy>g!$rpV$r`?$i=$ke&Ous!ADBia6HgR_c@z@j52fNg$SrV+PWVJnmGGszPDO*3EPLl; z!|0&yFBkF*F5F+mGdF5gCmygC13Rv2PXLdLF7TKwaV-uA{tko?x@Pi7P3%m51m}kL zT4LW$bZ0IftGF4gnJ_;Kl{(7z#eM$t4w*Q1x?gehrTIv+tvqp(R)iX>`nMv(^+dDh zC=BK`sS|-TTL!Fl*}9$Vxa}OxQ@l2bS`;?}l!VbEl%KRN>uQbiX_+Ka-nHQ*<&Pp! zsu#ot-|*Bz%2o+c#Wb?(z$zI)iInShe9eeCu3SoDXaW^x1OA?d5sxZ4b-fsVW%{+~ zq=#^cM&FE;mvhxP`?m9-tAv8lZ4GT;YLNSW=DjG?L;iF-xMsys#cq#O=6nk4LSBs$ML+K7RVrXGFLB{+&*}=;oyUQ z3iEN%cTmb0u+yqJ;<4aP5C7!kwq!YYrfq&J-(kB+^O z>xj0ytdQv-#z^968k6zU&C|K|fLM#OCMJ;ac=v27kycCzx+k;n@qQ0yws?~MSR$E! z*RL`;e*9#<)JQUoOS&)Qv=oe!D&0=WZX-fMEFaTVP1kR8*PX+(*lQmDr^D!rBu18W%!Fji@yIv(&+RU|SBiw=#IPDlNe*D! zr4FU<_&76>(4=@qH~ctKvTdcCboA7^mIhBk;me9FdGayy8T=~`NzEtYJKUa}eoMtW z3{!uA>i+eShxvS+8y>&AAQkp--Nu;HP+w*&r(~Q;Mqi5E1X~DJNt;l#OyA-}iS_tq zK%ytV--tYr3*%69i*-Tuq43kppxdE$C2aZ@m8~n$+lybGrNxroSUlVZOQkS<<+w3I z)t&ghTlSAHfg$d_b=sK>(XsoR-e=6B$we_8dLS_=o5jAM7tU$K10_94P7(cPmTu)po)SD5+khU7v4auXmZ zdG_~o{snGf)epRZ;dc*huKorB_t=X>t^olNvUOuw&H5Jv{&ncfsTKHN`EH*y?~?yI z>aUOYr%zu_6`X;WdjC4=@2D1z`f>_(PW+%M{QiXh96v!1k9P}0U+F*mx~acDy!n{k z>&>osJ(%PF?NDT;(g)tf|Njk>eE$DO_#YGc|BOjA-&P&n?$>OjGCJO^5Z}2-o#u!9 z^N_zL%Z`b66-8O>Q;TdEUXegn4bQDd9bOth?6+wHXQr6dncf3POm!q)t_`Tqpy0A~ z82TJEdgayc^JvG(n-^nBtC_XPZf)TGZ?TJzNPp)7n^vcWN3)Vigcz*1hOeUA@>y(_Pzr zVGf0Oxhsos{&`JpI-8+#!!A00RnHn5ldJi1-E%+Pi11IVaueA<9K-_lA#j~b6 zkBe5^MiSkdE!Bns$dIQcZ58bK5$f;$?&VZA0`?0_rihEl+aun^3)zc?#VbD7)kraj z@VZb!Xg%7qXX2bmr#^|Zx>gO@vUz{L7NyAMFhowT_h9!*;8l4S@lXmcwOH6|S4Bj4 zYSHd+S>ys%)uhc?QS;y|hiBR7cklWB2P4*$YEPrK9GFvkni$T>F6+zITVpgeJyaXv z`*C!5TDq=;a;YG(TIb$^noWV~4;*%9Std=(ENA~=X@9v<_{+-siLCkNT@BFv+0n#I(6i8}nsxrClZP|M1_Kb1ppO*aCo6v(|6anhbe?n^QgN_Ti z-j<_TB`hp1j)iA1u|LG4YN?#HJRy#8ZrIi~Xc=U@<+MD)*lycBp0qWF{ueubnJHGD znI78%RN32(oIPj#-r{-NtHH`AL@v$1xFXXf#@EmL+Fl6k_|+O1GgiZjUff~SKfWuM zjLQVhk1j4!jsV#$HgtCOsstnsV?&}cfK#^^gSKJJof z+G5{VK6?dplFb);&3HcTZdan~MUVts^cpnji&WFX2pk*5Tin5;KP4+yv}28o>Vnwr zNz%vsZo@yUaPq|U=%0*_jw&2Q_|dq(9)(*ccE$CTwg(q!ptHh{Nq>RsrRLO>#s1Z! z**yw2ezGBcUaHN0NYW4C-_5AH4+*Babt@Tqzp+p}aA83moc6Xt(5^2SUo+fa%stU;!;4v;C2Hsqg!)yUarj)O>%0@ zr_tcm${SO+8DqUx-bmd)M)L_0lq%;b*}IeB4>|yx#A^Y_Sk9K$&FSRi4l_2isBz-- z< z?HP-VO|=%$qPF(N691S;WvWO{>}7J3Ab&3DmJ!aEr;Zi%)g zS(;J#F%<5dPYtc7O)2Bd;s=$4I)l(^zp9pQbPh_98G8uOj&a)H2D&X-IWj_iw-dcm zM65KP>mhYkuRcK(E9q;NOC+kvaA_2nl*JmLB6S<}8BBotw?wbe&Wb8SmK z>G=2W(=CT;^>_sxP3xj|%Yd>+?FdPROr)zqg*lW73%8`J&&cVCI+Y(eWSHC+y zx6C`qQBhsPmhbnwi*QbF4tvZ=AZY(^pf&EwHVh`4h{T9$#T0U}tu`GtFfibn32;i~ zCDLMMYOFEC6p$}1-Z084R9_Cv;)k7|9Fd3fFvaO&5D*pyQ+g~W;l$$XvqP3B$#)*6vw_H(F9ypE|}p{o|AEfhJbDQYBk~{?VU)mB&;lTYP`*`zzQnN1@cIYx1`#mOe^-e z6eGhlxFtG~7MjVEnW@lDrj93DVpv3)&_u1SZ~@HpQr z2cL+qiA7vvnLnk&dW@1zAZL9JoXks)Q!Wl2>MGcMPaAml(YQ*J=9Xu;##O><=~4D* zE#rA6-Q8uyU^sL6|EN&E21#!SWiFHLt(E613qm5VVUUH@Rdm{Q)|6%BZHM14FN>-J zBLt`jR9DNH0C;alrI>r18;=RCog@mk2g}c9Z-0j0=ABn(5!$B@R_b4If`v2X^Cu)k zsYWq1v`x(|gT+nQ8Nq$jVwx)$#n|e@9xDH;?0?OIDO&HKC!BS1xKPWR^cNoDw+Aoo z%DBl)!UY?z=J(^^J6bIB&hcV7;quAe4l{8nRw!=ReQhA;S=6+c8=K=2L$JcCoxdyz*;b*{K`b2BhaS35g}nc3Mj z&Be>O!rHaU6!)!h+R|dZtCBQEu3nViUHj+v*iV&CBE_A(I1Nms@+)UeTXyej71!=z z#k_eTRAq>`8y-RTd#L#jQEJ>y3si@~YF5^uh4@B~{zPKN2yk55-;4wfh3*F z!9Vdg{05MmKKTxWFZ;w1*n$mjJ#KII-gz~HJz9p>x5|Hq&F};hr#CPD)UzQ!R#XEO zr&*_dKQ8(!T-;HgE6cjMx3{(bXh46NgZDg*4SWOyzFqVsiP&#ce>dGg>PrF!yZtvt z@ZXxPURINP5BM=waelK~J013UI8eC+n@#*D!S&bFtJXwxdRJB>r)&j`*qd^ayU`z* zA*}$4McV%!puXcHIWd%7eE3Emuen(3CxJ?bQ|b^)~U*!=jsGg~#JIXOPw z4XDn*C75^M5r=(^+cz?6P^I+ZE&+E(tVZg?*)lAcn&x{mv!%0qS3{v^M%TFI# zgf#8!SK%+!Q2jY~$?rYX_Aqhs^&0W*f&YSG1cCOrN%$;zEHtO-g_kRMSMJ3hkD4dy z9rTzJH*QDti!rJSye*+c2U?Mgml^$pa|ds>;2&rI@f=x+y=?mQ@s~v4EJFk@Iy4!c zdGt`zZMoGZ{9i1LnWv_Q`k3+#(om&hb@*{owoPbVnW2Rwunk9959BUY|@I&x{}Bk>T%-0^VKz%)F&L z3bp?9;XXoHor`DjZr)z)$J=o4_;H|G?sbJ((=~To8C#Gnal{ig(FB6MzfZV|*Lc2HBvV{GTL$pJrtbZIyDjEHg82w8g zP`D2OHN)%9WzK`Wj4+)Ucx#?j%(Qb~+^hwc6|{ZZE4>U3wct1}y7)-$>+ z$v2(W*I%8t*oNLI7NA(`Dk>_LHx`}@-CYkIWfI?X192wTE*Vs&BuU3<@}EZrF4L&Q zS8%GuXf`;Up!Fsw%3$d5$NWuRHX}3)6~XOf`sH=oc(0?4ZhS(9#=Cps9+yUbvXV{R zG>?DSXHXcY;(DZ%x!2Ppo(oZy{sgwG;i5dYQ%;p+7r)Z0(vlK0KIn0i2$z1yJx_HLNVn@Suo<18L|=MS1fACoV?4#~RL-ai_*|4kwp{NzqZV7>xj+h4^4@O=@b@`8?LmCVg*WSRgGSPK@9%$ ziLrczl9=WRL)6*jq;%A&n*14)PAqYw{@j^%=9X&C>&8Wzi}q5pwhbllpE~xU=}d68 z30@`oq}NrI*X-yjS5Ak|f1uz!$320ngX<|$w;x;u#Xj?2^n48B+cFF1m=P#gIjp{( z^ty@vw56C91xKzasRPIGP32{Tj@Sf_*;x7cnV_kBvTuvY)uE#KYw#T&5 zX)SOzu0pzhJu5w53xQ#Lrnu?u$BWzdo-k7{r-8Mm^X1^9^Of-6yWojQC4(ow!5n3} zd)U&*Ts+5Xym-CN)#2&6x8W)4d3WZuxN>okcIRpi1Y%!_K^S4i(^go6jlsM3ZgdU4 z@olYh(HygC)7;^}-iuB0aPSvZ%1rNK7AUQDq{;sHVT)j-ux2@4(kmm9>7T$25MDxR zzj#Hq{E&{Rx?@>c`Kuy$UQ~<~6Jr#eeS1Kp-k?%#+?|VYAJqZ8vbn5Z`cgX7*;M7& z>J&cP^WYnLsxRE#p5dZ3-rel?MStX%P@@l$`zvQ~k7=fW2!5s*^fnXOL?UzjX1`Ps z<%U@r4GN4yPoE`vHRp-IK7#B^21j7_pmxL1=s=$A%M5Ff2nLU4=5zHmDr1}0&Qg`Q z^FX)x;XuLKM9Nfg$&G|u$`wK;Hdct;*5ho!gm2*X2@=y%2c)e|<2-Q3ELRGV)>{>6 z4_9@N;x_(Tc^>cU`1Q-ypJ}u9T*cN4^|adB+6!KYWmljwSY6Xq-O+v1SLZRH9rJ%- z!d+TVOl-=+f|F>}+zh#KSNRrmN_u|aM7{9|AIRcFYPEH^qCx=sST=!x_%LVV>)YUE!7CoF*sC% zcRuR}+pQlJwO^@lWD{Vr#-wVdiX0V;Z<%Rly=4k*bPsmYj$9gJj7lSjR&%#5^VY7} z71DHeuKIL2mPS>y+xsyx_&+3dfU0EaJFu7+YBoIt2W$=dvd6^7@j&+eEla2J+H6sH zGijIyK&9(+A7*V{41UM7iE=?ns17!E5YK5aP@#H^`hsfxSO;z2W?ye6NrrVaDnd!J zO+!Yd0tL+zElPT(ErfoEavf*4{zpbvWrN=jtJze-2;s?y{6bl3Qi3NH-3sm4ISiJOZztpgPULH?>buGyBj#CPXiYw%?s#^F~lw3UCF)I6mc zol|uoGRz$759~W7=p6(v-zDyO8h78X?XAO4xen`&nP>iOg+w*aVA_YW<}d&FLiHmA zUe@9!Bq{=9`<9;Aa3a1fKA2j5B|hU$50Lqjt=H&Cwf4XYu5i>Y(v#U|W5Tub0tnd^o%J!ET`)WJ2idKK&iwd4Sn{5@9vd=liH|;zSGz}o_++R%G|w7SeVI&f+kQoI9GpKh8Grnv18(zQvu<2L@|CV#+r=ZZI6(__RL zFWQ03^Y82ZP%R7Nb#AankSPoN^BwYd^Wschr}ybDgni>p`vD>38~k0d@SZ2L5kp8q zRkH$euk~)XAU#S1wCz@Lp#ByEkx6W-kat}4?9&V8W=Q7CcfVh@C02egn++q|_}5Xu zZ5dAdcGUEa{oklERW&+p$1yPedRYxU!j`~3??+GS1H~=1;W+i$ZukF+z9y~N+SD&uwBHf7+}W58uKcOaD31oWC-v_`TH&-tCbKk(+Il7riW>fQ_4+oKm= z=O6Z2x+UjR_!P{6msbbz^b;?3e;=s_2-bf0IuWXr6L||Lw5Z{7s}Q?M3@|qH9Jax8 zwC{ZNzgnB%_YCg=t104$B1-|-U}EUk-EjlptaNmVz-0KH#vK3ua#(aYhduTu_p$*^ zlK>Gdb8+3-M=wDgi%qkz=Li3jxf8jk7EVLA!|M>B1CSofu>ju*;s{dJAhXwWcgx74 zK@3&R2TUn^Q2H;v-6M+v;qPRNZR;;2Zb9>z9z!!Kak`h;x>1YQ1B)lJ7gJsQRFkE; zizl1Vc#n@snmZa=YA5mYwtwE~dk$13iZUeY;nv8TDR*P0H%Qy(RbGd0%P?L`Z6P;H~UcDw^6;8b!gVo~_DxHr9dk%I?WZmeugtP0K6pcQ~Jr=EU zi}bSx+jM5t)u<<)=4Nh3Nt>SXY-_Bx#+GoH0xiTUl(#sF)^hyoISaXp zrsr3U^UG$&i;GLx>EXL0vpNAkom%~wSdl{DJrd8V^MMN*1K52fYzZNs;9GOYp4D&g z=@6ot=-wX1uiYmhUw9sT>F6T3gRcT0|CLAlkni^Z|CHADS`E2JSov%bH25&CBEb2q#4;ZPbe{uiw<>U<#PIex;yW$rnWbYE25%UQ9wYz zD+Ht@UMWFAK#|^?2%&cnLX)BtBP!mDG!wuG0Z|0$NK5EN6d{Ci2_=w(rgR9A-oqT6 z@5~VA`wz_Ir>vE=l5+2?(p&-3nW6P)EJYa0t26 zl@Og3;13=WU69!E%gy{u@g^k`bX%LoczED6WHCX@;zAlKdE$-C!}f7!uWcT8WrdMJ zv$7BM{vba@h2cZjt(Kx} zrXx7^&#SDgtA}wCRh32!!GJG4wm42`DsnkUZ;W7H+_QeAWMqWXwy2XYNlSn@327Dx zTkiT^XB=THNa2oAueq~iA_U4kp;H}G(PYdkbJ@@8i=MSfBfAGL*2#XV7TSIgap z?RRW7c~_8KN5Y2T03-}y)4DTvZQ2{FGkb+{k9z9p>nNeg8oNXSP&)a)FVNJfUT(%Z zlxe(G!u)JZwq9$qGP|q?4*m<;;i5ANeN~N~|yKWj&8Q3aguYJP#v4cb9M)tC;9$|fb zy)`a2ziDNP=ogbz9JTqkqg974|9J(4rMXA^sj~@tSaITbqRWvE&C5#P55KGQj}!J6 z7B}_APL74%6iaoL2MtK$sOjE`X~?DG=K==!_&d_UmxNa$D^6L-CejE&tA0ir)yKI- z7M!#@{6A(iTfga>n%8sNCQ5XjRjHmg4N-w8d3lTMTFGO8)C#`Y} z&XeQvQ%ti<<`U4w^KUZbSCrCfW^SmaFCMmGJ-WwkF$?Zg-mU59wy7SsrU#R9 z>9(a^GHZ+^y$gE@1^y5JD5{dQe~CajK2ygk!(wv=}ehROsfUO29mJ^y$9 zSJaJ1RY4Vo3WE~Gu}e}Qt;$@wPmF<{mWoE=>%VeTVemFxG_Q_9dK~Mwj4kO-Ex)PU z=*(v48NWsfeK)bQ?PW-VZ(wMjNA5@Ukm2mB2qAfaH!lNPT$dxiz0VUu38bM2b?kYH z4r}Q6oZF=MmY>}}Y;1>CAmxdj9rtx2G8+;SbH**pYY7{kmFhl;NRR39u+noQHP8w=m9bKrxBBgf`{VpOcaWLLvbt(6iM|>cDCk;PGu&uxD*my23Xa1; zct~_QJVOqa*y-$SBe=`1ff06C(UuImWq4xogcD0*^A*jrwt6zPKMpi&Tfg6bvFtf^a+>>isfj%a;xAX?3-aCQ338?X-7QIajL=ibeU2<&#--*pIXv{SALM9=j&|5U^{ ze9W+(2QpDT>Q+*D<|e8BMC|2#yr|*S@i`zi(=HKeKe+4ej zj^w;mb#pY8zRQ{G{hIOCtBXDUdHaEM9g|!gLHtGZY8D5v|MBg@=gm%LpFl}&RyP73 zO-c5zX-BN+3~7#S-o4HwFF~y0(8dXG%2V`CKbys$Pc~*P9%&CRZ2}#Z5}k@`DJcp; z9hATT#yp*&&)DwVrD9fh0iXEm3;XuX5+&>1!qkGoqn#q-#Qx|BDNLr3Myq}~cVn`C z)xumx$1C%RfqH+sbozk4ihQ?Yh_iO_t5? zb&?*Mvbn+$-+Y;UNGLM1FifmG`%@8|dT)Wc{4SakqARMs!v=; z)%uUczvK{K8&Lqz_nftYl;59dj)85D+cKQ#NX@*p;NTk-1B@?M+n-$c(;$gc#cw@BTa8)i5qC70~LCjZ*Z~{*vF-rrK zD{Z2FpIcb*J@!KZk?SOW%1yrC6Hf!LWRf_691}U>n3z8&+U?4Z>QC8UDe0R}-`eN| zr#m6$n9>IdqI*^Vnzr8xsO@q%7kBZ7pX!{E=I;4jzEs!!@*m!FO3=^ZTO|2ZsAyolLKp&n)lx>+>9hWWoC*_%Yp6=T7` z&J;gIE*A&r>FF&HusRVk+XjG<3O7#(D{ny}izGAY!*pU;lKoI}I-~HJN;P>QJdg;4W;Et`$`P2FK9N^R0 zOf8kuu5N7=jL^Ey@2|Zt`82bN3-r&m?tI4EGDc4$rWB7@;^bZ4{;Xw>urYr@|RNW2g0@d>JuMXv+?9>M&c}`c@ES=-}@GjbCZf`2j&P z6&F)D7&*XOaC$bcM|Li~^O=qsQ>5i33+FLU#;dWbmRDC5J%awlgg5l9Pw)KZNC35U z-F3=;>hRf^LdC@vA!1*j2pw3+Cd&5t&O#i*3Lrc5mJe}C;-_!^e3H>Utv9@fhkq$> z*V;O{`(+=hZNIm#81of&^;BLdHE|>={AqQ44;&kObK0D?;dwil4f^d4rkv|XHcUXA z-QDq=I)!`i$&vv)XVjFo20FQ(rG^ZHfrrOsZ9I-|Q@}>4e-b`&TUxDH?zsg!0^{O94^y9owFBtos zypeV`(=i}2^u##s;t;Sb*c=v!e-eN#??i1kiRc=-ap~1=$Vvn`PMJ}`O>Kpqziyb@ zX-wj}UQoe9n*+Lxl@!D#6_PV6Ef7^oLJu~bTq~}L?Z9EO(h$eaSUh%NhR??Gl~8cF zeGdM-cO=XHAvk9o&d+Zj0%V9=OZr`D=5m?G{-ljO%|j zvHg0E1V#dy1V^$(gms?~1n6h&*>XQoPiR>pue}7xC1+>aqZDNzqd7Kaf)bcbn9iAW zx*w{0cyOO*9y?GI%FAKsa5_Gz%yB7%bNDKw&*dT6`)fN`M}_GYiNy$iblRD zGFfGDsTGUm_5X6?*zEfh7d!UgN2zllwB=|bYmn02d3AhPCMx%Yb-U|diK3W>Fw zrzjat;PoC^O-W=zsev^R2`xKeJqPP8k2xJUQ|-X@e&SolteaU@2FjNQQ!12)-lo36 zC89b^jbFITJyiW(kT>hL89zT>1bv)i0i;;VnjIrn8}$p6|Q1Y)xt|u?Duc$`L%XjFj;N0 z>leB##IOmN1f6FQimTN@{$xsaPVd=T6hZq|v}9aOud240lPJ^3y}Xw__uFOclngXq z-d(ZX4QN;J1iBCmk;F!_%aA>#oZjyIPlwLEar{TnbX=B`zrVT2adxajztXuM|?Sf!@zKRI=5+;?_Zfp?hw+Y`n5!=m(iaR9(MJ}QVGo?LP zPQKIUXW}%3&wC}98jLJ_$%&RcJOdmoC5N89A#hK(tPh=CnPd&X%Iz$A{>r+ay{oH- zeF-X4ZAZIeJnzb>+yL#KBO5FP)XDF~`{&MvLazR4ck zt!@?jsbEt8ifABfo0onh%|4J$GaVkO5Kfa9i=m;N^WBX_K2EN?6v zgcW4uu-|caM~MFsBhU9^WWg7&mJFKMJypKQO4j#Ddi8!el~0o^A=MZZ^T}u7`u|&+RV_0-yb& z0b9NxNKYeb>*@V_xB&g(=3pQ{CEnHa0!{@ur93vQ;zGZb8^!C1M@+d^?TcdSc0f|^ zh?}Fw=S=Kux_`5flbgpuJY-w*DgJP)3M?l0Q_WP0{e(OrV*=Yah)@d1{D2U#o+JlESlqHn!} z0bkI&sO7`YbPl&}J!#-Nz&vG~$>svS02|6-wLb*JcInKSOGSro_3w8b{{I{3;z9CF3*z literal 0 HcmV?d00001 diff --git a/doc/monitoring/performance/img/grafana_save_icon.png b/doc/monitoring/performance/img/grafana_save_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3d4265bee8e08e369f0ac0de9221835a214553a3 GIT binary patch literal 16024 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 Date: Tue, 22 Mar 2016 13:43:32 -0500 Subject: [PATCH 058/132] Clear original input after crop This fixes the case when the user selects the same image consecutively. It failed because no 'change' event was fired. --- app/assets/javascripts/gl_crop.js.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/javascripts/gl_crop.js.coffee b/app/assets/javascripts/gl_crop.js.coffee index a9bee3cab77..df9bfdfa6cc 100644 --- a/app/assets/javascripts/gl_crop.js.coffee +++ b/app/assets/javascripts/gl_crop.js.coffee @@ -105,6 +105,7 @@ class GitLabCrop @setBlob() @setPreview() @modalCrop.modal('hide') + @fileInput.val('') onActionBtnClick: (btn) -> data = $(btn).data() From edac38c4397342bcee57ccd135b742de877331d4 Mon Sep 17 00:00:00 2001 From: connorshea Date: Tue, 22 Mar 2016 14:58:29 -0600 Subject: [PATCH 059/132] Fixes last remaining lints and enables scss-lint test for GitLab CI. With this, builds will now fail if they break the SCSS style guide (at least, the parts enabled by the linter). Discussed in #14299. --- .csscomb.json | 32 +++++++++++-------- .gitlab-ci.yml | 1 - app/assets/stylesheets/framework/filters.scss | 2 +- app/assets/stylesheets/framework/fonts.scss | 4 +++ app/assets/stylesheets/framework/nav.scss | 2 +- app/assets/stylesheets/notify.scss | 10 +++--- 6 files changed, 29 insertions(+), 22 deletions(-) diff --git a/.csscomb.json b/.csscomb.json index e353e6a63d0..741cc1488b5 100644 --- a/.csscomb.json +++ b/.csscomb.json @@ -1,16 +1,20 @@ { - "always-semicolon": true, - "color-case": "lower", - "block-indent": " ", - "color-shorthand": true, - "element-case": "lower", - "space-before-colon": "", - "space-after-colon": " ", - "space-before-combinator": " ", - "space-after-combinator": " ", - "space-between-declarations": "\n", - "space-before-opening-brace": " ", - "space-after-opening-brace": "\n", - "space-before-closing-brace": "\n", - "unitless-zero": true + "exclude": [ + "app/assets/stylesheets/framework/tw_bootstrap_variables.scss", + "app/assets/stylesheets/framework/fonts.scss" + ], + "always-semicolon": true, + "color-case": "lower", + "block-indent": " ", + "color-shorthand": true, + "element-case": "lower", + "space-before-colon": "", + "space-after-colon": " ", + "space-before-combinator": " ", + "space-after-combinator": " ", + "space-between-declarations": "\n", + "space-before-opening-brace": " ", + "space-after-opening-brace": "\n", + "space-before-closing-brace": "\n", + "unitless-zero": true } diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2ad63548d78..53f115c92c8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -128,7 +128,6 @@ scss-lint: - bundle exec rake scss_lint tags: - ruby - allow_failure: true brakeman: stage: test diff --git a/app/assets/stylesheets/framework/filters.scss b/app/assets/stylesheets/framework/filters.scss index 99e49a70923..b05c5df1bd8 100644 --- a/app/assets/stylesheets/framework/filters.scss +++ b/app/assets/stylesheets/framework/filters.scss @@ -15,7 +15,7 @@ @media (max-width: $screen-xs-max) { .filter-item { display: block; - margin: 0 0 10px 0; + margin: 0 0 10px; } } diff --git a/app/assets/stylesheets/framework/fonts.scss b/app/assets/stylesheets/framework/fonts.scss index 7a946109e3a..5f9685bc71a 100644 --- a/app/assets/stylesheets/framework/fonts.scss +++ b/app/assets/stylesheets/framework/fonts.scss @@ -1,3 +1,7 @@ +// Disabling "SpaceAfterPropertyColon" linter because the linter doesn't like +// the way the `src` property is formatted in this file. +// scss-lint:disable SpaceAfterPropertyColon + /* latin-ext */ @font-face { font-family: 'Source Sans Pro'; diff --git a/app/assets/stylesheets/framework/nav.scss b/app/assets/stylesheets/framework/nav.scss index 625a0bf69c6..95bdd6d1ea3 100644 --- a/app/assets/stylesheets/framework/nav.scss +++ b/app/assets/stylesheets/framework/nav.scss @@ -132,7 +132,7 @@ padding-bottom: 0; .btn, form, .dropdown, .dropdown-menu-toggle, .form-control { - margin: 0 0 10px 0; + margin: 0 0 10px; display: block; width: 100%; } diff --git a/app/assets/stylesheets/notify.scss b/app/assets/stylesheets/notify.scss index f1d42f80f56..0a13a7e0b54 100644 --- a/app/assets/stylesheets/notify.scss +++ b/app/assets/stylesheets/notify.scss @@ -3,12 +3,12 @@ img { height: auto; } p.details { - font-style:italic; - color:#777 + font-style: italic; + color: #777 } .footer p { - font-size:small; - color:#777 + font-size: small; + color: #777 } pre.commit-message { white-space: pre-wrap; @@ -20,5 +20,5 @@ pre.commit-message { color: #090; } .file-stats .deleted-file { - color: #B00; + color: #b00; } From b1a93fffacdc0994021153aa88407c04054ae317 Mon Sep 17 00:00:00 2001 From: Arinde Eniola Date: Tue, 22 Mar 2016 22:54:34 +0100 Subject: [PATCH 060/132] fix missing tooltip in project title --- app/views/groups/show.html.haml | 2 +- app/views/projects/_home_panel.html.haml | 2 +- app/views/shared/groups/_group.html.haml | 2 +- app/views/shared/projects/_project.html.haml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/groups/show.html.haml b/app/views/groups/show.html.haml index 820743dc8dd..3d16ecb097a 100644 --- a/app/views/groups/show.html.haml +++ b/app/views/groups/show.html.haml @@ -17,7 +17,7 @@ .cover-title %h1 = @group.name - %span.visibility-icon.has_tooltip{ data: { container: 'body' }, title: visibility_icon_description(@group) } + %span.visibility-icon.has-tooltip{ data: { container: 'body' }, title: visibility_icon_description(@group) } = visibility_level_icon(@group.visibility_level, fw: false) .cover-desc.username diff --git a/app/views/projects/_home_panel.html.haml b/app/views/projects/_home_panel.html.haml index 514cbfa339d..9b5de17dd3b 100644 --- a/app/views/projects/_home_panel.html.haml +++ b/app/views/projects/_home_panel.html.haml @@ -5,7 +5,7 @@ .cover-title.project-home-desc %h1 = @project.name - %span.visibility-icon.has_tooltip{data: { container: 'body' }, title: visibility_icon_description(@project)} + %span.visibility-icon.has-tooltip{data: { container: 'body' }, title: visibility_icon_description(@project)} = visibility_level_icon(@project.visibility_level, fw: false) - if @project.description.present? diff --git a/app/views/shared/groups/_group.html.haml b/app/views/shared/groups/_group.html.haml index 66b7ef99650..40c6eb9be45 100644 --- a/app/views/shared/groups/_group.html.haml +++ b/app/views/shared/groups/_group.html.haml @@ -21,7 +21,7 @@ = icon('users') = number_with_delimiter(group.users.count) - %span.visibility-icon.has_tooltip{data: { container: 'body', placement: 'left' }, title: visibility_icon_description(group)} + %span.visibility-icon.has-tooltip{data: { container: 'body', placement: 'left' }, title: visibility_icon_description(group)} = visibility_level_icon(group.visibility_level, fw: false) = image_tag group_icon(group), class: "avatar s40 hidden-xs" diff --git a/app/views/shared/projects/_project.html.haml b/app/views/shared/projects/_project.html.haml index 803dd95bc65..53ff8959bc8 100644 --- a/app/views/shared/projects/_project.html.haml +++ b/app/views/shared/projects/_project.html.haml @@ -27,7 +27,7 @@ %span = icon('star') = project.star_count - %span.visibility-icon.has_tooltip{data: { container: 'body', placement: 'left' }, title: visibility_icon_description(project)} + %span.visibility-icon.has-tooltip{data: { container: 'body', placement: 'left' }, title: visibility_icon_description(project)} = visibility_level_icon(project.visibility_level, fw: false) .title From f4a361a2a878086405240490567668dfac8d9bd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Tue, 22 Mar 2016 18:01:31 -0500 Subject: [PATCH 061/132] Sanitize commit title when creating revert commit. --- app/models/commit.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/commit.rb b/app/models/commit.rb index ce0b85d50cf..d0dbe009d0d 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -230,7 +230,7 @@ class Commit end def revert_message - %Q{Revert "#{title}"\n\n#{revert_description}} + %Q{Revert "#{title.strip}"\n\n#{revert_description}} end def reverts_commit?(commit) From 19a2adfa0cd42d48600bb3036c6ff90d15bb41e6 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 22 Mar 2016 20:26:57 -0400 Subject: [PATCH 062/132] Add special cases for built-in Rails routes in development --- config/routes.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/config/routes.rb b/config/routes.rb index 90d858d7fc1..a4b99871744 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -16,6 +16,18 @@ Rails.application.routes.draw do end end + # Make the built-in Rails routes available in development, otherwise they'd + # get swallowed by the `namespace/project` route matcher below. + # + # See https://git.io/va79N + if Rails.env.development? + get '/rails/mailers' => 'rails/mailers#index' + get '/rails/mailers/:path' => 'rails/mailers#preview' + get '/rails/info/properties' => 'rails/info#properties' + get '/rails/info/routes' => 'rails/info#routes' + get '/rails/info' => 'rails/info#index' + end + namespace :ci do # CI API Ci::API::API.logger Rails.logger From d967b122a9dc32ac6fda2f89327463656650020b Mon Sep 17 00:00:00 2001 From: Zeger-Jan van de Weg Date: Tue, 22 Mar 2016 13:49:24 +0100 Subject: [PATCH 063/132] Moving of issuables only when the record already exists --- app/views/shared/issuable/_form.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml index b01a36265f9..1ad2c09e13c 100644 --- a/app/views/shared/issuable/_form.html.haml +++ b/app/views/shared/issuable/_form.html.haml @@ -85,7 +85,7 @@ - if can? current_user, :admin_label, issuable.project = link_to 'Create new label', new_namespace_project_label_path(issuable.project.namespace, issuable.project), target: :blank -- if issuable.can_move?(current_user) +- if issuable.can_move?(current_user) && issuable.persisted? %hr .form-group = label_tag :move_to_project_id, 'Move', class: 'control-label' From 915bfedfa75947d42d0a92e0c00494d43d676b43 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Wed, 23 Mar 2016 09:39:37 +0100 Subject: [PATCH 064/132] Do not allow to move issue if it has not been persisted --- CHANGELOG | 2 +- app/models/issue.rb | 3 ++- app/services/issues/move_service.rb | 2 ++ app/views/shared/issuable/_form.html.haml | 2 +- spec/models/issue_spec.rb | 5 +++++ spec/services/issues/move_service_spec.rb | 6 ++++++ 6 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 00822465e3a..1cc8f377a6a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,7 +4,7 @@ v 8.7.0 (unreleased) - Make HTTP(s) label consistent on clone bar (Stan Hu) v 8.6.1 (unreleased) - + - Do not allow to move issue if it has not been persisted v 8.6.0 - Add ability to move issue to another project diff --git a/app/models/issue.rb b/app/models/issue.rb index f32db59ac9f..ed960cb39f4 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -146,7 +146,8 @@ class Issue < ActiveRecord::Base return false unless user.can?(:admin_issue, to_project) end - !moved? && user.can?(:admin_issue, self.project) + !moved? && persisted? && + user.can?(:admin_issue, self.project) end def to_branch_name diff --git a/app/services/issues/move_service.rb b/app/services/issues/move_service.rb index 3cfbafe1576..468f8acdf64 100644 --- a/app/services/issues/move_service.rb +++ b/app/services/issues/move_service.rb @@ -78,6 +78,8 @@ module Issues end def unfold_references(content) + return unless content + rewriter = Gitlab::Gfm::ReferenceRewriter.new(content, @old_project, @current_user) rewriter.rewrite(@new_project) diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml index 1ad2c09e13c..b01a36265f9 100644 --- a/app/views/shared/issuable/_form.html.haml +++ b/app/views/shared/issuable/_form.html.haml @@ -85,7 +85,7 @@ - if can? current_user, :admin_label, issuable.project = link_to 'Create new label', new_namespace_project_label_path(issuable.project.namespace, issuable.project), target: :blank -- if issuable.can_move?(current_user) && issuable.persisted? +- if issuable.can_move?(current_user) %hr .form-group = label_tag :move_to_project_id, 'Move', class: 'control-label' diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index 3c34b1d397f..15052aaca28 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -152,6 +152,11 @@ describe Issue, models: true do it { is_expected.to eq true } + context 'issue not persisted' do + let(:issue) { build(:issue, project: project) } + it { is_expected.to eq false } + end + context 'checking destination project also' do subject { issue.can_move?(user, to_project) } let(:to_project) { create(:project) } diff --git a/spec/services/issues/move_service_spec.rb b/spec/services/issues/move_service_spec.rb index 14cc20e529a..ade3b7850f1 100644 --- a/spec/services/issues/move_service_spec.rb +++ b/spec/services/issues/move_service_spec.rb @@ -208,6 +208,12 @@ describe Issues::MoveService, services: true do it { expect { move }.to raise_error(StandardError, /permissions/) } end + + context 'issue is not persisted' do + include_context 'user can move issue' + let(:old_issue) { build(:issue, project: old_project, author: author) } + it { expect { move }.to raise_error(StandardError, /permissions/) } + end end end end From 8d147219cdee7eb7f698f0330576f854e0bd0a04 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 18 Mar 2016 16:53:15 +0000 Subject: [PATCH 065/132] Added clear button to dropdown filter --- app/assets/javascripts/gl_dropdown.js.coffee | 21 +++++++++++++++++-- .../stylesheets/framework/dropdowns.scss | 20 ++++++++++++++++-- app/helpers/dropdowns_helper.rb | 3 ++- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee index 960585245d7..be05250a3a8 100644 --- a/app/assets/javascripts/gl_dropdown.js.coffee +++ b/app/assets/javascripts/gl_dropdown.js.coffee @@ -1,13 +1,30 @@ class GitLabDropdownFilter BLUR_KEYCODES = [27, 40] + HAS_VALUE_CLASS = "has-value" constructor: (@dropdown, @options) -> - @input = @dropdown.find(".dropdown-input .dropdown-input-field") + @input = @dropdown.find('.dropdown-input .dropdown-input-field') + $inputContainer = @input.parent() + $clearButton = $inputContainer.find('.js-dropdown-input-clear') + + # Clear click + $clearButton.on 'click', (e) => + e.preventDefault() + e.stopPropagation() + @input + .val('') + .trigger('keyup') + .focus() # Key events timeout = "" @input.on "keyup", (e) => - if e.keyCode is 13 && @input.val() isnt "" + if @input.val() isnt "" and !$inputContainer.hasClass HAS_VALUE_CLASS + $inputContainer.addClass HAS_VALUE_CLASS + else if @input.val() is "" and $inputContainer.hasClass HAS_VALUE_CLASS + $inputContainer.removeClass HAS_VALUE_CLASS + + if e.keyCode is 13 and @input.val() isnt "" if @options.enterCallback @options.enterCallback() return diff --git a/app/assets/stylesheets/framework/dropdowns.scss b/app/assets/stylesheets/framework/dropdowns.scss index d92cf6e6c44..fbead004ade 100644 --- a/app/assets/stylesheets/framework/dropdowns.scss +++ b/app/assets/stylesheets/framework/dropdowns.scss @@ -270,6 +270,22 @@ font-size: 12px; pointer-events: none; } + + .dropdown-input-clear { + display: none; + cursor: pointer; + pointer-events: all; + } + + &.has-value { + .dropdown-input-clear { + display: block; + } + + .dropdown-input-search { + display: none; + } + } } .dropdown-input-field { @@ -286,13 +302,13 @@ border-color: $dropdown-input-focus-border; box-shadow: 0 0 4px $dropdown-input-focus-shadow; - + .fa { + ~ .fa { color: $dropdown-link-color; } } &:hover { - + .fa { + ~ .fa { color: $dropdown-link-color; } } diff --git a/app/helpers/dropdowns_helper.rb b/app/helpers/dropdowns_helper.rb index ceff1fbb161..316a10b7da3 100644 --- a/app/helpers/dropdowns_helper.rb +++ b/app/helpers/dropdowns_helper.rb @@ -70,7 +70,8 @@ module DropdownsHelper def dropdown_filter(placeholder) content_tag :div, class: "dropdown-input" do filter_output = search_field_tag nil, nil, class: "dropdown-input-field", placeholder: placeholder - filter_output << icon('search') + filter_output << icon('search', class: "dropdown-input-search") + filter_output << icon('times', class: "dropdown-input-clear js-dropdown-input-clear", role: "button") filter_output.html_safe end From 6d40eee5ea5b37689e97eb26900f06ba51cf5715 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 18 Mar 2016 17:11:51 +0000 Subject: [PATCH 066/132] Added label color box in dropdown --- app/assets/javascripts/labels_select.js.coffee | 3 +++ app/assets/stylesheets/framework/dropdowns.scss | 14 +++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/labels_select.js.coffee b/app/assets/javascripts/labels_select.js.coffee index f3cb1e3bc09..684ad56cdb4 100644 --- a/app/assets/javascripts/labels_select.js.coffee +++ b/app/assets/javascripts/labels_select.js.coffee @@ -78,8 +78,11 @@ class @LabelsSelect else selected = if label.title is selectedLabel then 'is-active' else '' + color = if label.color? then "" else "" + "

" diff --git a/app/assets/stylesheets/framework/dropdowns.scss b/app/assets/stylesheets/framework/dropdowns.scss index fbead004ade..0fb7d94d0dd 100644 --- a/app/assets/stylesheets/framework/dropdowns.scss +++ b/app/assets/stylesheets/framework/dropdowns.scss @@ -354,11 +354,11 @@ } } -.dropdown-menu-labels { - .label { - position: relative; - width: 30px; - margin-right: 5px; - text-indent: -99999px; - } +.dropdown-label-box { + position: relative; + top: 3px; + display: inline-block; + width: 20px; + height: 16px; + border-radius: 3px; } From aec0e226691ef429a41adade45147ace61732514 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 22 Mar 2016 09:45:05 +0000 Subject: [PATCH 067/132] Adjusted alignment for the new label form --- .../javascripts/labels_select.js.coffee | 6 ++++ .../stylesheets/framework/dropdowns.scss | 11 ++++--- .../stylesheets/framework/variables.scss | 4 +-- app/assets/stylesheets/pages/labels.scss | 33 ++++++++++++++----- .../shared/issuable/_label_dropdown.html.haml | 14 +++++--- 5 files changed, 48 insertions(+), 20 deletions(-) diff --git a/app/assets/javascripts/labels_select.js.coffee b/app/assets/javascripts/labels_select.js.coffee index 684ad56cdb4..7805e95f96d 100644 --- a/app/assets/javascripts/labels_select.js.coffee +++ b/app/assets/javascripts/labels_select.js.coffee @@ -23,8 +23,14 @@ class @LabelsSelect newColorField.val $(this).data('color') $('.js-dropdown-label-color-preview') .css 'background-color', $(this).data('color') + .parent() .addClass 'is-active' + $('.js-cancel-label-btn').on 'click', (e) -> + e.preventDefault() + e.stopPropagation() + $('.dropdown-menu-back', $dropdown.parent()).trigger 'click' + $('.js-new-label-btn').on 'click', (e) -> e.preventDefault() e.stopPropagation() diff --git a/app/assets/stylesheets/framework/dropdowns.scss b/app/assets/stylesheets/framework/dropdowns.scss index 0fb7d94d0dd..20afc5c9dc0 100644 --- a/app/assets/stylesheets/framework/dropdowns.scss +++ b/app/assets/stylesheets/framework/dropdowns.scss @@ -183,7 +183,7 @@ } .dropdown-select { - width: 280px; + width: 300px; } .dropdown-menu-align-right { @@ -237,7 +237,7 @@ .dropdown-title-button { position: absolute; - top: -1px; + top: 0; padding: 0; color: $dropdown-title-btn-color; font-size: 14px; @@ -357,8 +357,9 @@ .dropdown-label-box { position: relative; top: 3px; + margin-right: 5px; display: inline-block; - width: 20px; - height: 16px; - border-radius: 3px; + width: 15px; + height: 15px; + border-radius: $border-radius-base; } diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss index be626678bd7..b014031e758 100644 --- a/app/assets/stylesheets/framework/variables.scss +++ b/app/assets/stylesheets/framework/variables.scss @@ -168,13 +168,13 @@ $regular_font: 'Source Sans Pro', "Helvetica Neue", Helvetica, Arial, sans-serif */ $dropdown-bg: #fff; $dropdown-link-color: #555; -$dropdown-link-hover-bg: rgba(#000, .04); +$dropdown-link-hover-bg: $row-hover; $dropdown-border-color: rgba(#000, .1); $dropdown-shadow-color: rgba(#000, .1); $dropdown-divider-color: rgba(#000, .1); $dropdown-header-color: #959494; $dropdown-title-btn-color: #bfbfbf; -$dropdown-input-color: #c7c7c7; +$dropdown-input-color: #555; $dropdown-input-focus-border: rgb(58, 171, 240); $dropdown-input-focus-shadow: rgba(#000, .2); $dropdown-loading-bg: rgba(#fff, .6); diff --git a/app/assets/stylesheets/pages/labels.scss b/app/assets/stylesheets/pages/labels.scss index 3c13573c8fe..4e02ec4e891 100644 --- a/app/assets/stylesheets/pages/labels.scss +++ b/app/assets/stylesheets/pages/labels.scss @@ -9,28 +9,45 @@ } &.suggest-colors-dropdown { - margin-bottom: 5px; + margin-top: 10px; + margin-bottom: 10px; + border-radius: $border-radius-base; + overflow: hidden; a { @include border-radius(0); - width: 36.7px; + width: (100% / 7); margin-right: 0; margin-bottom: -5px; } } } -.dropdown-label-color-preview { - display: none; - margin-top: 5px; - width: 100%; - height: 25px; +.dropdown-new-label { + .dropdown-content { + max-height: 260px; + } +} + +.dropdown-label-color-input { + position: relative; + margin-bottom: 10px; &.is-active { - display: block; + padding-left: 32px; } } +.dropdown-label-color-preview { + position: absolute; + left: 0; + top: 0; + width: 32px; + height: 32px; + border-top-left-radius: $border-radius-base; + border-bottom-left-radius: $border-radius-base; +} + .label-row { .label { padding: 9px; diff --git a/app/views/shared/issuable/_label_dropdown.html.haml b/app/views/shared/issuable/_label_dropdown.html.haml index 186087e8f89..006a34a11e3 100644 --- a/app/views/shared/issuable/_label_dropdown.html.haml +++ b/app/views/shared/issuable/_label_dropdown.html.haml @@ -24,17 +24,21 @@ - else View labels - if can? current_user, :admin_label, @project and @project - .dropdown-page-two + .dropdown-page-two.dropdown-new-label = dropdown_title("Create new label", back: true) = dropdown_content do .dropdown-labels-error.js-label-error - %input#new_label_color{type: "hidden"} %input#new_label_name.dropdown-input-field{type: "text", placeholder: "Name new label"} - .dropdown-label-color-preview.js-dropdown-label-color-preview .suggest-colors.suggest-colors-dropdown - suggested_colors.each do |color| = link_to '#', style: "background-color: #{color}", data: { color: color } do   - %button.btn.btn-primary.js-new-label-btn{type: "button"} - Create + .dropdown-label-color-input + .dropdown-label-color-preview.js-dropdown-label-color-preview + %input#new_label_color.dropdown-input-field{ type: "text" } + .clearfix + %button.btn.btn-primary.pull-left.js-new-label-btn{type: "button"} + Create + %button.btn.btn-default.pull-right.js-cancel-label-btn{type: "button"} + Cancel = dropdown_loading From 4c5babd94bce061a77073025fe5bf63433624ea8 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 22 Mar 2016 09:49:14 +0000 Subject: [PATCH 068/132] Removed bold on any/unassigned authors --- app/assets/javascripts/users_select.js.coffee | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/app/assets/javascripts/users_select.js.coffee b/app/assets/javascripts/users_select.js.coffee index 3d6452d2f46..84193400890 100644 --- a/app/assets/javascripts/users_select.js.coffee +++ b/app/assets/javascripts/users_select.js.coffee @@ -30,6 +30,7 @@ class @UsersSelect if showNullUser showDivider += 1 users.unshift( + beforeDivider: true name: 'Unassigned', id: 0 ) @@ -39,6 +40,7 @@ class @UsersSelect name = showAnyUser name = 'Any User' if name == true anyUser = { + beforeDivider: true name: name, id: null } @@ -75,20 +77,27 @@ class @UsersSelect selected = if user.id is selectedId then "is-active" else "" img = "" - if avatar - img = "" - - "
  • - - #{img} - + if user.beforeDivider? + "
  • + #{user.name} - - - #{username} - - -
  • " + + " + else + if avatar + img = "" + + "
  • + + #{img} + + #{user.name} + + + #{username} + + +
  • " ) $('.ajax-users-select').each (i, select) => From fee01133eafdb46972a22d9806898e79e7245ef2 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 22 Mar 2016 10:17:03 +0000 Subject: [PATCH 069/132] Changed colour of no matching results bg Highlights first row when filtering --- app/assets/javascripts/gl_dropdown.js.coffee | 20 ++++++++++++++----- .../stylesheets/framework/dropdowns.scss | 6 ++++++ .../stylesheets/framework/variables.scss | 1 + 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee index be05250a3a8..4b78bcde774 100644 --- a/app/assets/javascripts/gl_dropdown.js.coffee +++ b/app/assets/javascripts/gl_dropdown.js.coffee @@ -2,8 +2,7 @@ class GitLabDropdownFilter BLUR_KEYCODES = [27, 40] HAS_VALUE_CLASS = "has-value" - constructor: (@dropdown, @options) -> - @input = @dropdown.find('.dropdown-input .dropdown-input-field') + constructor: (@input, @options) -> $inputContainer = @input.parent() $clearButton = $inputContainer.find('.js-dropdown-input-clear') @@ -112,7 +111,9 @@ class GitLabDropdown # Init filiterable if @options.filterable - @filter = new GitLabDropdownFilter @dropdown, + @input = @dropdown.find('.dropdown-input .dropdown-input-field') + + @filter = new GitLabDropdownFilter @input, remote: @options.filterRemote query: @options.data keys: @options.search.fields @@ -120,6 +121,7 @@ class GitLabDropdown return @fullData callback: (data) => @parseData data + @highlightRow 1 enterCallback: => @selectFirstRow() @@ -241,11 +243,19 @@ class GitLabDropdown noResults: -> html = "
  • " - html += "" + html += "" html += "No matching results." html += "" html += "
  • " + highlightRow: (index) -> + if @input.val() isnt "" + selector = '.dropdown-content li:first-child a' + if @dropdown.find(".dropdown-toggle-page").length + selector = ".dropdown-page-one .dropdown-content li:first-child a" + + $(selector).addClass 'is-focused' + rowClicked: (el) -> fieldName = @options.fieldName field = @dropdown.parent().find("input[name='#{fieldName}']") @@ -289,7 +299,7 @@ class GitLabDropdown if @dropdown.find(".dropdown-toggle-page").length selector = ".dropdown-page-one .dropdown-content li:first-child a" - # similute a click on the first link + # simulate a click on the first link $(selector).trigger "click" $.fn.glDropdown = (opts) -> diff --git a/app/assets/stylesheets/framework/dropdowns.scss b/app/assets/stylesheets/framework/dropdowns.scss index 20afc5c9dc0..2d616fc660c 100644 --- a/app/assets/stylesheets/framework/dropdowns.scss +++ b/app/assets/stylesheets/framework/dropdowns.scss @@ -130,6 +130,12 @@ text-decoration: none; outline: 0; } + + &.dropdown-menu-empty-link { + &.is-focused { + background-color: $dropdown-empty-row-bg; + } + } } } diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss index b014031e758..61e0dd4d672 100644 --- a/app/assets/stylesheets/framework/variables.scss +++ b/app/assets/stylesheets/framework/variables.scss @@ -169,6 +169,7 @@ $regular_font: 'Source Sans Pro', "Helvetica Neue", Helvetica, Arial, sans-serif $dropdown-bg: #fff; $dropdown-link-color: #555; $dropdown-link-hover-bg: $row-hover; +$dropdown-empty-row-bg: rgba(#000, .04); $dropdown-border-color: rgba(#000, .1); $dropdown-shadow-color: rgba(#000, .1); $dropdown-divider-color: rgba(#000, .1); From bb0a4c057f25dcdba41be36b96faa808ac80c852 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 22 Mar 2016 13:23:01 +0000 Subject: [PATCH 070/132] Fixed failing tests --- features/steps/dashboard/issues.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/features/steps/dashboard/issues.rb b/features/steps/dashboard/issues.rb index f4a56865532..93aa77589be 100644 --- a/features/steps/dashboard/issues.rb +++ b/features/steps/dashboard/issues.rb @@ -43,10 +43,10 @@ class Spinach::Features::DashboardIssues < Spinach::FeatureSteps step 'I click "All" link' do find('.js-author-search').click - find('.dropdown-menu-user-full-name', match: :first).click + find('.dropdown-content a', match: :first).click find('.js-assignee-search').click - find('.dropdown-menu-user-full-name', match: :first).click + find('.dropdown-content a', match: :first).click end def should_see(issue) From 7dc16346bba174d6075cf438adcd70a5596ba935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Tue, 22 Mar 2016 19:19:53 +0100 Subject: [PATCH 071/132] Fix an issue causing the Dashboard/Milestones page to be blank --- app/controllers/concerns/global_milestones.rb | 5 +++- .../dashboard/application_controller.rb | 6 ++++ .../dashboard/milestones_controller.rb | 12 ++++---- app/controllers/dashboard_controller.rb | 29 +------------------ app/helpers/labels_helper.rb | 2 +- app/helpers/milestones_helper.rb | 2 +- config/routes.rb | 3 +- 7 files changed, 20 insertions(+), 39 deletions(-) diff --git a/app/controllers/concerns/global_milestones.rb b/app/controllers/concerns/global_milestones.rb index 54ea1e454fc..f5eace47df4 100644 --- a/app/controllers/concerns/global_milestones.rb +++ b/app/controllers/concerns/global_milestones.rb @@ -6,7 +6,10 @@ module GlobalMilestones @milestones = MilestonesFinder.new.execute(@projects, params) @milestones = GlobalMilestone.build_collection(@milestones) @milestones = @milestones.sort_by { |x| x.due_date.nil? ? epoch : x.due_date } - @milestones = Kaminari.paginate_array(@milestones).page(params[:page]) + + if request.format == :html + @milestones = Kaminari.paginate_array(@milestones).page(params[:page]) + end end def milestone diff --git a/app/controllers/dashboard/application_controller.rb b/app/controllers/dashboard/application_controller.rb index 962ea38d6c9..9d3d1c23c28 100644 --- a/app/controllers/dashboard/application_controller.rb +++ b/app/controllers/dashboard/application_controller.rb @@ -1,3 +1,9 @@ class Dashboard::ApplicationController < ApplicationController layout 'dashboard' + + private + + def projects + @projects ||= current_user.authorized_projects.sorted_by_activity.non_archived + end end diff --git a/app/controllers/dashboard/milestones_controller.rb b/app/controllers/dashboard/milestones_controller.rb index 2bdce0f8a00..0a4a4088404 100644 --- a/app/controllers/dashboard/milestones_controller.rb +++ b/app/controllers/dashboard/milestones_controller.rb @@ -6,14 +6,14 @@ class Dashboard::MilestonesController < Dashboard::ApplicationController before_action :milestone, only: [:show] def index + respond_to do |format| + format.html + format.json do + render json: @milestones + end + end end def show end - - private - - def projects - @projects ||= current_user.authorized_projects.sorted_by_activity.non_archived - end end diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index b538c7d1608..1dce4a21729 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -3,7 +3,7 @@ class DashboardController < Dashboard::ApplicationController include MergeRequestsAction before_action :event_filter, only: :activity - before_action :projects, only: [:issues, :merge_requests, :labels, :milestones] + before_action :projects, only: [:issues, :merge_requests] respond_to :html @@ -20,29 +20,6 @@ class DashboardController < Dashboard::ApplicationController end end - def labels - labels = Label.where(project_id: @projects).select(:title, :color).uniq(:title) - - respond_to do |format| - format.json do - render json: labels - end - end - end - - def milestones - milestones = Milestone.where(project_id: @projects).active - epoch = DateTime.parse('1970-01-01') - grouped_milestones = GlobalMilestone.build_collection(milestones) - grouped_milestones = grouped_milestones.sort_by { |x| x.due_date.nil? ? epoch : x.due_date } - - respond_to do |format| - format.json do - render json: grouped_milestones - end - end - end - protected def load_events @@ -57,8 +34,4 @@ class DashboardController < Dashboard::ApplicationController @events = @event_filter.apply_filter(@events).with_associations @events = @events.limit(20).offset(params[:offset] || 0) end - - def projects - @projects ||= current_user.authorized_projects.sorted_by_activity.non_archived - end end diff --git a/app/helpers/labels_helper.rb b/app/helpers/labels_helper.rb index e0a8552dfa7..3dded7c2f23 100644 --- a/app/helpers/labels_helper.rb +++ b/app/helpers/labels_helper.rb @@ -114,7 +114,7 @@ module LabelsHelper if @project namespace_project_labels_path(@project.namespace, @project, :json) else - labels_dashboard_path(:json) + dashboard_labels_path(:json) end end diff --git a/app/helpers/milestones_helper.rb b/app/helpers/milestones_helper.rb index c9d8787bd19..87fc2db6901 100644 --- a/app/helpers/milestones_helper.rb +++ b/app/helpers/milestones_helper.rb @@ -50,7 +50,7 @@ module MilestonesHelper if @project namespace_project_milestones_path(@project.namespace, @project, :json) else - milestones_dashboard_path(:json) + dashboard_milestones_path(:json) end end diff --git a/config/routes.rb b/config/routes.rb index 90d858d7fc1..4a3c23b7c1c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -351,11 +351,10 @@ Rails.application.routes.draw do get :issues get :merge_requests get :activity - get :labels - get :milestones scope module: :dashboard do resources :milestones, only: [:index, :show] + resources :labels, only: [:index] resources :groups, only: [:index] resources :snippets, only: [:index] From e989d12b0768f0caa7ea1a429a2182e26bbf225a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Wed, 23 Mar 2016 09:09:58 +0100 Subject: [PATCH 072/132] Use respond_to instead of a conditional to paginate milestones --- app/controllers/concerns/global_milestones.rb | 4 ---- app/controllers/dashboard/milestones_controller.rb | 7 ++++--- app/controllers/groups/milestones_controller.rb | 6 +++++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/app/controllers/concerns/global_milestones.rb b/app/controllers/concerns/global_milestones.rb index f5eace47df4..5c503c5b698 100644 --- a/app/controllers/concerns/global_milestones.rb +++ b/app/controllers/concerns/global_milestones.rb @@ -6,10 +6,6 @@ module GlobalMilestones @milestones = MilestonesFinder.new.execute(@projects, params) @milestones = GlobalMilestone.build_collection(@milestones) @milestones = @milestones.sort_by { |x| x.due_date.nil? ? epoch : x.due_date } - - if request.format == :html - @milestones = Kaminari.paginate_array(@milestones).page(params[:page]) - end end def milestone diff --git a/app/controllers/dashboard/milestones_controller.rb b/app/controllers/dashboard/milestones_controller.rb index 0a4a4088404..fa9c6c054f0 100644 --- a/app/controllers/dashboard/milestones_controller.rb +++ b/app/controllers/dashboard/milestones_controller.rb @@ -2,14 +2,15 @@ class Dashboard::MilestonesController < Dashboard::ApplicationController include GlobalMilestones before_action :projects - before_action :milestones, only: [:index] before_action :milestone, only: [:show] def index respond_to do |format| - format.html + format.html do + @milestones = Kaminari.paginate_array(milestones).page(params[:page]) + end format.json do - render json: @milestones + render json: milestones end end end diff --git a/app/controllers/groups/milestones_controller.rb b/app/controllers/groups/milestones_controller.rb index 0028f072d5b..b23c3022fb5 100644 --- a/app/controllers/groups/milestones_controller.rb +++ b/app/controllers/groups/milestones_controller.rb @@ -2,11 +2,15 @@ class Groups::MilestonesController < Groups::ApplicationController include GlobalMilestones before_action :group_projects - before_action :milestones, only: [:index] before_action :milestone, only: [:show, :update] before_action :authorize_admin_milestones!, only: [:new, :create, :update] def index + respond_to do |format| + format.html do + @milestones = Kaminari.paginate_array(milestones).page(params[:page]) + end + end end def new From ce44e5a787482e4d02cee007d35ab30ab651f6f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Wed, 23 Mar 2016 11:39:58 +0100 Subject: [PATCH 073/132] Add missing Dashboard::LabelsController --- .../dashboard/labels_controller.rb | 9 ++++++ spec/features/dashboard_milestones_spec.rb | 29 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 app/controllers/dashboard/labels_controller.rb create mode 100644 spec/features/dashboard_milestones_spec.rb diff --git a/app/controllers/dashboard/labels_controller.rb b/app/controllers/dashboard/labels_controller.rb new file mode 100644 index 00000000000..23a4ef21ea2 --- /dev/null +++ b/app/controllers/dashboard/labels_controller.rb @@ -0,0 +1,9 @@ +class Dashboard::LabelsController < Dashboard::ApplicationController + def index + labels = Label.where(project_id: projects).select(:title, :color).uniq(:title) + + respond_to do |format| + format.json { render json: labels } + end + end +end diff --git a/spec/features/dashboard_milestones_spec.rb b/spec/features/dashboard_milestones_spec.rb new file mode 100644 index 00000000000..f32fddbc9fa --- /dev/null +++ b/spec/features/dashboard_milestones_spec.rb @@ -0,0 +1,29 @@ +require 'spec_helper' + +feature 'Dashboard > Milestones', feature: true do + describe 'as anonymous user' do + before do + visit dashboard_milestones_path + end + + it 'is redirected to sign-in page' do + expect(current_path).to eq new_user_session_path + end + end + + describe 'as logged-in user' do + let(:user) { create(:user) } + let(:project) { create(:empty_project, namespace: user.namespace) } + let!(:milestone) { create(:milestone, project: project) } + before do + project.team << [user, :master] + login_with(user) + visit dashboard_milestones_path + end + + it 'sees milestones' do + expect(current_path).to eq dashboard_milestones_path + expect(page).to have_content(milestone.title) + end + end +end From 260b9415dff29758df109d7840c995de9170f39f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Wed, 23 Mar 2016 11:52:23 +0100 Subject: [PATCH 074/132] Add CHANGELOG item --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 924358a4f0b..2a52c428273 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,7 @@ v 8.7.0 (unreleased) v 8.6.1 (unreleased) - Do not allow to move issue if it has not been persisted + - Fix an issue causing the Dashboard/Milestones page to be blank v 8.6.0 - Add ability to move issue to another project From 7e2806a1230f57b73e7d0628ba917af96537f8fc Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 23 Mar 2016 10:36:30 +0000 Subject: [PATCH 075/132] Added tests for setting multiple status on issues --- app/views/shared/issuable/_filter.html.haml | 2 +- spec/features/issues/update_issues_spec.rb | 47 +++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 spec/features/issues/update_issues_spec.rb diff --git a/app/views/shared/issuable/_filter.html.haml b/app/views/shared/issuable/_filter.html.haml index 53952e608ea..781d890b51a 100644 --- a/app/views/shared/issuable/_filter.html.haml +++ b/app/views/shared/issuable/_filter.html.haml @@ -31,7 +31,7 @@ .issues_bulk_update.hide = form_tag bulk_update_namespace_project_issues_path(@project.namespace, @project), method: :post do .filter-item.inline - = dropdown_tag("Status", options: { toggle_class: "js-issue-status", title: "Change status", dropdown_class: "dropdown-menu-selectable", data: { field_name: "update[state_event]" } } ) do + = dropdown_tag("Status", options: { toggle_class: "js-issue-status", title: "Change status", dropdown_class: "dropdown-menu-status dropdown-menu-selectable", data: { field_name: "update[state_event]" } } ) do %ul %li %a{href: "#", data: {id: "reopen"}} Open diff --git a/spec/features/issues/update_issues_spec.rb b/spec/features/issues/update_issues_spec.rb new file mode 100644 index 00000000000..27707d49b9c --- /dev/null +++ b/spec/features/issues/update_issues_spec.rb @@ -0,0 +1,47 @@ +require 'rails_helper' + +feature 'Multiple issue updating from issues#index', feature: true do + let!(:project) { create(:project) } + let!(:issue) { create(:issue, project: project) } + let!(:user) { create(:user)} + + context 'status update', js: true do + before do + project.team << [user, :master] + login_as(user) + end + + it 'should be set to closed' do + visit namespace_project_issues_path(project.namespace, project) + + find('#check_all_issues').click + find('.js-issue-status').click + + find('.dropdown-menu-status a', text: 'Closed').click + click_update_issues_button + expect(page).to have_selector('.issue', count: 0) + end + + it 'should be set to open' do + create_closed + visit namespace_project_issues_path(project.namespace, project) + + find('.issues-state-filters a', text: 'Closed').click + + find('#check_all_issues').click + find('.js-issue-status').click + + find('.dropdown-menu-status a', text: 'Open').click + click_update_issues_button + expect(page).to have_selector('.issue', count: 0) + end + end + + def create_closed + create(:issue, project: project, state: :closed) + end + + def click_update_issues_button + find('.update_selected_issues').click + end +end From 84f124a14fe9f955f737386b2805d1203e28259e Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 23 Mar 2016 11:18:39 +0000 Subject: [PATCH 076/132] Assignee tests --- app/views/shared/issuable/_filter.html.haml | 2 +- spec/features/issues/update_issues_spec.rb | 40 +++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/app/views/shared/issuable/_filter.html.haml b/app/views/shared/issuable/_filter.html.haml index 781d890b51a..719ddfa9881 100644 --- a/app/views/shared/issuable/_filter.html.haml +++ b/app/views/shared/issuable/_filter.html.haml @@ -38,7 +38,7 @@ %li %a{href: "#", data: {id: "close"}} Closed .filter-item.inline - = dropdown_tag("Assignee", options: { toggle_class: "js-user-search", title: "Assign to", filter: true, dropdown_class: "dropdown-menu-user dropdown-menu-selectable", + = dropdown_tag("Assignee", options: { toggle_class: "js-user-search js-update-assignee", title: "Assign to", filter: true, dropdown_class: "dropdown-menu-user dropdown-menu-selectable", placeholder: "Search authors", data: { first_user: (current_user.username if current_user), null_user: true, current_user: true, project_id: @project.id, field_name: "update[assignee_id]" } }) .filter-item.inline = dropdown_tag("Milestone", options: { title: "Assign milestone", toggle_class: 'js-milestone-select', filter: true, dropdown_class: "dropdown-menu-selectable", diff --git a/spec/features/issues/update_issues_spec.rb b/spec/features/issues/update_issues_spec.rb index 27707d49b9c..70e218cc14f 100644 --- a/spec/features/issues/update_issues_spec.rb +++ b/spec/features/issues/update_issues_spec.rb @@ -37,10 +37,50 @@ feature 'Multiple issue updating from issues#index', feature: true do end end + context 'assignee update', js: true do + before do + project.team << [user, :master] + login_as(user) + end + + it 'should update to current user' do + visit namespace_project_issues_path(project.namespace, project) + + find('#check_all_issues').click + find('.js-update-assignee').click + + find('.dropdown-menu-user-link', text: user.username).click + click_update_issues_button + + page.within('.issue .controls') do + expect(find('.author_link')["data-original-title"]).to have_content(user.name) + end + end + + it 'should update to unassigned' do + create_assigned + visit namespace_project_issues_path(project.namespace, project) + + find('#check_all_issues').click + find('.js-update-assignee').click + + find('.dropdown-menu-user-link', text: "Unassigned").click + click_update_issues_button + + within first('.issue .controls') do + expect(page).to have_no_selector('.author_link') + end + end + end + def create_closed create(:issue, project: project, state: :closed) end + def create_assigned + create(:issue, project: project, assignee: user) + end + def click_update_issues_button find('.update_selected_issues').click end From 23bfa7a3bdee0ba192babc274bb14b6a51dc8209 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 23 Mar 2016 11:45:24 +0000 Subject: [PATCH 077/132] Update milestone spec --- app/views/shared/issuable/_filter.html.haml | 2 +- spec/features/issues/update_issues_spec.rb | 52 ++++++++++++++++----- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/app/views/shared/issuable/_filter.html.haml b/app/views/shared/issuable/_filter.html.haml index 719ddfa9881..f91ff0e3694 100644 --- a/app/views/shared/issuable/_filter.html.haml +++ b/app/views/shared/issuable/_filter.html.haml @@ -41,7 +41,7 @@ = dropdown_tag("Assignee", options: { toggle_class: "js-user-search js-update-assignee", title: "Assign to", filter: true, dropdown_class: "dropdown-menu-user dropdown-menu-selectable", placeholder: "Search authors", data: { first_user: (current_user.username if current_user), null_user: true, current_user: true, project_id: @project.id, field_name: "update[assignee_id]" } }) .filter-item.inline - = dropdown_tag("Milestone", options: { title: "Assign milestone", toggle_class: 'js-milestone-select', filter: true, dropdown_class: "dropdown-menu-selectable", + = dropdown_tag("Milestone", options: { title: "Assign milestone", toggle_class: 'js-milestone-select', filter: true, dropdown_class: "dropdown-menu-selectable dropdown-menu-milestone", placeholder: "Search milestones", data: { show_no: true, field_name: "update[milestone_id]", project_id: @project.id, milestones: namespace_project_milestones_path(@project.namespace, @project, :json), use_id: true } }) = hidden_field_tag 'update[issues_ids]', [] = hidden_field_tag :state_event, params[:state_event] diff --git a/spec/features/issues/update_issues_spec.rb b/spec/features/issues/update_issues_spec.rb index 70e218cc14f..121954fabca 100644 --- a/spec/features/issues/update_issues_spec.rb +++ b/spec/features/issues/update_issues_spec.rb @@ -5,12 +5,12 @@ feature 'Multiple issue updating from issues#index', feature: true do let!(:issue) { create(:issue, project: project) } let!(:user) { create(:user)} - context 'status update', js: true do - before do - project.team << [user, :master] - login_as(user) - end + before do + project.team << [user, :master] + login_as(user) + end + context 'status', js: true do it 'should be set to closed' do visit namespace_project_issues_path(project.namespace, project) @@ -37,12 +37,7 @@ feature 'Multiple issue updating from issues#index', feature: true do end end - context 'assignee update', js: true do - before do - project.team << [user, :master] - login_as(user) - end - + context 'assignee', js: true do it 'should update to current user' do visit namespace_project_issues_path(project.namespace, project) @@ -73,6 +68,37 @@ feature 'Multiple issue updating from issues#index', feature: true do end end + context 'milestone', js: true do + let(:milestone) { create(:milestone, project: project) } + + it 'should update milestone' do + visit namespace_project_issues_path(project.namespace, project) + + find('#check_all_issues').click + find('.issues_bulk_update .js-milestone-select').click + + find('.dropdown-menu-milestone a', text: milestone.title).click + click_update_issues_button + + expect(find('.issue')).to have_content milestone.title + end + + it 'should set to no milestone' do + create_with_milestone + visit namespace_project_issues_path(project.namespace, project) + + expect(first('.issue')).to have_content milestone.title + + find('#check_all_issues').click + find('.issues_bulk_update .js-milestone-select').click + + find('.dropdown-menu-milestone a', text: "No Milestone").click + click_update_issues_button + + expect(first('.issue')).to_not have_content milestone.title + end + end + def create_closed create(:issue, project: project, state: :closed) end @@ -81,6 +107,10 @@ feature 'Multiple issue updating from issues#index', feature: true do create(:issue, project: project, assignee: user) end + def create_with_milestone + create(:issue, project: project, milestone: milestone) + end + def click_update_issues_button find('.update_selected_issues').click end From 8fac12c590e808537c447119343f860f269eb67d Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Tue, 22 Mar 2016 15:25:53 +0100 Subject: [PATCH 078/132] Fix build dependencies, when the dependency is a string --- CHANGELOG | 1 + lib/ci/gitlab_ci_yaml_processor.rb | 4 ++-- spec/lib/ci/gitlab_ci_yaml_processor_spec.rb | 6 +++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 2a52c428273..6462b7188c9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -16,6 +16,7 @@ v 8.6.0 - Fix diff image view modes (2-up, swipe, onion skin) not working (Stan Hu) - Support Golang subpackage fetching (Stan Hu) - Bump Capybara gem to 2.6.2 (Stan Hu) + - Fix build dependencies, when the dependency is a string - New branch button appears on issues where applicable - Contributions to forked projects are included in calendar - Improve the formatting for the user page bio (Connor Shea) diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb index 2228425076b..b7209c14148 100644 --- a/lib/ci/gitlab_ci_yaml_processor.rb +++ b/lib/ci/gitlab_ci_yaml_processor.rb @@ -242,9 +242,9 @@ module Ci stage_index = stages.index(job[:stage]) job[:dependencies].each do |dependency| - raise ValidationError, "#{name} job: undefined dependency: #{dependency}" unless @jobs[dependency] + raise ValidationError, "#{name} job: undefined dependency: #{dependency}" unless @jobs[dependency.to_sym] - unless stages.index(@jobs[dependency][:stage]) < stage_index + unless stages.index(@jobs[dependency.to_sym][:stage]) < stage_index raise ValidationError, "#{name} job: dependency #{dependency} is not defined in prior stages" end end diff --git a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb index b79b8147ce0..d9812032c85 100644 --- a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb +++ b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb @@ -492,19 +492,19 @@ module Ci end context 'dependencies to builds' do - let(:dependencies) { [:build1, :build2] } + let(:dependencies) { ['build1', 'build2'] } it { expect { subject }.to_not raise_error } end context 'undefined dependency' do - let(:dependencies) { [:undefined] } + let(:dependencies) { ['undefined'] } it { expect { subject }.to raise_error(GitlabCiYamlProcessor::ValidationError, 'test1 job: undefined dependency: undefined') } end context 'dependencies to deploy' do - let(:dependencies) { [:deploy] } + let(:dependencies) { ['deploy'] } it { expect { subject }.to raise_error(GitlabCiYamlProcessor::ValidationError, 'test1 job: dependency deploy is not defined in prior stages') } end From 858bf727bc4841bf5bbcff7348fd46ea2090e753 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Tue, 22 Mar 2016 15:27:55 +0100 Subject: [PATCH 079/132] Test dependencies defined as symbols --- spec/lib/ci/gitlab_ci_yaml_processor_spec.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb index d9812032c85..dcb8a3451bd 100644 --- a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb +++ b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb @@ -497,6 +497,12 @@ module Ci it { expect { subject }.to_not raise_error } end + context 'dependencies to builds defined as symbols' do + let(:dependencies) { [:build1, :build2] } + + it { expect { subject }.to_not raise_error } + end + context 'undefined dependency' do let(:dependencies) { ['undefined'] } From 68c0dc1fbe99e2f72826e4806a745c5e5e4405f3 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Tue, 22 Mar 2016 18:30:37 +0100 Subject: [PATCH 080/132] Update CHANGELOG --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 6462b7188c9..4652ebb1136 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,6 +6,7 @@ v 8.7.0 (unreleased) v 8.6.1 (unreleased) - Do not allow to move issue if it has not been persisted - Fix an issue causing the Dashboard/Milestones page to be blank + - Fix build dependencies, when the dependency is a string v 8.6.0 - Add ability to move issue to another project @@ -16,7 +17,6 @@ v 8.6.0 - Fix diff image view modes (2-up, swipe, onion skin) not working (Stan Hu) - Support Golang subpackage fetching (Stan Hu) - Bump Capybara gem to 2.6.2 (Stan Hu) - - Fix build dependencies, when the dependency is a string - New branch button appears on issues where applicable - Contributions to forked projects are included in calendar - Improve the formatting for the user page bio (Connor Shea) From 7eaad6e46a42c7c118706bdf8676edd48275b642 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 23 Mar 2016 12:02:07 +0000 Subject: [PATCH 081/132] Fixed bold in sidebar --- app/views/shared/issuable/_sidebar.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/shared/issuable/_sidebar.html.haml b/app/views/shared/issuable/_sidebar.html.haml index 5b2772de3f1..4789ae98f74 100644 --- a/app/views/shared/issuable/_sidebar.html.haml +++ b/app/views/shared/issuable/_sidebar.html.haml @@ -77,7 +77,7 @@ Labels - if can?(current_user, :"admin_#{issuable.to_ability_name}", @project) = link_to 'Edit', '#', class: 'edit-link pull-right' - .value.issuable-show-labels.hide-collapsed{class: ("has-labels" if issuable.labels.any?)} + .value.bold.issuable-show-labels.hide-collapsed{class: ("has-labels" if issuable.labels.any?)} - if issuable.labels.any? - issuable.labels.each do |label| = link_to_label(label, type: issuable.to_ability_name) From 9374b7eb0b28527123abad40a070ee4a5b1f0d9f Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Wed, 23 Mar 2016 20:05:31 +0800 Subject: [PATCH 082/132] Avoid using the same name between methods and variables --- lib/gitlab/email/receiver.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/gitlab/email/receiver.rb b/lib/gitlab/email/receiver.rb index 2ca21af5bc8..d4b6f6d120d 100644 --- a/lib/gitlab/email/receiver.rb +++ b/lib/gitlab/email/receiver.rb @@ -45,12 +45,12 @@ module Gitlab note = create_note(reply) unless note.persisted? - message = "The comment could not be created for the following reasons:" + msg = "The comment could not be created for the following reasons:" note.errors.full_messages.each do |error| - message << "\n\n- #{error}" + msg << "\n\n- #{error}" end - raise InvalidNoteError, message + raise InvalidNoteError, msg end end @@ -63,13 +63,13 @@ module Gitlab end def reply_key - reply_key = nil + key = nil message.to.each do |address| - reply_key = Gitlab::IncomingEmail.key_from_address(address) - break if reply_key + key = Gitlab::IncomingEmail.key_from_address(address) + break if key end - reply_key + key end def sent_notification From ecc060d701968b75009f47a3b7ac5b727022782c Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Wed, 23 Mar 2016 20:22:09 +0800 Subject: [PATCH 083/132] Make sure we get only two returns --- app/models/project.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index 9c8246e8ac0..2285063ab50 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -304,7 +304,7 @@ class Project < ActiveRecord::Base end def find_with_namespace(id) - namespace_path, project_path = id.split('/') + namespace_path, project_path = id.split('/', 2) return nil if !namespace_path || !project_path From bab50e0133e226c06b7a968c2bfa46717de81485 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Wed, 23 Mar 2016 12:41:53 +0100 Subject: [PATCH 084/132] Preserve time notes has been updated at when moving issue --- app/services/issues/move_service.rb | 3 ++- spec/services/issues/move_service_spec.rb | 21 +++++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/app/services/issues/move_service.rb b/app/services/issues/move_service.rb index 468f8acdf64..a5efb21fab6 100644 --- a/app/services/issues/move_service.rb +++ b/app/services/issues/move_service.rb @@ -54,7 +54,8 @@ module Issues new_note = note.dup new_params = { project: @new_project, noteable: @new_issue, note: unfold_references(new_note.note), - created_at: note.created_at } + created_at: note.created_at, + updated_at: note.updated_at } new_note.update(new_params) end diff --git a/spec/services/issues/move_service_spec.rb b/spec/services/issues/move_service_spec.rb index ade3b7850f1..9b0c73aaf37 100644 --- a/spec/services/issues/move_service_spec.rb +++ b/spec/services/issues/move_service_spec.rb @@ -85,6 +85,10 @@ describe Issues::MoveService, services: true do expect(old_issue.moved?).to eq true expect(old_issue.moved_to).to eq new_issue end + + it 'preserves create time' do + expect(old_issue.created_at).to eq new_issue.created_at + end end context 'issue with notes' do @@ -121,10 +125,23 @@ describe Issues::MoveService, services: true do it 'preserves orignal author of comment' do expect(user_notes.pluck(:author_id)).to all(eq(author.id)) end + end + + context 'note that has been updated' do + let!(:note) do + create(:note, noteable: old_issue, project: old_project, + author: author, updated_at: Date.yesterday, + created_at: Date.yesterday) + end + + include_context 'issue move executed' it 'preserves time when note has been created at' do - expect(old_issue.notes.first.created_at) - .to eq new_issue.notes.first.created_at + expect(new_issue.notes.first.created_at).to eq note.created_at + end + + it 'preserves time when note has been updated at' do + expect(new_issue.notes.first.updated_at).to eq note.updated_at end end From 85b9d763f17e4f8a24610684b570ae02bf0f7522 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Wed, 23 Mar 2016 13:24:15 +0100 Subject: [PATCH 085/132] Add Changelog entry for preserving timestamps when moving issue --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 924358a4f0b..79e49d41902 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ Please view this file on the master branch, on stable branches it's out of date. v 8.7.0 (unreleased) + - Preserve time notes/comments have been updated at when moving issue - Make HTTP(s) label consistent on clone bar (Stan Hu) v 8.6.1 (unreleased) From 0141d3654ffd535366a4405c0ee58f9a6998c58f Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 23 Mar 2016 13:29:41 +0000 Subject: [PATCH 086/132] Disable new label form in dropdown until fields are complete --- .../javascripts/labels_select.js.coffee | 79 ++++++++++++++----- 1 file changed, 58 insertions(+), 21 deletions(-) diff --git a/app/assets/javascripts/labels_select.js.coffee b/app/assets/javascripts/labels_select.js.coffee index 7805e95f96d..e08648d583b 100644 --- a/app/assets/javascripts/labels_select.js.coffee +++ b/app/assets/javascripts/labels_select.js.coffee @@ -6,7 +6,7 @@ class @LabelsSelect labelUrl = $dropdown.data('labels') selectedLabel = $dropdown.data('selected') if selectedLabel - selectedLabel = selectedLabel.split(',') + selectedLabel = selectedLabel.toString().split(',') newLabelField = $('#new_label_name') newColorField = $('#new_label_color') showNo = $dropdown.data('show-no') @@ -14,44 +14,81 @@ class @LabelsSelect defaultLabel = $dropdown.data('default-label') if newLabelField.length + $newLabelCreateButton = $('.js-new-label-btn') + $colorPreview = $('.js-dropdown-label-color-preview') $newLabelError = $dropdown.parent().find('.js-label-error') $newLabelError.hide() + # Suggested colors in the dropdown to chose from pre-chosen colors $('.suggest-colors-dropdown a').on 'click', (e) -> e.preventDefault() e.stopPropagation() - newColorField.val $(this).data('color') - $('.js-dropdown-label-color-preview') + newColorField + .val($(this).data('color')) + .trigger('change') + $colorPreview .css 'background-color', $(this).data('color') .parent() .addClass 'is-active' + # Cancel button takes back to first page + resetForm = -> + newLabelField + .val '' + .trigger 'change' + newColorField + .val '' + .trigger 'change' + $colorPreview + .css 'background-color', '' + .parent() + .removeClass 'is-active' + + $('.dropdown-menu-back').on 'click', -> + resetForm() + $('.js-cancel-label-btn').on 'click', (e) -> e.preventDefault() e.stopPropagation() + resetForm() $('.dropdown-menu-back', $dropdown.parent()).trigger 'click' - $('.js-new-label-btn').on 'click', (e) -> - e.preventDefault() - e.stopPropagation() - + # Listen for change and keyup events on label and color field + # This allows us to enable the button when ready + enableLabelCreateButton = -> if newLabelField.val() isnt '' and newColorField.val() isnt '' - $newLabelError.hide() - $('.js-new-label-btn').disable() + $newLabelCreateButton.enable() + else + $newLabelCreateButton.disable() - # Create new label with API - Api.newLabel projectId, { - name: newLabelField.val() - color: newColorField.val() - }, (label) -> - $('.js-new-label-btn').enable() + newLabelField.on 'keyup change', enableLabelCreateButton - if label.message? - $newLabelError - .text label.message - .show() - else - $('.dropdown-menu-back', $dropdown.parent()).trigger 'click' + newColorField.on 'keyup change', enableLabelCreateButton + + # Send the API call to create the label + $newLabelCreateButton + .disable() + .on 'click', (e) -> + e.preventDefault() + e.stopPropagation() + + if newLabelField.val() isnt '' and newColorField.val() isnt '' + $newLabelError.hide() + $('.js-new-label-btn').disable() + + # Create new label with API + Api.newLabel projectId, { + name: newLabelField.val() + color: newColorField.val() + }, (label) -> + $('.js-new-label-btn').enable() + + if label.message? + $newLabelError + .text label.message + .show() + else + $('.dropdown-menu-back', $dropdown.parent()).trigger 'click' $dropdown.glDropdown( data: (term, callback) -> From c23d9ab4edfd0b9f5d28e81759d48862e3e06b15 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 23 Mar 2016 13:59:54 +0000 Subject: [PATCH 087/132] Fixed error with applications delete enonymous token form Closes #14509 --- app/views/doorkeeper/applications/index.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/doorkeeper/applications/index.html.haml b/app/views/doorkeeper/applications/index.html.haml index ea0b66c932b..55f4a6f287d 100644 --- a/app/views/doorkeeper/applications/index.html.haml +++ b/app/views/doorkeeper/applications/index.html.haml @@ -77,7 +77,7 @@ %em Authorization was granted by entering your username and password in the application. %td= token.created_at %td= token.scopes - %td= render 'delete_form', token: token + %td= render 'doorkeeper/authorized_applications/delete_form', token: token - else .profile-settings-message.text-center You don't have any authorized applications From a4fa5d3e3d0ab680495c8cfbe9fb85fd25dfe767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Wed, 23 Mar 2016 15:58:02 +0100 Subject: [PATCH 088/132] Updated 8.6.1 changelog [ci skip] --- CHANGELOG | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 4088057c4e7..2c1f2a5400c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,10 +4,20 @@ v 8.7.0 (unreleased) - Preserve time notes/comments have been updated at when moving issue - Make HTTP(s) label consistent on clone bar (Stan Hu) -v 8.6.1 (unreleased) - - Do not allow to move issue if it has not been persisted - - Fix an issue causing the Dashboard/Milestones page to be blank - - Fix build dependencies, when the dependency is a string +v 8.6.1 + - Add option to reload the schema before restoring a database backup. !2807 + - Display navigation controls on mobile. !3214 + - Fixed bug where participants would not work correctly on merge requests. !3329 + - Fix sorting issues by votes on the groups issues page results in SQL errors. !3333 + - Restrict notifications for confidential issues. !3334 + - Do not allow to move issue if it has not been persisted. !3340 + - Add a confirmation step before deleting an issuable. !3341 + - Fixes issue with signin button overflowing on mobile. !3342 + - Auto collapses the navigation sidebar when resizing. !3343 + - Fix build dependencies, when the dependency is a string. !3344 + - Shows error messages when trying to create label in dropdown menu. !3345 + - Fixes issue with assign milestone not loading milestone list. !3346 + - Fix an issue causing the Dashboard/Milestones page to be blank. !3348 v 8.6.0 - Add ability to move issue to another project @@ -34,7 +44,6 @@ v 8.6.0 - Add information about `image` and `services` field at `job` level in the `.gitlab-ci.yml` documentation (Pat Turner) - HTTP error pages work independently from location and config (Artem Sidorenko) - Update `omniauth-saml` to 1.5.0 to allow for custom response attributes to be set - - Add option to reload the schema before restoring a database backup. !2807 - Memoize @group in Admin::GroupsController (Yatish Mehta) - Indicate how much an MR diverged from the target branch (Pierre de La Morinerie) - Added omniauth-auth0 Gem (Daniel Carraro) @@ -73,7 +82,6 @@ v 8.6.0 - Canceled builds are now ignored in compound build status if marked as `allowed to fail` - Trigger a todo for mentions on commits page - Let project owners and admins soft delete issues and merge requests - - Fix sorting issues by votes on the groups issues page results in SQL errors v 8.5.8 - Bump Git version requirement to 2.7.4 From b651a4fd410749642af7a0b658ef2e60a3f45ac9 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Wed, 23 Mar 2016 15:09:58 +0000 Subject: [PATCH 089/132] Fix Milestone.upcoming --- app/models/milestone.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/milestone.rb b/app/models/milestone.rb index de7183bf6b4..bbd59eab9ae 100644 --- a/app/models/milestone.rb +++ b/app/models/milestone.rb @@ -83,7 +83,7 @@ class Milestone < ActiveRecord::Base end def self.upcoming - self.where('due_date > ?', Time.now).order(due_date: :asc).first + self.where('due_date > ?', Time.now).reorder(due_date: :asc).first end def to_reference(from_project = nil) From 3bab5976c087df2cbc9c5ac7552c46f97bab1322 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Wed, 23 Mar 2016 11:54:04 -0500 Subject: [PATCH 090/132] Move cropper.js to vendor folder --- app/assets/javascripts/application.js.coffee | 1 + .../javascripts/lib => vendor/assets/javascripts}/cropper.js | 0 2 files changed, 1 insertion(+) rename {app/assets/javascripts/lib => vendor/assets/javascripts}/cropper.js (100%) diff --git a/app/assets/javascripts/application.js.coffee b/app/assets/javascripts/application.js.coffee index 01451830653..293e0c3bb34 100644 --- a/app/assets/javascripts/application.js.coffee +++ b/app/assets/javascripts/application.js.coffee @@ -43,6 +43,7 @@ #= require jquery.nicescroll #= require_tree . #= require fuzzaldrin-plus +#= require cropper window.slugify = (text) -> text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase() diff --git a/app/assets/javascripts/lib/cropper.js b/vendor/assets/javascripts/cropper.js similarity index 100% rename from app/assets/javascripts/lib/cropper.js rename to vendor/assets/javascripts/cropper.js From 128c109a344a9316dccf736a03446246fcee0b5a Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Wed, 23 Mar 2016 11:56:14 -0500 Subject: [PATCH 091/132] Move cropper.css to vendor folder --- {app => vendor}/assets/stylesheets/cropper.css | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {app => vendor}/assets/stylesheets/cropper.css (100%) diff --git a/app/assets/stylesheets/cropper.css b/vendor/assets/stylesheets/cropper.css similarity index 100% rename from app/assets/stylesheets/cropper.css rename to vendor/assets/stylesheets/cropper.css From e94482d1497cf6e1922261be48e5ebdcc33f44ae Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 18 Mar 2016 13:11:35 +0000 Subject: [PATCH 092/132] Issue sidebar overlaps on tablet --- app/assets/stylesheets/framework/sidebar.scss | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/app/assets/stylesheets/framework/sidebar.scss b/app/assets/stylesheets/framework/sidebar.scss index 6107c8a6d0a..769477ea4a9 100644 --- a/app/assets/stylesheets/framework/sidebar.scss +++ b/app/assets/stylesheets/framework/sidebar.scss @@ -27,14 +27,15 @@ } &.right-sidebar-expanded { - /* Extra small devices (phones, less than 768px) */ - /* No media query since this is the default in Bootstrap */ padding-right: 0; - /* Small devices (tablets, 768px and up) */ - @media (min-width: $screen-sm-min) { - padding-right: $gutter_width; + + @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) { + padding-right: $sidebar_collapsed_width; } + @media (min-width: $screen-md-min) { + padding-right: $gutter_width; + } } } @@ -209,15 +210,6 @@ padding-left: $sidebar_width; } - &.right-sidebar-collapsed { - /* Extra small devices (phones, less than 768px) */ - padding-right: 0; - /* Small devices (tablets, 768px and up) */ - @media (min-width: $screen-sm-min) { - padding-right: $sidebar_collapsed_width; - } - } - .sidebar-wrapper { width: $sidebar_width; @@ -241,9 +233,8 @@ padding-left: $sidebar_collapsed_width; &.right-sidebar-collapsed { - /* Extra small devices (phones, less than 768px) */ padding-right: 0; - /* Small devices (tablets, 768px and up) */ + @media (min-width: $screen-sm-min) { padding-right: $sidebar_collapsed_width; } From 2d7183bbe8de88d0ef5156a6224ab71eeb6e2f8c Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Mon, 21 Mar 2016 11:09:55 +0000 Subject: [PATCH 093/132] Fixed failing tests Moved the scss out of a mixin as it was really confusing the hell out of the CSS --- app/assets/javascripts/sidebar.js.coffee | 1 - app/assets/stylesheets/framework/sidebar.scss | 142 ++++++++---------- 2 files changed, 64 insertions(+), 79 deletions(-) diff --git a/app/assets/javascripts/sidebar.js.coffee b/app/assets/javascripts/sidebar.js.coffee index eea3f5ee910..860d4f438d0 100644 --- a/app/assets/javascripts/sidebar.js.coffee +++ b/app/assets/javascripts/sidebar.js.coffee @@ -4,7 +4,6 @@ expanded = 'page-sidebar-expanded' toggleSidebar = -> $('.page-with-sidebar').toggleClass("#{collapsed} #{expanded}") $('header').toggleClass("header-collapsed header-expanded") - $('.sidebar-wrapper').toggleClass("sidebar-collapsed sidebar-expanded") $('.toggle-nav-collapse i').toggleClass("fa-angle-right fa-angle-left") $.cookie("collapsed_nav", $('.page-with-sidebar').hasClass(collapsed), { path: '/' }) diff --git a/app/assets/stylesheets/framework/sidebar.scss b/app/assets/stylesheets/framework/sidebar.scss index 769477ea4a9..1f5c15abaa6 100644 --- a/app/assets/stylesheets/framework/sidebar.scss +++ b/app/assets/stylesheets/framework/sidebar.scss @@ -1,3 +1,10 @@ +#logo { + z-index: 2; + position: absolute; + width: 58px; + cursor: pointer; +} + .page-with-sidebar { padding-top: $header-height; transition-duration: .3s; @@ -18,25 +25,6 @@ position: absolute; left: 0; } - - #logo { - z-index: 2; - position: absolute; - width: 58px; - cursor: pointer; - } - - &.right-sidebar-expanded { - padding-right: 0; - - @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) { - padding-right: $sidebar_collapsed_width; - } - - @media (min-width: $screen-md-min) { - padding-right: $gutter_width; - } - } } .sidebar-wrapper { @@ -203,43 +191,28 @@ } } -@mixin expanded-sidebar { - padding-left: $sidebar_collapsed_width; - - @media (min-width: $screen-md-min) { - padding-left: $sidebar_width; - } - - .sidebar-wrapper { - width: $sidebar_width; - - .nav-sidebar { - width: $sidebar_width; - } - - .nav-sidebar li a{ - width: 230px; - - &.back-link { - i { - opacity: 0; - } - } - } - } +.collapse-nav a { + width: $sidebar_width; + position: fixed; + bottom: 0; + left: 0; + font-size: 13px; + background: transparent; + height: 40px; + text-align: center; + line-height: 40px; + transition-duration: .3s; + outline: none; } -@mixin collapsed-sidebar { +.collapse-nav a:hover { + text-decoration: none; + background: #f2f6f7; +} + +.page-sidebar-collapsed { padding-left: $sidebar_collapsed_width; - &.right-sidebar-collapsed { - padding-right: 0; - - @media (min-width: $screen-sm-min) { - padding-right: $sidebar_collapsed_width; - } - } - .sidebar-wrapper { width: $sidebar_collapsed_width; @@ -284,35 +257,48 @@ } } -.collapse-nav a { - width: $sidebar_width; - position: fixed; - bottom: 0; - left: 0; - font-size: 13px; - background: transparent; - height: 40px; - text-align: center; - line-height: 40px; - transition-duration: .3s; - outline: none; -} +.page-sidebar-expanded { + padding-left: $sidebar_collapsed_width; -.collapse-nav a:hover { - text-decoration: none; - background: #f2f6f7; -} + @media (min-width: $screen-md-min) { + padding-left: $sidebar_width; + } -.page-sidebar-collapsed { - /* Extra small devices (phones, less than 768px) */ - @include collapsed-sidebar; - padding-right: 0; - /* Small devices (tablets, 768px and up) */ - @media (min-width: $screen-sm-min) { - @include collapsed-sidebar; + .sidebar-wrapper { + width: $sidebar_width; + + .nav-sidebar { + width: $sidebar_width; + } + + .nav-sidebar li a { + width: 230px; + + &.back-link { + i { + opacity: 0; + } + } + } } } -.page-sidebar-expanded { - @include expanded-sidebar; +.right-sidebar-collapsed { + padding-right: 0; + + @media (min-width: $screen-sm-min) { + padding-right: $sidebar_collapsed_width; + } +} + +.right-sidebar-expanded { + padding-right: 0; + + @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) { + padding-right: $sidebar_collapsed_width; + } + + @media (min-width: $screen-md-min) { + padding-right: $gutter_width; + } } From 07a1da7e40d5ff7cd6d45463c2187d7f9c1460a8 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 23 Mar 2016 17:21:02 +0000 Subject: [PATCH 094/132] Removed hover background that wasn't needed --- app/assets/stylesheets/framework/sidebar.scss | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/assets/stylesheets/framework/sidebar.scss b/app/assets/stylesheets/framework/sidebar.scss index 1f5c15abaa6..9d188317783 100644 --- a/app/assets/stylesheets/framework/sidebar.scss +++ b/app/assets/stylesheets/framework/sidebar.scss @@ -203,11 +203,10 @@ line-height: 40px; transition-duration: .3s; outline: none; -} -.collapse-nav a:hover { - text-decoration: none; - background: #f2f6f7; + &:hover { + text-decoration: none; + } } .page-sidebar-collapsed { From 6c20e9a5bb6c6859081f550290e7b560cee6539a Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Wed, 23 Mar 2016 13:34:24 -0500 Subject: [PATCH 095/132] Update CHANGELOG --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 9a102b8f7ec..265302b1356 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ Please view this file on the master branch, on stable branches it's out of date. v 8.7.0 (unreleased) - Make HTTP(s) label consistent on clone bar (Stan Hu) + - Fix avatar stretching by providing a cropping feature v 8.6.1 (unreleased) From 2c9f6cfa4284a584a87d80fea53517f4a46bfabe Mon Sep 17 00:00:00 2001 From: connorshea Date: Wed, 23 Mar 2016 14:35:06 -0600 Subject: [PATCH 096/132] SCSS Style Guide fixes. Fix a typo and add a section on ignoring issues. [ci skip] --- doc/development/scss_styleguide.md | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/doc/development/scss_styleguide.md b/doc/development/scss_styleguide.md index 6c48c25448b..a79f4073cde 100644 --- a/doc/development/scss_styleguide.md +++ b/doc/development/scss_styleguide.md @@ -72,9 +72,9 @@ p { margin: 0; padding: 0; } ### Colors -HEX (hexadecimal) colors short-form should use shortform where possible, and -should use lower case letters to differenciate between letters and numbers, e. -g. `#E3E3E3` vs. `#e3e3e3`. +HEX (hexadecimal) colors should use shorthand where possible, and should use +lower case letters to differentiate between letters and numbers, e.g. `#E3E3E3` +vs. `#e3e3e3`. ```scss // Bad @@ -160,6 +160,7 @@ is slightly more performant. ``` ### Selectors with a `js-` Prefix + Do not use any selector prefixed with `js-` for styling purposes. These selectors are intended for use only with JavaScript to allow for removal or renaming without breaking styling. @@ -187,8 +188,28 @@ CSSComb globally (system-wide). Run it in the GitLab directory with Note that this won't fix every problem, but it should fix a majority. +### Ignoring issues + +If you want a line or set of lines to be ignored by the linter, you can use +`// scss-lint:disable RuleName` ([more info][disabling-linters]): + +```scss +// This lint rule is disabled because the class name comes from a gem. +// scss-lint:disable SelectorFormat +.ui_charcoal { + background-color: #333; +} +// scss-lint:enable SelectorFormat +``` + +Make sure a comment is added on the line above the `disable` rule, otherwise the +linter will throw a warning. `DisableLinterReason` is enabled to make sure the +style guide isn't being ignored, and to communicate to others why the style +guide is ignored in this instance. + [csscomb]: https://github.com/csscomb/csscomb.js [node]: https://github.com/nodejs/node [npm]: https://www.npmjs.com/ [scss-lint]: https://github.com/brigade/scss-lint [scss-lint-documentation]: https://github.com/brigade/scss-lint/blob/master/lib/scss_lint/linter/README.md +[disabling-linters]: https://github.com/brigade/scss-lint#disabling-linters-via-source From 2824972c36dae83e630c0c2067a6c21b93ef7d1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Thu, 24 Mar 2016 10:10:46 +0100 Subject: [PATCH 097/132] Fix specs broken by !3270 and !3337. --- app/assets/stylesheets/pages/profile.scss | 2 +- spec/features/issues/update_issues_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/stylesheets/pages/profile.scss b/app/assets/stylesheets/pages/profile.scss index d8c991356af..a9656e5cae7 100644 --- a/app/assets/stylesheets/pages/profile.scss +++ b/app/assets/stylesheets/pages/profile.scss @@ -214,7 +214,7 @@ } .crop-controls { - padding: 10px 0 0 0; + padding: 10px 0 0; text-align: center; } } diff --git a/spec/features/issues/update_issues_spec.rb b/spec/features/issues/update_issues_spec.rb index 121954fabca..3eb903a93fe 100644 --- a/spec/features/issues/update_issues_spec.rb +++ b/spec/features/issues/update_issues_spec.rb @@ -59,7 +59,7 @@ feature 'Multiple issue updating from issues#index', feature: true do find('#check_all_issues').click find('.js-update-assignee').click - find('.dropdown-menu-user-link', text: "Unassigned").click + click_link 'Unassigned' click_update_issues_button within first('.issue .controls') do From 6a5b3a5c8f920ea4624ed080371fb1f77f35289c Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 24 Mar 2016 11:22:44 +0000 Subject: [PATCH 098/132] Shows password form when signed in with linked account Closes #14379 --- app/views/profiles/passwords/edit.html.haml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/views/profiles/passwords/edit.html.haml b/app/views/profiles/passwords/edit.html.haml index afd4f996b62..44d758dceb3 100644 --- a/app/views/profiles/passwords/edit.html.haml +++ b/app/views/profiles/passwords/edit.html.haml @@ -24,12 +24,13 @@ = f.password_field :current_password, required: true, class: 'form-control' %p.help-block You must provide your current password in order to change it. - .form-group - = f.label :password, 'New password', class: 'label-light' - = f.password_field :password, required: true, class: 'form-control' - .form-group - = f.label :password_confirmation, class: 'label-light' - = f.password_field :password_confirmation, required: true, class: 'form-control' - .prepend-top-default.append-bottom-default - = f.submit 'Save password', class: "btn btn-create append-right-10" + .form-group + = f.label :password, 'New password', class: 'label-light' + = f.password_field :password, required: true, class: 'form-control' + .form-group + = f.label :password_confirmation, class: 'label-light' + = f.password_field :password_confirmation, required: true, class: 'form-control' + .prepend-top-default.append-bottom-default + = f.submit 'Save password', class: "btn btn-create append-right-10" + - unless @user.password_automatically_set? = link_to "I forgot my password", reset_profile_password_path, method: :put, class: "account-btn-link" From 4d7671e74d04879908b9bcee26685e2f43284680 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 24 Mar 2016 11:38:00 +0000 Subject: [PATCH 099/132] HAML style fix --- app/views/shared/issuable/_sidebar.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/shared/issuable/_sidebar.html.haml b/app/views/shared/issuable/_sidebar.html.haml index 4789ae98f74..0e20e86356d 100644 --- a/app/views/shared/issuable/_sidebar.html.haml +++ b/app/views/shared/issuable/_sidebar.html.haml @@ -77,7 +77,7 @@ Labels - if can?(current_user, :"admin_#{issuable.to_ability_name}", @project) = link_to 'Edit', '#', class: 'edit-link pull-right' - .value.bold.issuable-show-labels.hide-collapsed{class: ("has-labels" if issuable.labels.any?)} + .value.bold.issuable-show-labels.hide-collapsed{ class: ("has-labels" if issuable.labels.any?) } - if issuable.labels.any? - issuable.labels.each do |label| = link_to_label(label, type: issuable.to_ability_name) From 221c917c6c46246c3211207405a4849fb59e9636 Mon Sep 17 00:00:00 2001 From: Zeger-Jan van de Weg Date: Thu, 24 Mar 2016 12:09:42 +0100 Subject: [PATCH 100/132] Add tooltip to new branch button --- app/views/projects/issues/_new_branch.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/projects/issues/_new_branch.html.haml b/app/views/projects/issues/_new_branch.html.haml index e66e4669d48..6da8e4f33a9 100644 --- a/app/views/projects/issues/_new_branch.html.haml +++ b/app/views/projects/issues/_new_branch.html.haml @@ -1,5 +1,5 @@ - if current_user && can?(current_user, :push_code, @project) && @issue.can_be_worked_on?(current_user) .pull-right - = link_to namespace_project_branches_path(@project.namespace, @project, branch_name: @issue.to_branch_name, issue_iid: @issue.iid), method: :post, class: 'btn', title: @issue.to_branch_name do + = link_to namespace_project_branches_path(@project.namespace, @project, branch_name: @issue.to_branch_name, issue_iid: @issue.iid), method: :post, class: 'btn has-tooltip', title: @issue.to_branch_name do = icon('code-fork') New Branch From be3675c8ac2f362a12252b8bef56b102689be7f2 Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Thu, 24 Mar 2016 13:45:39 +0100 Subject: [PATCH 101/132] Explain why ExclusiveLease has no #cancel [ci skip] --- lib/gitlab/exclusive_lease.rb | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lib/gitlab/exclusive_lease.rb b/lib/gitlab/exclusive_lease.rb index 2ef50286b1d..c73eca832d7 100644 --- a/lib/gitlab/exclusive_lease.rb +++ b/lib/gitlab/exclusive_lease.rb @@ -15,6 +15,25 @@ module Gitlab # seconds then two overlapping operations may hold a lease for the same # key at the same time. # + # This class has no 'cancel' method. I originally decided against adding + # it because it would add complexity and a false sense of security. The + # complexity: instead of setting '1' we would have to set a UUID, and to + # delete it we would have to execute Lua on the Redis server to only + # delete the key if the value was our own UUID. Otherwise there is a + # chance that when you intend to cancel your lease you actually delete + # someone else's. The false sense of security: you cannot design your + # system to rely too much on the lease being cancelled after use because + # the calling (Ruby) process may crash or be killed. You _cannot_ count + # on begin/ensure blocks to cancel a lease, because the 'ensure' does + # not always run. Think of 'kill -9' from the Unicorn master for + # instance. + # + # If you find that leases are getting in your way, ask yourself: would + # it be enough to lower the lease timeout? Another thing that might be + # appropriate is to only use a lease for bulk/automated operations, and + # to ignore the lease when you get a single 'manual' user request (a + # button click). + # class ExclusiveLease def initialize(key, timeout:) @key, @timeout = key, timeout @@ -27,6 +46,8 @@ module Gitlab !!redis.set(redis_key, '1', nx: true, ex: @timeout) end + # No #cancel method. See comments above! + private def redis From d21b3a0211061a2fed5949e92320f100ab3df05b Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 24 Mar 2016 14:16:21 +0100 Subject: [PATCH 102/132] Add links to CI setup documentation from project settings and builds pages Signed-off-by: Dmitriy Zaporozhets --- CHANGELOG | 1 + app/views/projects/_builds_settings.html.haml | 8 ++++++++ app/views/projects/builds/index.html.haml | 3 +++ 3 files changed, 12 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index d9be95defd1..c5b316c66b2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,7 @@ v 8.7.0 (unreleased) - Preserve time notes/comments have been updated at when moving issue - Make HTTP(s) label consistent on clone bar (Stan Hu) - Fix avatar stretching by providing a cropping feature + - Add links to CI setup documentation from project settings and builds pages v 8.6.1 - Add option to reload the schema before restoring a database backup. !2807 diff --git a/app/views/projects/_builds_settings.html.haml b/app/views/projects/_builds_settings.html.haml index 95ab9ecf3e8..f1edc800bbf 100644 --- a/app/views/projects/_builds_settings.html.haml +++ b/app/views/projects/_builds_settings.html.haml @@ -1,6 +1,14 @@ %fieldset.builds-feature %legend Builds: + + - unless @project.builds.any? + .form-group + .col-sm-offset-2.col-sm-10 + %p Before you can use Builds (Continuous Integration) feature you need to setup it. + = link_to 'Get started with Builds', help_page_path('ci/quick_start', 'README'), class: 'btn btn-info' + %hr + .form-group .col-sm-offset-2.col-sm-10 %p Get recent application code using the following command: diff --git a/app/views/projects/builds/index.html.haml b/app/views/projects/builds/index.html.haml index 811d304ea75..d21716e4887 100644 --- a/app/views/projects/builds/index.html.haml +++ b/app/views/projects/builds/index.html.haml @@ -27,6 +27,9 @@ = link_to 'Cancel running', cancel_all_namespace_project_builds_path(@project.namespace, @project), data: { confirm: 'Are you sure?' }, class: 'btn btn-danger', method: :post + - unless @project.builds.any? + = link_to 'Get started with Builds', help_page_path('ci/quick_start', 'README'), class: 'btn btn-info' + = link_to ci_lint_path, class: 'btn btn-default' do = icon('wrench') %span CI Lint From 91d5876ea2065d3fc768f686aee716478d2bb5c2 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 24 Mar 2016 13:43:35 +0000 Subject: [PATCH 103/132] Fixed issue with width of project select dropdown --- app/assets/stylesheets/framework/common.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/stylesheets/framework/common.scss b/app/assets/stylesheets/framework/common.scss index 8625817fdab..9b676d759e0 100644 --- a/app/assets/stylesheets/framework/common.scss +++ b/app/assets/stylesheets/framework/common.scss @@ -378,6 +378,7 @@ table { position: absolute; top: 0; right: 0; + min-width: 250px; visibility: hidden; } } From 3b1543cd15fcc52c2f5f3b7f4ccf391334fb6028 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 24 Mar 2016 15:17:13 +0100 Subject: [PATCH 104/132] Detect build setup state based on gitlab_ci.yml presense Signed-off-by: Dmitriy Zaporozhets --- app/models/repository.rb | 4 ++++ app/views/projects/_builds_settings.html.haml | 2 +- app/views/projects/builds/index.html.haml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/models/repository.rb b/app/models/repository.rb index 13154eb4205..f874017a8f2 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -467,6 +467,10 @@ class Repository end end + def gitlab_ci_yml + @gitlab_ci_yml ||= blob_at(head_commit.sha, '.gitlab-ci.yml') unless empty? + end + def head_commit @head_commit ||= commit(self.root_ref) end diff --git a/app/views/projects/_builds_settings.html.haml b/app/views/projects/_builds_settings.html.haml index f1edc800bbf..095e7e45df7 100644 --- a/app/views/projects/_builds_settings.html.haml +++ b/app/views/projects/_builds_settings.html.haml @@ -2,7 +2,7 @@ %legend Builds: - - unless @project.builds.any? + - unless @repository.gitlab_ci_yml .form-group .col-sm-offset-2.col-sm-10 %p Before you can use Builds (Continuous Integration) feature you need to setup it. diff --git a/app/views/projects/builds/index.html.haml b/app/views/projects/builds/index.html.haml index d21716e4887..aa85f495e39 100644 --- a/app/views/projects/builds/index.html.haml +++ b/app/views/projects/builds/index.html.haml @@ -27,7 +27,7 @@ = link_to 'Cancel running', cancel_all_namespace_project_builds_path(@project.namespace, @project), data: { confirm: 'Are you sure?' }, class: 'btn btn-danger', method: :post - - unless @project.builds.any? + - unless @repository.gitlab_ci_yml = link_to 'Get started with Builds', help_page_path('ci/quick_start', 'README'), class: 'btn btn-info' = link_to ci_lint_path, class: 'btn btn-default' do From b105b84e3ac34915cf00b7bfec923abf98d035ab Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 24 Mar 2016 15:35:49 +0100 Subject: [PATCH 105/132] Use head tree (cached) for file search. Also add some tests Signed-off-by: Dmitriy Zaporozhets --- app/models/repository.rb | 6 +++++- spec/models/repository_spec.rb | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/app/models/repository.rb b/app/models/repository.rb index f874017a8f2..e36c6ab0f0a 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -468,7 +468,11 @@ class Repository end def gitlab_ci_yml - @gitlab_ci_yml ||= blob_at(head_commit.sha, '.gitlab-ci.yml') unless empty? + return nil if empty? + + @gitlab_ci_yml ||= tree(:head).blobs.find do |file| + file.name == '.gitlab-ci.yml' + end end def head_commit diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index 7eac70ae948..0ba9da29a97 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -148,6 +148,29 @@ describe Repository, models: true do end end + describe "#gitlab_ci_yml" do + before do + TestBlob = Struct.new(:name) + end + + it 'returns valid file' do + files = [TestBlob.new('file'), TestBlob.new('.gitlab-ci.yml'), TestBlob.new('copying')] + expect(repository.tree).to receive(:blobs).and_return(files) + + expect(repository.gitlab_ci_yml.name).to eq('.gitlab-ci.yml') + end + + it 'returns nil if not exists' do + expect(repository.tree).to receive(:blobs).and_return([]) + expect(repository.gitlab_ci_yml).to be_nil + end + + it 'returns nil for empty repository' do + expect(repository).to receive(:empty?).and_return(true) + expect(repository.gitlab_ci_yml).to be_nil + end + end + describe :add_branch do context 'when pre hooks were successful' do it 'should run without errors' do From 2da8204ff5444016861f5270af4bf58673e4370f Mon Sep 17 00:00:00 2001 From: Drew Blessing Date: Thu, 24 Mar 2016 09:58:13 -0500 Subject: [PATCH 106/132] Clarify LFS configuration --- doc/workflow/lfs/lfs_administration.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/workflow/lfs/lfs_administration.md b/doc/workflow/lfs/lfs_administration.md index 36cb9da2380..9dc1e9b47e3 100644 --- a/doc/workflow/lfs/lfs_administration.md +++ b/doc/workflow/lfs/lfs_administration.md @@ -23,6 +23,10 @@ In `/etc/gitlab/gitlab.rb`: ```ruby gitlab_rails['lfs_enabled'] = false + +# Optionally, change the storage path location. Defaults to +# `#{gitlab_rails['shared_path']}/lfs-objects`. Which evaluates to +# `/var/opt/gitlab/gitlab-rails/shared/lfs-objects` by default. gitlab_rails['lfs_storage_path'] = "/mnt/storage/lfs-objects" ``` From 239560331ab5ef635a8739f5b2b85d0bcd531256 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Thu, 24 Mar 2016 14:20:47 -0300 Subject: [PATCH 107/132] Comments on confidential issues doesn't show in activity feed to non-members --- CHANGELOG | 3 +++ app/models/event.rb | 8 ++++-- spec/models/event_spec.rb | 54 +++++++++++++++++++++++++++++---------- 3 files changed, 49 insertions(+), 16 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index d9be95defd1..5d9f4961ef5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,9 @@ v 8.7.0 (unreleased) - Make HTTP(s) label consistent on clone bar (Stan Hu) - Fix avatar stretching by providing a cropping feature +v 8.6.2 (unreleased) + - Comments on confidential issues don't show up in activity feed to non-members + v 8.6.1 - Add option to reload the schema before restoring a database backup. !2807 - Display navigation controls on mobile. !3214 diff --git a/app/models/event.rb b/app/models/event.rb index a5cfeaf388e..2b963d4f2f6 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -80,8 +80,8 @@ class Event < ActiveRecord::Base true elsif created_project? true - elsif issue? - Ability.abilities.allowed?(user, :read_issue, issue) + elsif issue? || issue_note? + Ability.abilities.allowed?(user, :read_issue, note? ? note_target : target) else ((merge_request? || note?) && target) || milestone? end @@ -298,6 +298,10 @@ class Event < ActiveRecord::Base target.noteable_type == "Commit" end + def issue_note? + note? && target && target.noteable_type == "Issue" + end + def note_project_snippet? target.noteable_type == "Snippet" end diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index 5fe44246738..697a34022ce 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -66,21 +66,25 @@ describe Event, models: true do end describe '#proper?' do + let(:project) { create(:empty_project, :public) } + let(:non_member) { create(:user) } + let(:member) { create(:user) } + let(:author) { create(:author) } + let(:assignee) { create(:user) } + let(:admin) { create(:admin) } + let(:issue) { create(:issue, project: project, author: author, assignee: assignee) } + let(:confidential_issue) { create(:issue, :confidential, project: project, author: author, assignee: assignee) } + let(:note_on_issue) { create(:note_on_issue, noteable: issue, project: project) } + let(:note_on_confidential_issue) { create(:note_on_issue, noteable: confidential_issue, project: project) } + let(:event) { Event.new(project: project, target: target, author_id: author.id) } + + before do + project.team << [member, :developer] + end + context 'issue event' do - let(:project) { create(:empty_project, :public) } - let(:non_member) { create(:user) } - let(:member) { create(:user) } - let(:author) { create(:author) } - let(:assignee) { create(:user) } - let(:admin) { create(:admin) } - let(:event) { Event.new(project: project, action: Event::CREATED, target: issue, author_id: author.id) } - - before do - project.team << [member, :developer] - end - context 'for non confidential issues' do - let(:issue) { create(:issue, project: project, author: author, assignee: assignee) } + let(:target) { issue } it { expect(event.proper?(non_member)).to eq true } it { expect(event.proper?(author)).to eq true } @@ -90,7 +94,29 @@ describe Event, models: true do end context 'for confidential issues' do - let(:issue) { create(:issue, :confidential, project: project, author: author, assignee: assignee) } + let(:target) { confidential_issue } + + it { expect(event.proper?(non_member)).to eq false } + it { expect(event.proper?(author)).to eq true } + it { expect(event.proper?(assignee)).to eq true } + it { expect(event.proper?(member)).to eq true } + it { expect(event.proper?(admin)).to eq true } + end + end + + context 'note event' do + context 'on non confidential issues' do + let(:target) { note_on_issue } + + it { expect(event.proper?(non_member)).to eq true } + it { expect(event.proper?(author)).to eq true } + it { expect(event.proper?(assignee)).to eq true } + it { expect(event.proper?(member)).to eq true } + it { expect(event.proper?(admin)).to eq true } + end + + context 'on confidential issues' do + let(:target) { note_on_confidential_issue } it { expect(event.proper?(non_member)).to eq false } it { expect(event.proper?(author)).to eq true } From 39a51f9e1c8b42a5307b3d6bf74ca23712443695 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Thu, 24 Mar 2016 14:24:22 -0300 Subject: [PATCH 108/132] Rename `Event#proper?` to `Event#visible_to_user?` --- app/helpers/events_helper.rb | 2 +- app/models/event.rb | 2 +- app/views/events/_event.html.haml | 2 +- spec/models/event_spec.rb | 44 +++++++++++++++---------------- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index a67a6b208e2..d3e5e3aa8b9 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -194,7 +194,7 @@ module EventsHelper end def event_to_atom(xml, event) - if event.proper?(current_user) + if event.visible_to_user?(current_user) xml.entry do event_link = event_feed_url(event) event_title = event_feed_title(event) diff --git a/app/models/event.rb b/app/models/event.rb index 2b963d4f2f6..12183524b79 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -73,7 +73,7 @@ class Event < ActiveRecord::Base end end - def proper?(user = nil) + def visible_to_user?(user = nil) if push? true elsif membership_changed? diff --git a/app/views/events/_event.html.haml b/app/views/events/_event.html.haml index 2d9d9dd6342..42c2764e7e2 100644 --- a/app/views/events/_event.html.haml +++ b/app/views/events/_event.html.haml @@ -1,4 +1,4 @@ -- if event.proper?(current_user) +- if event.visible_to_user?(current_user) .event-item{class: "#{event.body? ? "event-block" : "event-inline" }"} .event-item-timestamp #{time_ago_with_tooltip(event.created_at)} diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index 697a34022ce..89909c2bcd7 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -59,13 +59,13 @@ describe Event, models: true do end it { expect(@event.push?).to be_truthy } - it { expect(@event.proper?).to be_truthy } + it { expect(@event.visible_to_user?).to be_truthy } it { expect(@event.tag?).to be_falsey } it { expect(@event.branch_name).to eq("master") } it { expect(@event.author).to eq(@user) } end - describe '#proper?' do + describe '#visible_to_user?' do let(:project) { create(:empty_project, :public) } let(:non_member) { create(:user) } let(:member) { create(:user) } @@ -86,21 +86,21 @@ describe Event, models: true do context 'for non confidential issues' do let(:target) { issue } - it { expect(event.proper?(non_member)).to eq true } - it { expect(event.proper?(author)).to eq true } - it { expect(event.proper?(assignee)).to eq true } - it { expect(event.proper?(member)).to eq true } - it { expect(event.proper?(admin)).to eq true } + it { expect(event.visible_to_user?(non_member)).to eq true } + it { expect(event.visible_to_user?(author)).to eq true } + it { expect(event.visible_to_user?(assignee)).to eq true } + it { expect(event.visible_to_user?(member)).to eq true } + it { expect(event.visible_to_user?(admin)).to eq true } end context 'for confidential issues' do let(:target) { confidential_issue } - it { expect(event.proper?(non_member)).to eq false } - it { expect(event.proper?(author)).to eq true } - it { expect(event.proper?(assignee)).to eq true } - it { expect(event.proper?(member)).to eq true } - it { expect(event.proper?(admin)).to eq true } + it { expect(event.visible_to_user?(non_member)).to eq false } + it { expect(event.visible_to_user?(author)).to eq true } + it { expect(event.visible_to_user?(assignee)).to eq true } + it { expect(event.visible_to_user?(member)).to eq true } + it { expect(event.visible_to_user?(admin)).to eq true } end end @@ -108,21 +108,21 @@ describe Event, models: true do context 'on non confidential issues' do let(:target) { note_on_issue } - it { expect(event.proper?(non_member)).to eq true } - it { expect(event.proper?(author)).to eq true } - it { expect(event.proper?(assignee)).to eq true } - it { expect(event.proper?(member)).to eq true } - it { expect(event.proper?(admin)).to eq true } + it { expect(event.visible_to_user?(non_member)).to eq true } + it { expect(event.visible_to_user?(author)).to eq true } + it { expect(event.visible_to_user?(assignee)).to eq true } + it { expect(event.visible_to_user?(member)).to eq true } + it { expect(event.visible_to_user?(admin)).to eq true } end context 'on confidential issues' do let(:target) { note_on_confidential_issue } - it { expect(event.proper?(non_member)).to eq false } - it { expect(event.proper?(author)).to eq true } - it { expect(event.proper?(assignee)).to eq true } - it { expect(event.proper?(member)).to eq true } - it { expect(event.proper?(admin)).to eq true } + it { expect(event.visible_to_user?(non_member)).to eq false } + it { expect(event.visible_to_user?(author)).to eq true } + it { expect(event.visible_to_user?(assignee)).to eq true } + it { expect(event.visible_to_user?(member)).to eq true } + it { expect(event.visible_to_user?(admin)).to eq true } end end end From c3a98d8fcc2f9f7a0ce8816c8cf9dbebe58e64e9 Mon Sep 17 00:00:00 2001 From: Elias Werberich Date: Thu, 24 Mar 2016 11:12:45 +0100 Subject: [PATCH 109/132] Implementing 'Groups View' and 'TODOs View' as options for dashboard preferences. Fixes #14585. --- CHANGELOG | 2 ++ app/controllers/root_controller.rb | 4 ++++ app/helpers/preferences_helper.rb | 4 +++- app/models/user.rb | 2 +- spec/controllers/root_controller_spec.rb | 22 ++++++++++++++++++++++ spec/helpers/preferences_helper_spec.rb | 4 +++- 6 files changed, 35 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 5d9f4961ef5..a283d267c2e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,8 @@ v 8.7.0 (unreleased) - Preserve time notes/comments have been updated at when moving issue - Make HTTP(s) label consistent on clone bar (Stan Hu) - Fix avatar stretching by providing a cropping feature + - Implement 'Groups View' as an option for dashboard preferences !3379 (Elias W.) + - Implement 'TODOs View' as an option for dashboard preferences !3379 (Elias W.) v 8.6.2 (unreleased) - Comments on confidential issues don't show up in activity feed to non-members diff --git a/app/controllers/root_controller.rb b/app/controllers/root_controller.rb index ad04c646e1b..627be74a38f 100644 --- a/app/controllers/root_controller.rb +++ b/app/controllers/root_controller.rb @@ -26,6 +26,10 @@ class RootController < Dashboard::ProjectsController redirect_to activity_dashboard_path when 'starred_project_activity' redirect_to activity_dashboard_path(filter: 'starred') + when 'groups' + redirect_to dashboard_groups_path + when 'todos' + redirect_to dashboard_todos_path else return end diff --git a/app/helpers/preferences_helper.rb b/app/helpers/preferences_helper.rb index c73cb3028ee..c3832cf5d65 100644 --- a/app/helpers/preferences_helper.rb +++ b/app/helpers/preferences_helper.rb @@ -12,7 +12,9 @@ module PreferencesHelper projects: 'Your Projects (default)', stars: 'Starred Projects', project_activity: "Your Projects' Activity", - starred_project_activity: "Starred Projects' Activity" + starred_project_activity: "Starred Projects' Activity", + groups: "Your Groups", + todos: "Your Todos" }.with_indifferent_access.freeze # Returns an Array usable by a select field for more user-friendly option text diff --git a/app/models/user.rb b/app/models/user.rb index 9c315cfe966..128ddc2a694 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -184,7 +184,7 @@ class User < ActiveRecord::Base # User's Dashboard preference # Note: When adding an option, it MUST go on the end of the array. - enum dashboard: [:projects, :stars, :project_activity, :starred_project_activity] + enum dashboard: [:projects, :stars, :project_activity, :starred_project_activity, :groups, :todos] # User's Project preference # Note: When adding an option, it MUST go on the end of the array. diff --git a/spec/controllers/root_controller_spec.rb b/spec/controllers/root_controller_spec.rb index 5a104ae7c99..b14d275f7fa 100644 --- a/spec/controllers/root_controller_spec.rb +++ b/spec/controllers/root_controller_spec.rb @@ -43,6 +43,28 @@ describe RootController do end end + context 'who has customized their dashboard setting for groups' do + before do + user.update_attribute(:dashboard, 'groups') + end + + it 'redirects to their group list' do + get :index + expect(response).to redirect_to dashboard_groups_path + end + end + + context 'who has customized their dashboard setting for todos' do + before do + user.update_attribute(:dashboard, 'todos') + end + + it 'redirects to their todo list' do + get :index + expect(response).to redirect_to dashboard_todos_path + end + end + context 'who uses the default dashboard setting' do it 'renders the default dashboard' do get :index diff --git a/spec/helpers/preferences_helper_spec.rb b/spec/helpers/preferences_helper_spec.rb index e5df59c4fba..2f9291afc3f 100644 --- a/spec/helpers/preferences_helper_spec.rb +++ b/spec/helpers/preferences_helper_spec.rb @@ -19,7 +19,9 @@ describe PreferencesHelper do ['Your Projects (default)', 'projects'], ['Starred Projects', 'stars'], ["Your Projects' Activity", 'project_activity'], - ["Starred Projects' Activity", 'starred_project_activity'] + ["Starred Projects' Activity", 'starred_project_activity'], + ["Your Groups", 'groups'], + ["Your Todos", 'todos'] ] end end From 7f43049012cb9fed1208a7ede13e4279c4d89c82 Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Thu, 24 Mar 2016 14:29:09 -0500 Subject: [PATCH 110/132] Fix cancel link on issuable edit form --- app/views/shared/issuable/_form.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml index b01a36265f9..6606904c77a 100644 --- a/app/views/shared/issuable/_form.html.haml +++ b/app/views/shared/issuable/_form.html.haml @@ -135,4 +135,4 @@ method: :delete, class: 'btn btn-grouped' do = icon('trash-o') Delete - = link_to 'Cancel', namespace_project_issue_path(@project.namespace, @project, issuable), class: 'btn btn-grouped btn-cancel' + = link_to 'Cancel', polymorphic_path([@project.namespace.becomes(Namespace), @project, issuable]), class: 'btn btn-grouped btn-cancel' From 35ef7ff6cb9bd4fbc0ebb9cae8bc495d6a9d626e Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Thu, 24 Mar 2016 14:40:20 -0500 Subject: [PATCH 111/132] Fix link when issuable is new --- app/views/shared/issuable/_form.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml index 6606904c77a..6a42a6e3f58 100644 --- a/app/views/shared/issuable/_form.html.haml +++ b/app/views/shared/issuable/_form.html.haml @@ -127,7 +127,7 @@ for this project. - if issuable.new_record? - = link_to 'Cancel', namespace_project_issues_path(@project.namespace, @project), class: 'btn btn-cancel' + = link_to 'Cancel', polymorphic_path([@project.namespace, @project, issuable.class]), class: 'btn btn-cancel' - else .pull-right - if current_user.can?(:"destroy_#{issuable.to_ability_name}", @project) From 6abcb8820de24ca817c2b0258010e0a79a0ffe81 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 24 Mar 2016 18:02:13 -0400 Subject: [PATCH 112/132] Remove release docs from the CE repository More detailed, updated, and accurate versions of these docs now live in https://gitlab.com/gitlab-org/release-tools [ci skip] --- doc/README.md | 1 - doc/release/README.md | 10 -- doc/release/howto_rc1.md | 55 ------- doc/release/howto_update_guides.md | 55 ------- doc/release/master.md | 62 -------- doc/release/monthly.md | 245 ----------------------------- doc/release/patch.md | 81 ---------- doc/release/security.md | 76 --------- 8 files changed, 585 deletions(-) delete mode 100644 doc/release/README.md delete mode 100644 doc/release/howto_rc1.md delete mode 100644 doc/release/howto_update_guides.md delete mode 100644 doc/release/master.md delete mode 100644 doc/release/monthly.md delete mode 100644 doc/release/patch.md delete mode 100644 doc/release/security.md diff --git a/doc/README.md b/doc/README.md index 08d0a6a5bfb..0c02640e6c3 100644 --- a/doc/README.md +++ b/doc/README.md @@ -45,4 +45,3 @@ contributing to documentation. - [Development](development/README.md) Explains the architecture and the guidelines for shell commands. - [Legal](legal/README.md) Contributor license agreements. -- [Release](release/README.md) How to make the monthly and security releases. diff --git a/doc/release/README.md b/doc/release/README.md deleted file mode 100644 index 52eca7c02a6..00000000000 --- a/doc/release/README.md +++ /dev/null @@ -1,10 +0,0 @@ -## Release cycle - -Since 2011 a minor or major version of GitLab is released on the 22nd of every month. Patch and security releases are published when needed. New features are detailed on the [blog](https://about.gitlab.com/blog/) and in the [changelog](CHANGELOG). Features that will likely be in the next releases can be found on the [direction page](https://about.gitlab.com/direction/). - -## Release process documentation - -- [Monthly release](monthly.md), every month on the 22nd. -- [Patch release](patch.md), if there are serious regressions. -- [Security](security.md), for security problems. -- [Master](master.md), update process for the master branch. diff --git a/doc/release/howto_rc1.md b/doc/release/howto_rc1.md deleted file mode 100644 index 07c703142d4..00000000000 --- a/doc/release/howto_rc1.md +++ /dev/null @@ -1,55 +0,0 @@ -# How to create RC1 - -The RC1 release comes with the task to update the installation and upgrade docs. Be mindful that there might already be merge requests for this on GitLab or GitHub. - -### 1. Update the installation guide - -1. Check if it references the correct branch `x-x-stable` (doesn't exist yet, but that is okay) -1. Check the [GitLab Shell version](/lib/tasks/gitlab/check.rake#L782) -1. Check the [Git version](/lib/tasks/gitlab/check.rake#L794) -1. There might be other changes. Ask around. - -### 2. Create update guides - -[Follow this guide](howto_update_guides.md) to create update guides. - -### 3. Code quality indicators - -Make sure the code quality indicators are green / good. - -- [![Build status](http://ci.gitlab.org/projects/1/status.png?ref=master)](http://ci.gitlab.org/projects/1?ref=master) on ci.gitlab.org (master branch) - -- [![Build Status](https://semaphoreapp.com/api/v1/projects/2f1a5809-418b-4cc2-a1f4-819607579fe7/243338/badge.png)](https://semaphoreapp.com/gitlabhq/gitlabhq) (master branch) - -- [![Code Climate](https://codeclimate.com/github/gitlabhq/gitlabhq.png)](https://codeclimate.com/github/gitlabhq/gitlabhq) - -- [![Dependency Status](https://gemnasium.com/gitlabhq/gitlabhq.png)](https://gemnasium.com/gitlabhq/gitlabhq) this button can be yellow (small updates are available) but must not be red (a security fix or an important update is available) - -- [![Coverage Status](https://coveralls.io/repos/gitlabhq/gitlabhq/badge.png?branch=master)](https://coveralls.io/r/gitlabhq/gitlabhq) - -### 4. Run release tool - -**Make sure EE `master` has latest changes from CE `master`** - -Get release tools - -``` -git clone git@dev.gitlab.org:gitlab/release-tools.git -cd release-tools -``` - -Release candidate creates stable branch from master. -So we need to sync master branch between all CE, EE and CI remotes. - -``` -bundle exec rake sync -``` - -Create release candidate and stable branch: - -``` -bundle exec rake release["x.x.0.rc1"] -``` - -Now developers can use master for merging new features. -So you should use stable branch for future code changes related to release. diff --git a/doc/release/howto_update_guides.md b/doc/release/howto_update_guides.md deleted file mode 100644 index 23d0959c33d..00000000000 --- a/doc/release/howto_update_guides.md +++ /dev/null @@ -1,55 +0,0 @@ -# Create update guides - -1. Create: CE update guide from previous version. Like `7.3-to-7.4.md` -1. Create: CE to EE update guide in EE repository for latest version. -1. Update: `6.x-or-7.x-to-7.x.md` to latest version. -1. Create: CI update guide from previous version - -It's best to copy paste the previous guide and make changes where necessary. -The typical steps are listed below with any points you should specifically look at. - -#### 0. Any major changes? - -List any major changes here, so the user is aware of them before starting to upgrade. For instance: - -- Database updates -- Web server changes -- File structure changes - -#### 1. Stop server - -#### 2. Make backup - -#### 3. Do users need to update dependencies like `git`? - -- Check if the [GitLab Shell version](/lib/tasks/gitlab/check.rake#L782) changed since the last release. - -- Check if the [Git version](/lib/tasks/gitlab/check.rake#L794) changed since the last release. - -#### 4. Get latest code - -#### 5. Does GitLab shell need to be updated? - -#### 6. Install libs, migrations, etc. - -#### 7. Any config files updated since last release? - -Check if any of these changed since last release: - -- [lib/support/nginx/gitlab](/lib/support/nginx/gitlab) -- [lib/support/nginx/gitlab-ssl](/lib/support/nginx/gitlab-ssl) -- -- [config/gitlab.yml.example](/config/gitlab.yml.example) -- [config/unicorn.rb.example](/config/unicorn.rb.example) -- [config/database.yml.mysql](/config/database.yml.mysql) -- [config/database.yml.postgresql](/config/database.yml.postgresql) -- [config/initializers/rack_attack.rb.example](/config/initializers/rack_attack.rb.example) -- [config/resque.yml.example](/config/resque.yml.example) - -#### 8. Need to update init script? - -Check if the `init.d/gitlab` script changed since last release: [lib/support/init.d/gitlab](/lib/support/init.d/gitlab) - -#### 9. Start application - -#### 10. Check application status diff --git a/doc/release/master.md b/doc/release/master.md deleted file mode 100644 index 9163e652003..00000000000 --- a/doc/release/master.md +++ /dev/null @@ -1,62 +0,0 @@ -# How to push GitLab CE master branch to all remotes. - -The source code of GitLab is available on multiple servers (with GitLab.com as the canonical source). -Synchronization between the repo's is done by the lead developer if there is no rush. -This happens a few times per workday on average. -If somebody else with access to all repo's wants to do it the instructions are below. -This is just to distribute changes, not to make them. - -## Add this to `.bashrc` or [your dotfiles](https://github.com/dosire/dotfiles/commit/52803ce3ac60d57632164b7713ff0041e86fa26c) - -```bash -gpa () -{ - git push origin ${1:-master} && git push gh ${1:-master} && git push gl ${1:-master} -} -``` - -## Then add remotes to your local repo - -```bash -cd my-gitlab-ce-repo - -git remote add origin git@dev.gitlab.org:gitlab/gitlabhq.git -git remote add gh git@github.com:gitlabhq/gitlabhq.git -git remote add gl git@gitlab.com:gitlab-org/gitlab-ce.git -``` - -## Push to all remotes - -```bash -gpa -``` - -# Yanking packages from packages.gitlab.com - -In case something went wrong with the release and there is a need to remove the packages you can yank the packages by following the -procedure described in [package cloud documentation](https://packagecloud.io/docs#yank_pkg). - -You need to have: - -1. `package_cloud` gem installed (sudo gem install package_cloud) -1. Email and password for packages.gitlab.com -1. Make sure that you are supplying the url to packages.gitlab.com (default is packagecloud.io) - -Example of yanking a package: - -```bash -package_cloud yank --url https://packages.gitlab.com gitlab/gitlab-ce/el/6 gitlab-ce-7.10.2~omnibus-1.x86_64.rpm -``` - -If you are attempting this for the first time the output will look something like: - -```bash -Looking for repository at gitlab/gitlab-ce... No config file exists at /Users/marin/.packagecloud. Login to create one. -Email: -marin@gitlab.com -Password: - -Got your token. Writing a config file to /Users/marin/.packagecloud... success! -success! -Attempting to yank package at gitlab/gitlab-ce/el/6/gitlab-ce-7.10.2~omnibus-1.x86_64.rpm...done! -``` diff --git a/doc/release/monthly.md b/doc/release/monthly.md deleted file mode 100644 index 907c19e65a0..00000000000 --- a/doc/release/monthly.md +++ /dev/null @@ -1,245 +0,0 @@ -# Monthly Release - -NOTE: This is a guide used by the GitLab the company to release GitLab. -As an end user you do not need to use this guide. - -The process starts 7 working days before the release. -The release manager doesn't have to perform all the work but must ensure someone is assigned. -The current release manager must schedule the appointment of the next release manager. -The new release manager should create overall issue to track the progress. -The release manager should be the only person pushing/merging commits to the x-y-stable branches. - -## Release Manager - -A release manager is selected that coordinates all releases the coming month, -including the patch releases for previous releases. -The release manager has to make sure all the steps below are done and delegated where necessary. -This person should also make sure this document is kept up to date and issues are created and updated. - -## Take vacations into account - -The time is measured in weekdays to compensate for weekends. -Do everything on time to prevent problems due to rush jobs or too little testing time. -Make sure that you take into account any vacations of maintainers. -If the release is falling behind immediately warn the team. - -## Create an overall issue and follow it - -Create an issue in the GitLab CE project. Name it "Release x.x" and tag it with -the `release` label for easier searching. Replace the dates with actual dates -based on the number of workdays before the release. All steps from issue -template are explained below: - -``` -### Xth: (7 working days before the 22nd) - -- [ ] Triage the [Omnibus milestone] - -### Xth: (6 working days before the 22nd) - -- [ ] Determine QA person and notify this person -- [ ] Check the tasks in [how to rc1 guide](https://dev.gitlab.org/gitlab/gitlabhq/blob/master/doc/release/howto_rc1.md) and delegate tasks if necessary -- [ ] Merge CE `master` into EE `master` via merge request (#LINK) -- [ ] Create CE and EE RC1 versions (#LINK) -- [ ] Build RC1 packages - -### Xth: (5 working days before the 22nd) - -- [ ] Do QA and fix anything coming out of it (#LINK) -- [ ] Close the [Omnibus milestone] -- [ ] Prepare the [blog post] - -### Xth: (4 working days before the 22nd) - -- [ ] Update GitLab.com with RC1 -- [ ] Create the regression issue in the CE issue tracker: - - ``` - This is a meta issue to index possible regressions in this monthly release - and any patch versions. - - Please do not raise or discuss issues directly in this issue but link to - issues that might warrant a patch release. If there is a Merge Request - that fixes the issue, please link to that as well. - - Please only post one regression issue and/or merge request per comment. - Comments will be updated by the release manager as they are addressed. - ``` - -- [ ] Tweet about RC1 release: - - ``` - GitLab x.y.0.rc1 is available: https://packages.gitlab.com/gitlab/unstable - Use at your own risk. Please link regressions issues from - LINK_TO_REGRESSION_ISSUE - ``` - -### Xth: (3 working days before the 22nd) - -- [ ] Merge `x-y-stable` into `x-y-stable-ee` -- [ ] Check that everyone is mentioned on the [blog post] using `@all` - -### Xth: (2 working days before the 22nd) - -- [ ] Check that MVP is added to the [MVP page] - -### Xth: (1 working day before the 22nd) - -- [ ] Merge `x-y-stable` into `x-y-stable-ee` -- [ ] Create CE and EE release candidates -- [ ] Create Omnibus tags and build packages for the latest release candidates -- [ ] Update GitLab.com with the latest RC - -### 22nd before 1200 CET: - -Release before 1200 CET / 2AM PST, to make sure the majority of our users -get the new version on the 22nd and there is sufficient time in the European -workday to quickly fix any issues. - -- [ ] Merge `x-y-stable` into `x-y-stable-ee` -- [ ] Create the 'x.y.0' tag with the [release tools](https://dev.gitlab.org/gitlab/release-tools) -- [ ] Create the 'x.y.0' version on version.gitlab.com -- [ ] Try to do before 1100 CET: Create and push Omnibus tags for x.y.0 (will auto-release the packages) -- [ ] Try to do before 1200 CET: Publish the release [blog post] -- [ ] Tweet about the release -- [ ] Schedule a second Tweet of the release announcement with the same text at 1800 CET / 8AM PST - -[Omnibus milestone]: LINK_TO_OMNIBUS_MILESTONE -[blog post]: LINK_TO_WIP_BLOG_POST -[MVP page]: https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/source/mvp/index.html -``` - -- - - - -## Update changelog - -Any changes not yet added to the changelog are added by lead developer and in that merge request the complete team is -asked if there is anything missing. - -There are three changelogs that need to be updated: CE, EE and CI. - -## Create RC1 (CE, EE, CI) - -[Follow this How-to guide](howto_rc1.md) to create RC1. - -## Prepare CHANGELOG for next release - -Once the stable branches have been created, update the CHANGELOG in `master` with the upcoming version, usually X.X.X.pre. - -On creating the stable branches, notify the core team and developers. - -## QA - -Create issue on dev.gitlab.org `gitlab` repository, named "GitLab X.X QA" in order to keep track of the progress. - -Use the omnibus packages created for RC1 of Enterprise Edition using [this guide](https://dev.gitlab.org/gitlab/gitlab-ee/blob/master/doc/release/manual_testing.md). - -**NOTE** Upgrader can only be tested when tags are pushed to all repositories. Do not forget to confirm it is working before releasing. Note that in the issue. - -#### Fix anything coming out of the QA - -Create an issue with description of a problem, if it is quick fix fix it yourself otherwise contact the team for advice. - -**NOTE** If there is a problem that cannot be fixed in a timely manner, reverting the feature is an option! If the feature is reverted, -create an issue about it in order to discuss the next steps after the release. - -## Update GitLab.com with RC1 - -Use the omnibus EE packages created for RC1. -If there are big database migrations consider testing them with the production db on a VM. -Try to deploy in the morning. -It is important to do this as soon as possible, so we can catch any errors before we release the full version. - -## Create a regressions issue - -On [the GitLab CE issue tracker on GitLab.com](https://gitlab.com/gitlab-org/gitlab-ce/issues/) create an issue titled "GitLab X.X regressions" add the following text: - -This is a meta issue to discuss possible regressions in this monthly release and any patch versions. -Please do not raise issues directly in this issue but link to issues that might warrant a patch release. -The decision to create a patch release or not is with the release manager who is assigned to this issue. -The release manager will comment here about the plans for patch releases. - -Assign the issue to the release manager and at mention all members of GitLab core team. If there are any known bugs in the release add them immediately. - -## Tweet about RC1 - -Tweet about the RC release: - -> GitLab x.x.0.rc1 is out. This release candidate is only suitable for testing. Please link regressions issues from LINK_TO_REGRESSION_ISSUE - -## Prepare the blog post - -1. The blog post template for this release should already exist and might have comments that were added during the month. -1. Fill out as much of the blog post template as you can. -1. Make sure the blog post contains information about the GitLab CI release. -1. Check the changelog of CE and EE for important changes. -1. Also check the CI changelog -1. Add a proposed tweet text to the blog post WIP MR description. -1. Create a WIP MR for the blog post -1. Make sure merge request title starts with `WIP` so it can not be accidentally merged until ready. -1. Ask Dmitriy (or a team member with OS X) to add screenshots to the WIP MR. -1. Decide with core team who will be the MVP user. -1. Create WIP MR for adding MVP to MVP page on website -1. Add a note if there are security fixes: This release fixes an important security issue and we advise everyone to upgrade as soon as possible. -1. Create a merge request on [GitLab.com](https://gitlab.com/gitlab-com/www-gitlab-com/tree/master) -1. Assign to one reviewer who will fix spelling issues by editing the branch (either with a git client or by using the online editor) -1. Comment to the reviewer: '@person Please mention the whole team as soon as you are done (3 workdays before release at the latest)' -1. Create a new merge request with complete copy of the [release blog template](https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/doc/release_blog_template.md) for the next release using the branch name `release-x-x-x`. - -## Create CE, EE, CI stable versions - -Get release tools - -``` -git clone git@dev.gitlab.org:gitlab/release-tools.git -cd release-tools -``` - -Bump version, create release tag and push to remotes: - -``` -bundle exec rake release["x.x.0"] -``` - -This will create correct version and tag and push to all CE, EE and CI remotes. - -Update [installation.md](/doc/install/installation.md) to the newest version in master. - - -## Create Omnibus tags and build packages - -Follow the [release doc in the Omnibus repository](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/release.md). -This can happen before tagging because Omnibus uses tags in its own repo and SHA1's to refer to the GitLab codebase. - -## Update GitLab.com with the stable version - -- Deploy the package (should not need downtime because of the small difference with RC1) -- Deploy the package for gitlab.com/ci - -## Release CE, EE and CI - -__1. Publish packages for new release__ - -Update `downloads/index.html` and `downloads/archive/index.html` in `www-gitlab-com` repository. - -__2. Publish blog for new release__ - -Doublecheck the everyone has been mentioned in the blog post. -Merge the [blog merge request](#1-prepare-the-blog-post) in `www-gitlab-com` repository. - -__3. Tweet to blog__ - -Send out a tweet to share the good news with the world. -List the most important features and link to the blog post. - -Proposed tweet "Release of GitLab X.X & CI Y.Y! FEATURE, FEATURE and FEATURE <link-to-blog-post> #gitlab" - -Consider creating a post on Hacker News. - -## Release new AMIs - -[Follow this guide](https://dev.gitlab.org/gitlab/AMI/blob/master/README.md) - -## Create a WIP blogpost for the next release - -Create a WIP blogpost using [release blog template](https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/doc/release_blog_template.md). diff --git a/doc/release/patch.md b/doc/release/patch.md deleted file mode 100644 index 1c921439156..00000000000 --- a/doc/release/patch.md +++ /dev/null @@ -1,81 +0,0 @@ -# Things to do when doing a patch release - -NOTE: This is a guide for GitLab developers. If you are trying to install GitLab -see the latest stable [installation guide](install/installation.md) and if you -are trying to upgrade, see the [upgrade guides](update). - -## When to do a patch release - -Patch releases are done as-needed in order to fix regressions in the current -major release that cannot or should not wait until the next major release. -What's included and when to release is at the discretion of the release manager. - -## Release Procedure - -### Create a patch issue - -Create an issue in the GitLab CE project. Name it "Release x.y.z", tag it with -the `release` label, and assign it to the milestone of the corresponding major -release. - -Use the following template: - -``` -- Picked into respective `stable` branches: -- [ ] Merge `x-y-stable` into `x-y-stable-ee` -- [ ] release-tools: `x.y.z` -- omnibus-gitlab - - [ ] `x.y.z+ee.0` - - [ ] `x.y.z+ce.0` -- [ ] Deploy -- [ ] Add patch notice to [x.y regressions]() -- [ ] [Blog post]() -- [ ] [Tweet]() -- [ ] Add entry to version.gitlab.com -``` - -Update the issue with links to merge requests that need to be/have been picked -into the `stable` branches. - -### Preparation - -1. Verify that the issue can be reproduced -1. Note in the 'GitLab X.X regressions' that you will create a patch -1. Fix the issue on a feature branch, do this on the private GitLab development server -1. If it is a security issue, then assign it to the release manager and apply a 'security' label -1. Consider creating and testing workarounds -1. After the branch is merged into master, cherry pick the commit(s) into the current stable branch -1. Make sure that the build has passed and all tests are passing -1. In a separate commit in the master branch update the CHANGELOG -1. For EE, update the CHANGELOG-EE if it is EE specific fix. Otherwise, merge the stable CE branch and add to CHANGELOG-EE "Merge community edition changes for version X.X.X" -1. Merge CE stable branch into EE stable branch - -### Bump version - -Get release tools - -``` -git clone git@dev.gitlab.org:gitlab/release-tools.git -cd release-tools -``` - -Bump all versions in stable branch, even if the changes affect only EE, CE, or CI. Since all the versions are synced now, -it doesn't make sense to say upgrade CE to 7.2, EE to 7.3 and CI to 7.1. - -Create release tag and push to remotes: - -``` -bundle exec rake release["x.x.x"] -``` - -## Release - -1. [Build new packages with the latest version](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/release.md) -1. Apply the patch to GitLab.com and the private GitLab development server -1. Apply the patch to ci.gitLab.com and the private GitLab CI development server -1. Create and publish a blog post, see [patch release blog template](https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/doc/patch_release_blog_template.md) -1. Send tweets about the release from `@gitlab`, tweet should include the most important feature that the release is addressing and link to the blog post -1. Note in the 'GitLab X.X regressions' issue that the patch was published (CE only) -1. Create the 'x.y.0' version on version.gitlab.com -1. [Create new AMIs](https://dev.gitlab.org/gitlab/AMI/blob/master/README.md) -1. Create a new patch release issue for the next potential release diff --git a/doc/release/security.md b/doc/release/security.md deleted file mode 100644 index 118c016ba4f..00000000000 --- a/doc/release/security.md +++ /dev/null @@ -1,76 +0,0 @@ -# Things to do when doing an out-of-bound security release - -NOTE: This is a guide for GitLab developers. If you are trying to install GitLab see the latest stable [installation guide](install/installation.md) and if you are trying to upgrade, see the [upgrade guides](update). - -## When to do a security release - -Do a security release when there is a critical issue that needs to be addresses before the next monthly release. Otherwise include it in the monthly release and note there was a security fix in the release announcement. - -## Security vulnerability disclosure - -Please report suspected security vulnerabilities in private to , also see the [disclosure section on the GitLab.com website](https://about.gitlab.com/disclosure/). Please do NOT create publicly viewable issues for suspected security vulnerabilities. - -## Release Procedure - -1. Verify that the issue can be reproduced -1. Acknowledge the issue to the researcher that disclosed it -1. Inform the release manager that there needs to be a security release -1. Do the steps from [patch release document](../release/patch.md), starting with "Create an issue on private GitLab development server" -1. The MR with the security fix should get a 'security' label and be assigned to the release manager -1. Build the package for GitLab.com and do a deploy -1. Build the package for ci.gitLab.com and do a deploy -1. [Create new AMIs](https://dev.gitlab.org/gitlab/AMI/blob/master/README.md) -1. Create feature branches for the blog post on GitLab.com and link them from the code branch -1. Merge and publish the blog posts -1. Send tweets about the release from `@gitlabhq` -1. Send out an email to [the community google mailing list](https://groups.google.com/forum/#!forum/gitlabhq) -1. Post a signed copy of our complete announcement to [oss-security](http://www.openwall.com/lists/oss-security/) and request a CVE number. CVE is only needed for bugs that allow someone to own the server (Remote Code Execution) or access to code of projects they are not a member of. -1. Add the security researcher to the [Security Researcher Acknowledgments list](https://about.gitlab.com/vulnerability-acknowledgements/) -1. Thank the security researcher in an email for their cooperation -1. Update the blog post and the CHANGELOG when we receive the CVE number - -The timing of the code merge into master should be coordinated in advance. - -After the merge we strive to publish the announcements within 60 minutes. - -## Blog post template - -XXX Security Advisory for GitLab - -A recently discovered critical vulnerability in GitLab allows [unauthenticated API access|remote code execution|unauthorized access to repositories|XXX|PICKSOMETHING]. All users should update GitLab and gitlab-shell immediately. We [have|haven't|XXX|PICKSOMETHING|] heard of this vulnerability being actively exploited. - -### Version affected - -GitLab Community Edition XXX and lower - -GitLab Enterprise Edition XXX and lower - -### Fixed versions - -GitLab Community Edition XXX and up - -GitLab Enterprise Edition XXX and up - -### Impact - -On GitLab installations which use MySQL as their database backend it is possible for an attacker to assume the identity of any existing GitLab user in certain API calls. This attack can be performed by [unauthenticated|authenticated|XXX|PICKSOMETHING] users. - -### Workarounds - -If you are unable to upgrade you should apply the following patch and restart GitLab. - -XXX - -### Credit - -We want to thank XXX of XXX for the responsible disclosure of this vulnerability. - -## Email template - -We just announced a security advisory for GitLab at XXX - -Please contact us at support@gitlab.com if you have any questions. - -## Tweet template - -We just announced a security advisory for GitLab at XXX From 28c94ee955888c48547c02f5d60698faa7aa7b58 Mon Sep 17 00:00:00 2001 From: Sytse Sijbrandij Date: Thu, 24 Mar 2016 17:43:37 -0700 Subject: [PATCH 113/132] Describe CI stuff. --- doc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.md b/doc/README.md index 08d0a6a5bfb..8424b2f964b 100644 --- a/doc/README.md +++ b/doc/README.md @@ -3,7 +3,7 @@ ## User documentation - [API](api/README.md) Automate GitLab via a simple and powerful API. -- [CI](ci/README.md) +- [CI](ci/README.md) GitLab Continuous Integration (CI) getting started, .gitlab-ci.yml options, and examples. - [GitLab as OAuth2 authentication service provider](integration/oauth_provider.md). It allows you to login to other applications from GitLab. - [GitLab Basics](gitlab-basics/README.md) Find step by step how to start working on your commandline and on GitLab. - [Importing to GitLab](workflow/importing/README.md). From 8d2ded95c89de74bacdfdeda894636b511e06953 Mon Sep 17 00:00:00 2001 From: connorshea Date: Thu, 24 Mar 2016 20:21:32 -0600 Subject: [PATCH 114/132] Upgrade Bullet to 5.0.0 Includes Rails 5 support. See changelog for details (https://github.com/flyerhzm/bullet/blob/master/CHANGELOG.md). --- Gemfile.lock | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 16c09ab6e6d..4f9c404dc6d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -98,7 +98,7 @@ GEM terminal-table (~> 1.4) browser (1.0.1) builder (3.2.2) - bullet (4.14.10) + bullet (5.0.0) activesupport (>= 3.0.0) uniform_notifier (~> 1.9.0) bundler-audit (0.4.0) @@ -1064,3 +1064,6 @@ DEPENDENCIES web-console (~> 2.0) webmock (~> 1.21.0) wikicloth (= 0.8.1) + +BUNDLED WITH + 1.11.2 From 057244b4c00526ea78d3b83afb04080a18c7e22f Mon Sep 17 00:00:00 2001 From: connorshea Date: Thu, 24 Mar 2016 20:28:24 -0600 Subject: [PATCH 115/132] Upgrade font-awesome-rails to 4.5.0.1 Includes Rails 5 support. See changelog for details: https://github.com/bokmann/font-awesome-rails/releases/tag/v4.5.0.1 --- Gemfile.lock | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 16c09ab6e6d..f00de30b475 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -328,8 +328,8 @@ GEM fog-xml (0.1.2) fog-core nokogiri (~> 1.5, >= 1.5.11) - font-awesome-rails (4.5.0.0) - railties (>= 3.2, < 5.0) + font-awesome-rails (4.5.0.1) + railties (>= 3.2, < 5.1) foreman (0.78.0) thor (~> 0.19.1) formatador (0.2.5) @@ -1064,3 +1064,6 @@ DEPENDENCIES web-console (~> 2.0) webmock (~> 1.21.0) wikicloth (= 0.8.1) + +BUNDLED WITH + 1.11.2 From 2fe8da0b500b78d28dad399bc5552328929fadc4 Mon Sep 17 00:00:00 2001 From: connorshea Date: Thu, 24 Mar 2016 21:29:12 -0600 Subject: [PATCH 116/132] Upgrade web-console to 2.3.0 Rails 5 compatibility release. See the Changelog for more information: https://github.com/rails/web-console/releases/tag/v2.3.0 --- Gemfile.lock | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 16c09ab6e6d..40d2f4735a4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -868,7 +868,7 @@ GEM equalizer (~> 0.0, >= 0.0.9) warden (1.2.4) rack (>= 1.0) - web-console (2.2.1) + web-console (2.3.0) activemodel (>= 4.0) binding_of_caller (>= 0.7.2) railties (>= 4.0) @@ -1064,3 +1064,6 @@ DEPENDENCIES web-console (~> 2.0) webmock (~> 1.21.0) wikicloth (= 0.8.1) + +BUNDLED WITH + 1.11.2 From f967d5cf3d85d1fd0d48935ec7f9a5449383c43d Mon Sep 17 00:00:00 2001 From: connorshea Date: Thu, 24 Mar 2016 21:48:06 -0600 Subject: [PATCH 117/132] Upgrade Brakeman from 3.1.4 to 3.2.1 Includes support for Rails 5, bug fixes, and various additional vulnerability checks. See Changelog for more information (https://github.com/presidentbeef/brakeman/blob/master/CHANGES) --- Gemfile | 2 +- Gemfile.lock | 19 ++++++++----------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/Gemfile b/Gemfile index cebd76e7370..dec3ef0785c 100644 --- a/Gemfile +++ b/Gemfile @@ -234,7 +234,7 @@ end group :development do gem "foreman" - gem 'brakeman', '~> 3.1.0', require: false + gem 'brakeman', '~> 3.2.0', require: false gem "annotate", "~> 2.6.0" gem "letter_opener", '~> 1.1.2' diff --git a/Gemfile.lock b/Gemfile.lock index 16c09ab6e6d..87c5ec89348 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -84,14 +84,12 @@ GEM bootstrap-sass (3.3.6) autoprefixer-rails (>= 5.2.1) sass (>= 3.3.4) - brakeman (3.1.4) + brakeman (3.2.1) erubis (~> 2.6) - fastercsv (~> 1.5) haml (>= 3.0, < 5.0) highline (>= 1.6.20, < 2.0) - multi_json (~> 1.2) - ruby2ruby (>= 2.1.1, < 2.3.0) - ruby_parser (~> 3.7.0) + ruby2ruby (~> 2.3.0) + ruby_parser (~> 3.8.1) safe_yaml (>= 1.0) sass (~> 3.0) slim (>= 1.3.6, < 4.0) @@ -208,7 +206,6 @@ GEM faraday_middleware-multi_json (0.0.6) faraday_middleware multi_json - fastercsv (1.5.5) ffaker (2.0.0) ffi (1.9.10) fission (0.5.0) @@ -706,10 +703,10 @@ GEM ruby-saml (1.1.2) nokogiri (>= 1.5.10) uuid (~> 2.3) - ruby2ruby (2.2.0) + ruby2ruby (2.3.0) ruby_parser (~> 3.1) sexp_processor (~> 4.0) - ruby_parser (3.7.2) + ruby_parser (3.8.1) sexp_processor (~> 4.1) rubyntlm (0.5.2) rubypants (0.2.0) @@ -718,7 +715,7 @@ GEM safe_yaml (1.0.4) sanitize (2.1.0) nokogiri (>= 1.4.4) - sass (3.4.20) + sass (3.4.21) sass-rails (5.0.4) railties (>= 4.0.0, < 5.0) sass (~> 3.1) @@ -742,7 +739,7 @@ GEM sentry-raven (0.15.6) faraday (>= 0.7.6) settingslogic (2.0.9) - sexp_processor (4.6.0) + sexp_processor (4.7.0) sham_rack (1.3.6) rack shoulda-matchers (2.8.0) @@ -910,7 +907,7 @@ DEPENDENCIES better_errors (~> 1.0.1) binding_of_caller (~> 0.7.2) bootstrap-sass (~> 3.3.0) - brakeman (~> 3.1.0) + brakeman (~> 3.2.0) browser (~> 1.0.0) bullet bundler-audit From 9e7e2c6b9d2e46720c0375b6c44a2fb5e0f7acbe Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 25 Mar 2016 13:18:55 +0100 Subject: [PATCH 118/132] Small refactoring and rewording Signed-off-by: Dmitriy Zaporozhets --- app/views/projects/_builds_settings.html.haml | 2 +- spec/models/repository_spec.rb | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/app/views/projects/_builds_settings.html.haml b/app/views/projects/_builds_settings.html.haml index 095e7e45df7..9ae6964aaac 100644 --- a/app/views/projects/_builds_settings.html.haml +++ b/app/views/projects/_builds_settings.html.haml @@ -5,7 +5,7 @@ - unless @repository.gitlab_ci_yml .form-group .col-sm-offset-2.col-sm-10 - %p Before you can use Builds (Continuous Integration) feature you need to setup it. + %p Builds need to be configured before you can begin using Continuous Integration. = link_to 'Get started with Builds', help_page_path('ci/quick_start', 'README'), class: 'btn btn-info' %hr diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index 0ba9da29a97..417f11acca4 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -2,6 +2,7 @@ require 'spec_helper' describe Repository, models: true do include RepoHelpers + TestBlob = Struct.new(:name) let(:repository) { create(:project).repository } let(:user) { create(:user) } @@ -131,7 +132,6 @@ describe Repository, models: true do describe "#license" do before do repository.send(:cache).expire(:license) - TestBlob = Struct.new(:name) end it 'test selection preference' do @@ -149,10 +149,6 @@ describe Repository, models: true do end describe "#gitlab_ci_yml" do - before do - TestBlob = Struct.new(:name) - end - it 'returns valid file' do files = [TestBlob.new('file'), TestBlob.new('.gitlab-ci.yml'), TestBlob.new('copying')] expect(repository.tree).to receive(:blobs).and_return(files) From ed8e1faa4c72e138f3a75139fa216873a8b67850 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 25 Mar 2016 14:19:20 +0100 Subject: [PATCH 119/132] Make sure Repository#gitlab_ci_yml is safe to use even when repository is missing Signed-off-by: Dmitriy Zaporozhets --- app/models/repository.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/repository.rb b/app/models/repository.rb index e36c6ab0f0a..0a9cc364b77 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -468,7 +468,7 @@ class Repository end def gitlab_ci_yml - return nil if empty? + return nil if !exists? || empty? @gitlab_ci_yml ||= tree(:head).blobs.find do |file| file.name == '.gitlab-ci.yml' From 506878970b2040be7446fc1a341d7abc61f9c6ec Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Thu, 24 Mar 2016 09:29:00 -0700 Subject: [PATCH 120/132] Don't attempt to look up an avatar in repo if repo directory does not exist Closes #14580 --- CHANGELOG | 1 + app/models/repository.rb | 2 ++ spec/models/project_spec.rb | 6 ++++++ spec/models/repository_spec.rb | 6 ++++++ 4 files changed, 15 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 5d9f4961ef5..18893feff06 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ Please view this file on the master branch, on stable branches it's out of date. v 8.7.0 (unreleased) + - Don't attempt to look up an avatar in repo if repo directory does not exist (Stan hu) - Preserve time notes/comments have been updated at when moving issue - Make HTTP(s) label consistent on clone bar (Stan Hu) - Fix avatar stretching by providing a cropping feature diff --git a/app/models/repository.rb b/app/models/repository.rb index 13154eb4205..b69d5f239a0 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -877,6 +877,8 @@ class Repository end def avatar + return nil unless exists? + @avatar ||= cache.fetch(:avatar) do AVATAR_FILES.find do |file| blob_at_branch('master', file) diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 20f06f4b7e1..55f1c665b86 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -422,6 +422,12 @@ describe Project, models: true do it { should eq "http://localhost#{avatar_path}" } end + + context 'when git repo is empty' do + let(:project) { create(:empty_project) } + + it { should eq nil } + end end describe :ci_commit do diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index 7eac70ae948..b30a6e7ae3d 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -725,6 +725,12 @@ describe Repository, models: true do end describe '#avatar' do + it 'returns nil if repo does not exist' do + expect(repository).to receive(:exists?).and_return(false) + + expect(repository.avatar).to eq(nil) + end + it 'returns the first avatar file found in the repository' do expect(repository).to receive(:blob_at_branch). with('master', 'logo.png'). From b5c9637c92864d81b4d7557f8e3b729de259a58a Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 25 Mar 2016 15:31:19 +0100 Subject: [PATCH 121/132] Make sure CI status icons have same color across all app Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/pages/status.scss | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/assets/stylesheets/pages/status.scss b/app/assets/stylesheets/pages/status.scss index 6f777d11641..aed898b34af 100644 --- a/app/assets/stylesheets/pages/status.scss +++ b/app/assets/stylesheets/pages/status.scss @@ -37,18 +37,18 @@ } .ci-status-icon-success { - @extend .cgreen; + color: $gl-text-green !important; } .ci-status-icon-failed { - @extend .cred; + color: $gl-text-red !important; } .ci-status-icon-running, .ci-status-icon-pending { - // These are standard text color + color: $gl-text-orange !important; } .ci-status-icon-canceled, .ci-status-icon-disabled, .ci-status-icon-not-found, .ci-status-icon-skipped { - @extend .cgray; + color: $gl-gray !important; } From 1853d715438e5015a94ed398dbf37ad73d7b38ed Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 25 Mar 2016 15:40:51 +0100 Subject: [PATCH 122/132] Fix link colors by using content-list for commits Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/pages/commits.scss | 4 ++++ app/views/projects/commits/_commit_list.html.haml | 4 ++-- app/views/projects/commits/_commits.html.haml | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/assets/stylesheets/pages/commits.scss b/app/assets/stylesheets/pages/commits.scss index 33b3c7558ed..5e91496679a 100644 --- a/app/assets/stylesheets/pages/commits.scss +++ b/app/assets/stylesheets/pages/commits.scss @@ -99,6 +99,10 @@ li.commit { color: $gl-gray; } + .avatar { + margin-right: 8px; + } + .committed_ago { display: inline-block; } diff --git a/app/views/projects/commits/_commit_list.html.haml b/app/views/projects/commits/_commit_list.html.haml index bac9e244d36..46e4de40042 100644 --- a/app/views/projects/commits/_commit_list.html.haml +++ b/app/views/projects/commits/_commit_list.html.haml @@ -5,10 +5,10 @@ .panel-heading Commits (#{@commits.count}) - if hidden > 0 - %ul.well-list + %ul.content-list - commits.each do |commit| = render "projects/commits/inline_commit", commit: commit, project: @project %li.warning-row.unstyled #{number_with_delimiter(hidden)} additional commits have been omitted to prevent performance issues. - else - %ul.well-list= render commits, project: @project + %ul.content-list= render commits, project: @project diff --git a/app/views/projects/commits/_commits.html.haml b/app/views/projects/commits/_commits.html.haml index a7e3c2478c2..64e8da9201d 100644 --- a/app/views/projects/commits/_commits.html.haml +++ b/app/views/projects/commits/_commits.html.haml @@ -12,7 +12,7 @@ .light = pluralize(commits.count, 'commit') .col-md-10.col-sm-12 - %ul.bordered-list + %ul.content-list = render commits, project: project %hr.lists-separator From 02b585e9248e28272c3a9620a0d4218e2420ff11 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 25 Mar 2016 15:48:00 +0100 Subject: [PATCH 123/132] Repository breadcrumbs and file header links should be dark Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/framework/files.scss | 4 ++++ app/assets/stylesheets/pages/projects.scss | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/app/assets/stylesheets/framework/files.scss b/app/assets/stylesheets/framework/files.scss index 646e2610831..ad0e88cda86 100644 --- a/app/assets/stylesheets/framework/files.scss +++ b/app/assets/stylesheets/framework/files.scss @@ -50,6 +50,10 @@ } } + a { + color: $gl-dark-link-color; + } + .left-options { margin-top: -3px; } diff --git a/app/assets/stylesheets/pages/projects.scss b/app/assets/stylesheets/pages/projects.scss index c68bd673a67..71bde1174ee 100644 --- a/app/assets/stylesheets/pages/projects.scss +++ b/app/assets/stylesheets/pages/projects.scss @@ -229,6 +229,10 @@ padding: 0 3px; color: #999; } + + a { + color: $gl-dark-link-color; + } } .last-push-widget { From 80c3cbfb1d0ba86db5602de211358240b5e165ee Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 25 Mar 2016 15:55:08 +0100 Subject: [PATCH 124/132] Make sure ci status colors are same and respected on most pages Signed-off-by: Dmitriy Zaporozhets --- app/assets/stylesheets/pages/status.scss | 94 ++++++++++++------------ 1 file changed, 49 insertions(+), 45 deletions(-) diff --git a/app/assets/stylesheets/pages/status.scss b/app/assets/stylesheets/pages/status.scss index aed898b34af..1a697f81652 100644 --- a/app/assets/stylesheets/pages/status.scss +++ b/app/assets/stylesheets/pages/status.scss @@ -1,54 +1,58 @@ -.ci-status { - padding: 2px 7px; - margin-right: 5px; - border: 1px solid #eee; - white-space: nowrap; - @include border-radius(4px); +body .content { + .ci-status { + padding: 2px 7px; + margin-right: 5px; + border: 1px solid #eee; + white-space: nowrap; + @include border-radius(4px); - &:hover { - text-decoration: none; + &:hover { + text-decoration: none; + } + + &.ci-failed { + color: $gl-danger; + border-color: $gl-danger; + } + + &.ci-success { + color: $gl-success; + border-color: $gl-success; + } + + &.ci-info { + color: $gl-info; + border-color: $gl-info; + } + + &.ci-canceled, + &.ci-skipped, + &.ci-disabled { + color: $gl-gray; + border-color: $gl-gray; + } + + &.ci-pending, + &.ci-running { + color: $gl-warning; + border-color: $gl-warning; + } } - &.ci-failed { - color: $gl-danger; - border-color: $gl-danger; - } - - &.ci-success { + .ci-status-icon-success { color: $gl-success; - border-color: $gl-success; } - - &.ci-info { - color: $gl-info; - border-color: $gl-info; + .ci-status-icon-failed { + color: $gl-danger; } - - &.ci-disabled { - color: $gl-gray; - border-color: $gl-gray; - } - - &.ci-pending, - &.ci-running { + .ci-status-icon-running, + .ci-status-icon-pending { color: $gl-warning; - border-color: $gl-warning; + } + .ci-status-icon-canceled, + .ci-status-icon-disabled, + .ci-status-icon-not-found, + .ci-status-icon-skipped { + color: $gl-gray; } } - -.ci-status-icon-success { - color: $gl-text-green !important; -} -.ci-status-icon-failed { - color: $gl-text-red !important; -} -.ci-status-icon-running, -.ci-status-icon-pending { - color: $gl-text-orange !important; -} -.ci-status-icon-canceled, -.ci-status-icon-disabled, -.ci-status-icon-not-found, -.ci-status-icon-skipped { - color: $gl-gray !important; -} From 3dc0c3e473a68056c237de3d31415c8034ba1e52 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 25 Mar 2016 16:19:24 +0100 Subject: [PATCH 125/132] For some reason this test fails without javascript so added it Signed-off-by: Dmitriy Zaporozhets --- features/project/project.feature | 1 + 1 file changed, 1 insertion(+) diff --git a/features/project/project.feature b/features/project/project.feature index f1f3ed26065..6cca0591eaf 100644 --- a/features/project/project.feature +++ b/features/project/project.feature @@ -52,6 +52,7 @@ Feature: Project And I save project Then I should see project with new settings + @javascript Scenario: I change project path When I visit edit project "Shop" page And change project path settings From 179bae9968e6da5c09a1789fba7c4b706e144804 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 25 Mar 2016 17:54:57 +0100 Subject: [PATCH 126/132] rescue Rugged::ReferenceError in Repository#gitlab_ci_yml method Signed-off-by: Dmitriy Zaporozhets --- app/models/repository.rb | 4 ++++ features/project/project.feature | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/models/repository.rb b/app/models/repository.rb index 0a9cc364b77..908d765fb47 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -473,6 +473,10 @@ class Repository @gitlab_ci_yml ||= tree(:head).blobs.find do |file| file.name == '.gitlab-ci.yml' end + rescue Rugged::ReferenceError + # For unknow reason spinach scenario "Scenario: I change project path" + # lead to "Reference 'HEAD' not found" exception from Repository#empty? + nil end def head_commit diff --git a/features/project/project.feature b/features/project/project.feature index 6cca0591eaf..f1f3ed26065 100644 --- a/features/project/project.feature +++ b/features/project/project.feature @@ -52,7 +52,6 @@ Feature: Project And I save project Then I should see project with new settings - @javascript Scenario: I change project path When I visit edit project "Shop" page And change project path settings From d903465c256068ae3b11d46f9d7633666a244235 Mon Sep 17 00:00:00 2001 From: Jacob Schatz Date: Fri, 25 Mar 2016 13:16:10 -0400 Subject: [PATCH 127/132] Using class for specificity instead of tag. --- app/assets/stylesheets/pages/status.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/pages/status.scss b/app/assets/stylesheets/pages/status.scss index 1a697f81652..5e5e38a0ba6 100644 --- a/app/assets/stylesheets/pages/status.scss +++ b/app/assets/stylesheets/pages/status.scss @@ -1,4 +1,4 @@ -body .content { +.container-fluid .content { .ci-status { padding: 2px 7px; margin-right: 5px; From 26aa2a6e67ae25ac1f6f7d49241ddba3e835f69c Mon Sep 17 00:00:00 2001 From: Grant Douglas Date: Fri, 25 Mar 2016 20:24:22 +0000 Subject: [PATCH 128/132] short project names result in unusable fuzz search UI elements, so added a min-width property to the css Added a space between property colon and value to satisfy linter and pass build. --- app/assets/stylesheets/framework/selects.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/stylesheets/framework/selects.scss b/app/assets/stylesheets/framework/selects.scss index fa7944cdabe..e82d052f45a 100644 --- a/app/assets/stylesheets/framework/selects.scss +++ b/app/assets/stylesheets/framework/selects.scss @@ -44,6 +44,7 @@ @include box-shadow(rgba(76, 86, 103, 0.247059) 0 0 1px 0, rgba(31, 37, 50, 0.317647) 0 2px 18px 0); @include border-radius ($border-radius-default); border: none; + min-width: 175px; } .select2-results .select2-result-label { From e664d95437d4fa9d5fbde929799fcc38eae7800d Mon Sep 17 00:00:00 2001 From: connorshea Date: Fri, 25 Mar 2016 15:48:13 -0600 Subject: [PATCH 129/132] Upgrade Teaspoon from 1.0.1 to 1.1.5. Includes compatibility with Rails 5. See the changelog for more information (https://github.com/modeset/teaspoon/blob/master/CHANGELOG.md). --- Gemfile | 2 +- Gemfile.lock | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index cebd76e7370..fecb2a25093 100644 --- a/Gemfile +++ b/Gemfile @@ -279,7 +279,7 @@ group :development, :test do gem 'capybara-screenshot', '~> 1.0.0' gem 'poltergeist', '~> 1.9.0' - gem 'teaspoon', '~> 1.0.0' + gem 'teaspoon', '~> 1.1.0' gem 'teaspoon-jasmine', '~> 2.2.0' gem 'spring', '~> 1.6.4' diff --git a/Gemfile.lock b/Gemfile.lock index 16c09ab6e6d..a1f663e976e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -806,8 +806,8 @@ GEM systemu (2.6.5) task_list (1.0.2) html-pipeline - teaspoon (1.0.2) - railties (>= 3.2.5, < 5) + teaspoon (1.1.5) + railties (>= 3.2.5, < 6) teaspoon-jasmine (2.2.0) teaspoon (>= 1.0.0) temple (0.7.6) @@ -1048,7 +1048,7 @@ DEPENDENCIES sprockets (~> 3.3.5) state_machines-activerecord (~> 0.3.0) task_list (~> 1.0.2) - teaspoon (~> 1.0.0) + teaspoon (~> 1.1.0) teaspoon-jasmine (~> 2.2.0) test_after_commit (~> 0.4.2) thin (~> 1.6.1) @@ -1064,3 +1064,6 @@ DEPENDENCIES web-console (~> 2.0) webmock (~> 1.21.0) wikicloth (= 0.8.1) + +BUNDLED WITH + 1.11.2 From 1922e3a8389683a01c026a06afe8e8c1539ba43a Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Sat, 26 Mar 2016 11:16:25 +0100 Subject: [PATCH 130/132] Bump VERSION Signed-off-by: Dmitriy Zaporozhets --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index cac7d91adda..91ab1f99daf 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.6.0-pre +8.7.0-pre From ac7d4a4084661d7439068c446e548ae69523e1bb Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Sun, 27 Mar 2016 18:10:10 +0000 Subject: [PATCH 131/132] Fix typos in webhooks docs. Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/14660 --- doc/web_hooks/web_hooks.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/doc/web_hooks/web_hooks.md b/doc/web_hooks/web_hooks.md index afdf1a682e2..22e207b6d32 100644 --- a/doc/web_hooks/web_hooks.md +++ b/doc/web_hooks/web_hooks.md @@ -58,13 +58,13 @@ X-Gitlab-Event: Push Hook "path_with_namespace":"mike/diaspora", "default_branch":"master", "homepage":"http://example.com/mike/diaspora", - "url":"git@example.com:mike/diasporadiaspora.git", + "url":"git@example.com:mike/diaspora.git", "ssh_url":"git@example.com:mike/diaspora.git", "http_url":"http://example.com/mike/diaspora.git" }, "repository":{ "name": "Diaspora", - "url": "git@example.com:mike/diasporadiaspora.git", + "url": "git@example.com:mike/diaspora.git", "description": "", "homepage": "http://example.com/mike/diaspora", "git_http_url":"http://example.com/mike/diaspora.git", @@ -113,7 +113,6 @@ Triggered when you create (or delete) tags to the repository. X-Gitlab-Event: Tag Push Hook ``` - **Request body:** ```json @@ -143,7 +142,7 @@ X-Gitlab-Event: Tag Push Hook "http_url":"http://example.com/jsmith/example.git" }, "repository":{ - "name": "jsmith", + "name": "Example", "url": "ssh://git@example.com/jsmith/example.git", "description": "", "homepage": "http://example.com/jsmith/example", @@ -478,7 +477,7 @@ X-Gitlab-Event: Note Hook }, "repository":{ "name":"diaspora", - "url":"git@example.com:mike/diasporadiaspora.git", + "url":"git@example.com:mike/diaspora.git", "description":"", "homepage":"http://example.com/mike/diaspora" }, From 5f6166a256561a9767b28b309cff118bb299500d Mon Sep 17 00:00:00 2001 From: Alfredo Sumaran Date: Mon, 28 Mar 2016 01:35:53 -0500 Subject: [PATCH 132/132] Fix cancel link --- app/views/shared/issuable/_form.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml index 6a42a6e3f58..178223fb463 100644 --- a/app/views/shared/issuable/_form.html.haml +++ b/app/views/shared/issuable/_form.html.haml @@ -127,7 +127,7 @@ for this project. - if issuable.new_record? - = link_to 'Cancel', polymorphic_path([@project.namespace, @project, issuable.class]), class: 'btn btn-cancel' + = link_to 'Cancel', polymorphic_path([@project.namespace.becomes(Namespace), @project, issuable.class]), class: 'btn btn-cancel' - else .pull-right - if current_user.can?(:"destroy_#{issuable.to_ability_name}", @project)
  • + #{color} #{label.title}