text:
var expat = require('node-expat'),
    inherits = require('util').inherits,
    http = require('./http'),
    fs = require('fs'),
    url = require('url'),
    path = require('path'),
    assert = require('assert').ok;

var Primitives = {
    string: 1, boolean: 1, decimal: 1, float: 1, double: 1,
    anyType: 1, byte: 1, int: 1, long: 1, short: 1,
    unsignedByte: 1, unsignedInt: 1, unsignedLong: 1, unsignedShort: 1,
    duration: 0, dateTime: 0, time: 0, date: 0,
    gYearMonth: 0, gYear: 0, gMonthDay: 0, gDay: 0, gMonth: 0,
    hexBinary: 0, base64Binary: 0, anyURI: 0, QName: 0, NOTATION: 0
};

function splitNSName(nsName) {
    var i = (nsName != null) ? nsName.indexOf(':') : -1;
    return i < 0 ? {namespace:null,name:nsName} : {namespace:nsName.substring(0, i), name:nsName.substring(i+1)};
}

function xmlEscape(obj) {
    if (typeof(obj) === 'string') {
        return obj
            .replace(/&/g, '&')
            .replace(/</g, '<')
            .replace(/>/g, '>')
            .replace(/"/g, '"')
            .replace(/'/g, ''')
    }

    return obj;
}

var trimLeft = /^[\s\xA0]+/;
var trimRight = /[\s\xA0]+$/;

function trim(text) {
    return text.replace(trimLeft, '').replace(trimRight, '');
}

function extend(base, obj) {
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            base[key] = obj[key];
        }
    }
    return base;
}

function findKey(obj, val) {
    for (var n in obj) if (obj[n] === val) return n;
}

var Element = function(nsName, attrs) {
    var parts = splitNSName(nsName);

    this.nsName = nsName;
    this.namespace = parts.namespace;
    this.name = parts.name;
    this.children = [];
    this.xmlns = {};
    for (var key in attrs) {
        var match = /^xmlns:?(.*)$/.exec(key);
        if (match) {
            this.xmlns[match[1]] = attrs[key];
        }
        else {
            this['$'+key] = attrs[key];
        }
    }
}
Element.prototype.deleteFixedAttrs = function() {
    this.children && this.children.length === 0 && delete this.children;
    this.xmlns && Object.keys(this.xmlns).length === 0 && delete this.xmlns;
    delete this.nsName;
    delete this.namespace;
    delete this.name;
}
Element.prototype.allowedChildren = [];
Element.prototype.startElement= function(stack, nsName, attrs) {
    if (!this.allowedChildren) return;

    var childClass = this.allowedChildren[splitNSName(nsName).name],
        element = null;

    if (childClass) {
        stack.push(new childClass(nsName, attrs));
    }
    else {
        this.unexpected(nsName);
    }

}
Element.prototype.endElement = function(stack, nsName) {
    if (this.nsName === nsName) {
        if(stack.length < 2 ) return;
        var parent = stack[stack.length - 2];
        if (this !== stack[0]) {
            extend(stack[0].xmlns, this.xmlns);
            // delete this.xmlns;
            parent.children.push(this);
            parent.addChild(this);
        }
        stack.pop();
    }
}
Element.prototype.addChild = function(child) { return; }
Element.prototype.unexpected = function(name) {
    throw new Error('Found unexpected element (' + name + ') inside ' + this.nsName);
}
Element.prototype.description = function(definitions) {
    return this.$name || this.name;
}
Element.prototype.init = function() {};
Element.createSubClass = function() {
    var root = this;
    var subElement = function() {
        root.apply(this, arguments);
        this.init();
    };
    // inherits(subElement, root);
    subElement.prototype.__proto__ = root.prototype;
    return subElement;
}

var ElementElement = Element.createSubClass();
var InputElement = Element.createSubClass();
var OutputElement = Element.createSubClass();
var SimpleTypeElement = Element.createSubClass();
var RestrictionElement = Element.createSubClass();
var EnumerationElement = Element.createSubClass();
var ComplexTypeElement = Element.createSubClass();
var SequenceElement = Element.createSubClass();
var AllElement = Element.createSubClass();
var MessageElement = Element.createSubClass();
var DocumentationElement = Element.createSubClass();

var SchemaElement = Element.createSubClass();
var TypesElement = Element.createSubClass();
var OperationElement = Element.createSubClass();
var PortTypeElement = Element.createSubClass();
var BindingElement = Element.createSubClass();
var PortElement = Element.createSubClass();
var ServiceElement = Element.createSubClass();
var DefinitionsElement = Element.createSubClass();

var ElementTypeMap = {
    types: [TypesElement, 'schema documentation'],
    schema: [SchemaElement, 'element complexType simpleType include import'],
    element: [ElementElement, 'annotation complexType'],
    simpleType: [SimpleTypeElement, 'restriction'],
    restriction: [RestrictionElement, 'enumeration'],
    enumeration: [EnumerationElement, ''],
    complexType: [ComplexTypeElement,  'annotation sequence all'],
    sequence: [SequenceElement, 'element'],
    all: [AllElement, 'element'],

    service: [ServiceElement, 'port documentation'],
    port: [PortElement, 'address documentation'],
    binding: [BindingElement, '_binding SecuritySpec operation documentation'],
    portType: [PortTypeElement, 'operation documentation'],
    message: [MessageElement, 'part documentation'],
    operation: [OperationElement, 'documentation input output fault _operation'],
    input : [InputElement, 'body SecuritySpecRef documentation header'],
    output : [OutputElement, 'body SecuritySpecRef documentation header'],
    fault : [Element, '_fault documentation'],
    definitions: [DefinitionsElement, 'types message portType binding service documentation'],
    documentation: [DocumentationElement, '']
};

function mapElementTypes(types) {
    var types = types.split(' ');
    var rtn = {}
    types.forEach(function(type){
        rtn[type.replace(/^_/,'')] = (ElementTypeMap[type] || [Element]) [0];
    });
    return rtn;
}

for(var n in ElementTypeMap) {
    var v = ElementTypeMap[n];
    v[0].prototype.allowedChildren = mapElementTypes(v[1]);
}

MessageElement.prototype.init = function() {
    this.element = null;
    this.parts = null;
}
SchemaElement.prototype.init = function() {
    this.complexTypes = {};
    this.types = {};
    this.elements = {};
    this.includes = [];
}
TypesElement.prototype.init = function() {
    this.schemas = {};
}
OperationElement.prototype.init = function() {
    this.input = null;
    this.output = null;
    this.inputSoap = null;
    this.outputSoap = null;
    this.style = '';
    this.soapAction = '';
}
PortTypeElement.prototype.init = function() {
    this.methods = {};
}
BindingElement.prototype.init = function() {
    this.transport = '';
    this.style = '';
    this.methods = {};
}
PortElement.prototype.init = function() {
    this.location = null;
}
ServiceElement.prototype.init = function() {
    this.ports = {};
}
DefinitionsElement.prototype.init = function() {
    if (this.name !== 'definitions') this.unexpected(nsName);
    this.messages = {};
    this.portTypes = {};
    this.bindings = {};
    this.services = {};
    this.schemas = {};
}
DocumentationElement.prototype.init = function(){}

SchemaElement.prototype.addChild = function(child) {
    if (child.$name in Primitives) return;
    if (child.name === 'include' || child.name === 'import') {
        var location = child.$schemaLocation || child.$location;
        if (location) {
            this.includes.push({
                namespace: child.$namespace || child.$targetNamespace || this.$targetNamespace,
                location: location
            });
        }
    }
    else if (child.name === 'complexType') {
        this.complexTypes[child.$name] = child;
    }
    else if (child.name === 'element') {
        this.elements[child.$name] = child;
    }
    else if (child.$name) {
        this.types[child.$name] = child;
    }
    this.children.pop();
    // child.deleteFixedAttrs();
}
TypesElement.prototype.addChild = function(child) {
    assert(child instanceof SchemaElement);
    this.schemas[child.$targetNamespace] = child;
}
InputElement.prototype.addChild = function(child) {
    if (child.name === 'body') {
        this.use = child.$use;
        if (this.use === 'encoded') {
            this.encodingStyle = child.$encodingStyle;
        }
        this.children.pop();
    }
}
OutputElement.prototype.addChild = function(child) {
    if (child.name === 'body') {
        this.use = child.$use;
        if (this.use === 'encoded') {
            this.encodingStyle = child.$encodingStyle;
        }
        this.children.pop();
    }
}
OperationElement.prototype.addChild = function(child) {
    if (child.name === 'operation') {
        this.soapAction = child.$soapAction || '';
        this.style = child.$style || '';
        this.children.pop();
    }
}
BindingElement.prototype.addChild = function(child) {
    if (child.name === 'binding') {
        this.transport = child.$transport;
        this.style = child.$style;
        this.children.pop();
    }
}
PortElement.prototype.addChild = function(child) {
    if (child.name === 'address' && typeof(child.$location) !== 'undefined') {
       this.location = child.$location;
    }
}
DefinitionsElement.prototype.addChild = function(child) {
    var self = this;
    if (child instanceof TypesElement) {
        self.schemas = child.schemas;
    }
    else if (child instanceof MessageElement) {
        self.messages[child.$name] = child;
    }
    else if (child instanceof PortTypeElement) {
        self.portTypes[child.$name] = child;
    }
    else if (child instanceof BindingElement) {
        if (child.transport === 'http://schemas.xmlsoap.org/soap/http' ||
            child.transport === 'http://www.w3.org/2003/05/soap/bindings/HTTP/')
            self.bindings[child.$name] = child;
    }
    else if (child instanceof ServiceElement) {
        self.services[child.$name] = child;
    }
    else if (child instanceof DocumentationElement) {
    }
    else {
        assert(false, "Invalid child type");
    }
    this.children.pop();
}

