text:
this.legacyEditor = function(
    camera, mediaUtils,
    transformControlsContainerId, complexControlsContainerId,
    transformControls2ContainerId, textureControlsContainerId,
    symmetryUtils
) {
    var that = this;
    this.camera = camera;
	this.transformControlsContainerId = transformControlsContainerId;
    this.complexControlsContainerId = complexControlsContainerId;
    this.transformControls2ContainerId = transformControls2ContainerId;
    this.textureControlsContainerId = textureControlsContainerId;
    this.mediaUtils = mediaUtils;
    this.symmetryUtils = symmetryUtils;
    this.newWord = '';

	this.initUniformsEditor = function() {
		that.setupTransformControlIcons();
        that.setupComplexControlIcons();
	}

    this.setupTransformControlIcons = function() {
    	var container = document.getElementById(that.transformControlsContainerId);
    	appendSingleIcon(container, 'transformControlIcon', 'rotateLeft.png', 'Rotate Left', that.rotateLeft);
    	appendSingleIcon(container, 'transformControlIcon', 'rotateRight.png', 'Rotate Right', that.rotateRight);
    	appendSingleIcon(container, 'transformControlIcon', 'pause.png', 'Rotate Pause', that.rotatePause);
    	appendSingleIcon(container, 'transformControlIcon', 'stop.png', 'No Rotation', that.rotationOff);

    	appendSingleIcon(container, 'transformControlIcon', 'zoomIn.png', 'Zoom In', that.zoomIn);
    	appendSingleIcon(container, 'transformControlIcon', 'zoomOut.png', 'Zoom Out', that.zoomOut);
    	appendSingleIcon(container, 'transformControlIcon', 'cancel.png', 'Cancel Zoom', that.zoomCancel);
    	appendSingleIcon(container, 'transformControlIcon', 'Epsilon1.svg', 'Set Fixed Point 1', that.setFixedPoint1);
        appendSingleIcon(container, 'transformControlIcon', 'Epsilon2.svg', 'Set Fixed Point 2', that.setFixedPoint2);
        appendSingleIcon(container, 'transformControlIcon', 'Epsilon3.svg', 'Set Loxodromic constant', that.setLoxoPointFromClick);
        appendSingleIcon(container, 'transformControlIcon', 'roundDroste.png', 'Round Droste', that.roundDroste);
        appendSingleIcon(container, 'transformControlIcon', 'squareDroste.jpg', 'Square Droste', that.squareDroste);
        appendSingleIcon(container, 'transformControlIcon', 'spiral.png', 'Toggle Spiral Droste Effect', that.toggleSpiralDroste);
        appendSingleIcon(container, 'transformControlIcon', 'zoomIn.png', 'Toggle Droste Zoom Effect', that.toggleDrosteZoom);

    	var container = document.getElementById(that.transformControls2ContainerId);
        appendSingleIcon(container, 'transformControlIcon', 'reset.png', 'Reset', that.reset);
        appendSingleIcon(container, 'transformControlIcon', 'debug.png', 'Show/Hide Debug Info', that.toggleDebugInfo);
        appendSingleIcon(container, 'transformControlIcon', 'toggle.png', 'Toggle View', that.toggleView);
        appendSingleIcon(container, 'transformControlIcon', 'help.png', 'Help/Info', that.showHelpPage);
        appendSingleIcon(container, 'transformControlIcon', 'diffRedMask.svg', 'use current as still mask', that.useStillMask);
        appendSingleIcon(container, 'transformControlIcon', 'diffMask.svg', 'mask is delayed feed', that.useDelayMask);
        appendSingleIcon(container, 'transformControlIcon', 'diffGreenMask.svg', 'mask out green', that.useGreenMask);
        appendSingleIcon(container, 'transformControlIcon', 'mask.svg', 'make result black', that.blackMask);
        appendSingleIcon(container, 'transformControlIcon', 'beigeMask.svg', 'Toggle high pass/low pass filter', that.beigeMask);
        appendSingleIcon(container, 'transformControlIcon', 'nadir.png', 'mask out nadir', that.nadirMask);
        appendSingleIcon(container, 'transformControlIcon', 'nadir.png', 'tetrahedral group', that.tetrahedralGroup);

    	var container = document.getElementById(that.textureControlsContainerId);
    	appendSingleIcon(container, 'cameraControlIcon', 'left.png', 'texture Left', that.textureLeft);
    	appendSingleIcon(container, 'cameraControlIcon', 'up.png', 'texture Up', that.textureUp);
    	appendSingleIcon(container, 'cameraControlIcon', 'down.png', 'texture Down', that.textureDown);
    	appendSingleIcon(container, 'cameraControlIcon', 'right.png', 'texture Right', that.textureRight);
    	appendSingleIcon(container, 'cameraControlIcon', 'stop.png', 'texture Stop', that.textureStop);
        appendSingleIcon(container, 'cameraControlIcon', 'fovNarrow.png', 'Scale Factor', that.textureSmaller);
        appendSingleIcon(container, 'cameraControlIcon', 'fovWide.png', 'Scale Factor', that.textureLarger);
        appendSingleIcon(container, 'cameraControlIcon', 'tesselate.png', 'Tesselate', that.tesselate);
        appendSingleIcon(container, 'cameraControlIcon', 'crosshairs.png', 'Track', that.textureTrack);
        appendSingleIcon(container, 'cameraControlIcon', 'crosshairs.png', 'Animation Track', that.animationTrack);
        appendSingleIcon(container, 'cameraControlIcon', 'three.png', 'Track', that.threePoint);
        appendSingleIcon(container, 'cameraControlIcon', 'alpha.png', 'Change Alpha', that.changeAlpha);
        appendSingleIcon(container, 'cameraControlIcon', 'colorWheel.png',
            'Toggle Color/Video (only works for some math transforms)', that.toggleColorVideo);
    }
    this.setupComplexControlIcons = function() {
        var container = document.getElementById(that.complexControlsContainerId);
        appendSingleIcon(container, 'transformControlIcon', 'transform1Icon.png', 'Increase N', that.complexEffect1);
        appendSingleIcon(container, 'transformControlIcon', 'transform2Icon.png', 'Decrease N', that.complexEffect2);
        appendSingleIcon(container, 'transformControlIcon', 'transform3Icon.png', 'Apply transform', that.complexEffect3);
        appendSingleIcon(container, 'transformControlIcon', 'transform4Icon.png', 'Apply transform', that.complexEffect4);
        appendSingleIcon(container, 'transformControlIcon', 'tesselate.png', 'Elliptical Tiling', that.complexEffect5);
        appendSingleIcon(container, 'transformControlIcon', 'flatGradient.png', 'Flat Shader', that.flatShader);
        appendSingleIcon(container, 'transformControlIcon', 'polygons.png', 'Polygonal Groups', that.polygonalGroups);
        appendSingleIcon(container, 'transformControlIcon', 'S1.png', 'Apply theta schottky (Equal Circles)', that.schottkyEffect1);
        appendSingleIcon(container, 'transformControlIcon', 'S2.png', 'Apply theta schottky (Uneven Circles)', that.schottkyEffect2);
        appendSingleIcon(container, 'transformControlIcon', 'A.png', 'Apollonian Gasket', that.schottkyEffect3);
        appendSingleIcon(container, 'transformControlIcon', 'F.png', 'Fractal', that.fractalEffect);
        appendSingleIcon(container, 'transformControlIcon', 'triangles.png', 'Hyperbolic Triangles', that.hyperbolicTilingEffect);
        appendSingleIcon(container, 'transformControlIcon', 'beforeOrAfter.png', 'Toggle: apply Geometry first/last', that.toggleGeometryTiming);
        appendSingleIcon(container, 'transformControlIcon', 'P.png', 'Proximities', that.proximityEffect);
    }

    this.textureLeft = function() { that.currentUniforms.textureUAdjustment.value += .1; }
    this.textureRight = function() { that.currentUniforms.textureUAdjustment.value -= .1; }
    this.textureUp = function() { that.currentUniforms.textureVAdjustment.value += .1; }
    this.textureDown = function() { that.currentUniforms.textureVAdjustment.value -= .1; }
    this.textureStop = function() {
        that.currentUniforms.textureUAdjustment.value = 0;
        that.currentUniforms.textureVAdjustment.value = 0;
    }
    this.textureSmaller = function() {
        that.currentUniforms.textureScaleX.value *= 1.5;
        that.currentUniforms.textureScaleY.value *= 1.5;
    }
    this.textureLarger = function() {
        that.currentUniforms.textureScaleX.value /= 1.5;
        that.currentUniforms.textureScaleY.value /= 1.5;
    }
    this.textureTrack = function() {
        that.currentUniforms.enableTracking.value = that.currentUniforms.enableTracking.value == 1 ? 0 : 1;
    }
    this.animationTrack = function() {
        that.currentUniforms.enableAnimationTracking.value = that.currentUniforms.enableAnimationTracking.value == 1 ? 0 : 1;
    }
    this.threePoint = function() {
        that.currentUniforms.uThreePointMappingOn.value = that.currentUniforms.uThreePointMappingOn.value == 1 ? 0 : 1;
    }
    this.changeAlpha = function() {
        that.currentUniforms.uAlpha.value += .25;
        that.currentUniforms.uAlpha.value = that.currentUniforms.uAlpha.value % 1.0;
        if (that.currentUniforms.uAlpha.value == 0.)
            that.currentUniforms.uAlpha.value = 1.0;
        console.log("alpha = "  + that.currentUniforms.uAlpha.value);
    }
    this.toggleColorVideo = function() {
        that.currentUniforms.uColorVideoMode.value++;
        that.currentUniforms.uColorVideoMode.value = that.currentUniforms.uColorVideoMode.value%7;
        console.log("uColorVideoMode = " + that.currentUniforms.uColorVideoMode.value);
    }
    this.tesselate = function() { that.currentUniforms.tesselate.value = that.currentUniforms.tesselate.value == 0 ? 1 : 0; }
    this.complexEffect1 = function() {
        that.currentUniforms.complexEffect1OnOff.value += 1;
    }
    this.complexEffect2 = function() {
        that.currentUniforms.complexEffect1OnOff.value -= 1;
    }
    this.complexEffect3 = function() {
        that.currentUniforms.complexEffect3OnOff.value = that.currentUniforms.complexEffect3OnOff.value == 0 ? 1 : 0;
    }
    this.complexEffect4 = function() {
        that.currentUniforms.complexEffect4OnOff.value = that.currentUniforms.complexEffect4OnOff.value == 0 ? 1 : 0;
    }
    this.complexEffect5 = function() {
        that.currentUniforms.complexEffect5OnOff.value = that.currentUniforms.complexEffect5OnOff.value == 0 ? 1 : 0;
    }
    this.flatShader = function() {
        that.currentUniforms.flatShaderX.value = that.currentUniforms.flatShaderX.value == 0 ? window.innerWidth : 0;
        that.currentUniforms.flatShaderY.value = that.currentUniforms.flatShaderY.value == 0 ? window.innerHeight : 0;
    }
    this.polygonalGroups = function() {
        that.currentUniforms.uPolygonalGroups.value++;
        console.log(that.currentUniforms.uPolygonalGroups.value);
        that.currentUniforms.uPolygonalGroups.value = that.currentUniforms.uPolygonalGroups.value%7;
    }
    this.schottkyEffect1 = function() {
        that.currentUniforms.schottkyEffectOnOff.value = that.currentUniforms.schottkyEffectOnOff.value == 0 ? 1 : 0;
    }
    this.schottkyEffect2 = function() {
        that.currentUniforms.schottkyEffectOnOff.value = that.currentUniforms.schottkyEffectOnOff.value == 0 ? 2 : 0;
    }
    this.schottkyEffect3 = function() {
        that.currentUniforms.schottkyEffectOnOff.value = that.currentUniforms.schottkyEffectOnOff.value == 0 ? 3 : 0;
    }
    this.fractalEffect = function() {
        that.currentUniforms.fractalEffectOnOff.value = that.currentUniforms.fractalEffectOnOff.value == 0 ? 1 : 0;
    }
    this.proximityEffect = function() {
        that.currentUniforms.proximityEffect.value++;
        that.currentUniforms.proximityEffect.value = (that.currentUniforms.proximityEffect.value)%3;
        console.log("prox effect = " + that.currentUniforms.proximityEffect.value )
    }
    this.toggleGeometryTiming = function() {
        that.currentUniforms.geometryTiming.value = that.currentUniforms.geometryTiming.value == 0 ? 1 : 0;
        console.log("that.currentUniforms.geometryTiming.value = " + that.currentUniforms.geometryTiming.value);
    }

    this.hyperbolicTilingEffect = function() {
        that.currentUniforms.hyperbolicTilingEffectOnOff.value++;
        that.currentUniforms.hyperbolicTilingEffectOnOff.value =
            that.currentUniforms.hyperbolicTilingEffectOnOff.value%5;
        console.log(that.currentUniforms.hyperbolicTilingEffectOnOff.value);
     }
    this.setFixedPointsIfUndefined = function() {
    	if (!that.detailsObject.point1Defined && !that.detailsObject.point2Defined) {
    		that.setFixedPoint(1);
    	}
    }
    this.useDelayMask = function() {
        that.currentUniforms.uMaskType.value++;
        that.currentUniforms.uMaskType.value = that.currentUniforms.uMaskType.value%6;
        showToast('uMaskType = ' + that.currentUniforms.uMaskType.value, 1000);
    }
    // these can be deleted:
    this.useGreenMask = function() {
            that.currentUniforms.uMaskType.value = that.currentUniforms.uMaskType.value == 22 ? 0 : 22;
            showToast('uMaskType = ' + that.currentUniforms.uMaskType.value, 1000);
    }
    this.useStillMask = function() {
            // this is set whenever a user selects a new video.
            var pathToSubtractionTexture = that.mediaUtils.pathToCurrentSubtractionTexture  ;
            (new THREE.TextureLoader()).load(pathToSubtractionTexture, function ( texture ) {
                console.log("reimannShaderSupport.setDefaults(): loading texture for iChannelDelayMask");
                setMipMapOptions(texture);
                that.currentUniforms.iChannelStillMask1.value =  texture;
            });
            that.currentUniforms.uMaskType.value = that.currentUniforms.uMaskType.value == 2 ? 0 : 2;
            showToast('uMaskType = ' + that.currentUniforms.uMaskType.value, 1000);
    }
    this.blackMask = function() {
            that.currentUniforms.uBlackMask.value = that.currentUniforms.uBlackMask.value == 1 ? 0 : 1;
    }
    this.beigeMask = function() {
            that.currentUniforms.uHighPassFilter.value++;
            that.currentUniforms.uHighPassFilter.value = that.currentUniforms.uHighPassFilter.value%5;
            showToast('uHighPassFilter = ' + that.currentUniforms.uHighPassFilter.value, 500);
        }
    this.nadirMask = function() {
            that.currentUniforms.uNadirMask.value = that.currentUniforms.uNadirMask.value == 1 ? 0 : 1;
    }
    this.tetrahedralGroup = function(mode) {
        if (mode == 1)
            that.currentUniforms.uApplyMobiusTransform.value = 1;
        var polyhedronIndex = 2;   // tetrahedron, UV
        that.symmetryUtils.updateUniformsForNextSymmetry(polyhedronIndex, that.currentUniforms, mode);
        var labels = that.symmetryUtils.getLabelsAsHTML(polyhedronIndex);
        document.getElementById('matrixText').innerHTML = labels;
    }
    this.setFixedPoint1 = function() {that.setFixedPoint(1); }
    this.setFixedPoint2 = function() {that.setFixedPoint(2); }
    this.setFixedPoint = function(pointNumber, cameraLookAtComplexX, cameraLookAtComplexY) {
    	that.currentUniforms.mobiusEffectsOnOff.value = 1;
        if (cameraLookAtComplexX == undefined)
            cameraLookAtComplexX = that.detailsObject.cameraLookAtComplexX;
        if (cameraLookAtComplexY == undefined)
            cameraLookAtComplexY = that.detailsObject.cameraLookAtComplexY;
        var x = cameraLookAtComplexX;
    	var y = cameraLookAtComplexY;
    	if (pointNumber == 1) {
        	that.currentUniforms.e1x.value = x;
        	that.currentUniforms.e1y.value = y;
        	that.detailsObject.point1Defined = true;
        	if (!that.detailsObject.point2Defined) {
            	var ant = antipode(x,y);
            	that.currentUniforms.e2x.value = ant.x;
            	that.currentUniforms.e2y.value = ant.y;
        	}
        }
        else {
        	that.currentUniforms.e2x.value = x;
        	that.currentUniforms.e2y.value = y;
        	that.detailsObject.point2Defined = true;
        	if (!that.detailsObject.point1Defined) {
            	var ant = antipode(x,y);
            	that.currentUniforms.e1x.value = ant.x;
            	that.currentUniforms.e1y.value = ant.y;
        	}
        }
    	console.log("P1 = " + that.currentUniforms.e1x.value + "," + that.currentUniforms.e1y.value);
    	console.log("P2 = " + that.currentUniforms.e2x.value+ "," + that.currentUniforms.e2x.value);
        console.log("loxo point = " + that.currentUniforms.loxodromicX.value + "," + that.currentUniforms.loxodromicY.value);
    }
    this.setLoxoPointFromClick = function() {
        that.setLoxoPoint(that.detailsObject.cameraLookAtComplexX, that.detailsObject.cameraLookAtComplexY);
    }
    this.roundDroste = function() {
        that.setFixedPointsIfUndefined();
        that.currentUniforms.drosteType.value = that.currentUniforms.drosteType.value > 0 ? 0 : 1;
    }
    this.squareDroste = function() {
        that.setFixedPointsIfUndefined();
        that.currentUniforms.drosteType.value = that.currentUniforms.drosteType.value > 0 ? 0 : 2;
    }
    this.toggleSpiralDroste = function() {
        that.currentUniforms.startTime.value = that.currentUniforms.iGlobalTime.value;
        that.currentUniforms.drosteSpiral.value = that.currentUniforms.drosteSpiral.value == 1 ? 0 : 1;
    }
    this.toggleDrosteZoom = function() {
        that.currentUniforms.drosteZoom.value = (that.currentUniforms.drosteZoom.value + 1) % 4;
        console.log(that.currentUniforms.drosteZoom.value);
    }
    this.setLoxoPoint = function(x,y) {
        that.setFixedPointsIfUndefined();
        that.currentUniforms.loxodromicX.value = x;
        that.currentUniforms.loxodromicY.value = y;
        console.log("loxo point = " + that.currentUniforms.loxodromicX.value + "," + that.currentUniforms.loxodromicY.value);
        // showToast("loxo point is (" +
        //         that.currentUniforms.loxodromicX.value.toFixed(2) + "," +
        //         that.currentUniforms.loxodromicY.value.toFixed(2) + "i)"
        //     , 2000);
    }
    this.zoomIn = function() { that.zoom(.8); }
    this.zoomOut = function() { that.zoom(1.25); }
    this.zoomCancel = function() { that.setLoxoPoint(1.,0.); }
    this.zoom = function(factor) {
		that.setFixedPointsIfUndefined();
        that.setLoxoPoint(
            that.currentUniforms.loxodromicX.value * factor,
            that.currentUniforms.loxodromicY.value * factor);
    }
    this.showHelpPage = function() {
        window.location.href = 'info.html';
    }
    this.rotatePause = function() { that.rotate(0); }
    this.rotateLeft = function() { that.rotate(-1); }
    this.rotateRight = function() { that.rotate(1); }
    this.rotate = function(direction) {
		that.setFixedPointsIfUndefined();
    	if (direction == 0) {
    		that.detailsObject.rotateDirection = 0;
    	}
    	else {
        	that.detailsObject.rotateDirection += direction;
    	}
    }
    this.rotationOff = function() {
		that.detailsObject.rotateDirection = 0;
    	that.currentUniforms.iRotationAmount.value = 0;
    }
    this.toggleDebugInfo = function() {
    	that.currentUniforms.showFixedPoints.value = that.currentUniforms.showFixedPoints.value == 0 ? 1 : 0;
    	if (that.currentUniforms.showFixedPoints.value == 0) {
            $('.statusText').hide();
		}
		else {
            $('.statusText').show();
		}

    }
    this.viewState = 0;
    this.toggleView = function() {
        that.viewState++;
        that.viewState = that.viewState % 4;
        if (that.viewState == 0) {
            that.cameraVectorLength = 1;
            that.mediaUtils.toggleView("sphere");
        }
        if (that.viewState == 1) {
            that.cameraVectorLength = 1;
            that.mediaUtils.toggleView("torus");
        }
        if (that.viewState == 2) {
            that.cameraVectorLength = -1;
            that.mediaUtils.toggleView("plane");
        }
        // if (that.viewState == 3) {
        //     that.cameraVectorLength = 15;
        //     that.mediaUtils.toggleView("sphere");
        // }
        if (that.viewState == 3) {
            that.cameraVectorLength = 15;
            that.mediaUtils.toggleView("catenoid");
        }
    }
    this.reset = function() {
    	that.detailsObject.rotateDirection = 0;
    	that.currentUniforms.iRotationAmount.value = 0;
    	that.currentUniforms.iGlobalTime.value = 0;
    	that.detailsObject.point1Defined = false;
    	that.detailsObject.point2Defined = false;
    	that.currentUniforms.mobiusEffectsOnOff.value = 0;
        that.currentUniforms.textureScaleX.value = 1;
        that.currentUniforms.textureScaleY.value = 1;
        if (that.currentUniforms.enableTracking.value == 1) {
            that.detailsObject.trackerUtils.reset();
        }
        if (that.currentUniforms.enableAnimationTracking.value == 1) {
            console.log("noop");
            // that.detailsObject.trackerUtils.reset();
        }
        if (that.currentUniforms.uThreePointMappingOn.value == 1) {
            that.detailsObject.threePointTracker.reset();
        }
        that.currentUniforms.textureUAdjustment.value = 0;
        that.currentUniforms.textureVAdjustment.value = 0;
        that.currentUniforms.complexEffect1OnOff.value = 1;
        that.currentUniforms.uAnimationEffect.value = 0;
        // that.currentUniforms.complexEffect2OnOff.value = 0;
        that.currentUniforms.complexEffect3OnOff.value = 0;
        that.currentUniforms.complexEffect4OnOff.value = 0;
        that.currentUniforms.complexEffect5OnOff.value = 0;
        that.currentUniforms.flatShaderX.value = 0;
        that.currentUniforms.flatShaderY.value = 0;
        that.currentUniforms.uPolygonalGroups.value = 0;
        that.currentUniforms.schottkyEffectOnOff.value = 0;
        that.currentUniforms.fractalEffectOnOff.value = 0;
        that.currentUniforms.geometryTiming.value = 0;
        that.currentUniforms.hyperbolicTilingEffectOnOff.value = 0;
    	that.currentUniforms.e1x.value = that.currentUniforms.e1y.value = that.currentUniforms.e2x.value = that.currentUniforms.e2y.value = 0;
        that.currentUniforms.loxodromicX.value = 1;
        that.currentUniforms.loxodromicY.value = 0;
        that.currentUniforms.drosteType.value = 0;
        that.currentUniforms.tesselate.value = 0;
        that.currentUniforms.uAlpha.value = 1.0;

        // reseting this can be confusing...
        // that.currentUniforms.uColorVideoMode.value = 1.0;      // need for outer texture.
    }
    this.updateVariousNumbersForCamera = function() {
        if (that.detailsObject == undefined) return;
        // Camera coordinates are in three.js space where Y is up.
        // We want to deal with traditional math coordinates where Z is up
    	var unitVector = (new THREE.Vector3()).copy(that.camera.position).normalize();
		// in three.js y is up. we want z to be up.
        // also we need to flip z and x.
		var y = unitVector.x;
		var x = unitVector.z;	// assign z to x.
		var z = unitVector.y;	// assign y to z.

    	// convert to point on complex plane
        // all the signs are flipped because the camera is not sitting at the origin.
        // it is sitting 1 unit away from the origin, looking thru the origin at the
        // opposite side of the sphere.
        var negz = -z;
    	that.detailsObject.cameraLookAtComplexX = - x / (1.0 - negz);
    	that.detailsObject.cameraLookAtComplexY = - y / (1.0 - negz);

    	try {
            _textElement = document.getElementById('cameraText');
            _textElement.innerHTML = "<nobr>Camera in three.js coords: (" + _camera.position.x.toFixed(1)
                + "," + _camera.position.y.toFixed(1) + ","
                + _camera.position.z.toFixed(1) + ") len: "
                + _camera.position.length().toFixed(1) + "</nobr>" ;

            var mess =
            "<nobr>Camera in Cartesian Space: (" +
            	x.toFixed(1) + "," +
            	y.toFixed(1) + "," +
                z.toFixed(1) + "" +
                ") len: "
				+ unitVector.length().toFixed(1) + "</nobr>" ;
            // console.log(mess);
            document.getElementById('unitVectorText').innerHTML = mess;

            mess = "Looking at " +
            	that.detailsObject.cameraLookAtComplexX.toFixed(2) + " + " +
            	that.detailsObject.cameraLookAtComplexY.toFixed(2) + "i";
            // console.log(mess);
            document.getElementById('complexPointText').innerHTML = mess;

            document.getElementById('windowSizeText').innerHTML = "Window (wxh): " +
            	window.innerWidth + " , " + window.innerHeight;

            document.getElementById('canvasSizeText').innerHTML = "Canvas (wxh): " +
            	        document.getElementById('MainCanvas').style.width  +
                " , " +
            	        document.getElementById('MainCanvas').style.height;

 		}
		catch (x) {}
    }

    this.initUniformsEditor();  // set up GUI controls.
    this.setShaderDetails = function(detailsObject) {
        that.detailsObject = detailsObject;
        that.currentUniforms = detailsObject.currentUniforms;
        // that.detailsObject.cameraLookAtComplexX = 0;
        // that.detailsObject.cameraLookAtComplexY = 0;
        // that.detailsObject.point1Defined = false;
        // that.detailsObject.point2Defined = false;
    }
}