MessageElement.prototype.postProcess = function(definitions) {
    var part = null, child,
        children = this.children || [];

    for (var i in children) {
        if ((child = children[i]).name === 'part') {
            part = child;
            break;
        }
    }
    if (!part) return;
    if (part.$element) {
        delete this.parts;
        var nsName = splitNSName(part.$element);
        var ns = nsName.namespace;
        this.element = definitions.schemas[definitions.xmlns[ns]].elements[nsName.name];
        this.element.targetNSAlias = ns;
        this.element.targetNamespace = definitions.xmlns[ns];
        this.children.splice(0,1);
    }
    else {
        // rpc encoding
        this.parts = {};
        delete this.element;
        for (var i=0, part; part = this.children[i]; i++) {
            assert(part.name === 'part', 'Expected part element');
            var nsName = splitNSName(part.$type);
            var ns = definitions.xmlns[nsName.namespace];
            var type = nsName.name;
            var schemaDefinition = definitions.schemas[ns];
            if (typeof schemaDefinition !== 'undefined') {
                this.parts[part.$name] = definitions.schemas[ns].types[type] || definitions.schemas[ns].complexTypes[type];
            } else {
                this.parts[part.$name] = part.$type;
            }
            this.parts[part.$name].namespace = nsName.namespace;
            this.parts[part.$name].xmlns = ns;
            this.children.splice(i--,1);
        }
    }
    this.deleteFixedAttrs();
}
OperationElement.prototype.postProcess = function(definitions, tag) {
    var children = this.children;
    for (var i=0, child; child=children[i]; i++) {
        if (child.name !== 'input' && child.name !== 'output') continue;
        if(tag === 'binding') {
            this[child.name] = child;
            children.splice(i--,1);
            continue;
        }
        var messageName = splitNSName(child.$message).name;
        var message = definitions.messages[messageName]
        message.postProcess(definitions);
        if (message.element) {
            definitions.messages[message.element.$name] = message
            this[child.name] = message.element;
        }
        else {
            this[child.name] = message;
        }
        children.splice(i--,1);
    }
    this.deleteFixedAttrs();
}
PortTypeElement.prototype.postProcess = function(definitions) {
    var children = this.children;
    if (typeof children === 'undefined') return;
    for (var i=0, child; child=children[i]; i++) {
        if (child.name != 'operation') continue;
        child.postProcess(definitions, 'portType');
        this.methods[child.$name] = child;
        children.splice(i--,1);
    }
    delete this.$name;
    this.deleteFixedAttrs();
}
BindingElement.prototype.postProcess = function(definitions) {
    var type = splitNSName(this.$type).name,
        portType = definitions.portTypes[type],
        style = this.style,
        children = this.children;

    portType.postProcess(definitions);
    this.methods = portType.methods;
    // delete portType.methods; both binding and portType should keep the same set of operations

    for (var i=0, child; child=children[i]; i++) {
        if (child.name != 'operation') continue;
        child.postProcess(definitions, 'binding');
        children.splice(i--,1);
        child.style || (child.style = style);
        var method =  this.methods[child.$name];
        method.style = child.style;
        method.soapAction = child.soapAction;
        method.inputSoap = child.input || null;
        method.outputSoap = child.output || null;
        method.inputSoap && method.inputSoap.deleteFixedAttrs();
        method.outputSoap && method.outputSoap.deleteFixedAttrs();
        // delete method.$name; client will use it to make right request for top element name in body
        // method.deleteFixedAttrs(); why ???
    }

    delete this.$name;
    delete this.$type;
    this.deleteFixedAttrs();
}
ServiceElement.prototype.postProcess = function(definitions) {
    var children = this.children,
        bindings = definitions.bindings;
    for (var i=0, child; child=children[i]; i++) {
        if (child.name != 'port') continue;
        var bindingName = splitNSName(child.$binding).name;
        var binding = bindings[bindingName];
        if (binding) {
            binding.postProcess(definitions);
            this.ports[child.$name] = {
                location: child.location,
                binding: binding
            }
            children.splice(i--,1);
        }
    }
    delete this.$name;
    this.deleteFixedAttrs();
}

SimpleTypeElement.prototype.description = function(definitions) {
    var children = this.children;
    for (var i=0, child; child=children[i]; i++) {
        if (child instanceof RestrictionElement)
           return this.$name+"|"+child.description();
    }
    return {};
}

RestrictionElement.prototype.description = function() {
    var base = this.$base ? this.$base+"|" : "";
    return base + this.children.map( function(child) {
       return child.description();
    } ).join(",");
}

EnumerationElement.prototype.description = function() {
   return this.$value;
}

ComplexTypeElement.prototype.description = function(definitions) {
    var children = this.children;
    for (var i=0, child; child=children[i]; i++) {
        if (child instanceof SequenceElement ||
            child instanceof AllElement) {
            return child.description(definitions);
        }
    }
    return {};
}
ElementElement.prototype.description = function(definitions) {
    var element = {},
        name = this.$name,
        schema;
    var maxOccurs = this.$maxOccurs || 1;
    if ((isNaN(maxOccurs) && maxOccurs == 'unbounded') || maxOccurs > 1) {
        name += '[]';
    }

    if (this.$type) {
        var typeName = splitNSName(this.$type).name,
            ns = definitions.xmlns[splitNSName(this.$type).namespace],
            schema = definitions.schemas[ns],
            typeElement = schema && ( schema.complexTypes[typeName] || schema.types[typeName] );
        if (typeElement && !(typeName in Primitives)) {
            element[name] = typeElement.description(definitions);
        }
        else
            element[name] = this.$type;
    }
    else {
        var children = this.children;
        element[name] = {};
        for (var i=0, child; child=children[i]; i++) {
            if (child instanceof ComplexTypeElement)
                element[name] = child.description(definitions);
        }
    }
    return element;
}
AllElement.prototype.description =
SequenceElement.prototype.description = function(definitions) {
    var children = this.children;
    var sequence = {};
    for (var i=0, child; child=children[i]; i++) {
        var description = child.description(definitions);
        for (var key in description) {
            sequence[key] = description[key];
        }
    }
    return sequence;
}
MessageElement.prototype.description = function(definitions) {
    if (this.element) {
        return this.element && this.element.description(definitions);
    }
    var desc = {};
    desc[this.$name] = this.parts;
    return desc;
}
PortTypeElement.prototype.description = function(definitions) {
    var methods = {};
    for (var name in this.methods) {
        var method = this.methods[name];
        methods[name] = method.description(definitions);
    }
    return methods;
}
OperationElement.prototype.description = function(definitions) {
    var inputDesc = this.input.description(definitions);
    var outputDesc = this.output.description(definitions);
    return {
        input: inputDesc && inputDesc[Object.keys(inputDesc)[0]],
        output: outputDesc && outputDesc[Object.keys(outputDesc)[0]]
    }
}
BindingElement.prototype.description = function(definitions) {
    var methods = {};
    for (var name in this.methods) {
        var method = this.methods[name];
        methods[name] = method.description(definitions);
    }
    return methods;
}
ServiceElement.prototype.description = function(definitions) {
    var ports = {};
    for (var name in this.ports) {
        var port = this.ports[name];
        ports[name] = port.binding.description(definitions);
    }
    return ports;
}

var WSDL = function(definition, uri, options) {
    var self = this,
        fromFunc;

    this.uri = uri;
    this.callback = function() {};
    this.options = options || {};

    if (typeof definition === 'string') {
        fromFunc = this._fromXML;
    }
    else if (typeof definition === 'object') {
        fromFunc = this._fromServices;
    }
    else {
        throw new Error('WSDL constructor takes either an XML string or service definition');
    }

    process.nextTick(function() {
        fromFunc.call(self, definition);

        self.processIncludes(function(err) {
            self.definitions.deleteFixedAttrs();
            var services = self.services = self.definitions.services ;
            if (services) {
                for (var name in services) {
                    services[name].postProcess(self.definitions);
                }
            }
            var complexTypes = self.definitions.complexTypes;
            if (complexTypes) {
                for (var name in complexTypes) {
                    complexTypes[name].deleteFixedAttrs();
                }
            }

            // for document style, for every binding, prepare input message element name to (methodName, output message element name) mapping
            var bindings = self.definitions.bindings;
            for(var bindingName in bindings) {
                var binding = bindings[bindingName];
                if(binding.style !== 'document') continue;
                var methods = binding.methods;
                var topEls = binding.topElements = {};
                for(var methodName in methods) {
                    var inputName = methods[methodName].input.$name;
                    var outputName = methods[methodName].output.$name;
                    topEls[inputName] = {"methodName": methodName, "outputName": outputName};
                }
            }

            // prepare soap envelope xmlns definition string
            self.xmlnsInEnvelope = self._xmlnsMap();

            self.callback(err, self);
        });

    })
}

WSDL.prototype.onReady = function(callback) {
    if (callback) this.callback = callback;
}

WSDL.prototype._processNextInclude = function(includes, callback) {
    var self = this,
        include = includes.shift();

    if (!include) return callback()

    var includePath;
    if (!/^http/.test(self.uri) && !/^http/.test(include.location)) {
        includePath = path.resolve(path.dirname(self.uri), include.location);
    } else {
        includePath = url.resolve(self.uri, include.location);
    }

    open_wsdl(includePath, function(err, wsdl) {
        if (err) {
            return callback(err);
        }

        self.definitions.schemas[include.namespace || wsdl.definitions.$targetNamespace] = wsdl.definitions;
        self._processNextInclude(includes, function(err) {
            callback(err);
        })
    });
}

WSDL.prototype.processIncludes = function(callback) {
    var schemas = this.definitions.schemas,
        includes = [];

    for (var ns in schemas) {
        var schema = schemas[ns];
        includes = includes.concat(schema.includes || [])
    }

    this._processNextInclude(includes, callback);
}

WSDL.prototype.describeServices = function() {
    var services = {};
    for (var name in this.services) {
        var service = this.services[name];
        services[name] = service.description(this.definitions);
    }
    return services;
}

WSDL.prototype.toXML = function() {
    return this.xml || '';
}