Introducing Savage Syndicate, A New Loyalty Program From Savage Race!
Savage Syndicate is a program designed to reward our most loyal and die hard participants. We love that you are willing to travel across the country to try out our latest obstacles, climb Colossus, leap off of Davy Jones' Locker, freeze your bits in Shriveled Richard, and go for a spin on Wheel World. Savage Syndicate is our way to say "Thank You" to those of you who run more than one event in a calendar year.
Savage Syndicate is a loyalty program designed to reward participants who run in two or more events within a single calendar year (this means between January 1 and December 31 of the same year). After you qualify, you can pick up your own Syndicate medal and state pins onsite at your qualifying race. The Syndicate medals are HUGE, and the state pins are pretty sick too. Trust us, people will notice.
What's up with those pins?
We're glad you asked! For each state that you complete along your Syndicate journey, we will hook you up with a custom Syndicate ribbon pin, after you qualify. So for example, if you ran Florida in March, and then Ohio in June, you qualify for the Syndicate medal and the two Savage Race pins! If you run the Savage Blitz Central Texas and then the Savage Race Boston, you'll qualify for the Savage Race and Savage Blitz pins.
I Heard About A Savage Syndicate Facebook Group. Can I Join?
Totally. You can request access to join the official Savage Syndicate Facebook group by clicking here. The group is monitored and moderated by Savage Race HQ staff, so if you have more questions, you can come straight to the source! All Savages are welcome.
Where do I pick up my medal and pins?
After you finish your qualifying event, visit our Syndicate redemption tent, which is located next to the merchandise tent. We will have staff onsite who can look up your eligibility and give you your Syndicate medal and pins on race day.
How big is the Syndicate medal?
Well, it's enormous. It has a circumference of 15.7" and diameter of 5". Oh, and the entire center spins like a top!
If I run more than two races in a year, can I keep racking up Syndicate medals, or can I only get one per year.
You can receive a new Syndicate medal after every qualifying race (2nd, 3rd, 4th, and so on) in the same calendar year.
Does this replace my finisher medal?
Nope. You will still get a finisher medal for every race you complete. Syndicate qualification entitles you to the Syndicate medal complete with pins from each event you ran within that year, in addition to the event finisher medal.
If I ran Savage Race in 2017 and one more race in 2018, do I qualify?
Sorry, but no. To qualify you must run two or more events within a single calendar year (i.e. within January 1st - December 31st, 2017, 2018, etc).
Is there a Savage Syndicate for Savage JR participants?
If I run the same course twice in one day, will I get a Syndicate medal?
Multi-lap runners are eligible for earning Syndicate on the spot if they register and pay for two spots at the race.
Does a Savage Blitz completion count towards Syndicate?
Yes, you must run at least one full distance Savage Race in the same calendar year to qualify for Syndicate.
What if I signed up for a second race but didn't actually run?
You must have race results for a Savage Race event and one additional event in the same calendar year.