WSDL.prototype.xmlToObject = function(xml) {
    var self = this,
        p = new expat.Parser('UTF-8'),
        objectName = null,
        root = {},
        schema = {
            Envelope: {
                Header: {
                        Security: {
                            UsernameToken: {
                                Username: 'string',
                                Password: 'string' }}},
                Body: {
                    Fault: { faultcode: 'string', faultstring: 'string', detail: 'string' }}}},
        stack = [{name: null, object: root, schema: schema}];

    var refs = {}, id; // {id:{hrefs:[],obj:}, ...}

    p.on('startElement', function(nsName, attrs) {
        var name = splitNSName(nsName).name,
            top = stack[stack.length-1],
            topSchema = top.schema,
            obj = {};
        var originalName = name;

        if (!objectName && top.name === 'Body' && name !== 'Fault') {
            var message = self.definitions.messages[name];
            // Support RPC/literal messages where response body contains one element named
            // after the operation + 'Response'. See http://www.w3.org/TR/wsdl#_names
            if (!message) {
               // Determine if this is request or response
               var isInput = false;
               var isOutput = false;
               if ((/Response$/).test(name)) {
                 isOutput = true;
                 name = name.replace(/Response$/, '');
               } else if ((/Request$/).test(name)) {
                 isInput = true;
                 name = name.replace(/Request$/, '');
               } else if ((/Solicit$/).test(name)) {
                 isInput = true;
                 name = name.replace(/Solicit$/, '');
               }
               // Look up the appropriate message as given in the portType's operations
               var portTypes = self.definitions.portTypes;
               var portTypeNames = Object.keys(portTypes);
               // Currently this supports only one portType definition.
               var portType = portTypes[portTypeNames[0]];
               if (isInput) name = portType.methods[name].input.$name;
               else name = portType.methods[name].output.$name;
               message = self.definitions.messages[name];
               // 'cache' this alias to speed future lookups
               self.definitions.messages[originalName] = self.definitions.messages[name];
            }

            topSchema = message.description(self.definitions);
            objectName = originalName;
        }

				if(attrs.href) {
					id = attrs.href.substr(1);
					if(!refs[id]) refs[id] = {hrefs:[],obj:null};
					refs[id].hrefs.push({par:top.object,key:name,obj:obj});
				}
				if(id=attrs.id) {
					if(!refs[id]) refs[id] = {hrefs:[],obj:null};
				}

        if (topSchema && topSchema[name+'[]']) name = name + '[]';
        stack.push({name: originalName, object: obj, schema: topSchema && topSchema[name], id:attrs.id, attrs:attrs});
    })

    p.on('endElement', function(nsName) {
        var cur = stack.pop(),
						obj = cur.object,
            top = stack[stack.length-1],
            topObject = top.object,
            topSchema = top.schema,
            name = splitNSName(nsName).name;

        if (cur.attrs) {
            if (!obj) {
                obj = cur.attrs;
            } else if (typeof(obj) === 'object') {
                obj = extend(obj, cur.attrs);
            } else if (Object.keys(cur.attrs).length !== 1 && cur.attrs.id) {
                obj = extend({
                    value: obj
                }, cur.attrs);
            }
        }

        if (topSchema && topSchema[name+'[]']) {
            if (!topObject[name]) topObject[name] = [];
            topObject[name].push(obj);
        }
        else if (name in topObject) {
            if (!Array.isArray(topObject[name])) {
                topObject[name] = [topObject[name]];
            }
            topObject[name].push(obj);
        }
        else {
            topObject[name] = obj;
        }

				if(cur.id) {
					refs[cur.id].obj = obj;
				}
    })

    p.on('text', function(text) {
        text = trim(text);
        if (!text.length) return;

        var top = stack[stack.length-1];
        var name = splitNSName(top.schema).name,
            value;
        if (name === 'int' || name === 'integer') {
            value = parseInt(text, 10);
        } else if (name === 'bool' || name === 'boolean') {
            value = text.toLowerCase() === 'true' || text === '1';
        } else if (name === 'dateTime') {
            value = new Date(text);
        } else {
            // handle string or other types
            if (typeof top.object !== 'string') {
                value = text;
            } else {
                value = top.object + text;
            }
        }
        top.object = value;
    });

    if (!p.parse(xml, false)) {
        throw new Error(p.getError());
    }

    // merge obj with href
    var merge = function(href, obj) {
      for (var j in obj) {
        if (obj.hasOwnProperty(j)) {
          href.obj[j] = obj[j];
        }
      }
    };

    // MultiRef support: merge objects instead of replacing
    for(var n in refs) {
      var ref = refs[n];
      for (var i = 0; i < ref.hrefs.length; i++) {
        merge(ref.hrefs[i], ref.obj);
      }

    }

    var body = root.Envelope.Body;
    if (body.Fault) {
        throw new Error(body.Fault.faultcode+': '+body.Fault.faultstring+(body.Fault.detail ? ': ' + body.Fault.detail : ''));
    }
    return root.Envelope;
}

WSDL.prototype.objectToDocumentXML = function(name, params, ns, xmlns) {
    var args = {};
    args[name] = params;
    return this.objectToXML(args, null, ns, xmlns, true);
}

WSDL.prototype.objectToRpcXML = function(name, params, namespace, xmlns) {
    var self = this,
        parts = [],
        defs = this.definitions,
        namespace = namespace || findKey(defs.xmlns, xmlns),
        xmlns = xmlns || defs.xmlns[namespace],
        nsAttrName = '_xmlns';
    parts.push(['<',namespace,':',name,'>'].join(''));
    for (var key in params) {
        if (key != nsAttrName) {
            var value = params[key];
            parts.push(['<',key,'>'].join(''));
            parts.push((typeof value==='object')?this.objectToXML(value):xmlEscape(value));
            parts.push(['</',key,'>'].join(''));
        }
    }
    parts.push(['</',namespace,':',name,'>'].join(''));

    return parts.join('');
}

WSDL.prototype.objectToXML = function(obj, name, namespace, xmlns, first) {
    var self = this,
        parts = [],
        xmlnsAttrib = first ? ' xmlns:'+namespace+'="'+xmlns+'"'+' xmlns="'+xmlns+'"' : '',
        ns = namespace ? namespace + ':' : '';

    if (Array.isArray(obj)) {
        for (var i=0, item; item=obj[i]; i++) {
            if (i > 0) {
                parts.push(['</',ns,name,'>'].join(''));
                parts.push(['<',ns,name,xmlnsAttrib,'>'].join(''));
            }
            parts.push(self.objectToXML(item, name, namespace, xmlns));
        }
    }
    else if (typeof obj === 'object') {
        for (var name in obj) {
            var child = obj[name];
            parts.push(['<',ns,name,xmlnsAttrib,'>'].join(''));
            parts.push(self.objectToXML(child, name, namespace, xmlns));
            parts.push(['</',ns,name,'>'].join(''));
        }
    }
    else if (obj !== undefined) {
        parts.push(xmlEscape(obj));
    }
    return parts.join('');
}

WSDL.prototype._parse = function(xml)
{
    var self = this,
        p = new expat.Parser('UTF-8'),
        stack = [],
        root = null;

    p.on('startElement', function(nsName, attrs) {
        var top = stack[stack.length - 1];
        if (top) {
            try {
                top.startElement(stack, nsName, attrs);
            }
            catch(e) {
                if (self.options.strict) {
                    throw e;
                }
                else {
                    stack.push(new Element(nsName, attrs));
                }
            }
        }
        else {
            var name = splitNSName(nsName).name;
            if (name === 'definitions') {
                root = new DefinitionsElement(nsName, attrs);
            }
            else if (name === 'schema') {
                root = new SchemaElement(nsName, attrs);
            }
            else {
                throw new Error('Unexpected root element of WSDL or include');
            }
            stack.push(root);
        }
    })

    p.on('endElement', function(name) {
        var top = stack[stack.length - 1];
        assert(top, 'Unmatched close tag: ' + name);

        top.endElement(stack, name);
    })

    if (!p.parse(xml, false)) {
        throw new Error(p.getError());
    }

    return root;
}

WSDL.prototype._fromXML = function(xml) {
    this.definitions = this._parse(xml);
    this.xml = xml;
}

WSDL.prototype._fromServices = function(services) {

}

WSDL.prototype._xmlnsMap = function() {
    var xmlns = this.definitions.xmlns;
    var str = '';
    for (var alias in xmlns) {
        if (alias === '') continue;
        var ns = xmlns[alias];
        switch(ns) {
            case "http://xml.apache.org/xml-soap" : // apachesoap
            case "http://schemas.xmlsoap.org/wsdl/" : // wsdl
            case "http://schemas.xmlsoap.org/wsdl/soap/" : // wsdlsoap
            case "http://schemas.xmlsoap.org/soap/encoding/" : // soapenc
            case "http://www.w3.org/2001/XMLSchema" : // xsd
                continue;
        }
        if (~ns.indexOf('http://schemas.xmlsoap.org/')) continue;
        if (~ns.indexOf('http://www.w3.org/')) continue;
        if (~ns.indexOf('http://xml.apache.org/')) continue;
        str += ' xmlns:' + alias + '="' + ns + '"';
    }
    return str;
}

function open_wsdl(uri, options, callback) {
    if (typeof options === 'function') {
        callback = options;
        options = {};
    }

    request_headers = options.wsdl_headers;
    delete options.wsdl_headers;
    request_options = options.wsdl_options;
    delete options.wsdl_options;

    var wsdl;
    if (!/^http/.test(uri)) {
        fs.readFile(uri, 'utf8',  function (err, definition) {
            if (err) {
                callback(err)
            }
            else {
                wsdl = new WSDL(definition, uri, options);
                wsdl.onReady(callback);
            }
        })
    }
    else {
        http.request(uri, null /* options */, function (err, response, definition) {
            if (err) {
                callback(err);
            }
            else if (response && response.statusCode == 200) {
                wsdl = new WSDL(definition, uri, options);
                wsdl.onReady(callback);
            }
            else {
                callback(new Error('Invalid WSDL URL: '+uri + "\n\n\r Code: "+ response.statusCode + "\n\n\r Response Body: " + response.body));
            }
        }, request_headers, request_options);
    }

    return wsdl;
}

exports.open_wsdl = open_wsdl;
exports.WSDL = WSDL;

redpajama_set_name: RedPajamaGithub


text:
Home > news > Depleted fish stocks can't wait. The EU and Norway need to commit to ending overfishing now
03/12/2019 Blog
Depleted fish stocks can't wait. The EU and Norway need to commit to ending overfishing now
First published on Euronews, 2 December 2019: Depleted fish stocks can't wait. The EU and Norway need to commit to ending overfishing now
This week, in a quiet street in the Norwegian harbour town of Bergen, officials from EU member states and Norway will hole up in the Fiskeridirektoratet, or Fisheries Directorate, to decide the size of the fish pie to get divided out between them from so-called "shared stocks." This "consultation," as it is known, happens away from public scrutiny. Yet, fishing industry lobbyists are allowed in where they get to cosy up to delegates, while civil society representatives are – quite literally – left out in the cold. These annual gatherings are even more secretive than the EU AGRIFISH council meetings, which were recently investigated by the EU Ombudsman and found to be lacking in transparency.
EU-Norway consultations consistently result in agreements to continue overfishing. This is in no small part due to a bewilderingly flawed approach: by assuming the scientific advice for maximum sustainable catches as a starting point and then negotiating upwards. The EU committed to phase out overfishing under the reformed Common Fisheries Policy (CFP) by 2015 or, at the absolute latest, by 2020. Yet while the act of catching too many fish occurs at sea, it is inside meetings like this where overfishing is shamelessly agreed upon and approved.
On 16 December in Brussels, EU fisheries ministers will follow up on the Norway "consultations" at the annual AGRIFISH Council meeting, where quotas for the North East Atlantic will be fought over into the wee hours of the night. According to all the signs, this year they will again agree to overfish several key stocks.
The signals? Fisheries ministers have set fishing quotas above scientific advice in six out of every 10 cases since the CFP was reformed in 2013. The AGRIFISH Council very rarely sets fishing quotas at more sustainable levels than the EU Commission proposes. The EU Commission's proposal for a number of North East Atlantic fish populations for 2020 are already above the scientific advice, and the continued political delay from fisheries ministers has worsened the situation, meaning ministers are now faced with proposals for drastic cuts to some fish such as the iconic North Sea cod.
Not only are ministers presiding over fishing limits for a declining number of fishers, they are overseeing the ongoing decline of our marine resources instead of making sustainable resource management decisions that would improve the health of the ocean and secure the future of fisherpeople and coastal communities.
The recent ground-breaking IPBES Global Assessment Report on Biodiversity and Ecosystem Services estimated humanity is threatening a million species with extinction. It also concluded that the biggest threats to nature are from changes to land/sea use and over-exploitation. Overfishing remains the biggest impact on our ocean.
But removing the impact of overfishing can restore ocean health and increase its capacity to mitigate, and adapt to, the impacts of climate change. It is therefore a key form of climate action. This has started to permeate into policy. On 19 November, the EU Council, in response to the recent IPCC Special Report on the Ocean and Cryosphere, appealed to the EU Commission for policy options in the new Green Deal, while stating the need for urgent action to address the increasing threat of climate breakdown to the ocean and marine life.
So, missing the deadline of 2020 puts the EU in difficult territory. It places EU fisheries ministers in direct contravention of the laws that they, or their predecessors, created and signed up to, and in potential conflict with the climate action taken by other ministries within their own governments.
Norway, too, has invested a great deal in projecting itself as a climate and anti-overfishing champion, when in actual fact, it too, is hypocritical on both issues. On climate, Norway has made big commitments to become a 'low-carbon society' but in reality, emissions are decreasing much slower. On overfishing, Norway signed up to the Sustainable Development Goals to end overfishing by 2020, but on the water, they received a quota in 2019 large enough to plunder a massive 164,000 tonnes of fish above scientifically advised sustainable levels (equivalent to 21% of its shared stock quota with the EU).
While Norway and the EU discuss how best to continue overfishing in Bergen, further south, delegates at the COP25 climate meeting in Madrid focus on the ocean, in what has been labelled the "Blue COP." With states under pressure to step up their commitments to action on climate, discussions will be focusing on why there is not more action on oceans when we know what needs to be done. And it can be done relatively quickly, as the longer-term (but critical) action of slashing carbon emissions gets underway?
Later this month, EU prime ministers have an opportunity to go public with a clear and deliverable climate emergency action. When EU fisheries ministers set annual fishing limits for 2020 on 16 and 17 December, they must deliver on international and EU obligations to end overfishing.
Rebecca Hubbard is the Programme Director at Our Fish.

redpajama_set_name: RedPajamaCommonCrawl


First the one on Summitview announced it was closing, then the ShopKo pharmacy in Union Gap closed up abruptly this week! Now this!
An analysis of property and violent crimes named Sunnyside the third safest city in Washington's estimated population of 7.5 million people.
The lawsuit, filed on January 25th, charges LuLaRoe with running a Multi-Level Marketing (MLM) scam.
18-year-old Everett Anderson has been arrested on suspicion of cyberstalking teenagers in Wenatchee.


For high school students aspiring to live it up in the Golden State for their college years, very few places epitomize the California Dream more than the University of California at Santa Barbara. But for elite tennis players deciding between a handful of top-flight tennis programs across California, the top choice is undoubtedly more ambiguous.
The No. 14 Cal women's tennis team will build on its case when it hosts none other than UCSB (3-4) this Sunday at the Hellman Tennis Complex.
In the latest ITA rankings poll released earlier this month, freshman Anna Bright, junior Olivia Hauger and senior Karla Popovic clocked in at the No. 28, No. 33 and No. 61 spots in singles, respectively, while UCSB does not have a player in the top 125.
Bright has been the face of Cal tennis so far this season, displaying the poise of a leader despite her first-year status. Although she dropped a spot in the singles poll, the freshman has seamlessly stepped into the court-one spotlight with Popovic yet to play a spring match for undisclosed reasons.
When last spotted in action, Bright helped fuel the Bears to a pair of tune-up wins against San Diego State and Santa Clara. Pairing with fellow freshman Julia Rosenqvist has paid dividends for Bright, as the budding duo meshed to the tune of two doubles victories against the best that the Aztecs and Broncos could offer.
UCSB will counter Bright, Rosenqvist and company with seniors Amanda Atanasson and Palina Dubavets, two returners from last year's team who, near the end of last season, produced a 10-match win streak. If there's one area in which the Gauchos possess a slight advantage, it's the experience of its depth chart that the Bears' freshmen cannot yet lay claim to.
Atanasson in particular has a flair for the dramatic; as a sophomore transfer in 2016, she was involved in arguably the biggest singles match in program history when she defeated Kansas's Maria Cardona to clinch UCSB's first-ever NCAA tournament win.
While the experience of Hauger and Popovic will undoubtedly prove vital to Cal's tournament chances down the stretch of the season, the youth of the Bears is a notable aspect that opponents will take into account.
But even with the development of Cal's first-year talent, Augustus already has a couple of other pieces that she can rely on in the clutch too. Junior Maria Smith and sophomore Alexis Nelson have taken giant steps forward in recent weeks, increasing the team's chances of climbing into the top 10.
UCSB's picturesque location and "Cali" vibes may outrank Berkeley, but when it comes to the tennis courts, and on paper, the Bears hold a clear advantage. Come this Sunday, this reality should be all but official.


The year is 1626. The place: Franconia, a territory in South Germany dominated by the imperial city of Nuremberg. Animosity between Catholics and Protestants has caused men in power to take up arms. Their mercenary armies and their followers are kept alive by anything the soldiers can take from the villages they pass through. Villages that are already suffering from crop failure and overpopulation.
The mercenary armies bring terror but they also bring disease. More soldiers are dying from dysentry, consumption and typhus than from the battles they are fighting.
And so begins The Soldier's Return, the second book in the Heaven's Pond Trilogy.
Katarina and Herr Tucher have worked the farm called Sichardtshof, a hamlet nestled in a Franconian hollow, for the last ten years. During this last decade, the farm has been in the path of the marching armies. Katarina, along with her adopted daughter, Isabeau, and the other souls at the farm, have weathered visits from mercenaries in the past. But the summer of 1626 brings a more brutal and desperate type. Katarina and Isabeau are forced to flee. But other dangers lurk outside their protective hamlet.
The church offers no comfort. Church fathers are rounding up scapegoats, so called heretics and witches, to blame for the ills inflicted on Franconia. At alarming rates, men, women and children must undergo brutal tortures and executions.
Where can Katarina turn for help and refuge?
The Soldier's Return. A story of sacrifice and survival in Germany during the Thirty Years War.
As legend would have it, the Wartburg Castle in Thüringen, Germany was founded in 1067 by Ludwig der Springer, also known as Count Ludwig von Schauenburg. Ludwig was a member of the German dynastic family of Ludowinger. Little is certain about the man, but he lives on in his legends and in his castle.
His nickname comes from a bold leap into the Saale River. After he'd attempted to take hold of the area west of the Saale River, called Saale-Unstrut, and stabbed the Count Palatine Fredrick III to death, he was imprisoned in the castle Giebichenstein. Ludwig was held captive for three years and faced execution. He took advantage of his stay in the castle tower and jumped into the Saale River. A servant awaited him with a boat and his favorite snow-white horse, Swan. As punishment for his murder, he built the church of St. Ulrich in Sangerhausen and later founded the monastery Reinhardsbrunn, which became the family monastery of Ludowinger.
In 1067, as legend has it, Ludwig der Springer discovered the future site of the Wartburg Castle while out hunting. He looked up to the mountain and said, "Wait, mountain, thou shalt bear a castle." The mountain was not part of his territories, so he had his men carry soil from the land he did own up the mountain top, to the place he planned to build his castle. The Emperor approved after twelve of Ludwig's most loyal knights drew their swords, stuck them into the soil and swore on Ludwig's honor that the land rightfully belonged to him.
The Wartburg Castle was also the setting of Martin Luther's secret detention by Friedrich der Weise. After being declared an outlaw, Vogelfrei or 'free as a bird,' as mercenary soldiers might call it, which simply put meant any one could kill him if they wanted to, Friedrich's soldiers abducted Martin Luther and brought him to safety, in disguise, to the Wartburg where he, in the winter of 1521-1522, translated the New Testament into German in eleven weeks.
Vogelfrei: "…his body should be free and accessible to all people and beasts, to the birds in the air and the fish in water so that none can be made liable for any crimes committed against him…"
The Thirty Years War was a many-faceted conflict fought in Central Europe, neatly fitted into a nutshell starting with what they call the Defenestration in Prague in 1618 and ending with a series of treaties called the Peace of Westphalia in 1648. Many factors figure into this weary, bloody, long-lasting era of human destruction. The most popular reason for the war was, of course, religion: the subject itself is heated, arguers are passionate about their beliefs so it's easy to wave a spark into a flame. The Holy Roman Empire was Catholic. The emperor was intolerant of those that embraced the teachings of Luther and other forms of the Protestant religion. And the Protestants wanted to be free to practice as they liked.
Add a few princes who are promised territory and power and then some people who have lost their homes and are hungry and have little choice except to follow the regiments, plundering and pillaging if they want anything to eat. What you get is terror that spreads across the countryside like wildfire. Historians will also cite what they call the Little Iceage and the scientific data that backs up the theory. Temperatures were, on the average, colder during this span in the early modern period. That meant crops were failing and the people were that much worse off than they had been. Food was scarce, prices were high.
Franconia took a beating during this time. By the end of the war, large tracts of land were completely devastated and depopulated. Those who were left died in the years after of disease or starvation. They say the population of the German territories was reduced by about a third but many people also fled. Exact numbers are impossible to quantify.
In Franconia today, remembrances of this time period are still evident. Many cities and villages have streets called something like Schwedenschanze, in English, Swedish Entrenchment. And streets named after the Generals Tilly or Mansfeld, and after the Swedish king, Gustav Adolf. And there are towns who honor their local famous legends, like Rothenburg ob der Tauber, the historical festival weekend including a play called The Master Draught, written by Adam Hörber, celebrated every year since 1881 over the Whitsun weekend.
The setting is Rothenburg in October 1631. General Tilly, leading an Imperial army of 60,000 men, lays siege to the Protestant independent city-state Rothenburg, threatens to burn it to the ground and execute the city council. But there is one way for them to save themselves. Their Mayor Georg Nusch is asked to down a mug of wine measuring 3.75 liters in one go. Then the troops will leave them alone. He somehow manages that and saves the city.
What Inspires the Setting of a Novel?
This forgotten hamlet is the inspiration for the farm named Sichardtshof in the historical novel series Heaven's Pond. For the answer to these questions and more, watch for the new release of the historical novel The Master and the Maid. The forgotten hamlet comes alive again, its story just waiting to be told!
Original content © Laura Libricz, 2011-2017. Picture Window theme. Powered by Blogger.