custom wall mirror wall mirrors custom wall mirrors maryland.
nail polish organizer wall rack white make up organizer display bathroom storage holder nail polish rack wall hanging acrylic nail polish wall rack organizer holds up to 102 bottles.
wall organizer with hooks wall organizer with hooks wall mounted coat hooks with shelf key hooks coat hooks floating shelf entryway organizer mail storage hanging wall organizer with wall closet hooks.
earring wall organizer toms earring holders medium cherry earring holder with necklace rack earring organizer hanging jewelry bag.
contemporary wall mirrors luxury bathroom vanities powder room beach style with oval wall mirror bronze mirrors contemporary wall mirror with shelf.
purse wall organizer purse home design software free download full version.
bathroom full wall mirror bathroom full length mirror for wall mirrors with regard to mirrored cabinet plans bathroom whole wall mirror.
wire wall mail organizer wall mounted wire storage organizer with mail basket 3 key hooks wall mounted wire mail organizer.
kitchen mail organizer wall new wall cabinet storage organizer sort mail key hooks coupons home design games for mac.
workbench wall organizer tool place on the wall storage places from scrap plastics storage of that are not used for the moment home design software with blueprints.


You'll see a gallery with different page templates.
Click the page design of your choice and name it.
Next, you'll be asked if you wish to add it to your site's main menu. Choose the option you prefer.
Welcome to your new page: let the editing begin!