Unlike GAF asphalt shingles, EUROSHIELD® roofing options are not well-known, but they're worth your consideration. Impressing builders and wowing homeowners since 1999, they continue to change the way the world thinks about rubber roofs with their beauty, durability and sustainability.
The EUROSHIELD rubber roof selection is a collection of some of the best, most affordable substitutes to traditional materials. They bear a striking resemblance to genuine slate shingles and wood shakes by masterfully mimicking the profiles, textures and colors of the original. They are nearly indistinguishable from the original.
Although wood shake and slate alternatives usually lack the inherent durability to remain structurally sound for decades, EUROSHIELD products are designed to last a lifetime. Asphalt shingle and metal roofing systems may have been on the market for longer periods, of time, EUROSHIELD roofing systems are guaranteed to last just as long – if not longer. Passing the requirements of torturous weather tests is proof that EUROSHIELD rubber shingles resist damage from heat, wind, rain, snow and hail.
Despite being less than 20 years old, EUROSHIELD products come with a transferable Limited Lifetime Warranty. It features 50-year, non-prorated coverage to protect against manufacturing defects resulting in leakage. After that period, EUROSHIELD will continue to indefinitely shoulder liability of up to 25% of the product's original price. In other words, you'll get to enjoy a lifetime of peace of mind.
One of the biggest claims to fame of EUROSHIELD roofing shingles that they're made from 95% recycled content. They're nearly completely made from reclaimed old tires, which gives landfills a huge relief. A EUROSHIELD roof can save 1,000 old rubber tires, keeping them from becoming environmentally detrimental waste materials.
Garlock-French Corporation takes pride in being the only roofer with advanced credentials in installing EUROSHIELD products in the area. To learn more about our roofing options, call us at (612) 722-7129, and get an estimate. We proudly serve Minneapolis and other neighboring Minnesota communities.


A magnificent home with all the amenities. A whimsical layout affording privacy between bedrooms. A wonderful gourmet kitchen is the central meeting place, 2 living rooms allow for hours spent in glorious comfort. A short walk to the beach tops off the long list of amenities at this private country retreat. Peak views of Vineyard Sound.


At Insight for the Blind we help improve the quality of life for blind and visually impaired children and adults and other print handicapped folks by promoting literacy, learning and aiding in the appreciation for the printed word. We do this through our recording of books, magazines and articles, while conforming to the rigorous standards of the Library of Congress, National Library Service for the Blind Talking Books program.
Meet Steve Gladstone, actor, and blind dude.


text:
Have Your Cake and Trade It: Is it Possible to Promote Legitimate Commerce While Reducing Illicit Trade?
Anton Moiseienko, Alexandria Reid and Isabella Chase
Commentary, 1 October 2019
Centre for Financial Crime and Security Studies, Organised Crime and Policing, AML/CTF, Organised Crime
Despite the formidable challenges of combatting illicit trade and trade-based money laundering, several ongoing initiatives give cause for cautious optimism.
In the first in a series of Commentaries, RUSI researchers take a broad look at efforts to counteract illicit trade and trade-based money laundering. In the next Commentary, guest contributor Jonathan Draper will discuss the challenges of tackling trade-based money laundering.
Just as the ease of international transport and communication has enabled commerce to flourish, so too have criminals seized upon the opportunities offered by frictionless trade. Criminal exploitation of the global trade system comes in two basic forms. One of these is trade in illicit or untaxed goods, and the other is the use of legitimate trade to move or conceal criminal proceeds, known as 'trade-based money laundering' (TBML).
Both forms of criminality take advantage of the sheer scale of global trade. In 2017, the World Trade Organization estimated the value of merchandise exports to be $17.73 trillion. And even in this age of advanced technology, most shipping containers remain akin to a Kinder Surprise chocolate egg: beyond a bill of lading and self-declared information, no one knows quite what is inside. Less than 2% of all shipping containers are screened each year; this is a gigantic proverbial haystack in which to hide criminal activities.
Doing more is possible, albeit costly and difficult. For instance, as early as 2012, the US Congress passed legislation requiring all incoming shipping containers to be screened abroad, in their ports of departure, but the requirement has not been implemented due to its costs. One might be tempted to conclude that trade-related crime is the inseparable ugly brother (or sister) of legitimate commerce, and any meaningful reduction in its scale will come at the expense of legitimate business. So, how can one resolve this particular manifestation of the 'security versus prosperity' dilemma?
In truth, there is no answer, yet. But there are several initiatives that give cause for cautious optimism, and it is important that policymakers promote rather than neglect them.
The first of these is evidence of ongoing efforts to develop a better understanding of patterns of illicit trade and TBML. As early as 2004, US Immigration and Customs Enforcement established the world's first Trade Transparency Unit. At its core is combining trade statistics from both the US and bilateral trading partners, typically based on customs information-sharing agreements, to identify anomalies that may be suggestive of criminality (for example, one country claiming to have exported more to the US than is reflected in US import statistics, which can indicate trade mispricing).
A similar approach has been adopted by Global Financial Integrity, a non-governmental organisation whose analysts crunch trade statistics to uncover potentially suspicious discrepancies. Yet its outputs have attracted not only well-deserved admiration but also some scepticism, on the grounds that there can also be other, legitimate reasons for the asymmetries it identifies. For instance, if goods are trans-shipped through several countries in transit, the country of origin may be unintentionally misidentified.
In short, it is not yet possible to accurately measure or fully understand the scale and true impact of illicit trade and TBML. Just over a dozen countries have established domestic trade transparency units, and there have been calls for more governments to come onboard and create a global network like the existing Egmont Group of financial intelligence units. For the argument in favour of more trade transparency units to gain greater force, a more concerted effort to assess their merits and, including their achievements to date, would be helpful – an area where, given the paucity of current material, analysts have their work cut out for them!
Another frontier in the fight against criminal abuse of the global trade system is engagement with the private sector. Financial institutions and designated non-financial businesses and professions have long been obliged to conduct customer due diligence and report suspicious activities. In recent years, regulators in the UK, Hong Kong and Singapore have exhorted banks to thoroughly scrutinise the trade they finance. Yet, with an estimated 80% of global trade conducted without bank financing – in other words, on open account terms – a bank's role is likely to be limited to processing trade-related payments without deep insight into the activity giving rise to the payment.
In contrast, shipping lines, freight forwarders, customs brokers and port or warehouse administrators are in more immediate contact with the goods being traded. But, unlike banks and insurance companies, they are not typically obliged to identify or report suspicious activity. At present, at least one voluntary industry initiative is aiming to address this gap. In November 2016, several major shipping companies and the International Federation of Freight Forwarders Associations committed to, among other things, 'appropriate due diligence measures, such as Know Your Customer processes' and 'specific vigilance measures and common early warning indicators in order to identify high-risk shipments of counterfeits'. This was soon followed by the publication of voluntary know-your-customer best practices.
Whether this is a game-changer remains to be seen. It is far from cynical to suspect that businesses' determination to do the right thing could be strengthened by binding regulation, yet no government wants to entrap its industry in red tape. Besides, the nature of TBML is such that an exceedingly broad spectrum of businesses could be susceptible to criminal abuse.
For instance, in 2014, the US Financial Crimes Enforcement Network issued a 'geographic targeting order' requiring 10 categories of businesses in the Los Angeles Fashion District to report all cash transactions in excess of $3,000. Among them were garments stores, flower stores, and all businesses bearing the words 'import' or 'export' in their name. The reason for this was the alleged involvement of many businesses in the area in the Black Market Peso Exchange, a TBML scheme pioneered by Colombian drug cartels.
As this example shows, identifying businesses at risk of wittingly or unwittingly facilitating TBML is not straightforward. That said, intensified dialogue with key trade enablers such as shipping lines is a sensible first step.
Finally, there is an ever-greater international focus on free trade zones (FTZs), where governments relax customs duties and controls to attract trade and investment. FTZs also frequently offer other incentives, such as company incorporation on an expedited timeline or easier access to immigration if renting a significant facility inside an FTZ.
Due to these features, FTZs are exhibit A for those who worry that governments are all too willing to forego their responsibility to counter illicit trade in pursuit of business opportunities. Indeed, one of the authors has expressed the concern that this is what awaits the UK if its current plan to create 10 freeports after Brexit materialises.
But with the OECD's draft Guidance to Counter Illicit Trade emphasising the risks posed by FTZs, their transparency and earnestness in tackling crime are once again subject to international scrutiny. In some of the key locations, domestic action is taking place too. For instance, the administration of the Colon Free Zone in Panama, which is often flagged as a high risk zone for TBML schemes, adopted a resolution that requires electronic filing of trade-related information in April 2019, a measure that is key to achieving greater transparency in the zone.
Of course, none of the initiatives discussed will make illicit trade or TBML go away anytime soon. Nor do they change the fact that, all too often, crime prevention plays second fiddle to the promotion of trade for all involved, including governments. But they do show that it is not only criminals who innovate in this field and, as will be evident from the following contributions in this four-part commentary series, there is much thinking on fighting TBML and abuse of FTZs. Promoting this creative attitude is key: after all, it need not be inevitable that more trade equals more illicit trade.
BANNER IMAGE: Courtesy of ake1150/stock.adobe.com
The authors are currently working on a two-year project researching illicit-trade and money-laundering risks in free trade zones. More information is available here: https://bit.ly/2MKRlSa.
The views expressed in this Commentary are the authors', and do not represent those of RUSI or any other institution.
Anton Moiseienko
Research Fellow, Centre for Financial Crime and Security Studies
Anton is a Research Fellow at RUSI's Centre for Financial Crime and Security Studies. His current and recent research covers a range of... read more
Alexandria Reid
Research Analyst, National Security and Resilience
Alexandria Reid is a Research Analyst in the Organised Crime and Policing team at RUSI. Her research covers a range of topics related to... read more
Isabella Chase
Isabella Chase is a Research Analyst at RUSI's Centre for Financial Crime & Security Studies. Her work predominately concentrates on... read more
Commentary, 13 January 2020
Helena Wood
Tackling economic crime should be high on the new government's agenda and will deliver benefits for both the national security and 'Global Britain' agendas.
Tags: Centre for Financial Crime and Security Studies, AML/CTF, UK, Domestic Security, National Security, Organised Crime
Turning the Tide? Learning from Responses to Large-Scale Illegal, Unreported and Unregulated Fishing in Five Countries
Whitehall Reports, 29 November 2019
Charlie de Rivaz, Cathy Haenlein, Alexandria Reid and Veerle Nouwens
A new study sheds light on illegal, unreported and unregulated fishing, showing how countries can tailor their specific strategies to combat this major security challenge.
Tags: Organised Crime and Policing, Whitehall Reports, International Security Studies, Organised Crime
Securing the Integrity of the EU's Financial System is Overdue – Why is Progress so Slow?
Commentary, 26 November 2019
Tom Keatinge
Like the proverbial frog in boiling water, the EU knows something is wrong; it just can't decide what to do.
Tags: Centre for Financial Crime and Security Studies, European Union, Organised Crime, Europe
A New Direction for EU Sanctions: The New Commission and the Use of Sanctions
Emil Dall
As the new EU Commission takes office, responsibility for the EU's sanctions portfolio appears to have moved between commissioners. The move is part of a focus on stricter sanctions enforcement within the EU, but could also lay the groundwork for redefining the role and impact of EU sanctions.
Tags: Centre for Financial Crime and Security Studies, United States, European Union, Europe
Gaming the System: Money Laundering Through Online Games
RUSI Newsbrief, 11 October 2019
Anton Moiseienko and Kayla Izenman
In-game artefacts and currencies often have real-life value and can be used to move or invest criminal proceeds. But there are no clear expectations of what game operators can or should do to identify criminal activity.
Tags: Centre for Financial Crime and Security Studies, AML/CTF, RUSI Newsbrief
A Cryptic Challenge: Banking Virtual Currencies
RUSI Newsbrief, 13 September 2019
Tom Keatinge and Kayla Izenman
Banks, guardians of the integrity of the financial system, cannot hide from the risks posed by cryptocurrencies; they must learn to move on from a poor strategy of avoidance and de-risking.
Fundraising for Right-Wing Extremist Movements: How They Raise Funds and How to Counter It
RUSI Journal, 31 May 2019
Tom Keatinge, Florence Keen and Kayla Izenman
Efforts to prevent fundraising for extremist organisations tend to overlook the characteristics of right-wing movements.
Tags: Centre for Financial Crime and Security Studies, RUSI Journal, UK Counter-terrorism, AML/CTF, Tackling Extremism, UK, Domestic Security, Terrorism, Europe
Multimedia, 15 January 2020
Isabella Chase, Research Analyst
In this episode, host Isabella Chase is joined by guests to discuss the challenges that will face financial institutions in 2020. To discuss the recent financial crime news, Isabella is joined by...
Centre for Financial Crime and Security Studies, AML/CTF, UK, Europe
Episode 07: Missing links
Multimedia, 4 December 2019
In this episode of the Suspicious Transaction Report, host Isabella Chase and guests consider the missing links in various financial crime problems. Isabella is joined by Becky Marriott from Tide to...
Centre for Financial Crime and Security Studies, AML/CTF
Episode 06: What's the Risk?
Multimedia, 20 November 2019
In Episode 6 of the Suspicious Transaction Report, host Isabella Chase and guests attempt to understand the changing nature of risk in the ever-evolving financial crime landscape. 'In the news'...
RUSI Launches High-Level Task Force Examining UK Sanctions Policy after Brexit
News, 30 May 2019
RUSI announces the launch of a high-level task-force to examine the future of UK sanctions policy after Brexit.
Centre for Financial Crime and Security Studies, AML/CTF, Proliferation and Nuclear Policy, Sanctions, UK
RUSI Experts React to UK's Financial Action Task Force Mutual Evaluation Report
News, 7 December 2018
UK still central to global money laundering schemes, despite positive evaluation from international financial watchdog.
Centre for Financial Crime and Security Studies, AML/CTF, UK
Europe's illicit cigarette trade is a major loss of tax revenue despite a declining trend, new study finds
News, 31 July 2018
The latest KPMG study commissioned by RUSI reveals that almost 45 billion illicit cigarettes were consumed in Europe in 2017, despite a 7.4% decline on 2016 figures. This equates to €10 billion in...
Terrorism and Conflict, Organised Crime, Illicit Trade, Organised Crime, Europe
Fighting Fraud and Corruption in a Shrinking World
Events, 3 April 2019
In this lecture, Lisa Osofsky, director of the the Serious Fraud Office, explored the challenges posed by globalisation, the increasing sophistication of communications technology and the exponential...
Tags: Centre for Financial Crime and Security Studies, AML/CTF
Promoting Financial Integrity & Inclusion: Embracing Technology and Avoiding Unintended Consequences
RUSI's Centre for Financial Crime and Security Studies is delighted to welcome you to an invitation-only roundtable discussion about technology, innovation, and financial inclusion.
Tags: Centre for Financial Crime and Security Studies
RUSI Paper Launch: A Wicked Problem - Driving Change in the UK's AML Regime Following the 2018 FATF Evaluation
Events, 20 February 2019
This event offers an opportunity to critique and discuss the 2018 FATF evaluation in the context of the UK's prevailing money-laundering problems, as well as to debate the key priority areas for...