Are you applying to the Palma Scholars Program? Please see the program webpage for more information.
Please note the application deadline to apply for 2019-20 has passed. We will begin the application process for 2020-21 September 3, 2019.
Visits for all students include attending classes with your host.
Applicants to grade 9 will participate in group assessment activities, and applicants to grades 10-12 will have an informal one-on-one interview with a faculty member.
The online application includes a series of questions for the student as well as the parents/guardians. This is your best opportunity to share information about your family. We also require the student to submit a graded paper from a current class that includes the teacher's comments. All applications will be read by the admission committee.
Send the online evaluation form to your child's current math & English teachers. Please do not send these requests until after November 1; this will allow the teachers time to get to know your child. You should have the teacher's full name and email available when you are ready to send each evaluation.
There are additional application materials and earlier deadlines for those applying to the Palma Scholars Program.


The process for removing the keyboard on an X240 is so intense, the YouTube video I watched on the process was over 30 minutes long! The process was quite essentially a complete teardown of the laptop: the SSD, internal battery, a speaker, and the entire motherboard had to be removed from the laptop in order to complete the process.
Lenovo, this is insane. While the process wasn't terribly hard, it was rather time consuming. I will give Lenovo some credit, though. They actually listened to customers who had 40 series ThinkPads, and brought back the return of the traditional trackpad in the 50 series. When it comes to the repairability, though, this new design is here to stay. In fact, with the release of the X280, Lenovo has gotten even more against upgradability and usability of their laptops. The laptop still has the same internal design, now without some useful ports, such as Ethernet.
If anyone with a X240 is willing to take up the challenge of replacing the keyboard, this video is an amazing resource.


dc.identifier.citation Bayer C, Siebenmorgen M, Tempone R (2017) Smoothing the payoff for efficient computation of Basket option prices. Quantitative Finance: 1–15. Available: http://dx.doi.org/10.1080/14697688.2017.1308003.
dc.description.abstract We consider the problem of pricing basket options in a multivariate Black–Scholes or Variance-Gamma model. From a numerical point of view, pricing such options corresponds to moderate and high-dimensional numerical integration problems with non-smooth integrands. Due to this lack of regularity, higher order numerical integration techniques may not be directly available, requiring the use of methods like Monte Carlo specifically designed to work for non-regular problems. We propose to use the inherent smoothing property of the density of the underlying in the above models to mollify the payoff function by means of an exact conditional expectation. The resulting conditional expectation is unbiased and yields a smooth integrand, which is amenable to the efficient use of adaptive sparse-grid cubature. Numerical examples indicate that the high-order method may perform orders of magnitude faster than Monte Carlo or Quasi Monte Carlo methods in dimensions up to 35.
dc.rights This is an Accepted Manuscript of an article published by Taylor & Francis in Quantitative Finance on 20 Jul 2017, available online: http://wwww.tandfonline.com/10.1080/14697688.2017.1308003.
dc.contributor.institution Weierstrass Institute, Mohrenstrasse 39, 10117Berlin, Germany.
dc.contributor.institution Institute for Numerical Simulation, University of Bonn, Wegelerstr. 6, 53115Bonn, Germany.


The Lycoming College Music Department offers flexible options for students to continue to participate in music throughout their college career, whether as a field of study or simply for personal enrichment. Applied lessons are available to music majors, music minors, and non-majors. All students may also participate in large ensembles and/or flute ensemble. For more information on studying music at Lycoming College, visit the Music Department website. Scholarships are also available to any student who participates in music ensembles.


Steven Wright, Moreno Valley Valley View: Had 14 strikeouts and one walk in a 3-0 Ivy League victory over No. 13 Riverside Poly. He also had two hits, including a double.
James Scott, San Bernardino Cajon: Allowed three hits and one run in five innings and had two hits, three RBIs and two runs scored in a 13-3 nonleague victory over Victorville Silverado.
Ryan Jody, North Hollywood Campbell Hall: Had four hits and drove in four runs in an 11-8 nonleague victory over Flintridge Prep.
Emily Hively, Fullerton Troy: Pitched a perfect game with six strikeouts in a 1-0 nonleague victory over Tustin, which came back to win the second game of a doubleheader, 5-0.
Natalie Kula, Eagle Rock: Hit a home run in a 1-0 nonleague victory over L.A. Washington, which had Ta'Tyana McElroy throw a four-hitter with 19 strikeouts and two walks.
Adriana Villalobos, El Segundo: Her RBI double led to a 3-2 win over the hosts in the Glendale Hoover tournament championship game.
Felicia Reinitz, Lakewood Mayfair: Had a two-out, RBI single in the bottom of the seventh for a 2-1 nonleague victory over Downey Warren.
Billie Jo Grant, Arroyo Grande: Recorded the seventh-best high school girls' discus throw at 181-9 in a 105-31 victory over Atascadero.
Kris Manansala, Granada Hills: Had 26 kills in a 13-15, 15-13, 15-10, 15-13 West Valley League victory over Woodland Hills Taft.
John Skelton, La Verne Damien: Shot three-under-par 33 at Mountain Meadows Golf Course in a 191-233 nonleague win over West Covina.


text:
var t = require('../index'),
  should = require('should'),
  fs = require('fs')

describe('isClockwise', function(){
  it('should take a ring and return clockwise true', function(done){
    var ring = [[0,0],[1,1],[1,0],[0,0]]
    var clockwise = t.isClockwise(ring)
    clockwise.should.equal(true)
    done()
  })
  it('should take a ring and return clockwise false', function(done){
    var ring = [[0,0],[1,0],[1,1],[0,0]]
    var clockwise = t.isClockwise(ring)
    clockwise.should.equal(false)
    done()
  })
})

redpajama_set_name: RedPajamaGithub


text:
Amazon supporters in Queens push back on HQ2 opposition
Four public housing leaders vowed to support Amazon's HQ2 plans in Long Island City
By Caroline Spivack Feb 12, 2019, 8:41am EST
Photo by Drew Angerer/Getty Images
Just days after Amazon was said to be reconsidering moving half of its second North American headquarters to Long Island City, frustrated supporters gathered at the Queensbridge North Houses to counter the plan's vocal opposition.
The Monday rally led by Bishop Mitchell Taylor, a member of the Amazon HQ2 advisory committee, attracted an unlikely mix including U.S. Rep. Carolyn Maloney, President of the Long Island City Partnership Elizabeth Lusskin, and four Queens NYCHA tenant leaders.
"We have a cadre of residents that are standing behind us; all of which understand the potential of development of our communities," Taylor said among some dozen demonstrators in front of the Long Island City public-housing complex—the largest in the country. "We need to speak to them and not allow people coming from outside of our community to speak for us. You can't speak for us."
The plan has faced staunch opposition, in particular from local pols like City Council member Jimmy Van Bramer and State Senator Michael Gianaris, who over the weekend gathered signatures at the Queensbridge Houses for a petition aimed at derailing the deal. The e-commerce giant says it would bring at least 25,000 jobs to the city and $27 billion in tax revenue to the state. But Amazon will receive nearly $3 billion in subsides through a combination of city and state tax incentive programs that has provoked unrelenting ire from locals and elected officials.
Bramer, Gianaris and some 40 advocates gathered 400 signatures during the petitioning blitz, according to Van Bramer's office. But local tenant leaders were not thrilled with the anti-Amazon action on their doorstep.
"I'm not gonna allow anybody to come into my community and disrupt and deny them the opportunity for a better life," said April Simpson, president of the Queensbridge Houses Tenant Association. Simpson, who said Amazon has been in touch with her group since
Amazon announced the move in November, believes the online behemoth will hire workers from the NYCHA complex.
"You know why? Because we have a voice," she said. "We're at the table. That's the blessing."
Elizabeth Lusskin, president of the Long Island City Partnership and another member of Amazon's HQ2 advisory committee, agreed with Simpson and said Amazon has "really been making an effort to get into the community and get people ready for this."
"The deal is an opportunity to make a better balance in the neighborhood—a lot of growth has been around residential—we need the jobs as well," Lusskin told Curbed. "It's going to take work but the prize is a level of job development that has just never come along before."
But critics of the deal pushed back on claims that Amazon is meaningfully engaging with locals. On WCNY radio Monday, Gianaris said he has spoken with community groups who believe Amazon's outreach is a charade.
"I've heard from a number of them privately that they can't get anywhere—that it's all part of a show," said Gianaris, who was recently appointed to the Public Authorities Control Board, a little-known state board that must approve the Amazon deal. "They're not actually engaging with them in a real way and I'm not interested in having that kind of neighbor."
Other elected officials joined pro-Amazon advocates by touting the deal Monday as an economic windfall.
"We face probably the most important economic decision in generations for our city," said Maloney, who represents Long Island City and is on the House Financial Services Committee. "What the residents of this community are telling me is that they want jobs, they want training, they want opportunity."
A recent Siena College poll found that 56 percent of registered voters statewide approve of the Amazon deal, while 36 percent do not. In New York City, some 58 percent of voters support the plan, while 35 percent are opposed.
Mayor de Blasio defended his decision to support the deal during his testimony at the state legislature's Joint Fiscal Committee meeting Monday—citing the 25,000 up to 40,000 new jobs it could create.
"It was mission critical that this city get those jobs," he said.
Amazon HQ2 in New York City: news and updates
Cuomo personally appeals to Jeff Bezos to bring Amazon HQ2 back to NYC
Amazon HQ2: NYC deal being reconsidered after fierce opposition
Next Up In Amazon HQ2
Amazon cancels HQ2 plans for New York City
Amazon's HQ2 deal with New York, explained
A walk around Anable Basin, Amazon's future home in Queens
Is Long Island City ready for Amazon's HQ2?
How did NYC woo Amazon to Long Island City?
Long Island City's forgotten history
The birth, life, and death of old Penn Station For 54 years, railroad passengers would enter New York City in a triumphant and stately Pennsylvania Station. In the '60s, it was razed. Here's why.

redpajama_set_name: RedPajamaCommonCrawl