text:
Baglietto, an unforgettable end of the year: first T60 now sold, too
Only 3 days after the sale of the eighth T52, Baglietto announces securing the first order for a 60 m yacht, null no. 10260. The project of the T60, pencilled by Francesco Paszkowski Design, had been presented as an absolute premiere at the MYS 2022 just 3 months ago.
22 December 2022_ The natural evolution of her smaller, 52 m predecessor, this 60-metre top-of-the-range T60 epitomizes the core values of Baglietto's timeless style, signed by Francesco Paszkowski Design, and ushers the Seagull brand into a new era.
"It is difficult to hide the great sense of pride we feel for securing this sale – comments Baglietto CCO Fabio Ermetto -, not only because it comes just 3 months after the project was introduced to the public and as the culmination of an extraordinary year, but above all because it confirms the appropriateness of the creative choices pursued by the shipyard together with designer Francesco Paszkowski. This model, I believe, has all the features the market is looking for today, but it also opens new horizons for the recreational boating industry, by implementing highly innovative, unprecedented onboard solutions. Indeed, the T60 radically changes the concept of life at sea, overturning long-established rules that juxtapose sea and land, interiors and exteriors, formal and informal, day areas and night areas".
"Figures alone cannot always convey the efforts and commitment they stem from – adds Baglietto's CEO Diego Michele Deprati – This time, however, I think it is fair to highlight what Baglietto has been able to accomplish in 2022, a year that is represented at best by the sale of this T60: 9 yachts between 41 m and 60 m in length sold, 22 boats under construction, 3 new models delivered, 3 new sales offices opened around the world, €13 million invested in the La Spezia and Carrara facilities, and the launch of Bertram's European division, with the sale of the first unit. Behind all this stands a whole organisation, but, first and foremost, are the passion and pride of so many people involved. The T60 starts a new chapter in the Seagull brand's extraordinary history, and marks the beginning of a new era".
Hull #10260 will have interiors pencilled by Francesco Paszkowski Design in cooperation with Margherita Casprini and is scheduled for delivery in 2026. The construction on
T60 hull no. 10260 – main features
60 metres long and weighing around 1,000 GT, the T60 is the natural evolution and the modern, innovative interpretation of the incredibly successful T52: the soft exterior lines have become even sleeker thanks to the lighter side buttresses that almost seem to be "hanging" on the water, blending in with the outer ceiling, while the black glass stripe incorporates the portholes – a leit-motiv on Baglietto's most recent yachts – resulting in an even more streamlined profile.
The layout is truly unprecedented. There are no enclosed spaces on this yacht; the floor-to-ceiling windows of both the main saloon and the upper deck open up completely and, once fully concealed, create highly versatile and interior environments that change constantly to harmonise with the surrounding landscape. The same informal areas that during the day allow to spend time outdoors and enjoy the sea to the fullest are easily converted to take on a more formal and stately ambience in the evening, while always maintaining a direct contact with the sea. On this innovative vessel, the beach area, the main saloon and the dining area are indeed conceived as one single free-flowing space: a 60 sq. m beach lounge with a pool, a conversation area and a gym welcomes guests on board and leads them to the saloon, which can be opened up completely thanks to an elegant staircase, resulting in an almost 100 sq. m space on two levels. The dining room, in turn, is fitted with a glazed surface that can be fully opened to create an extraordinary living area on the water, where guests can indulge both during the day and in the evening.
The first T60 stands out in particular for her very original configuration, with the upper deck turned into a fully walkable Owners' deck. The master stateroom is accessed from a lobby located amidships that also features a glass lift. The suite includes an office, a walk-in wardrobe, and a large bathroom with separate toilets; the night area has glazed surfaces that slide open to offer private access to an outdoor pool located forward. Windows that open entirely on 3 sides can also be found aft, where the lounge area opens onto the en plein air dining table, once more creating the smooth, seamless connection between interiors and exteriors that characterises the entire vessel. A hot tub and a sunbathing area complete this deck's layout.
Guests will find accommodation in four – 2 VIP and 2 guest – cabins located on the main deck and a fifth guest cabin on the lower deck, which also hosts a massage room, the spacious galley – fully equipped for haute cuisine – and the crew quarters, including the crew mess, the dinette, and 7 cabins sleeping 13 crew members.
The entire under-lower deck houses the various technical areas: the storage room, wine cellar, baggage compartment, and cold rooms.
The wheelhouse has been moved to the sun deck, where the captain's cabin can also be found, as well as an additional dining area and the aft and forward sunbathing areas.
The garage, which can fit a 23'' tender, 2 jet skis and a rescue tender, has been arranged forward on the main deck, while a haute-cuisine kitchen can be found amidships.
At the bow, it is certainly no surprise to find a touch-and-go helipad.
The T60 is equipped with two CAT 3512 ACERT engines that will push her to a maximum speed of 16 knots and a cruising speed of 12 knots.
Baglietto:
Boat builder Baglietto specialises in the construction of new planing aluminium yachts ranging between 38 and 50 metres in length and steel & aluminium displacement mega-yachts above 40 metres. Baglietto can currently rely on 2 production sites, in La Spezia (headquarters) and Carrara (operating site). The La Spezia headquarters extend over an area of approximately 35,000 sq. m. Over the last few years, the entire production site has been extensively renovated and enlarged. Three new sheds allowing for the construction of yachts up to 65 m in length were built in La Spezia, as well as new fully-equipped quays, to berth vessels of up to 70 m. The operating site in Carrara, conversely, comprises 2 areas of 5,000 sq. m each. One is used to build military crafts, while in the other – now equipped with 4 new sheds – yachts up to 50 m in length are built. Baglietto's activities are set to grow considerably, not only with regard to the construction of new pleasure vessels, but also in the military sector, with the BAGLIETTO NAVY brand, under which 2 crafts for the Italian Navy are currently under construction.
Contacts for the Press:
Baglietto Press Office
Raffaella Daino rdaino@baglietto.com
Ph. ph. +393481535373


Many people want to understand llama conformation and it can be hard to know what a WELL conformed llama looks like. This page is only a small part of what you should know, but hopefully it can help you to look at some basic things before you buy or breed anything. Remember that a llama can look good standing and totally fall apart when it moves. If you would like to learn more about conformation, you might attend/audit an ALSA (Alpaca Llama Show Association) or ILR (International Lama Registry) judges training clinic near you.
The shape of the head is a preference. The eyes should be clear, bright and free from regular discharge. The eye should not be droopy (showing the red area of the lower lid) or hanging down. Some llamas will drop their eyelids when stressed so pay close attention to if the llama only does this when they appear to be scared or put into a stressful situation. If they do not do it when just lounging in the pasture, it is most likely just a stress issue. The eyes should NOT be light blue and used in a breeding program. Llama people will say that a light blue eyed llama CANNOT be deaf, this is not true. I know people with blue eyed and deaf llamas. A dark blue eye (they appear dark grey sometimes) is okay to breed from what I have been told by llama vets. Genetic Cataracts can happen in llamas and in this case these animals should NOT be used for breeding either!
Ears are a controversial issue. They do not affect function of the llama. A llama with bad ears can still pack, pull a cart or participate in other activities. BUT in a breeding program it is frowned upon to breed a llama with ears that are short, gopher like (roundish and shapped like a spoon) or otherwise not geared toward the bannana shaped ears most breeders want. Llama ears should be long, shapely and resemble a bannana. True "Gopher Ears" are very hard to breed out and you can follow them down generations and through various bloodlines. Most breeders do not like ears that sit too far forward on the head (appear to be at a funny angle off the forehead like a visor) either.
Bite is an important thing. You should always check to see that the llamas palate lines up to the lower teeth. You should also make sure that the teeth are even and there. If the llama has worn down their teeth it can be a sign of age or that they may have trouble keeping weight on. A llama with an underbite or overbite has a parrot appearance usually around their lip area. A bite can easily be checked by sticking your fingers in the llamas mouth and running your finger over the teeth and palate.
"Parrot Mouth" Upper palate does not line up with bottom teeth.
Side shot and then mouth open on same animal.
Serious under bite. Mom has the same bite too!
Notice the shape of the face on the animal.
There is another condition of the face called "Wry Face". It is a twisting of the upper jaw or face to one side. It is not good and is a form of "Choanal Atresia" It can happen at birth or develop over time. The top right and middle two pictures were all taken of a cria shortly after birth that was a CA and Wry Face. The bottom picture is an adult with Wry Face.
The body from the side should appear in balance. The back should not be too long and out of balance from the neck and legs. The legs should appear to be straight but, not too straight from the body. The llamas pasterns should be strong and upright. Llamas that are overweight might or may have dropped pasterns. Genetics can contribute to bad pasterns also. Obesity is a HUGE problem in llamas as it breaks the llama down and ruins their quality of life. Having poor nutrition and/or bad genetics contribute to this significantly. One of the many reasons you should buy from a reputable breeder with a good feeding program!
The topline should be flat. The tail should drop off the end of the back, but not be too far up on the back or too low on the back. Age is a factor along with how many cria a female has had, in determining their topline quality. BUT a llama should still look healthy and upright well into their teens. Many breeders say "Oh but he/she is 10 etc...." This is not an excuse! Llamas can still look healthy and good if they are bred well and taken care of!
GOOD topline and neck to back balance.
GOOD tailset an overall well balanced llama.
BAD Topline........This animal was only four when this picture was taken and had not had any cria. She was horribly obese and came from very poor breeding. She is the sister of the brown animal below.
BAD Topline and BAD Pasterns. This poor guy is totally out of balance. Notice the high rump and high spot at the base of the neck. He is long bodied and most likely is very overweight. The poor guy is dropping his pasterns in the front lower legs. His rear legs are also camped out slightly.
first white female pictured above.
Top- Notice how the joint right above the toes is all the way to the ground. There are different degrees of dropping, but this one is FLAT! Bottom left- Is a soft pastern not quite dropped yet. Bottom Right- Definitely dropped. These animal shown are crippled and should be carefully observed for pain and stiffness. In some cases they may need to be put down after a veterinarian has assessed the situation.
Top left and right- This animal has front and rear dropped pasterns. Bottom left- More rear dropped pasterns. Bottom right- Down in the front pasterns with bulby type appearance to fetlock.
"Polydactylia" (extra toes) VERY BAD. Llamas should have two toes on each foot. A genetic abnormality that occurs is called "Polydactylia" (pronounced POLY-DAK-TILE). It is when the llama is born with more than the two normal toes on each foot. In these pictures (starting with top left) you will see the extra toe in between where there would only be the two toes. (see top right) In the second picture you will notice the middle toe and the upper dew claw further up the leg. (bottom left) This picture shows the extra toe on the side. (bottom right) Shows double toes on both feet. This animal's extra digits came from one of the worst genetic issue producers in the llama world. Polydactylia is an indicator of other genetic abnormalities such as "Choanal Atresia" (an upper respiratory problem) that results in the death of the cria (baby llama) in most cases. An animal with this condition should NEVER under ANY circumstances be used for breeding! Both parents should be pulled from a breeding program. It is genetic and not something to be taken lightly.
"Post Leg" BAD. Notice how straight the rear legs are coming down from the body. There is NO angle to the hock as opposed to brown llama pictured first on this section. This is frequently seen in pack style llamas.
"Sickle Hock" BAD. An over angulation of the rear hock. This is a very common trait in many of the longer wooled llamas and is not something that should be bred. From the side it resembles a sideways "V" in the rear leg. The bottom pictured animal has had this condition worsened by weight related issues. Notice too the that the front knees are starting to slightly buck (see Buck Knee below).
Top BAD Front Legs. Top left- Too Close and angular at the knees. Notice the narrowness comes down from the body not just at the knee. Top middle- Starts wide at the top, comes in at the knees and goes out at the bottom. Top right- Angular at the knees and toed out at the bottom. This animal is calf kneed also (see below) Both legs are angular from the knees. Bottom left- Not as pronounced angulation as the top right one, but still toed out and slightly angular at the knee. All of these animals would have big problems performing in a situation that required any sort of physical work. Bottom middle and right- GOOD front legs.
More Bad Front Legs. Top left- The leg itself is straight but at the bottom toes out on both feet. This is a minor leg problem. Top right- The legs are narrow coming down from the body, but the legs themselves are straight and the toes are just slightly toed out. Middle left- This front shot shows a wide based llama. Notice how far out the legs drop down from the body and how it continues all the way to the ground. When this animal walks, the lower leg actually comes in with the upper part of the leg being much wider than the bottom in appearance. Middle right- The legs are narrow going down from the body to the toes. Bottom- Notice the left foot (and right), above the toes (the rounded area right above the toes) has a angle to it causing the toes to point to the right (and left). This is called "Splay Toed."
"Buck Knee" More BAD Legs. LEFT- This llama has the appearance of leaning forward on it's knees even when standing upright and straight. Notice the slight forward look of the knee. Also notice the FLAT pasterns, this llama was 26 when this picture was taken. RIGHT- This llama is back at the knee (calf kneed). Notice the backward look to the knee area on the opposite side leg.
BAD Rear Legs. Top left- While these legs do come down from the body with no angle, they are too close together making the llama look base narrow. Top right- These rear legs are going out at an angle and the left leg is more angled than the right. Middle left- The legs are too close together and they angle out at the knees. Middle right- These legs are too far apart. They do come down straight from the body, but they are wide based.
More BAD Rear Legs. Top left- This llama is bowlegged in the back...notice the legs bow and the toes are going in. Top right- This llama is cowhocked. The hocks are pointing into each other. Bottom- This llama is way too base narrow in the back, the legs are too close together.
right off the end of the back.
Know that temperament, can be very genetic. High strung or aggressive animals can make more of the same! When breeding you should pay attention to not only conformation, BUT disposition and trainability. Certain lines will produce mellow easy to train babies and other lines produce negative behaviors that should not be perpetuated. Temperament should always been considered when pairing animals for breeding.
Coat type should also play a factor in your breeding selections. For example, you should not breed medium or heavy wooled llamas for packing. Packers prefer classic type coat styles for packing and physical work. Research the type of animal that does the job you may want to do, prior to just breeding and trying to make a square peg fit into a round hole. A llama who (for example) turns out with lighter wool from a suri breeding program is a failure in your goals.
A good livestock breeder always tries to breed best to best. Knowing about conformation is important and should always be considered when breeding anything. Llamas live 20-25 years and need to have good bodies and minds to live a healthy existence. Llamas with poor structure have a compromised quality of life.
This webpage in no way is meant to indicate that you shouldn't also see an animal walk and touch it. It is important to view an animal from a standing and moving position. You should also touch them to make sure that the wool is not hiding anything! This webpage is meant only as a tool to help you see some of the obvious problems with llama conformation. If you have any pictures or defects you would like to add to this page, please contact us!