text:
A Dirty Dozen with BRADY PARKS from THE NATIONAL PARKS – June 2020
Todd 'ToddStar' Jolicoeur | 17 June 2020 | Reply
According to a recent press release: "Since emerging in 2013, The National Parks have quietly grown into an independent phenomenon with roots embedded in blissful pop, cinematic electronics, organic orchestration, and rock energy. The Provo, UT male/female quartet — Brady Parks [guitar, vocals], Sydney Macfarlane [keys, vocals], Cam Brannelly [drums], and Megan Parks [violin] — bloom like never before on their aptly titled independent fourth full-length, Wildflower, the follow-up to their 2017 release Places. The forthcoming 15-track album, produced and mixed by longtime collaborator Scott Wiley, features their best songwriting to date and a variety of sounds and styles, as well as a lot of heart, as evidenced by the title track "Wildflower" and their newest release "Time," which urges for patience and perseverance through struggle." We get vocalist / guitarist Brady to discuss new music, influences, and much more…
Photo credit: McKenna Chatterly
1. Tell us a little about your latest release. What might a fan or listener not grab the first or second time they listen through? Are there any hidden nuggets you put in the material or that only diehard fans might find?
Our latest single is "Waiting For Lightning," off our new album Wildflower coming out June 19th, and it's a song about holding onto hope and about stepping out into the storm to watch something amazing happen. This was a really fun song to write and record. It starts off with the "oooo"s and I feel like as soon as they hit they hook you into the song. A fun fact about this song was when we were looking for a lightning sound, our producer found the whip crack snare sound and that was one of the factors that sparked our creative direction for the rest of the album aesthetic. We felt like it was a cool western flair and that's a vibe that we've started to run with.
2. What got you into music, and can you tell us about the moment you realized you wanted to be a musician?
I remember when I was in college and a lot of my friends were going on to intern or work at advertising agencies and I knew that was "supposed" to be my next step too. I was sitting in my car outside of my apartment one night and it kinda hit me. I just took a step back and realized that I couldn't see my life without music. I knew I had to be all in at that point but I think every experience in music gradually built up to that moment.
3. Building on that, is there a specific song, album, performer, or live show that guided your musical taste?
There are many! I think one of the most influential bands for me has been Coldplay. I remember listening to the Mylo Xyloto album on repeat and feeling so inspired. That album has definitely had a large impact on me. I would also have to add Bon Iver as well. Bon Iver has also played a huge role in shaping my music taste.
4. Who would be your main five musical influences?
Coldplay, Bon Iver, Death Cab For Cutie, Fleetwood Mac, and Michael Jackson.
5. If you could call in any one collaborator to do a song with, who would it be, and why?
Such a great question. I think it would be amazing to collab with Justin Vernon. He is such a creative genius and I would love to pick his brain and create something with him.
6. How would you describe your music to someone who'd never listened to you before? What is the one comparison a reviewer or fan has made that made you cringe or you disagreed with?
I would say we are a folk-pop band with music that can take you places. We have songs that range from really raw and emotional, to songs that are upbeat and dancey and everything in between. And yes! There have been some comparisons that we have disagreed with but I can't remember the specifics right now. I just know that some comparisons have definitely made us cringe, haha.
7. When your band is hanging out together, who cooks, who gets the drinks in, and who is first to crack out the acoustic guitars for a singalong?
I think Sydney is the cook! She's a mom of 2 kids and she's also our band mom. She takes care of us and makes sure we have good snacks on the road even though there are some snacks she doesn't like to share. I'm probably the first to get the guitar out for the sing along!
8. When was the last time you were starstruck and who was it?
I saw Mitt Romney in the airport and I lost all chill. I don't even know why but I instantly yelled "LOOK, IT'S MITT!" and he was only a few feet away from me lol.
9. What is the best part of being a musician? If you could no longer be a musician for whatever reason, what would be your dream job?
The best part of being a musician is getting to meet all of the amazing people that come to our shows. There is something so magical about being up on a stage and feeding off the energy from a room full of people. We all leave the show feeling uplifted and that is a beautiful thing. I think if I wasn't a musician I would like to fix up and flip cool old houses. I like watching Fixer Upper. Chip and Jo are my heroes. I want to meet them. I'd be starstruck for sure.
10. What is one question you have always wanted an interviewer to ask – and what is the answer? Conversely, what question are you tired of answering?
I've always wanted to be asked what Office character would I be. The answer – haha I don't even know. Definitely not Creed. But maybe Creed. And I actually don't think there is a question I'm tired of answering!
11. Looking back over your career, is there a single moment or situation you feel was a misstep or you would like to have a "do over," even if it didn't change your current situation?
Yes, I'm sure there have been several missteps. Something that I've learned is that it's so important to surround yourself with people who believe in you. We are so lucky to have a great team now that believes in what we are doing and together we all work to make magic happen. It's the best but that's something we've learned the hard way.
12. If you could magically go back in time and be a part of the recording sessions for any one record in history, which would you choose – and what does that record mean to you?
I think Beach Boys, Pet Sounds. That would be amazing. I think that record is so unique and beautiful and is so timeless.
BONUS QUESTION – Due to the current world situation with COVID-19 / quarantine / shelter in place, what have you discovered you miss the most from your life before the pandemic struck?
I miss being able to tour and play music and connect with people. I can't wait to get back on the road!
THE NATIONAL PARKS LINKS:
5 October 2021 BOOK REVIEW: There's a Ghost in This House by Oliver Jeffers
7 November 2017 INTERVIEW: STUART SMITH of HEAVEN AND EARTH – November 2017
23 May 2013 ROCK ON THE RANGE 2013 Sells Out With 105,000 Tickets Sold
1 February 2017 CD REVIEW: VIDA CAIN – Yeah Nah
6 December 2016 COOKBOOK REVIEW: GOOD COOKING by Neil Perry
11 November 2020 A Dirty Dozen with JACOB KULICK from KULICK – November 2020
7 June 2013 Movie – Dead Man Down
27 July 2017 CD REVIEW: DOGS OR GODS – hiSTORIES
20 November 2015 INTERVIEW – ZAKK WYLDE, Zakk Wylde's Black Label Society
24 September 2018 RUSSIAN RESURRECTION FILM FESTIVAL 2018
Category: Interviews
Please verify you\'re a real person: * Time limit is exhausted. Please reload CAPTCHA. − =
« A Dirty Dozen with JULIAN TAYLOR – June 2020
MUSIC REVIEW: ANCHOR & BRAILLE – Tension »


The company was founded in 1987. It is a continuation of gardening passion in our family, whose gardening roots reach several generations. Szkółka Drzew, Krzewów Owocowych i Róż [Plant Nursery of Trees, Fruit Shrubs and Roses] specialises in the production of fruit trees, berry shrubs and rose shrubs. This material is sold with a bare root in a packaged form as well as in containers – ready for direct sale. We have a modern machinery park, serving both for plant production and for plant packaging.
1,500,000 rose shrubs in 300 varieties, including licensed varieties.
approx. 5,000,000 pcs of rose shrub root stocks.
The company also deals in seed production. We have our seed orchards and qualified fruit tree cutting orchards as well as a rose seed orchard.
year 2 keeping precious plants and expedition in autumn.
The material is stored in wooden and metal "Manurack" type pallets. In total, we can store approx. 600,000 pieces of rose shrubs and 100,000 pieces of fruit trees of various species.