text:
Monday 05 Aug 2013 @ 14:20
Printable version E-mail this to a friend
Tougher regulation for payday lending
Capping of interest rates part of multi-pronged approach to protect vulnerable.
Payday lenders would be subject to tougher regulation in an independent Scotland, with capping of interest rates and restrictions on the practice of "rolling over" debts part of a new regime to protect the most vulnerable in society, First Minister Alex Salmond said yesterday.
The First Minister said people in Scotland were getting into severe financial trouble by using short-term credit, with extremely high interest rates and huge default charges putting pressure on some of the poorest in the country.
Mr Salmond said his policy was for short-term interest rates to be capped – as they are in many countries in Europe, Japan, Canada and some US states – coupled with regulation of advertising and restrictions placed on the 'rolling over' of loans, which sees those unable to pay off the initial debt saddled with a bigger loan that is more difficult to clear.
The First Minister called on the UK Government to act now on this reserved issue, putting in place the multi-pronged approach of the Scottish Government that would restrict the likelihood of vulnerable people getting into financial trouble through short-term lending.
His intervention comes after representations made by Scottish ministers to their UK Government counterparts seeking a cap on interest rates as part of a toughening of the regulations surrounding the industry were not responded to.
Mr Salmond also welcomed recent moves by the Church of Scotland and Church of England to put in place more credit union facilities to help poor people access credit at reasonable rates.
The First Minister said:
"It is unacceptable that in a time of financial hardship for many in Scotland, the payday loan industry can prey on some of the most vulnerable in our society, getting them into unmanageable debt through aggressive marketing and charging interest rates that can run to thousands of per cent APR.
"I believe the whole industry must be subject to greater regulation so that we can protect those whose financial situation is desperate enough that they take out these short-term agreements and help them avoid the escalating debt problems that can arise when they run into difficulties paying off the loans.
"That is why I support a three tiered approach to the issue of payday loans. First we need to cap the interest rates that payday lenders can charge, much like the authorities have done in many European countries, such as Germany, Japan, Canada and some states in the United States. Second we must restrict the ability of payday lenders to 'roll over' the debt, wrapping up an outstanding loan in a further credit agreement that can easily escalate and lead to severe repayment problems. And thirdly, the industry must be subject to tighter regulation, with its aggressive marketing campaigns and widespread advertising subject to much greater scrutiny.
"The regulation of payday lenders is currently reserved. With independence we will be able to take action to protect consumers and ensure that the practices that are bringing such misery to many of the poorest in Scotland are brought under control.
"Until we get those powers, I would urge the UK Government to act now and take action on this sector. I welcome moves to clamp down on advertising, but bolder action, such as restricting the roll-over of loans and implementing the interest rate cap is required to address the problems that are evident.
"At the same time, I welcome recent moves by the Church of Scotland and Church of England efforts to establish a new credit union to help ease access to credit for the poorest in society, and take away some of the demand for payday loans. We have a good tradition of credit unions in Scotland and I support any moves to establish new sources of reasonable lending."
Payday lenders are part of the reserved consumer credit sector and are currently subject to regulation by the Office of Fair Trading, although this responsibility will shift in 2014 to the new Financial Conduct Authority. Last month, Citizens Advice Scotland reported that their advisers dealt with 1,200 cases related to payday loans over the last three months.
The Scottish Government has made representations to the UK Government seeking a cap on interest rates. Fergus Ewing wrote to the UK Minister for Consumer Affairs in April 2012 asking for an interest rate cap to be considered and this was followed up by a further written request in March 2013. Australia, Canada, France, Germany, Finland, Japan and certain US states have all taken action to introduce caps on high interest and short-term lending. These measures have been made to improve consumers' ability to assess the total cost of their loans and prevent predatory lending to households in financial difficulty.
google+ twitter facebook linkedin
1st Floor Hilton House,
Lord Street, Stockport,
SK1 3NA, United Kingdom


Alan Gordon Partridge is a fictional character portrayed by English actor and comedian Steve Coogan. A parody of British television personalities, Partridge is a tactless and inept television and radio presenter who often insults his guests and whose inflated sense of celebrity drives him to treachery and shameless self-promotion. Coogan described Partridge as a Little Englander, with right-wing values and poor taste.
Partridge was created by Coogan and Armando Iannucci for the 1991 BBC Radio 4 comedy programme On The Hour, a spoof of British current affairs broadcasting, as the show's sports presenter. In 1992, Partridge hosted a spin-off Radio 4 spoof chat show, Knowing Me, Knowing You with Alan Partridge, which transferred to television in 1994. Coogan starred as Partridge in a two-series BBC sitcom, I'm Alan Partridge, in 1997 and 2002, which earned two BAFTAs. The character returned in 2010 with a web series, Mid Morning Matters with Alan Partridge, followed in 2011 by bestselling spoof autobiography, I, Partridge: We Need to Talk About Alan, and in 2013 a successful feature-length film, Alan Partridge: Alpha Papa.
Alan Partridge is a fictional character in Channel 4 soap Brookside. He was portrayed by Dicken Ashworth from 1983 until 1984. He was the first resident to live at No. 6 (the bungalow).
Alan was introduced as a computer expert, which represented for producer Phil Redmond the 'micro-electronic technical revolution' of the early 1980s. At the time he moved in he had a long-term partner, Samantha (Sam, played by Dinah May) who lived elsewhere.
Alan turned up on the close on 5 April 1983; one day before he moves in and measures the outside of his house by striding around much the amusement of neighbours Paul, Annabelle, Roger and Petra.
While other families in Brookside were bringing more socially-observant stories regarding employment, trade-unionism, the black market and other issues of the Zeitgeist, the stories involving Alan principally related to his love-life. After moving onto Brookside Close, he asked his partner Sam to marry him; while she refused his offer, she did agree to live with him.
I'm Alan Partridge is a BBC situation comedy starring Steve Coogan, of which two series of six episodes each were produced — the first in 1997 and the second in 2002. The series followed the titular Alan Partridge, a failed television presenter whose previous exploits had featured in the chat-show parody Knowing Me, Knowing You with Alan Partridge, and who is now presenting a programme on local radio in Norwich.
Both series were written by Peter Baynham (who also appears in one episode), Coogan and Armando Iannucci; supporting Coogan were Felicity Montagu as his faithful but timid personal assistant, Lynn Benfield; Simon Greenall as Geordie Travel Tavern handyman/BP garage attendant Michael; and Phil Cornwell as disc jockey Dave Clifton.
It has been well received by both critics and fans, and was nominated for three BAFTAs (winning two), two British Comedy Award (winning both), and a Royal Television Society award. In a list drawn up by the British Film Institute in 2000, voted by industry professionals, I'm Alan Partridge was named the 38th best British television series of all time.
In the United States, vehicle safety inspection and emissions inspection are governed by each state individually. 17 states have a periodic (annual or biennial) safety inspection program, while Maryland and Alabama require a safety inspection on sale or transfer of vehicles which were previously registered in another state. New Jersey discontinued its passenger vehicle safety inspection program on August 1, 2010.
In 1977, the federal Clean Air Act was amended by Congress to require states to implement vehicle emissions inspection programs, known as I/M programs (for Inspection and Maintenance), in all major metropolitan areas whose air quality failed to meet certain federal standards. New York's program started in 1982, California's program ("Smog Check") started in 1984, and Illinois' program started in 1986. The Clean Air Act of 1990 required some states to enact vehicle emissions inspection programs. State impacted were those in metropolitan areas where air quality did not meet federal standards. Some states, including Kentucky and Minnesota, have discontinued their testing programs in recent years with approval from the federal government.
How old is Richard Madeley and why is he back on Good Morning Britain?


Available for booking by the room or in its entirety. The CLARE ART HOUSE is a Clare & Gilbert Valleys Council initiative available for exhibits, presentations, art and craft workshops, and lessons. The space can be booked by art and craft workers and collectives, literature and book groups, music, teachers, sculptors etc. It is a springboard space to share and learn.
The CLARE ART HOUSE is an initiative of the Clare & Gilbert Valleys Council to support initiatives and opportunities that grow participation and appreciation of the arts and culture.


For nearly 30 years, courts have held that a patent holder can bring an infringement suit against a corporation anywhere that corporation does business pursuant to the general venue statute found at 28 U.S.C. § 1391(c). On May 22, however, the Supreme Court unanimously rejected that view in TC Heartland LLC v. Kraft Foods Group Brands LLC, No. 16-341, 581 U.S. __ (May 22, 2017). Specifically, the Court held that venue in patent cases is solely governed by 28 U.S.C. § 1400(b), and not section 1391(c), meaning that a corporation can be sued only where it resides or where it allegedly has committed acts of infringement and has a "regular and established place of business."
Arthur offers clients a winning combination of trial and appellate experience gained as a federal prosecutor and more than 20 years of experience in handling trademark, copyright, patent, and trade secrets litigation. While his practice concentrates on intellectual property litigation, Arthur also has significant experience in internal investigations, False Claims Act suits, partnership and breach of fiduciary duty, breach of contract, and employment litigation.


text:
Kathleen M. Chard, Ph.D.
Kathleen M. Chard, PhD, is a co-developer of CPT and director of the Trauma Recovery Center at the Cincinnati VA Medical Center. Serving as the VA CPT Implementation Director, Dr. Chard oversees the dissemination of CPT to mental health clinicians across the United States. She is the co-author of Cognitive Processing Therapy for PTSD: A Comprehensive Model (The Guilford Press, 2017) and author of CPT for Sexual Abuse Treatment Manual (2012). A sought-after speaker, Dr. Chard has personally trained over 5,000 clinicians throughout the United States on using CPT with veterans, active duty personnel, and civilians in addition to overseeing the training of tens of thousands of others via the trainers she supervises. She is co-chair of a 17-site study comparing CPT to Prolonged Exposure in US veterans in addition to conducting a $6 million-dollar Department of Defense study on the assessment of PTSD. She served as a past editor of the Journal of Traumatic Stress and is currently a professor of Clinical Psychiatry and Behavioral Neuroscience at the University of Cincinnati.
Financial: Kathleen M. Chard is a co-developer of CPT and director of the Trauma Recovery Center at the Cincinnati VA Medical Center. She has an employment relationship with the University of Cincinnati. She receives royalties as an author from the Guilford Press. Dr. Chard receives a speaking honorarium from PESI, Inc. She has no relevant financial relationships with ineligible organizations.
Non-Financial: Kathleen M. Chard has no relevant non-financial relationships to disclose.
Innovations in Psychotherapy
Daniel J. Siegel, M.D. | Monnica T Williams, Ph.D. | Judson Brewer, MD, PhD | Bessel van der Kolk, M.D. | Susan Johnson, Ed.D. | Kenneth Carter, PhD, ABPP | Deborah Dana, LCSW | Kathleen M. Chard, Ph.D. | ....
The Keys Behind How Cognitive Processing Therapy Heals PTSD
The Integrated Trauma Therapist: Incorporating IFS with EMDR, SP, CPT, AEDP, DBT, and Psychedelic Medicines for Treating Complex Trauma and PTSD
Frank Anderson, MD | Richard C. Schwartz, Ph.D. | Bessel van der Kolk, M.D. | Deborah Korn, PsyD | Kathleen M. Chard, Ph.D. | Kari Gleiser, PhD | Janina Fisher, Ph.D. | Lane Pederson, Psy.D, LP | ....
Cognitive Processing Therapy (CPT) for Suicidality: Overcoming Stuck Points and Creating Mental Flexibility
Clinician's Suicide Prevention Course: Treatment Strategies to Inspire Hope and Save Lives
Eboni Webb, Psy.D. | Thomas Joiner, PhD | Rita Schulte, LPC | Victor Armstrong, MSW, BS | Kathryn H. Gordon, PhD | Kelly Posner Gerstenhaber, PhD | Justin Baker, PhD | Kathleen M. Chard, Ph.D. | ....