EBay has launched a new advertising product named "promoted listing" which will allow the merchants only to pay for the actual sale of the product. It means that the new product will be based on the "cost per sale" model rather than the earlier was based on "cost per click" model.
Based upon the sale price of the product, merchants can decide a percentage of the product's sale price ranging from 1% to 20% and if they are the highest bidder, their listing will be promoted. Higher the percentage, more prominent the ad will be.
2) Would you pay for watching videos on YouTube?
Currently selected sellers from U.S., UK, Germany and Australia will be invited to use promoted listings ads and then the program will be made available to other sellers later in the year.
Interested merchants can sign-up for the wait list now. The option is currently open for the merchants running on desktop and eBay's ioS app. The option for android will be available soon.
[su_box title="Experts Review from DSIM :- " box_color="#c7c7c7″ title_color="#000000″ radius="2″]1) An Interview with the Assistant Vice President of Grofers- Sharad Harjai.


No doubt Jumia and Olx are the biggest/most popular online shopping website in Nigeria. They've made buying of goods quite easy, that you'll be on your couch shopping and you'll be rest assured that you'll your goods at the appropriate time.
However, these platforms aren't meant just for those who are buying, you as a seller can also register and run your business (start selling your goods right in the comfort of your house).
Here is the catch, as a seller you post your goods there, they do the adverts for you and when you make sales, you pay a commission....that's cool I guess.
I have used both platforms for my shopping several times and I have not been dissapointed at any point.
Here is the big question, which of the shopping website do you think is better, in terms of site design and functions, authenticity of products, customer relations, refunding etc.


text:
[artists] craig hilton
Releases on Afe:
I Will Be the Light [afe114lcd]
http://www.myspace.com/chilt
Craig Hilton was born in 1972 in New York and now resides in Raleigh, NC. Has been playing the guitar since he was 10.
His first experimentations in sound began as a teenager with a guitar and a 4 track tape recorder, unknowing of the catalogue of experimental music that came before him.
After intensive study of classical and flamenco guitar for years, he finally started to return to the idea of abstract sound designs and noise with an industrial project called Sixtus V, where he became obsessed with the idea of using electronic means (i.e. samplers, treated tape loops) to achieve sounds he was not able to create with guitar alone.
These experimentations led him down the path of more "stand-alone" pieces, utilizing clusters and creating large walls of sound completely in the electronic domain. As a result, there was a collaboration between his project at the time and the late MSBR.
Since 2001, Craig has been involved with many other projects. He toured Europe for the first time as guitarist/live electronics of the free improv. group The Feraliminal Lycanthropizers, playing in Sweden, Amsterdam, Berlin and in Hamburg as part of the Nozart Improvised Music Festival, sharing the stage with the likes of Franz Hautzinger, Tim Hodgkinson, Hans Koch and others.
Also at this time he was creator and sound designer for The Centre for Transgressive Behaviors, an experimental theatre group built around the ideals of the Theatre of the Absurd and the Happenings.
As a full time thought process, this particular group enabled Craig to really coordinate the interaction between concrete and composed sound with the live action of the performers. The group still has remnants in the US and Europe.
After a few years touring with a band back in the US, Craig once again gave full effort into his electroacoustic pieces. His first release was a collaboration with Yannick Franck (Belgium) entitled "Amatra". A second collaboration happened with Maurizio Bianchi (Italy) entitled "PU94" which is being re-released in late 2008.
A solo CD "The Smoking Mirror", released early 2008, incorporated much of what he wanted to achieve after the long and intensive collaborations with Yannick and MB.
Since early 2008, Craig has began performing live with his guzheng (Chinese zither). He felt the need to once again have the interaction between live acoustic and live electronics.
He has done two tours in Europe since late 2007, performing in Berlin with Derek Houlzer, Marcelo Aguirre and Penelope X, in Brussels with Yannick Franck and most recently in London playing guzheng alongside Steve Beresford.
Another tour of Europe, a solo guzheng release and collaborations with Wyrm and, Tomas Phillips are in the works.
"I Will Be the Light", a collaborative work with Ur was released by Afe in 2008.


text:
Work From Home with Style & Substance
Written by Leigh-Ann Allaire
Never before has the concept of creating an efficient space to work from home been so important to so many, not only for professional productivity, but for the adaptability of family life as well. With more and more people adjusting to the new normal of working remotely, the couch has quickly become a virtual seat at a conference room table and kitchens have transformed into remote classrooms. Now more than ever, there's a desire to maximize the function of our everyday spaces and design them in a way that creates a customized sense of balance, calm, and comfort in our homes.
Design wish list
When the homeowners of this open-concept basement first reached out for design help, they had one simple request, "We want to want to be in the space!" They dreamed of transforming their under-utilized lower level into a place where they could efficiently run their business from home, put their feet up and relax at the end of the day, and gather together with their children. They struggled envisioning how their dark, windowless space could become a bright and airy retreat, brimming with beauty and practicality.
"Now more than ever, there's a desire to maximize the function of our everyday spaces and design them in a way that creates a customized sense of balance, calm, and comfort in our homes."
Designated zones
I was happy to be their fresh set of eyes, and my first design goal was to establish a functional layout that took all of their desired uses into consideration. A dedicated office area was at the top of their wish list, followed by a zone for lounging, and a dining table that could double as a homework station and meeting space. By working with as much of their existing furniture as possible, I simply rearranged the layout and introduced various rugs to define and visually separate each of the zones within the open space.
"Various table and floor lamps were added to achieve layers of light that washed the space with warmth, and the walls and ceiling were wrapped with a crisp white paint hue to help reflect as much light as possible."
Since there was no natural light, creating a fresh and welcoming atmosphere meant introducing additional artificial lighting sources to balance the existing grid of pot lights. Various table and floor lamps were added to achieve layers of light that washed the space with warmth, and the walls and ceiling were wrapped with a crisp white paint hue to help reflect as much light as possible. A vintage hutch painted with Linen White Chalked Paint from Rustoleum was repositioned behind the desk to provide storage and display, and blends seamlessly into the wall colour, which maintains a low-contrast, subtle atmosphere.
Faux foliage
The lack of natural light also meant it wasn't possible to introduce living foliage, so a selection of faux plants were added to bring an element of nature indoors along with warm, organic woods, and textured fabrics. To give the office a subtle sense of privacy from the rest of the space, a simple grouping of macrame plant hangers were hung from the ceiling to create a lush curtain of green, while still keeping the space open and airy.
Bring the world home
Finally, I took cues from the homeowners' two favourite vacation spots (Jamaica and NYC) to create a customized staycation style where tropical vibes meet big-city chic. The peel-and-stick palm wall mural by Wallsauce was the perfect way to add a huge dose of WOW to the space, and a collection of one-of-a-kind Jenn Fenton cigar box purses were displayed on modern lucite floating shelves alongside a nod to the Big Apple itself.
By defining various zones within the space, incorporating fresh colours and finishes, and adding a personalized decor touch, this renovated basement has become a space that the homeowners not only WANT to be in – they never want to leave.
PALM MURAL Wallsauce SOFA, COFFEE TABLES, FLOOR LAMP Structube AREA RUGS, BAR COUNTER, SIDE TABLE, FAUX PLANTS Ikea MACRAME PLANT HANGERS, ACCESSORIES Hue La La PAINT Hutch: Linen White Chalk Paint; Walls: Zinsser Interior Eggshell, Perma White; Rust-Oleum CHAIR HomeSense
Living Room Reveal
Dream Kitchen: Get The Look For Less


1 :: david's sister jen had a release party for her CD thursday. nathan & hannah came too. sibling time galore. to check out jennifer's music & the story behind it, click here.
2 :: 11 untranslatable words from other languages… with pretty illustrations to match. of course my favorite one is the spanish one.
3 :: "sometimes our neighbor really is our neighbor." good thoughts on literally loving your neighbor.
4 :: I'm loving watching derek webb's new stuff trickle out. excited for the CD & hoping to catch him on tour.
5 :: really interested in this cookbook that just came out, "keepers." for the readers who cook… what are some of your "keeper" recipes?
This entry was posted in Uncategorized and tagged cooking, friday five, links, music. Bookmark the permalink.


THIS IS FAKE NEWS: BUT NOT FAR FETCHED SINCE TRUMP IS A KKK MEMBER LIKE HIS FATHER WAS.
Previous Article An Open Message to "Trump Supporters Against (GOD) Robert De Nero.
Next Article All Americans Are Responsible for the Atrocities that the president-want-to-be Donald Trump Is Repeatedly and Disrespectfully Commits. SPEAK UP.


text:
The Lafayette Campaign, A Tale of Deception and Elections
Ellen | January 23, 2017
America is rushing headlong into another election year, but something is wrong – the polls don't match reality. It's up to cybersecurity super sleuth Frank Adversego to find the Black Hats who are trying to hack the presidential election, and stop them before they do.
The action begins when a nameless government agency recruits Adversego to find out who's manipulating the polls, but he soon learns that the voting results are at risk as well. From then on, it's a race against time to see who will stop who as the presidential election – and Adversego's life – hang in the balance.
In this latest Frank Adversego thriller, you'll meet a scheming Native American casino manager, a scrum of presidential candidates too incredible to be believed anywhere outside of a real American election, a former Secretary of Defense who will stop at nothing, and an attractive French hitchhiker that Adversego rescues in the middle of a desert, and soon wishes he hadn't.
The Lafayette Campaign provides a satirical take on American politics and our infatuation with technology that will make readers pause and wonder: could this really happen?
Andrew Updegrove brings a rare combination of drama, satire and technical accuracy to his writing. The result is a book you can't put down that tells you things you might wish you didn't know. – Admiral James G. Stavridis, retired Commander, U.S. European Command and NATO Supreme Allied Commander Europe, and current Dean of the Fletcher School of Law and Diplomacy
Share Filed in: Kindle Books, Mystery, Thriller & Suspense


Successor-in-Interest: If a company has been acquired, merged or had a significant change in its ownership, the new or reorganized entity is generally considered a successor-in-interest ("Successor") to the originally existing company.
In the immigration law context, the Successor is required to submit documentation evidencing that it has assumed the rights, duties, obligations and assets of the original employer and that it will be liable for the employment of the beneficiary subject to the terms set forth in the labor certification and I-140 Petition.
Similarly, a company that changed its name or corporate structure would need to meet these requirements.
Traditionally, these requirements by the Successor could have been met in cases where the labor certification (LC) has been approved and the I-140 had not yet been filed, by having the Successor company file the I-140 (immigrant visa petition by employer) with the evidence described above, to reaffirm that the Successor is continuing to offer the employment to the beneficiary in accordance with the information stated on the LC.
In order to remain eligible for your employment based immigrant visa petition, the company that acquired the previous company must meet several criteria to qualify as a "Successor in interest." There are three factors that must all be met. First, the job opportunity offered by the successor must be the same as the job opportunity originally offered on the labor certification. Second, the successor bears the burden of proof to establish eligibility in all respects, including evidence of the predecessor's ability to pay the proffered wage as of the date the labor certification was filed. Third, in order to show a valid successor in interest relationship between the successor and the predecessor that filed the labor certification, the petitioner must fully describe and document the transfer and assumption of the ownership of the predecessor by the successor.
The job opportunity offered by the successor must be the same as the job opportunity originally offered on the labor certification.
The job offered by the successor company must have the same or greater rate of pay, similar job description, and job requirements. Your petition will fail if you are asking the USCIS to accept changes on labor certification items relating to labor market test. Your Job must have been available since the labor certification was filed. Before the acquisition, the job opportunity ceases if the business operations ceased during the ownership transfer so that your services were no longer required. After the acquisition, job opportunity ceases if the business operations had a substantial lapse so that your services were no longer required.
The successor company must prove eligibility in all respects, including evidence of the predecessor's ability to pay the proffered wage as of the date the labor certification was filed. It must be established that the predecessor had the ability to pay the proffered wage from the labor certification filing date until the transfer of ownership occurred. It must be also be established that the successor had the ability to pay the proffered wage from the date the transfer of ownership occurred until such time as your immigrant visa is issued or you adjust status to permanent residence.
The petitioner must fully describe and document the transfer and assumption of the ownership of the predecessor by the successor.
To show a valid successor in interest relationship between the successor and the predecessor that filed the labor certification, the petitioner must fully describe and document the transfer and assumption of the ownership of the predecessor by the successor. It must be established that that the successor company purchased both the assets and also purchased the rights and obligations necessary to carry on the business in the same manner as the predecessor.
For acquisitions made through stock purchase agreements, this should be a fairly straightforward process to meet the necessary criteria. In cases involving asset purchase acquisitions, the process becomes more involved as more evidence will be required. Merger acquisitions cases are very complex and require thorough examination and extensive documentary evidence in order to be approved.


text:
Chef Judges
Home » MKR 2016 » Nev and Kel's Instant Restaurant
Nev and Kel's Instant Restaurant
in MKR 2016
Nev and Kel are cooking in their instant restaurant on My Kitchen Rules 2016. The couple from Secret Harbour in Western Australia love cooking "honest" food. Their instant restaurant is called Secrets and is a holly wood theme.
For entree, Nev and Kel are making seared scallops with corn puree and crumbed crackling. For main, they are making apple cider pork belly with fennel chips, honey carrots and gravy. Finally, for dessert Nev and Kel are making apple pie with vanilla ice cream.
The first thing they did was put the vanilla ice cream on for dessert, then moved to the pork crackling and the belly. Nev injected his pork with apple cider with a syringe, but while he was doing that, he burnt the crackling. It was managed to be saved, it was going to be crumbed and used for the entree, there was enough. They put their apple infused pork belly into the oven.
The guests arrive and are very impressed with the fancy restaurant. Nev and Kel get started on the corn puree. The judges arrive and are warmly greeted by Nev and Kel. The menu is revealed. The guests are impressed at how fancy it was, it wasn't what they were expecting. Jessica and Marcus didn't think the menu was too intimidating.
Nev and Kel get back into the kitchen to continue preparing the entree. They cook a scallop to check their timing, they do not want them overcooked. The scallops are placed back into their shells on top of the corn puree and the pork crackling is sprinkled on top. The entree is taken out to the guests. Pete and Manu taste the dish. Pete says it was a delightful little entree. He says the scallops were cooked perfectly.Manu says the dish is fantastic and the corn puree is silky smooth, his only criticism is that the pork crackling is a little too hard. The other guests taste the dish. They love the creamy corn puree and the scallops. Marcos said the pork crackling was like glass shards in his mouth.
Nev and Kel get back into the kitchen and check on the pork belly. They are very happy with how it is cooked as it is very tender. They place the pork back into the oven under the griller to get the skin to crackle. Kel gets started on the apple crumble. They make a start on the fennel chips but they were soggy and they're not happy. During the conversation at the table Jess says she doesn't eat oil so she's worried that the fennel chips are going to just taste like oil. The other contestants are wondering what ingredients Jessica and Marcus will cook with as she doesn't like so many things. Back in the kitchen Nev is still working on the fennel chips and Kel prepares the carrots. Nev is so focused on the chips he has forgotten the pork belly that is under the griller and it starts to burn. Kev is still not happy with the fennel chips. He decides not to use the tempura batter and just uses the fennel on their own. They still don't cook very well and they're not happy with them. The gravy has reduced too much and they're worried that there is not enough gravy for everyone. Nev is really upset with the look of the dish. They plate it up and take it out to the guests. The judges taste the dish. Nev is really regretting putting the fennel chips on the plate. Manu says the pork melts in his mouth and the crackling was great but the fennel chips were no good, the carrots too hard and the sauce over reduced. Pete loves the pork too but was disappointed with the soggy chips. The other guests taste the dish. They are not overly impressed with the pork and they all did not like the fennel chips.
Nev and Kel get back into the kitchen and are woking on making the apple pie. They were hoping to be more organised than they are. They still need to make the pastry and cook the apples. The pastry alone needs 20 minutes to rest in the fridge. They take hte pastry out of the fridge and roll it out. They are stressing that they will not have enough for everyone. The apples aren't cooked as long as they would like but they finally get it into the oven. The guests have been waiting over an hour for the dessert. The ice-cream has come out well. Now the guests have been waiting for 2 hours for their dessert. The pie finally comes out of the oven and they try and get it out to the guests as soon as possible but they pie is falling apart and has crumbled everywhere. They plate it up with messy scoops of ice cream and it looks terrible. The guests instantly know that something has gone wrong in the kitchen tonight. The judges taste the dish. Manu says he's not happy and that theyve missed the mark on this one. The ice cream looks like a cheap bought one. He says they have rushed this dish and that there is no love in this dish. Pete says the vanilla ice cream wasn't good. The consistency of the apple pie wasn't good. The other guests get to taste the dessert. They are all underwhelmed.
Nev and Kel Scores
It's time for the teams to score their meals tonight.
Jessica and Marcos 3/10
Tasia and Gracia 5/10
JP and Nelly 7/10
Luciano and Martino 4/10
Alex and Gareth 4/10
Total score 23/50
It's time to hear the judges scores.
Entree 9/10
Main 6/10
Dessert 1/10
Grand total score 56/110
This places Nev and Kel at the bottom of the leader board.
Tomorrow it's finally time to see Jessica and Marcos cook. We're expecting big things!
← JP and Nelly's Instant Restaurant
Elimination – Jessica and Marcos Instant Restaurant →
MKR 2013
MKR Recipes
· © 2021 My Kitchen Rules


text:
module.exports = (function(){
    var Requires = {
            ArguMintsException:require("./exception.js").ArguMintsException,
            ArguMintStats:require("./stats.js").ArguMintStats,
            ArguMintRules:require("./rules.js").ArguMintRules,
            AuxUtils:require("./aux_utils.js"),
            BuiltIns:require("./argumints-builtins.js").BuiltIns
        };

    return Requires;
}());